#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375数据端口的I/O地址 */ main() { UINT8 i; UINT8 j; i=~0x55; CH375_CMD_PORT= CMD_CHECK_EXIST; /* 测试CH375是否正常工作 */ CH375_DAT_PORT= 0x55; /* 写入测试数据 */ j=CH375_DAT_PORT; Delay2us( ); printf("CH375_DAT_PORT:%d\n",(unsigned short)CH375_DAT_PORT); } 请帮我看一下程序。程序返回值j=0X5B,不是OXAA.电路没问题,有以下疑问: 1 P2.0-P2.7均为高电平,LS138的Y3不选通CH375的CS为高电平,为什么,按照地址的设置应该Y3选通才对
在操作的过程中会出现片选为低电平,也就是所谓的低脉冲,而在不操作375的时候当然不会出现低脉冲的,还有就是你的地址计算的有没有问题,按照你的测试的数据,感觉上好象你的片选上面没信号出来,仔细检查电路
P2.0-P2.7均为高电平,LS138是不可能有Y3输出的,只有Y7输出,CH375的CS是不会选通的.仔细检查下硬件电路,看这几跟信号线有没有被别的器件一直拉高.
谢谢你们的回答,CS的信号是个低脉冲,而不是低电平,是吗?并且只在操作的时候,比如CH375_CMD_PORT= CMD_CHECK_EXIST时,因为要设置命令口地址,此时CS被低脉冲选通,然后CS马上变成高电平,是吗?谢谢啦
刚用示波器观察CH375的CS脚,按步仿真,在CH375_CMD_PORT= CMD_CHECK_EXIST; /* 测试CH375是否正常工作 */ CH375_DAT_PORT= 0x55; /* 写入测试数据 */时,CS一直为高电平,没有出现负脉冲
地址或者硬件有问题,仔细检查
这是我的反汇编 33: CH375_CMD_PORT= CMD_CHECK_EXIST; /* 测试CH375是否正常工作 */ 34: //delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ C:0x19B5 90BDF1 MOV DPTR,#CH375_CMD_PORT(0xBDF1) C:0x19B8 7406 MOV A,#0x06 C:0x19BA F0 MOVX @DPTR,A 从这可以看到0XBDF1送给了DPTR,单片机P2口应该在两个周期内是DPTP的高8位,可是我用示波器测看不到P2口引脚有信号变化。
MOVX @DPTR,A .
A中是外部接口地址,执行完这一指令后,P2口对应脚应该有高低电平,然而我用万用表测了一下,P2口全为高电平。这样这条指令好象没有起作用啊。有一点可以保证我对P2口的每个脚单独控制,如用CLR P2.4指令,P2.4能够变为低电平。 有好心人说MOVX @DPTR,A指令执行为2周期指令,也就是说运行时P2口只会在这两个周期内发生变化。 你的万用表能响应吗,我就用示波器看,还是没有信号变化。是不是意味着没有对外部存储器操作?
那你可以在C: 0x19B5 90BDF1 MOV DPTR,#CH375_CMD_PORT(0xBDF1) C:0x19B8 7406 MOV A,#0x06 C:0x19BA F0 MOVX @DPTR,A 加上死循环,这样的话,你就可以用示波器来看有没有信号出来