我 用的是STC89C58RD+ CH375 ,我在主函數(shù)里邊調(diào)用CH375LibInit() 和xQueryInterrupt( ) 的時(shí)候,我用單步運(yùn)行,怎么總也 調(diào)用不了這兩個(gè)函數(shù) ,這兩個(gè)函數(shù)都是在 CH375HF6.H 這個(gè)文件中的 ?請(qǐng)問(wèn)如何解決 ?謝謝
這兩個(gè)函數(shù)在頭文件中都可以看到,你所說(shuō)的“總也調(diào)用不了這兩個(gè)函數(shù)”是直接不用運(yùn)行還是運(yùn)行返回出錯(cuò)(比如CH375LibInit() 返回0X81)?如果前者,你檢查一下有沒(méi)有將我們的庫(kù)CH375HF6.LIB以添加.C的形式添加到工程中去;如果后者,先仔細(xì)檢查硬件連接,再查我們的375是否正常工作了,如晶振有沒(méi)起振,復(fù)位是否完全。
我的晶體 沒(méi)波形輸出啊,暈 ,可我是照著 你們給的CH375DS1.pdf 中 的圖做的啊 ,晶體 怎么不振呢? 我 的CH375 的25,26角正常 ,可 晶體就是不振,這是什么問(wèn)題??? 誰(shuí)幫幫我,謝謝
(1) 電容是否匹配 (2)晶振是否漏電,若用了助焊劑,先清洗烘干 (3)表筆有沒(méi)有選擇*10檔
1.電容 絕對(duì)匹配,是 15P的 2.晶振不漏電 ,沒(méi)有使用助焊劑 3.表筆使用的是*10檔 晶體就是不起振? 弄了一上午了,也沒(méi)起振,CH375 的25角低,26角高,這正常,我一共 焊了2個(gè)板子 ,結(jié)果都不行 ,暈死了, 麻煩各位 再幫我 看看 ,謝謝
如果CH375 的25腳為低,26腳為高,說(shuō)明375已經(jīng)正常工作了!!!
可 375的晶振為什么沒(méi)有波形輸出呢 ? 而且給375 發(fā)測(cè)試命令CMD_CHECK_EXIST,比如說(shuō)發(fā)0x55, 返回的還是 0x55 ,這不就說(shuō)明 375 沒(méi)正常工作嗎?
可 375的晶振為什么沒(méi)有波形輸出呢 ? 而且給375 發(fā)測(cè)試命令CMD_CHECK_EXIST,比如說(shuō)發(fā)0x55, 返回的還是 0x55 ,這不就說(shuō)明 375 沒(méi)正常工作嗎?
根據(jù)你說(shuō)的情況來(lái)看,給以下幾點(diǎn)參考意見(jiàn): (1)375的25腳為低,26腳為高,說(shuō)明375已經(jīng)正常復(fù)位了.這時(shí)候可以肯定的說(shuō)晶振已經(jīng)起振了.至于你說(shuō)測(cè)不到波形,有可能是顯波器沒(méi)有調(diào)好,你可以再確認(rèn)一下??! (2)至于你發(fā)測(cè)試命令CMD_CHECK_EXIST沒(méi)有通過(guò),有可能是時(shí)續(xù)的問(wèn)題,數(shù)據(jù)沒(méi)有發(fā)下去,你把測(cè)試的程序發(fā)一下看看??!
使用總線方式還是模擬I/O口方式?三個(gè)讀寫(xiě)子函數(shù)的時(shí)序要正確,還有你可以循環(huán)的寫(xiě)數(shù)據(jù),寫(xiě)命令,讀數(shù)據(jù),用示波器測(cè)下數(shù)據(jù)線,RD,WR,CS信號(hào)可是正常的,看數(shù)據(jù)和命令可送到CH375的引腳上了.
使用總線方式,三個(gè)讀寫(xiě)函數(shù)如下: /* 向CH375的命令端口寫(xiě)入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ void CH375_WR_CMD_PORT( unsigned char cmd ) { CH375_CMD_DAT = 1; /* 命令 */ CH375_DATA_PORT = cmd; for ( cmd = 2; cmd != 0; cmd -- ); /* 發(fā)出命令碼前后應(yīng)該各延時(shí)2uS,對(duì)于MCS51可以不需要延時(shí) */ }
/* 向CH375的數(shù)據(jù)端口寫(xiě)入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ void CH375_WR_DAT_PORT( unsigned char dat ) { CH375_CMD_DAT = 0; /* 數(shù)據(jù) */ CH375_DATA_PORT = dat; }
/* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ unsigned char CH375_RD_DAT_PORT(void) { unsigned char rev_data ; CH375_CMD_DAT = 0; /* 數(shù)據(jù) */ rev_data = CH375_DATA_PORT; return( rev_data ); }
/* CH375初始化子程序 */ unsigned char CH375_Init( ) { unsigned char i,sta1,test=0; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 測(cè)試工作狀態(tài) */ CH375_WR_DAT_PORT( 0x55 ); /* 測(cè)試數(shù)據(jù) */ test = CH375_RD_DAT_PORT( ); /* 返回?cái)?shù)據(jù)應(yīng)該是測(cè)試數(shù)據(jù)取反 */ if ( test != 0xaa ) { /* CH375出錯(cuò) */ for ( i = 100; i != 0; i -- ) { /* 強(qiáng)制數(shù)據(jù)同步 */ CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375執(zhí)行硬件復(fù)位 */ test = CH375_RD_DAT_PORT( ); /* 延時(shí) */ if(test == 0xaa) break; } } if(i==0) /* if ( i==0 ) { CH372/CH375存在硬件錯(cuò)誤 }; */ { printf("test fail !"); return 0; } else { /* 設(shè)置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 6 ); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ //mDelaymS(100); for ( i=5; i!=0; i-- ) { CH375_WR_CMD_PORT(CMD_TEST_CONNECT); sta1=CH375_RD_DAT_PORT(); mDelaymS(20); return sta1; } } }
我的主函數(shù)如下: main( ) { unsigned char i,c ; P0 = 0x00; CH375_Init( ); /* 初始化CH375 */ i = CH375LibInit( ); /* 初始化CH375程序庫(kù)和CH375芯片,操作成功返回0 */ ....... } 目前狀態(tài):375 的 25角 低,26角高
目前存在的問(wèn)題: 1. 在函數(shù)運(yùn)行到CH375_Init( )的 時(shí)候,單片機(jī)給375發(fā)的測(cè)試數(shù)據(jù) (0x55),375 返回不正確?如何解決? 2. 如果把CH375_Init( )屏掉 ,單片機(jī)運(yùn)行到CH375LibInit( ) 函數(shù)時(shí)無(wú)法調(diào)用 ? 我用的是CH375HF6.H 這 個(gè)頭文件 謝謝 各位工程師的幫助 ,我的QQ:176891496 ,如果需要 ,我可以把原理圖和 程序發(fā)給你們,謝謝
你單片機(jī)與我們芯片是怎么連接的,采用的是總線方式(按我們芯片手冊(cè)上給出的連接),還是模擬并口方式。如果采用總線方式的話,得按你的接線改寫(xiě)命令口地址和數(shù)據(jù)口地址。按你上面所說(shuō)的,調(diào)用不起來(lái)的話,應(yīng)該沒(méi)有將我們的庫(kù)添加進(jìn)去,你可以參考CH375LIB.ZIP里面的程序。
如果采用模擬并口的話,你得采用CH375LIB.ZIP下的FILELIBC庫(kù),這個(gè)庫(kù)的三個(gè)讀寫(xiě)子程序提供出來(lái),可以按客戶接線進(jìn)行修改的。
如果采用總線方式的話,我們采用了數(shù)據(jù)端口(CH375_DAT_PORT)、命令端口(CH375_CMD_PORT)兩個(gè)IO地址。 仔細(xì)看一下我們的例子程序,發(fā)命令時(shí)是將命令碼發(fā)到命令端口。你那么改肯定不行。
以下程序你參考一下:
unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */ unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375數(shù)據(jù)端口的I/O地址 */
/* 延時(shí)2微秒,不精確 */ void delay2us( ) { unsigned char i; for ( i = 2; i != 0; i -- ); }
/* 延時(shí)1微秒,不精確 */ void delay1us( ) { unsigned char i; for ( i = 1; i != 0; i -- ); } /* 與CH372/CH375有關(guān)的基本I/O操作 */
void CH375_WR_CMD_PORT( UINT8 cmd ) { /* 向CH375的命令端口寫(xiě)入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ Delay2us(); CH375_CMD_PORT=cmd; Delay2us(); }
void CH375_WR_DAT_PORT( UINT8 dat ) { /* 向CH375的數(shù)據(jù)端口寫(xiě)入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ CH375_DAT_PORT=dat; Delay1us(); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ }
UINT8 CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ Delay1us(); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ return( CH375_DAT_PORT ); }
問(wèn)題解決,原因是 PCB上少畫(huà)了根線,再次感謝南京沁恒的工程師門(mén)的熱心幫助