下面是我的初始化程序,就一個(gè)簡(jiǎn)單的硬件測(cè)試指令,不管輸入什么測(cè)試數(shù)據(jù),返回值一直是0xFF,硬件部分的話(huà),晶振工作也正常,不知道還會(huì)是哪里的原因啊 ??? 跟CH375命令端口的I/O地址 相關(guān)嗎,我在CH375HFT.C這個(gè)例程中也是只看到定義,而沒(méi)看到它的應(yīng)用,這個(gè)地方我一直不是很明白,請(qǐng)各位大蝦指教啊 感激不盡
/*****************************************************************************/ #include #include #include #include "CH375HFF.H"
#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375數(shù)據(jù)端口的I/O地址 */
/* 由于MSP430不開(kāi)放系統(tǒng)總線(xiàn),所以用I/O引腳模擬產(chǎn)生CH375的并口讀寫(xiě)時(shí)序 */ /* 本例中的硬件連接方式如下(實(shí)際應(yīng)用電路可以參照修改下述3個(gè)并口讀寫(xiě)子程序) */ /* MSP430單片機(jī)的引腳 CH375芯片的引腳 P1.4 INT# P1.7 A0 P1.6 WR# P1.5 RD# P1.3 CS P4(8位端口) D7-D0 */
void mDelaymS( UINT16 ms ) { UINT16 i; while ( ms -- ) for ( i = 2000; i != 0; i -- ); }
void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫(xiě)時(shí)序,所以進(jìn)行初始化 */ { P1DIR = 0xE8; /* 設(shè)置INT#為輸入,設(shè)置CS,WR,RD,A0為輸出 */ P1OUT =0x68; /* 設(shè)置A0為低電平,CS,WR,RD默認(rèn)為高電平 */ P4DIR = 0; /* 設(shè)置8位并口輸入 */ }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫(xiě)命令 */ { _NOP( ); _NOP( ); _NOP( ); /* 至少延時(shí)2uS,實(shí)際由于模擬I/O較慢而只需少量延時(shí) */ P4OUT = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ P1OUT |= BIT7; /* 指向CH375芯片的命令端口, A0(P1.7)=1; */ P1OUT &=~BIT3; /*CS=0*/ P4DIR = 0xFF; /* 寫(xiě)操作所以數(shù)據(jù)輸出 */ P1OUT &= ~BIT6; P1OUT |=BIT5; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH375芯片的命令端口, A0(P1.7)=1; WR=(P1.6)=0; RD(P1.5)=1; */ _NOP( ); /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度為100nS */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ //P1OUT &= 0x6F; /* 輸出A0(P1.3)=0; 可選操作 */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( ); _NOP( ); _NOP( ); _NOP( ); /* 至少延時(shí)2uS,實(shí)際由于模擬I/O較慢而只需少量延時(shí) */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫(xiě)數(shù)據(jù) */ { P4OUT = mData; /* 向CH375的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫(xiě)操作所以數(shù)據(jù)輸出 */ P1OUT &=~BIT7; P1OUT &=~BIT6; P1OUT |=BIT5;P1OUT &=~BIT3; /* 輸出有效寫(xiě)控制信號(hào), 寫(xiě)CH375芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( ); /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度為100nS */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); /* 至少延時(shí)1uS,實(shí)際由于模擬I/O較慢而不一定有必要 */ }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; _NOP( ); /* 至少延時(shí)1uS,實(shí)際由于模擬I/O較慢而不一定有必要 */ P4DIR = 0; /* 讀操作所以數(shù)據(jù)輸入 */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT &=~BIT5;P1OUT &=~BIT3; /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口, A0(P1.7)=0; CS(P1.3)=0; WR=(P1.6)=1; RD(P1.5)=0; */ _NOP( ); /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫(xiě)脈沖寬度為100nS */ mData = P4IN; /* 從CH375的并口輸入數(shù)據(jù) */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P1.7)=0; CS(P1.3)=1; WR=(P1.6)=1; RD(P1.5)=1; */ return( mData ); }
void CH375_INIT() { xWriteCH375Cmd(CMD_CHECK_EXIST);/* 測(cè)試CH375是否正常工作 */ xWriteCH375Data(0x11); xReadCH375Data(); }
void main( ) {
mDelaymS(2); CH375_PORT_INIT(); CH375_INIT(); while (1); /* 以下指令開(kāi)始工作循環(huán),等待PC機(jī)命令進(jìn)行操作 */ }