求助CH375和單片機(jī)通訊問(wèn)題

請(qǐng)教CH375和AVR單片機(jī)通信的問(wèn)題! 我用的CH375的主機(jī)方式,用并口和單片機(jī)連接,然后編了一個(gè)串口程序來(lái)檢測(cè)CH375的狀態(tài),并把數(shù)據(jù)返回PC機(jī)。用CMD_CHECK_EXIST命令來(lái)檢測(cè),結(jié)果串口調(diào)試助手返回的數(shù)據(jù)一直是0xFF,375的時(shí)鐘,復(fù)位等都檢查了沒問(wèn)題,請(qǐng)教一下是什么原因。下面是我編的程序: #include #include #include #include "CH375INC.H"

void delay2us( ) { unsigned char i; for ( i = 2; i != 0; i -- ); } /*外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫命令,*/ void xWriteCH375Cmd(unsigned char mCmd) { PORTC|=0X02;/*PC1置高*/ delay2us( );/*至少延時(shí)1us*/ PORTC&=0XFD;/*PC1置低*/ PORTC|=0x01;/*A0=1*/ PORTB=mCmd;/*向CH375的并口輸出數(shù)據(jù)*/ DDRB=0xFF;/*并口D0-D7輸出*/ PORTD|=0x80;/*同上,RD=1*/ PORTC&=0xFB;/*輸出有效寫控制信號(hào),CS=0*/ //PORTC|=0X01;/*A0=1*/ PORTD&=0XBF;/*WR=0*/ DDRB=0xFF;/*該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns*/ PORTD|=0xC0;/*同上,WR=1,RD=1*/ PORTC|=0x05;/*輸出無(wú)效的控制信號(hào),完成操作CH375芯片,A0=1,CS=1*/ DDRB=0x00;/*禁止數(shù)據(jù)輸出*/ delay2us( );/*至少延時(shí)2US*/ }

/*外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫數(shù)據(jù)*/ void xWriteCH375Data(unsigned char mData) { PORTC&=0xFE;/*A0=0*/ PORTB=mData;/*向CH375的并口輸出數(shù)據(jù)*/ DDRB=0xFF;/*并口D0-D7輸出*/ PORTD|=0x80;/*同上,RD=1*/ PORTC&=0xFA;/*輸出有效寫控制信號(hào),寫CH375芯片的數(shù)據(jù)端口,A0=0,CS=0*/ PORTD&=0XBF;/*WR=0*/ DDRB=0xFF;/*該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns*/ PORTD|=0xC0;/*同上,WR=1,RD=1*/ PORTC|=0x04;/*輸出無(wú)效的控制信號(hào),完成操作CH375芯片,CS=1*/ //PORTC&=0XFE;/*A0=0*/ DDRB=0x00;/*禁止數(shù)據(jù)輸出*/ delay2us( );/*至少延時(shí)2us*/ }

/*外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù),*/ unsigned char xReadCH375Data(void) { unsigned char mData; delay2us( );/*至少延時(shí)1.2us*/ DDRB=0x00;/*數(shù)據(jù)輸入*/ PORTD|=0X40;/*WR=1*/ PORTC&=0xFA;/*輸出有效讀控制信號(hào),讀CH375的數(shù)據(jù)端口,A0=0,CS=0*/ PORTD&=0x7F;/*同上,RD=0*/ DDRB=0x00;/*該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100ns*/ mData=PINB;/*從CH375的并口PB輸入數(shù)據(jù)*/ //PORTC&=0xFE;/*A0=0*/ PORTD|=0xC0;/*WR=1,RD=1*/ PORTC|=0X04;/*CS=1*/ return(mData); }

//單片機(jī)串口初始化 void USART_Init(void) { UCSRA=0x02;/*倍速*/ UCSRB=0x18;/*允許接收和發(fā)送*/ UCSRC=0x86;/*8位數(shù)據(jù)*/ UBRRH=0x00; UBRRL=0x08;/*設(shè)置波特率,115.2K*/ }

void USART_Transmit( unsigned char data ) { /* 等待發(fā)送緩沖器為空 */ while ( !( UCSRA & (1</* 將數(shù)據(jù)放入緩沖器,發(fā)送數(shù)據(jù) */ UDR = data; }

unsigned char USART_Receive( void ) { /* 等待接收數(shù)據(jù)*/ while ( !(UCSRA & (1</* 從緩沖器中獲取并返回?cái)?shù)據(jù)*/ return UDR; }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { unsigned char i, k; //unsigned char RD_Data;

DDRB=0x00; /* 設(shè)置8位并口為輸入 */ DDRC=0x07; /*設(shè)置CS、A0為輸出*/ DDRD=0xC0; /* 設(shè)置WR,RD為輸出,設(shè)置INT#為輸入 */ PORTC|=0x04; /* 設(shè)置CS默認(rèn)為高電平 */ PORTD|=0xE0; /*設(shè)置WR,RD,INT默認(rèn)為高電平*/ }

/*利用PC機(jī)串口來(lái)檢測(cè)CH375是否正常工作*/ void CH375_TEST( ) { unsigned char temp; unsigned char RD_Data; DDRD=0x02;/*TXD,RXD引腳PD1,PD2分別置為輸出和輸入,*/ while(1) { /*等待接收數(shù)據(jù)*/ temp=USART_Receive(); /*把接收到的數(shù)據(jù)寫到CH375里面*/ xWriteCH375Cmd( CMD_CHECK_EXIST ); xWriteCH375Data(temp); /*從CH375讀數(shù)據(jù)*/ temp=~temp; RD_Data=xReadCH375Data(); /*發(fā)送接收到得數(shù)據(jù)*/ USART_Transmit(RD_Data); } }

main( ) { delay2us( ); CH375_PORT_INIT( ); USART_Init( ); CH375_TEST( ); }

請(qǐng)嚴(yán)格按照下面的時(shí)序?qū)懀?/p>

void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; P0 = 0xFF; /* 并口輸入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫命令 */ { //*(UINT8XV *)0XBDF1 = mCmd; //return; mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)1uS */ P0 = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ 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; P0 = 0xFF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { //*(UINT8XV *)0XBCF0 = mData; //return; 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 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; //return( *(UINT8XV *)0XBCF0 ); mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ P0 = 0xFF; /* 輸入 */ 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; return( mData ); }


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频