看看这个程序有问题么,关于ch375正常工作的问题

我的程序代码如下,在调试过程中,总是接受数据不对,不知道哪里出了错误、 #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(); }

void SendChar(unsigned char buff) { SBUF = buff; while( TI==0 ) //; { 这个函数有问题,发数据的时候应该是9位数据方式 void SendChar_cmd(unsigned char buff) { ti=0 tb8=1 SBUF = buff; while( TI==0 ) //; } void SendChar_cmd(unsigned char buff) { ti=0 tb8=0 SBUF = buff; while( TI==0 ) //; } 这样才可以,当然还需要一些初始化的设置,也就是允许9位数据传输


回复楼上的

我在 对scon的 赋值中已经 分别对tb8赋了值啊~~~~~ 可以看下面的这一段 里面scon的部分

/* 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出错 */

} } }


还有人回答么


返回的数据是多少??


单片机总是在接收那数据那个地方死机


好久没来了


只有登录才能回复,可以选择微信账号登录