急求CH375與單片機(jī)串行接法的初始化程序!!!
89C51 串口波特率為9600bps 串口工作在工作方式3
只要能寫CHECK_EXIST命令后,能返回正確的數(shù)據(jù)即可.
我的開發(fā)環(huán)境有限,只想知道自己接的CH375能否與單片機(jī)正常通信,首先能排除硬件上的問題.我在這里卡了很久了,不是我懶,只是想?yún)⒖家幌?希望好心人能幫忙一下!
急求CH375與單片機(jī)串行接法的初始化程序!!!
89C51 串口波特率為9600bps 串口工作在工作方式3
只要能寫CHECK_EXIST命令后,能返回正確的數(shù)據(jù)即可.
我的開發(fā)環(huán)境有限,只想知道自己接的CH375能否與單片機(jī)正常通信,首先能排除硬件上的問題.我在這里卡了很久了,不是我懶,只是想?yún)⒖家幌?希望好心人能幫忙一下!
void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 0; } void CH375_PORT_INIT( ) { SCON = 0xD0; //設(shè)置串口為9位數(shù)據(jù) //設(shè)置波特率和其它串口參數(shù) }
void xWriteCH375Cmd( UINT8 mCmd ) { TI = 0; TB8 = 1; SBUF = mCmd; while ( TI == 0 ); }
void xWriteCH375Data( UINT8 mData ) { TI = 0; TB8 = 0; SBUF = mData; while ( TI == 0 ); }
UINT8 xReadCH375Data( void ) { while ( RI == 0 ); RI = 0; return( SBUF ); }
一開始要不要對CH375設(shè)置工作模式? 可以寫出一個CHECK_EXIST命令的使用嗎?我就不知道在用這命令之前要不要設(shè)置什么
不要對375設(shè)置模式的,測試命令是檢查硬件有沒有問題,只有測試命令通過之后再對375設(shè)置模式讓其工作在主機(jī)方式或設(shè)備方式,模式才能設(shè)置成功.
#include #include
#define GET_STATUS 0x22 #define CHECK_EXIST 0x06 #define RESET_ALL 0x05
void CH375Init(void); void w_Cmd(unsigned char cmd); void w_Data(unsigned char mData); unsigned char r_Data(void); void Delay1s(void); void delay40ms(void);
void main(void) { unsigned char data temp;
Delay1s();
CH375Init(); w_Cmd(CHECK_EXIST); _nop_(); w_Data(0xaa); _nop_(); _nop_(); temp= r_Data(); P1= temp; while(1); }
void CH375Init(void) { delay40ms(); EA= 0; SCON= 0xd0; //′??ú1¤×÷·?ê?3 ES= 0; PCON= 0x00; //SMOD= 0
TMOD= 0x20; //?¨ê±?÷11¤×÷·?ê?2 TH1= 0xfd; TL1= 0xfd;
IT0= 1; //ía2??D??03?ê??ˉ EX0= 0;
ET1= 0; //?¨ê±?÷1?D??1? TR1= 1; //???ˉ?¨ê±?÷1 EA= 0; }
void w_Cmd(unsigned char cmd) { TI = 0; TB8 = 1; SBUF = cmd; _nop_(); _nop_(); _nop_(); _nop_(); while ( TI == 0 ); }
void w_Data(unsigned char mData) { TI = 0; TB8 = 0; SBUF = mData; _nop_(); _nop_(); _nop_(); _nop_(); while ( TI == 0 ); }
unsigned char r_Data(void) { _nop_(); _nop_(); _nop_(); _nop_(); while(RI==0); RI= 0; return SBUF; }
void Delay1s(void) { unsigned char i; i= 0xf0; while(i){i--;} }
void delay40ms(void) { long i; i= 0x9c40; while(i){i--;} }
這樣的測試命令的程序有錯嗎?發(fā)出命令和數(shù)據(jù)后,單片機(jī)沒收到CH375發(fā)來的測試數(shù)據(jù) 原理圖如下,我把CS#也接了地,INT#接了單片機(jī)的INT0
串口通信只要接3跟線就可以了,TXD,RXD,INT,具體的接線可以參考CH375DS1上的接線圖,程序上沒有什么問題,可以給延時減少些看看,可以先測下單片機(jī)的串口是不是正常工作了.