- 14
- 0
- 约 8页
- 2016-12-09 发布于贵州
- 举报
51单片机门零基础2.5串口发数
串口发数
串口发数的原理
在模拟外部晶振为11.0592 MHz、波特率为9 600 bps的情况下,设置常量BAUD为0xFE80,并将该常量赋值到TL、TH两个寄存器中,实现定时。每到相应时间触发定时中断程序,将外部引脚的状态读入并存入预先设定的数组中,完成模拟串口读入字节的任务。
图 2.51所示。由于STC15104E没有串口,因而必须利用定时器模拟串口。其方法是,定义一个常量,根据所需要的波特率对该常量赋值,并将该常量值赋到定时所用的寄存器中。2.51 常用波特率配置
对于BAUD的具体算法是BAUD65536-SYSclk/3/BAUDRATE/M1T:M1;12T:M12。65536是定时器T0的溢出值,因为T0定时器为16位定时器,所以溢出值为2^16,SYSclk为系统时钟频率11.0592MHZ,BAUDRATE为波特率9600bps,而我们使用的是单周期M1,所以我们要像定时器里存入0xfe80。
对于BAUD的算法,上一节讲到定时器中断的原理,定时器计时65536位的时候就会溢出,然后进入中断。而我们要模拟的串口波特率为9600bps,我们想要每一位执行的时间T1就是1/9600s,而系统晶振震荡一次读一位的时间T2为1/11.0592us(单周期),那么我们要读的位数就为T1/T2。那算法公式中的3是什么呢,这是因为我们每读一位要抽样三次来检查读取
原创力文档

文档评论(0)