打印
[51单片机]

定时器赋初值后的时间问题

[复制链接]
2293|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 一叶倾城wwq 于 2018-12-25 20:05 编辑

12M,定时器16位重装,这样赋值后:TH1 = (65536-95)/256;TL1 = (65536-95)%256; 取反IO口,出现如下图所示波形,明显的定时时间不准,想模拟一个9600波特率,请问这样的情况该如何调整初值或者其他方法解决?        

定时器取反IO口时间问题、.png (19.75 KB )

定时器取反IO口时间问题、.png

相关帖子

沙发
airwill| | 2018-12-25 22:27 | 只看该作者
确实有这个问题,  如果要精确地控制时间, 你需要计算并扣除中断响应, 寄存器压栈和写定时寄存器需要的时间.

使用特权

评论回复
板凳
一叶倾城wwq|  楼主 | 2018-12-26 09:27 | 只看该作者
airwill 发表于 2018-12-25 22:27
确实有这个问题,  如果要精确地控制时间, 你需要计算并扣除中断响应, 寄存器压栈和写定时寄存器需要的时间. ...

中断压栈和写定时器的时间估计也就几个us吧,占用时间长点和产生多余代码的就只有这个计算了,或者我换成十六进制直接赋值高低寄存器要好点,现在调了下初值串口也能识别,但是波形也不是准确的104us,担心存在隐患啊

使用特权

评论回复
地板
vrgood| | 2018-12-26 10:25 | 只看该作者
最好用8位自动重装,晶振用11.0592M。

使用特权

评论回复
5
mcu51hi2c| | 2018-12-26 10:43 | 只看该作者
这个问题很简单的,9600bsp的高低电平的时间是104.16us,要发数据的时候,关闭中断EA = 0;同时打开定时器,不打开定时器中断,通过计算TH1,TL1的个数来达到你你定时的104.16us

使用特权

评论回复
6
一叶倾城wwq|  楼主 | 2018-12-26 11:30 | 只看该作者
vrgood 发表于 2018-12-26 10:25
最好用8位自动重装,晶振用11.0592M。

重装8位可以试下,只是没有外部晶振,内部时钟只能选12M和24M

使用特权

评论回复
7
airwill| | 2018-12-26 19:55 | 只看该作者
一叶倾城wwq 发表于 2018-12-26 09:27
中断压栈和写定时器的时间估计也就几个us吧,占用时间长点和产生多余代码的就只有这个计算了,或者我换成 ...

如果担心隐患, 可以用模式2, 自动加载. 不过只能用 8 位数据, 太慢的速度会受限了

使用特权

评论回复
8
ririri忠实粉丝| | 2018-12-27 00:25 | 只看该作者
用的什么单片机也不说

使用特权

评论回复
9
一叶倾城wwq|  楼主 | 2018-12-27 08:41 | 只看该作者
mcu51hi2c 发表于 2018-12-26 10:43
这个问题很简单的,9600bsp的高低电平的时间是104.16us,要发数据的时候,关闭中断EA = 0;同时打开定时器, ...

发数据时,关闭EA?再开定时器?总开关都关了,还如何开定时器呢?

使用特权

评论回复
10
一叶倾城wwq|  楼主 | 2018-12-27 08:42 | 只看该作者
airwill 发表于 2018-12-26 19:55
如果担心隐患, 可以用模式2, 自动加载. 不过只能用 8 位数据, 太慢的速度会受限了 ...

8位自动加载有什么好处吗?

使用特权

评论回复
11
一叶倾城wwq|  楼主 | 2018-12-27 08:43 | 只看该作者
ririri忠实粉丝 发表于 2018-12-27 00:25
用的什么单片机也不说

你看定时器的赋值公式也知道是51,牌子的话是赛元

使用特权

评论回复
12
mcu51hi2c| | 2018-12-27 10:10 | 只看该作者
一叶倾城wwq 发表于 2018-12-27 08:41
发数据时,关闭EA?再开定时器?总开关都关了,还如何开定时器呢?

关闭EA,可以用死循环的方式等待数据发送完成,不一定非得进中断去处理数据的

使用特权

评论回复
13
一叶倾城wwq|  楼主 | 2018-12-27 11:28 | 只看该作者
mcu51hi2c 发表于 2018-12-27 10:10
关闭EA,可以用死循环的方式等待数据发送完成,不一定非得进中断去处理数据的 ...

在主函数发?现在在中断已经弄好和PC通信了,再多测试下,若通信有问题再试试您的这种方法

使用特权

评论回复
14
airwill| | 2018-12-27 20:40 | 只看该作者
一叶倾城wwq 发表于 2018-12-27 08:42
8位自动加载有什么好处吗?

8位自动加载,   溢出时定时器值自动加载初值, 就不会有中断和寄存器写引起的延迟了

使用特权

评论回复
15
马涛010| | 2018-12-28 09:27 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

1341

帖子

11

粉丝