我用51單片機控制CH372時上位機軟件能自動檢測到硬件并且讀寫數(shù)據(jù)都沒問題,接收的數(shù)據(jù)都正常,但是換為AVR單片機控制時,能檢測到硬件但是無法讀寫數(shù)據(jù),不清楚是什么原因?使用CHK_EXIST命令檢測時返回的還是寫進去的數(shù),并沒有得到取反的值,是不是讀寫函數(shù)有問題?這些操作在51單片機上都是正常的,但轉(zhuǎn)到AVR就不行了。用的AVR單片機為ATMEGA32,其底層操作部分函數(shù)如下: 其中A0接PC0,CS接PC1,WR接PC2,RD接PC3,D0~D7接PB,中斷信號采用外部中斷0的PD2口,通過中斷來進行讀寫數(shù)據(jù)操作。 //*********************************************************************** void ch372_delay_us(unsigned long count) { int i,j; for(i=0; i<20; i++) { for(j=0; j } } void CH372_PORT_INIT(void) /* 由于使用通用I/O模塊并口讀寫時序,所以進行初始化 */ { Pc_out; CH372_CS_H; CH372_WR_H; CH372_RD_H; CH372_A0_L; Pb_in; //DDRA=0x00; //for input state Pb_ff; } //*************************************** //系統(tǒng)初始化 //返回:初始化成功置1, 初始化失敗置0 //*************************************** unsigned char InitCH372Sys(void) { unsigned char InitFlag; InitFlag = CH372Init(); // 初始化CH372 CH372_PORT_INIT(); MCUCR |= b0000_1010;//下降沿觸發(fā) MCUCSR|= 0x00; GICR |= 0xC0;//b1100_0000 打開中斷1,0 sei();//開全局中 return InitFlag; }
void SendCommand372(unsigned char command) { ch372_delay_us(10); Pc_out; Pb_out; PORTB=command; CH372_A0_H; CH372_CS_L; CH372_WR_L; //在此加上ch372_delay_us(500); 也還是不行 CH372_WR_H; CH372_A0_L; ch372_delay_us(10); } void WriteData372(unsigned char *psrc, unsigned char n_byte) { unsigned char q0; Pc_out; for(q0=0; q0 { ch372_delay_us(10); Pb_out; PORTB=(*psrc); CH372_A0_L; CH372_CS_L; CH372_WR_L;//在此加上ch372_delay_us(500); 也還是不行 CH372_WR_H; CH372_CS_H; ch372_delay_us(10); psrc++; } } void ReadData372(unsigned char *pdest, unsigned char n_byte) { unsigned char q0; Pc_out; for(q0=0; q0 { ch372_delay_us(10); Pb_in; Pb_ff; CH372_A0_L; CH372_CS_L; CH372_RD_L;//在此加上ch372_delay_us(500); 也還是不行 CH372_CS_L; *pdest=PORTB; CH372_RD_H; CH372_CS_H;//CH372_A0_H; ch372_delay_us(10); pdest++; } }