如題,我想問一下用8m晶振行否?我發(fā)了一個(gè)set_mode命令沒有正確返回。
375或者372的晶振必須為12M,別的是不行的,還有測(cè)試硬件是否正確你可以用測(cè)試命令,關(guān)于測(cè)試命令在375或者372的說(shuō)明書里面都有介紹
我是如下測(cè)試的: P4DR = 0x06; delay2us(); /*P37 --->A0*/ P37 = 1; /*P36 --->-CS#*/ P36 = 0; /*P34 --->-WR*/ P34 = 0; /*P36 --->-CS#*/ P36 = 0;
/*P34 --->-WR*/ P34 = 1;
/*P36 --->-CS#*/ P36 = 1;
/*P37 --->A0*/ P37 = 0; /* P0 = mCmd; 向CH375的并口輸出數(shù)據(jù) mDelay1_2uS( ); CH375_A0 = 1;
CH375_CS = 0; CH375_WR = 0; 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口 CH375_CS = 0; 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS
CH375_WR = 1; 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片 CH375_CS = 1; CH375_A0 = 0; */
P4DR = 0x00; delay2us(); /*P37 --->A0*/ P37 = 0; /*P36 --->-CS#*/ P36 = 0; /*P34 --->-WR*/ P34 = 0; /*P36 --->-CS#*/ P36 = 0;
/*P34 --->-WR*/ P34 = 1;
/*P36 --->-CS#*/ P36 = 1; /* P0 = mData; 向CH375的并口輸出數(shù)據(jù) CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; 輸出有效寫控制信號(hào), 寫CH375芯片的數(shù)據(jù)端口 CH375_CS = 0; 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS CH375_WR = 1; 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片 CH375_CS = 1;
P0 = 0xFF; 禁止數(shù)據(jù)輸出 mDelay1_2uS( ); 至少延時(shí)1.2uS */
UINT8 mData; /*input function*/ P4CR = 0x00; delay2us(); /*P37 --->A0*/ P37 = 0; /*P36 --->-CS#*/ P36 = 0; /*P33 --->-RD*/ P33 = 0; /*P36 --->-CS#*/ P36 = 0;
mData = P4DR;
/*P33 --->-RD*/ P33 = 1;
/*P36 --->-CS#*/ P36 = 1;
/*output function*/ P4CR = 0xff; /* mDelay1_2uS( ); 至少延時(shí)1.2uS P0 = 0xFF; 輸入 mDelay1_2uS( ); CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; 輸出有效寫控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口
CH375_CS = 0; 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS mData = P0; 從CH375的并口輸入數(shù)據(jù) CH375_RD = 1; 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片 CH375_CS = 1; */ 發(fā)現(xiàn)mData不是0xff;請(qǐng)問問題出在那里
真正測(cè)試的時(shí)候,實(shí)際上是單片機(jī)發(fā)一個(gè)測(cè)試命令(CHECK-EXIST,0x06),然后在輸出一個(gè)數(shù)據(jù)到375,接著在讀單片機(jī)和375相連接的端口的數(shù)據(jù),看輸入的數(shù)據(jù)是不是輸出數(shù)據(jù)的取反,是取反的話就說(shuō)明你的硬件有問題
我現(xiàn)在就是這樣測(cè)試的,
那返回的數(shù)據(jù)是多少呢?是不是你輸入數(shù)據(jù)的取反還是別的數(shù)據(jù),只有知道了返回的數(shù)據(jù)的話,那么才可以知道單片機(jī)和375之間的連線有沒有問題
我上面已經(jīng)寫得很清楚了,輸入的數(shù)據(jù)是0,得到的不是0xff,而且我已經(jīng)把程序貼在上面,就是想請(qǐng)你們幫忙看看時(shí)序又問題否?好像你們根本不看細(xì)節(jié)。
那你知道讀出來(lái)的數(shù)據(jù)是多少嗎?還有一個(gè)就是你最好不要輸入0X00數(shù)據(jù),因?yàn)橛械臅r(shí)候例如晶振不起振也會(huì)出現(xiàn)返回的數(shù)據(jù)是0XFF的現(xiàn)象。
你好: 你的PCB我已經(jīng)看過(guò)了,沒有什么問題,現(xiàn)在我看了你的程序的配置,你在配置A0的時(shí)候?yàn)?,而WR,CS,RD都為1,是不是為1的時(shí)候?yàn)檩敵?,那這樣的話,A0配置就不正確了,如果0為輸出的話,那么WR,CS RD就又有問題了。因?yàn)槟愕膯纹瑱C(jī)資料沒有全看,所以只能借鑒你的程序,你一直返回的是0XAA的話,那么你還要檢查你的8個(gè)數(shù)據(jù)口的配置
多謝回復(fù)! 你好象理解錯(cuò)誤,代碼如下: /*P3 as output function ---1 input function ----0 p30 p33 p34 p36 p37 ---output p31 p32 p35 ---input 11011001b */ P3CR = 0xd9; 從上面的注釋可以得到p30 p33 p34 p36 p37為output,p31 p32 p35 為input所以P3的控制寄存器為11011001b /*P36 --->-CS#*/ P36 = 1; /*P34 --->-WR*/ P34 = 1; /*p33 --> -RD*/ P33 = 1; /*P37 --->A0*/ P37 = 0; 以上的代碼是設(shè)定初始的初值難道不能夠這樣設(shè)定嗎?還望指教。
我說(shuō)的是你的引腳的配置是不是這樣配置的,也就是說(shuō)你的I/O方向不需要進(jìn)行配置嗎?
I/O方向是需要配置的,P3CR = 0xd9;這個(gè)就是用來(lái)配置方向的, P36 = 1; /*P34 --->-WR*/ P34 = 1; /*p33 --> -RD*/ P33 = 1; /*P37 --->A0*/ P37 = 0; 是用來(lái)設(shè)定初始值的,兩個(gè)是不同的寄存器。
你可以這樣測(cè)試下你的配置有沒有問題,在復(fù)位完成之后,你讀下端口,看下端口的數(shù)據(jù)是多少?正常的情況下應(yīng)該是FF,如果不是的話,那么就是你的端口配置有問題了
如何知道復(fù)位完成呢?
你在你的程序的一開始就讀你的端口的數(shù)據(jù),不管375的狀態(tài),主程序一上來(lái)就讀取你的8位數(shù)據(jù)口的數(shù)據(jù)是多少?
好的,我們將做相關(guān)的實(shí)驗(yàn),周末你們那邊的聯(lián)系方式是多少?