串口调试
精度问题:
如果使用11.059MHz的晶振,串口调试时使用各种波特率的误差都极其小,但如果使用12MHz的晶振,只有在波特率为2400时误差较小,其他情况都误差太大而不能使用。
串口在12Mhz晶振下的典型案例:
#include<reg52.h>
unsigned char flag,a;
int temp=0x78;
void main()
{
TMOD=0x20; //设定T1定时器工作方式二
TH1=0xf3; //波特率2400
TL1=0xf3;
TR1=1; //启动T1定时器
REN=1; //允许串口接收
SM0=0;
SM1=1; //工作方式1,波特率可变,由定时器0控制
EA=1; //开串口中断
ES=1;// 开总中断
while(1)
{
/*while(!RI)
RI=0;
P1=0X00;*///控制IO口
if(flag==1)
{
ES=0; //关中断
flag=0;
SBUF=temp;//发送到串口助手 (接收缓冲区)
while(!TI); //发完之后TI为1
TI=0;
ES=1; //开中断
}
}
}
void ser() interrupt 4
{
RI=0; //RI接收中断标志位,清0取消中断申请
// P1=SBUF;//控制单片机
a=SBUF; //(发送缓冲区)
flag=1;
}
驾云归来