你說的邏輯挺對的,我也按照你說的改了,但是修改后的程序的效果并不理想,串口助手接收的數據也沒有了。 下面是我按照你所講的修改的程序
- #include <reg51.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- u16 i;
- u8 rec_buf[4]={0,0,0,0};
- u8 code str1[]={0x23,0x01,0x04,0x00,0x00,0x00,0x01,0x23}; //¶¨òåËÄ×éμÆ1aD-òé
- u8 code str2[]={0x23,0x01,0x04,0x00,0x00,0x00,0x02,0x23};
- u8 code str3[]={0x23,0x01,0x04,0x00,0x00,0x00,0x03,0x23};
- u8 code str4[]={0x23,0x01,0x04,0x00,0x00,0x00,0x04,0x23};
- u8 code table1[4]={0x7E,0x41,0x06,0x0D}; //¶¨òåËÄ×éμã¸èÏμí3D-òé
- u8 code table2[4]={0x7E,0x41,0x19,0x0D};
- u8 code table3[4]={0x7E,0x41,0x09,0x0D};
- u8 code table4[4]={0x7E,0x41,0x03,0x0D};
- void InitUART(void)
- {
- TMOD = 0x20; //¶¨ê±Æ÷1¤×÷·½ê½2
- SCON = 0x50; // ′®¿ú1¤×÷·½ê½1£¬ÔêDí½óêÕ
- TH1 = 0xFA;
- TL1 = TH1;
- PCON = 0x80; //2¨ìØÂê±¶Ôö
- EA = 1;
- ES = 1;
- TR1 = 1;
- }
- void SendOneByte(unsigned char c)
- {
- SBUF = c;
- while(!TI);
- TI = 0;
- }
- void main(void)
- {
- InitUART();
- if(rec_buf[4]==table1[4])
- {
- for(i=0;str1[i]!='\0';i++)
- {
- SendOneByte(str1[i]);
- }
- }
- else if(rec_buf[4]==table2[4])
- {
- for(i=0;str2[i]!='\0';i++)
- {
- SendOneByte(str2[i]);
- }
- }
- else if(rec_buf[4]==table3[4])
- {
- for(i=0;str3[i]!='\0';i++)
- {
- SendOneByte(str3[i]);
- }
- }
- else
- {
- for(i=0;str4[i]!='\0';i++)
- {
- SendOneByte(str4[i]);
- }
- }
- while(1)
- {
- }
- }
- void UARTInterrupt(void) interrupt 4
- {
- int j;
- if(RI)
- {
- for(j=0;j<4;j++ )
- rec_buf[j]=SBUF;
- RI = 0;
- }
- else
- TI = 0;
- }
復制代碼 |