大家好,我在用STC的51单片机做一个关于串行通信总线的程序,现在初步的想法是:让单片机接收3个字节数据,然后判断前两个是否为0x00,0x55,如果是,则根据第三个字节的内容执行相应的功能。
现在我只进行到第一步,接收3个字节(使用串口中断接收)然后进行处理,不知为什么,从上位机发过来什么数据单片机都没有反应,而使能串口中断程序和LIN_bus子程序里被屏蔽的语句(接收一个字节便返回一个字节)就没问题,这说明串口设置是对的,请大家帮我看看串口中断程序和LIN_bus子程序里面的处理方法是否得当,问题出在哪儿?
#include "STC12C4052AD.h"
unsigned char LIN_step=1; unsigned char i=0; unsigned char Command[2];
void serial_initial() { TL1=0xfD; /*晶振为11.0592MHz时,设置波特率为9600bps*/ TH1=0xfD; /*晶振为11.0592MHz时,设置波特率为9600bps*/ TMOD=0x20; /*定时器1工作于模式2,8位自动重装入定时器*/ EA=1; /*使能总中断*/ ES=1; /*使能串口中断*/ ET1=0; /*禁止定时器1中断*/ SCON=0x50; /*UART工作于方式1,8位波特率可变串口,允许接收*/ PCON=0x00; /*波特率不加倍*/ TR1=1; /*启动定时器1*/ }
LIN_bus() { switch(LIN_step) { case 2:{ if((Command[0]==0)&&(Command[1]==0x55)) SBUF=Command[2]; break; } default:break; } //SBUF=Command[0]; //LIN_step=1; }
void Rcv_INT(void) interrupt 4 { if(RI) { switch(LIN_step) { case 1:{ Command=SBUF; i++; if(i==3) { i=0; LIN_step=2; } break; } default:break; } //Command[0]=SBUF; //LIN_step=2; } RI=0; }
main() { serial_initial();
while(1) { LIN_bus(); }
} |