#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375數(shù)據(jù)端口的I/O地址 */ main() { UINT8 i; UINT8 j; i=~0x55; CH375_CMD_PORT= CMD_CHECK_EXIST; /* 測(cè)試CH375是否正常工作 */ CH375_DAT_PORT= 0x55; /* 寫入測(cè)試數(shù)據(jù) */ j=CH375_DAT_PORT; Delay2us( ); printf("CH375_DAT_PORT:%d\n",(unsigned short)CH375_DAT_PORT); } 請(qǐng)幫我看一下程序。程序返回值j=0X5B,不是OXAA.電路沒問(wèn)題,有以下疑問(wèn): 1 P2.0-P2.7均為高電平,LS138的Y3不選通CH375的CS為高電平,為什么,按照地址的設(shè)置應(yīng)該Y3選通才對(duì)
在操作的過(guò)程中會(huì)出現(xiàn)片選為低電平,也就是所謂的低脈沖,而在不操作375的時(shí)候當(dāng)然不會(huì)出現(xiàn)低脈沖的,還有就是你的地址計(jì)算的有沒有問(wèn)題,按照你的測(cè)試的數(shù)據(jù),感覺上好象你的片選上面沒信號(hào)出來(lái),仔細(xì)檢查電路
P2.0-P2.7均為高電平,LS138是不可能有Y3輸出的,只有Y7輸出,CH375的CS是不會(huì)選通的.仔細(xì)檢查下硬件電路,看這幾跟信號(hào)線有沒有被別的器件一直拉高.
謝謝你們的回答,CS的信號(hào)是個(gè)低脈沖,而不是低電平,是嗎?并且只在操作的時(shí)候,比如CH375_CMD_PORT= CMD_CHECK_EXIST時(shí),因?yàn)橐O(shè)置命令口地址,此時(shí)CS被低脈沖選通,然后CS馬上變成高電平,是嗎?謝謝啦
剛用示波器觀察CH375的CS腳,按步仿真,在CH375_CMD_PORT= CMD_CHECK_EXIST; /* 測(cè)試CH375是否正常工作 */ CH375_DAT_PORT= 0x55; /* 寫入測(cè)試數(shù)據(jù) */時(shí),CS一直為高電平,沒有出現(xiàn)負(fù)脈沖
地址或者硬件有問(wèn)題,仔細(xì)檢查
這是我的反匯編 33: CH375_CMD_PORT= CMD_CHECK_EXIST; /* 測(cè)試CH375是否正常工作 */ 34: //delay2us( ); /* 如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(shí) */ C:0x19B5 90BDF1 MOV DPTR,#CH375_CMD_PORT(0xBDF1) C:0x19B8 7406 MOV A,#0x06 C:0x19BA F0 MOVX @DPTR,A 從這可以看到0XBDF1送給了DPTR,單片機(jī)P2口應(yīng)該在兩個(gè)周期內(nèi)是DPTP的高8位,可是我用示波器測(cè)看不到P2口引腳有信號(hào)變化。
MOVX @DPTR,A .
A中是外部接口地址,執(zhí)行完這一指令后,P2口對(duì)應(yīng)腳應(yīng)該有高低電平,然而我用萬(wàn)用表測(cè)了一下,P2口全為高電平。這樣這條指令好象沒有起作用啊。有一點(diǎn)可以保證我對(duì)P2口的每個(gè)腳單獨(dú)控制,如用CLR P2.4指令,P2.4能夠變?yōu)榈碗娖健? 有好心人說(shuō)MOVX @DPTR,A指令執(zhí)行為2周期指令,也就是說(shuō)運(yùn)行時(shí)P2口只會(huì)在這兩個(gè)周期內(nèi)發(fā)生變化。 你的萬(wàn)用表能響應(yīng)嗎,我就用示波器看,還是沒有信號(hào)變化。是不是意味著沒有對(duì)外部存儲(chǔ)器操作?
那你可以在C: 0x19B5 90BDF1 MOV DPTR,#CH375_CMD_PORT(0xBDF1) C:0x19B8 7406 MOV A,#0x06 C:0x19BA F0 MOVX @DPTR,A 加上死循環(huán),這樣的話,你就可以用示波器來(lái)看有沒有信號(hào)出來(lái)