蛋疼啊,換了個(gè)晶振還是一樣,兩個(gè)起振電容用的是20pf的。 至于有沒(méi)有起振我不太確定了,晶振14腳是2v多點(diǎn),13基本是0. 求助啊。。。。。。。。
檢查硬件連接 CH375 第2腳對(duì)電源接一個(gè)104的電容, CH375如果是5V供電,那么V3引腳對(duì)地接103電容, 如果是3.3V供電,將V3引腳直接 接VCC(3.3V), 電源對(duì)地也接一個(gè)104電容,如果晶振起振 則兩端電壓均在電源電壓的一半左右, 在晶振兩端并一個(gè)1M歐姆的電阻試試。 請(qǐng)多注意身體。。。
還是不行啊,上面的方法我都試了,唯一有點(diǎn)進(jìn)展的是25腳現(xiàn)在是低電平,26是高電平了 但13腳還是基本接近0,咋辦啊,是不是芯片壞了啊
不是芯片壞了,而是你用萬(wàn)用表量晶振的時(shí)候,晶振停振了。只要25腳位低,26腳位高就說(shuō)明芯片已經(jīng)復(fù)位以及晶振是起振的。下面軟件上面只需要測(cè)試命令通過(guò)就沒(méi)什么問(wèn)題了。
25腳現(xiàn)在是低電平,26是高電平 說(shuō)明芯片正常工作了。
這樣啊。。。謝謝謝謝謝謝,我是在電烙鐵熱起來(lái)之前看看這個(gè)貼。。。哈哈,不用換了
還是不對(duì)啊,麻煩看看我的程序,就只是個(gè)測(cè)試命令功能。主函數(shù)main之前的代碼都是從貴公司示例拷來(lái)的,但是出來(lái)的數(shù)據(jù)老是oxff,下面是代碼
#include #include #include #include #include "SERISE.h"
#define A0(n) {PORTE=(PORTE&0XBF)^(n<<6);} #define CS(n) {PORTE=(PORTE&0X7F)^(n<<7);} #define WR(n) {PORTE=(PORTE&0XEF)^(n<<4);} #define RD(n) {PORTE=(PORTE&0XDF)^(n<<5);} #define RST(n) {PORTE=(PORTE&0XF7)^(n<<3);} /* 以下定義的詳細(xì)說(shuō)明請(qǐng)看CH375HF9.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫(xiě)的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢(xún)方式",1為"中斷方式" */
/* 單片機(jī)的RAM有限,其中CH375子程序用512字節(jié),剩余RAM部分可以用于文件讀寫(xiě)緩沖 */ #define DISK_BASE_BUF_LEN 2048 /* 默認(rèn)的磁盤(pán)數(shù)據(jù)緩沖區(qū)大小為512字節(jié),建議選擇為2048甚至4096以支持某些大扇區(qū)的U盤(pán),為0則禁止在.H文件中定義緩沖區(qū)并由應(yīng)用程序在pDISK_BASE_BUF中指定 */ #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長(zhǎng)度不小于一次讀寫(xiě)的數(shù)據(jù)長(zhǎng)度 */ /* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫(xiě),那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */
#define CH375_INT_WIRE ( PIND & 0x08 ) /* PIND.3, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢(xún)中斷狀態(tài) */
#define NO_DEFAULT_CH375_F_ENUM 1 /* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */
#include "CH375HFB.H"
void mDelay1uS( ) /* 至少延時(shí)1uS,根據(jù)單片機(jī)主頻調(diào)整 */ { UINT8 i; for ( i = 500; i != 0; i -- ); }
void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫(xiě)時(shí)序,所以進(jìn)行初始化 */ { DDRA = 0x00; /* 設(shè)置8位并口為輸入 */ PORTE = 0xB0; /* 設(shè)置CS,WR,RD默認(rèn)為高電平 */ DDRE = 0xF8; /* 設(shè)置CS,WR,RD,A0為輸出 */ DDRD = 0xF7; /* 設(shè)置INT#為輸入 */ RST(1); mDelay1uS();mDelay1uS();mDelay1uS();mDelay1uS();mDelay1uS();mDelay1uS();mDelay1uS();mDelay1uS(); RST(0); }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫(xiě)命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時(shí)1uS */ A0(1); /* 輸出A0=1 */ PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */ CS(0);A0(1);WR(0);RD(1); /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRA = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度大于100nS */ A0(1);WR(1);RD(1);CS(1); /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ A0(0); /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時(shí)2uS */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫(xiě)數(shù)據(jù) */ { PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */ DDRA = 0xFF; /* 并口D0-D7輸出 */ CS(0);A0(0);WR(0);RD(1); /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ DDRA = 0xFF; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度大于100nS */ A0(0);WR(1);RD(1);CS(1); /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時(shí)1.2uS */ }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; mDelay1uS( ); /* 至少延時(shí)1.2uS */ DDRA = 0x00; /* 數(shù)據(jù)輸入 */ CS(0);A0(0);WR(1);RD(0); /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */ DDRA = 0x00; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度大于100nS */ A0(0);WR(1);RD(1);CS(1); /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); }
/* 延時(shí)指定毫秒時(shí)間,根據(jù)單片機(jī)主頻調(diào)整,不精確 */ void mDelaymS( UINT8 ms ) { UINT16 i; while ( ms -- ) for ( i = 2600; i != 0; i -- ); }
/* 檢查操作狀態(tài),如果錯(cuò)誤則顯示錯(cuò)誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯(cuò)誤 */ while ( 1 ) { /*本來(lái)這里是個(gè)LED閃燈代碼*/ } }
void main() { Init_ser(); CH375_PORT_INIT(); xWriteCH375Cmd(0x06); xWriteCH375Data(0x55); send(xReadCH375Data()); }
最后這句send(xReadCH375Data());是將返回的數(shù)據(jù)送到串口。結(jié)構(gòu)都是0xff,我想問(wèn)問(wèn)這個(gè)測(cè)試命令這樣用應(yīng)該沒(méi)錯(cuò)吧?
上電之后需要延時(shí)50MS以上的延時(shí)之后在進(jìn)行數(shù)據(jù)處理。
不好意思,還是得再問(wèn)一下 我延時(shí)了, mDelaymS(1);我模擬了下,時(shí)間是2ms,所以150個(gè)延時(shí)肯定夠了,但是出來(lái)的數(shù)據(jù)還是0xff,我的硬件引腳也一個(gè)個(gè)測(cè)試了,都是對(duì)的,連接沒(méi)問(wèn)題,給點(diǎn)意見(jiàn),謝謝了?。?! void main() { Init_ser(); mDelaymS(150); CH375_PORT_INIT(); mDelaymS(150); xWriteCH375Cmd(0x06); xWriteCH375Data(0x55); send(xReadCH375Data()); }
有木有人???拜托
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫(xiě)命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時(shí)1uS */ A0(1); PORTA = mCmd; DDRA = 0xFF; CS(0);A0(1);
WR(0); 這里WR脈沖加長(zhǎng)些。 CS(0); CS(0); RD(1); DDRA = 0xFF; A0(1); WR(1); RD(1);CS(1); DDRA = 0x00; A0(0); mDelay1uS( ); mDelay1uS( ); /* 至少延時(shí)2uS */ }
另外寫(xiě)命令,讀數(shù)據(jù),也類(lèi)似,讀寫(xiě)脈沖加長(zhǎng)
感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝感謝?。。。。。。。? 問(wèn)題解決了,就是延時(shí)不夠,搞了這么久終于成功了,非常感謝!
請(qǐng)問(wèn)nicker,你說(shuō)就是延時(shí)不夠,該怎么加延時(shí)?在哪里加?加多少?
一個(gè)是上電復(fù)位延時(shí)50ms,確保復(fù)位正常,我們芯片正常工作。
二是如果你單片機(jī)主頻比較快,調(diào)整字節(jié)讀寫(xiě)之間的延時(shí),2us以上,確保測(cè)試命令通過(guò)通訊正常。