让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签: stc89c52
摘要: 本次笔记包含两个方面:1.只是控制LED的亮灭,不返回数值2.控制LED的亮灭,并返回数值看了几讲的视频,都是在讲串口的方式1。其他的还没接触,这里也只用串口的方式1实现这两个功能。串口里面需要计算的地方是根据所要使用的波特率求定时器的初始值。定时器使用的是方式2,可以自动装初始值,避免赋值语句装初始值时出现误差。以9800bps,定时器使用方式2,串口使用方式1,晶振波特率为 11.0592MH
本次笔记包含两个方面:
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 ,则 求得波特率为 :
波特率 = (2^1/32) * 11059200 / (256 - 253 ) = 2 * [ 1/32 * 11059200 / (256 - 253)] = 2 * 9600 = 19200 。即变为原来的两倍。
如果把晶振换成12MHZ再求初值,求得的X为: 252.744792…… 无穷小数。这样就会产生误差。以前一直感觉整数的晶振挺好,现在才知道为什么会有11.0592MHZ这种晶振的存在了,。
这样计算得到了初值,下面贴代码。
只是控制LED的亮灭,不返回数值
实现这个又分为查询和中断两种方法。
A。先用查询。感觉叫判断更好些,因为是用if判断来实现的
#include
下一篇:51单片机的5个中断源
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |