我的程序代码如下,在调试过程中,总是接受数据不对,不知道哪里出了错误、 #include #include #include #include //#include
#define CMD_CHECK_EXIST 0x06 #define CMD_RESET_ALL 0x05 sbit PORT11 = P1^0;//control ch375_1 work sbit PORT12 = P1^1;//control ch375_2 work sbit PORT13 = P1^4;//control mcu sbit PORT14 = P1^5; sbit led1 = P1^6;/*错误指示灯*/ sbit led2 = P1^7;//正常工作指示灯 void delay50ms(void); void flash_led1(void); void flash_led2(void); void SendChar(unsigned char buff); unsigned char receive(); void ComInit(); void delay1s(void); void CH375_Init( void );
void delay50ms(void) { unsigned char i,j; for(i=100;i!=0;i--) for(j=250;j>0;j--); } void delay1s(void) { unsigned char i,j,k; for(i=10;i!=0;i--) for(j=200;j!=0;j--) for(k=250;k!=0;k--); }
void flash_led1(void) { unsigned char i;
for( i=10;i>0;i-- ) { led1=!led1; delay1s(); } } void flash_led2(void) { unsigned char i;
for( i=10;i>0;i-- ) { led2=!led2; delay1s(); } } /* CH375初始化子程序 */ void CH375_Init( void ) { unsigned char i, k; unsigned char RD_DAT;
/* 测试CH375是否正常工作 */ for( k=100; k!=0; k-- ) { SendChar( CMD_CHECK_EXIST ); /* 测试CH375是否正常工作 */ i = 0x5A;//需要换格式 SCON = 0xD0; SendChar( i ); /* 写入测试数据 */ i = ~i; /* 返回数据应该是测试数据取反 */ RD_DAT = receive(); SCON = 0xD8; if ( RD_DAT != i ) /* CH375不正常 */ { for ( i=5; i!=0; i-- ) { SendChar( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */ } delay50ms(); /* 延时50ms */ } else while(1) { ; //flash_led2(); /* CH375正常?*/ } } if( k==0 ) { while(1) { ; //flash_led1(); /* CH375出错 */ } } }
/* 串行口通讯子程序 */ /*串口初始化*/ void ComInit() { TMOD = 0x20; /*T1为方式*/ TH1 = 0xFd; /*计数常数0xFE,波特率9600 晶振:11.0592MHz */ TL1 = 0xFd; SCON = 0xD8; //串口方式3 TCON=0x20; PCON=0X00; TI=0; RI=0; TR1 = 1; }
void SendChar(unsigned char buff) { SBUF = buff; while( TI==0 ) //; { flash_led2(); } TI=0; }
/*串行数据接收程序*/ unsigned char receive(void) { unsigned char buf; while(RI==0) //; { flash_led1(); } buf=SBUF; return(buf); } void main(void) { PORT11 = 0; PORT12 = 1; PORT13 = 0; PORT14 = 1; led1=0; led2=0;
ComInit(); CH375_Init(); }