用伟福仿真器,晶振12MHz,波特率2400bps。
void serial_Init(void) //模式1,8位自动重装,2400bps,12MHz
{
SCON=0x50;//串口工作方式为1,SCON允许串口接收位REN置1
TMOD=0x20;//工作方式控制寄存器TMOD,控制定时器1工作在模式2,8位自动重装
TH1=0xF3; //定时计数器1高8位
TL1=0xF3; //定时计数器1低8位,设置T1的溢出率
TR1=1;//定时控制寄存器TCON中的运行控制位,置1表示计数器1启动工作
ES=1;//打开串口中断
EA=1;//允许中断
RI=0;
TI=0;
}
uchar data Send_string=0;//接收数据完成标志,1表示完成
uchar data len=0;
uchar data N;
uchar data b;
sbit Pin=P0^6;//管脚P0^6用作通讯显示
com_interrupt(void) interrupt 4 //串口中断子程序
{
Pin=0;//通讯指示灯亮
if(RI)
{
RI = 0;
b=SBUF;
if((b==0xBB)&&(len==0))//接收开始符为0xBB的数据
{
temp[0]=b;//将开始符赋给temp[0]
}
else//继续接收开始符0xBB后的数据
{
len++;
temp[len]=b;
if(len>6)
{
if((b==0xDD)&&(len>=temp[6]+8))//收到结束符且数据长度为 //(temp[6]+8)时,结束接收
{
N=len;//传递数据长度,数据长度为(N+1)
len=0;//置0,便于下一次接收
Send_string=1;//接收完成标志
}
}
}
}
Pin=1;//通讯指示灯灭
}
当以16进制发送:BB 00 00 00 01 21 05 01 00 77 55 00 01 AF DD时,接收刚开始始终是22 FF FF FD BD F5 FD FF 11 55 FF FD A1 11 07,后来变成22 FF FF FD BD F5 FD FF 11 55 FF FD A1 11 。本人初学51C语言,请教高手真是为什么呢
谢谢大家的热心帮忙,问题解决了