本次笔记包含两个方面:
1.只是控制LED的亮灭,不返回数值
2.控制LED的亮灭,并返回数值
看了几讲的视频,都是在讲串口的方式1。其他的还没接触,这里也只用串口的方式1实现这两个功能。串口里面需要计算的地方是根据所要使用的波特率求定时器的初始值。定时器使用的是方式2,可以自动装初始值,避免赋值语句装初始值时出现误差。
以9800bps,定时器使用方式2,串口使用方式1,晶振波特率为 11.0592MHZ,求TH1跟TL1的值。
方式1的波特率 = (2^SMOD/32)xT1溢出率。单片机复位后,电源管理寄存器PCON全部清零,SMOD作为其中一位自然也清零。
波特率已经知道了。这样就剩下T1溢出率了。
假设初值为X,则定时器每次计256-X个数溢出一次(定时器为8位,最大为255 。256时发生溢出)。每计一个数的时间为一个机器周期,机器周期 = T时钟周期 X 12 。于是溢出的时间为 = 个数X 每个时间 = ( 256 - X) * 12/Fosc . 那么基础率就是溢出时间的倒数。
于是结合公式“方式1的波特率 = (2^SMOD/32)xT1溢出率”,式子可以总结为:
9600 = 2^0 /32 * Fosc / (256 - X)*12 带入全部已知数据得到 9600 = 2^0 /32 * 11059200/ (256 - X)*12 =====》》》》 求得的X为: 253 .
在此基础上,如果把SMOD 设为1 ,则 求得波特率为 :
波特率 =