STC89C5J6单片机串口波特率备忘(4800,9600)
而如果你使用的是52及其以上的单片机(例如STC89C52),不用换跟换晶振也可以实现9600波特率。
51单片机通常由TIMER1来产生波特率,TIMER1的频率是晶振的1/12,也就是1M。它的频率太低导致它不能实现9600波特率。
52及以上的单片机提供了TIMER2,可作为波特率发器。且它作为波特率发生器时,它的频率是晶振的1/2,也就是6M。
下面给出串口初始化函数:
void Uart0_Init()
{
RCAP2L=0xD9;//9600波特率对应 FFD9,低位为D9
RCAP2H=0xFF;//高位为FF
T2CON=0x34;//RCLK、TCLK、TR2置1
SCON=0x50;//串口工作模式1,接收使能
ES=1;//打开接收中断
EA=1;//打开总中断
}
5
中断函数:
void Uart0_Ist() interrupt 4 //中断函数
{
if(RI)
{
RI= 0;
//Do whatever you want;
}
if(TI)
{
TI = 0;
//Do whatever you want;
}
}
----------------------
4800波特率:
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
暂无相关信息