Fosc=11.0592MHZ,串口方式3,波特率4800,允许中断,允许接收,写出初始化程序

Fosc=11.0592MHZ,串口方式3,波特率4800,允许中断,允许接收,写出初始化程序,第1张

void init()

{

     TMOD=0x20//T1计时器启动关闭仅仅受TR1控制;定时器1工作方式2:M1MO=10 8位初值自动装填

     TH1=0xfa

     TL1=oxfa

     /*初值计算:

        !溢出率T1=11059200/((256-初值)*12 纤困)

        !串口方式3:波特率=(2^SMOD/32)*T1 溢出率

         由于电源管理寄存器PCON复位时全部清0  SMOD初始毁嫌念=0

         4800=(2^0/32)*(11059200/(256-初值)*12)

         所以解得 初值= 250=0xfa       

     */   

     TR1=1//启动T1计时器

     REN=1//允许串口接收

     SM0=0//SM0SM1=01  10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)

     SM1=1

     EA=1//打开全局中断

     ES=1//打开串口中断

}

我备注应该写的够详细了,希望对你有用者迅

使SMOD=1的时候是指将波特率2400加倍,最终加倍后的为波特率4800,因此通信速率增大

程序波特率设定4800并且使SMOD=0时毁首蚂,这时候应该使用波特率2400进行通信,通信速率降低。

当芹闹单片机晶振使用12MHZ的时候,串口通信会有误差,使用SMOD加倍会减少误纤埋差。

--------网上搜不到答案,所以查询资料后回答,供后人参考

void UartInit(void) //4800bps@11.0592MHz

{

PCON &= 0x7f //波特率不倍速

SCON = 0x50 //8位数据,可变波特率

TMOD &= 0x0f //清除定时器1模式位

TMOD |= 0x20 //设定定时器1为8位自动重装笑凯方式

TL1 = 0xFA //设定定时初值

TH1 = 0xFA //设定定时器梁升宴重装值

ET1 = 0 //禁止定时器1中断

TR1 = 1 //启动定时橡银器1

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12499288.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存