[技术问答]

N76E885AT28芯片定时器问题

[复制链接]
832|18
手机看帖
扫描二维码
随时随地手机跟帖
mexie|  楼主 | 2019-9-9 10:03 | 显示全部楼层 |阅读模式
N76E885AT28芯片定时器问题:想知道我定义的定时器中断时间10ms 有什么问题?实际的时间是小于10ms了。
#define        T0H_DEF        0xB8  
#define        T0L_DEF 0x00

void TIMER0_init(void)//¶¨Ê±Æ÷/¼ÆÊýÆ÷0³õʼ»¯
{                
        TH0 = T0H_DEF;
        TL0 = T0L_DEF;
       
        TMOD |= 0x01;  //16λ¶¨Ê±Æ÷/¼ÆÊýÆ÷   
        TCON |= 0x10;  // TF1  TR1 TF0 TR0   IE1  IT1 IE0 IT0 //¿ªÆôTR0
        ET0 = 1;            //´ò¿ª¶¨Ê±Æ÷0ÖжÏÔÊÐí
}

使用特权

评论回复
mexie|  楼主 | 2019-9-9 10:05 | 显示全部楼层
频率22.118Mhz

使用特权

评论回复
jiekou001| | 2019-9-9 10:13 | 显示全部楼层
没有计算对吧

使用特权

评论回复
yiyigirl2014| | 2019-9-11 00:28 | 显示全部楼层
解决了没,实际上相差多少呢

使用特权

评论回复
jasontu| | 2019-9-11 08:12 | 显示全部楼层
mode 0, 下面帶公式算
u8TH0_Tmp = (8192-TH0_INIT)/32;
u8TL0_Tmp = (8192-TL0_INIT)%32;   

中斷裡面不要作其它的動作,只要重寫載入值。

使用特权

评论回复
ayb_ice| | 2019-9-11 10:29 | 显示全部楼层
jasontu 发表于 2019-9-11 08:12
mode 0, 下面帶公式算
u8TH0_Tmp = (8192-TH0_INIT)/32;
u8TL0_Tmp = (8192-TL0_INIT)%32;   

不做其它事情有意义吗

只能尽量少做点事

使用特权

评论回复
重岀江湖3| | 2019-9-11 11:50 | 显示全部楼层
点赞

使用特权

评论回复
heisexingqisi| | 2019-9-15 23:53 | 显示全部楼层
尽量少做,主要做一些标记,然后主函数根据标记分条处理。

使用特权

评论回复
mintspring| | 2019-9-16 00:21 | 显示全部楼层
整个时钟链要搞对。

使用特权

评论回复
杨德金| | 2020-2-21 21:32 | 显示全部楼层
学习学习

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:12 | 显示全部楼层
没有计算对。

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:14 | 显示全部楼层
N76E885 为高速 1T 8051 单片机 系列,其特点为 提供超越 工业温度规格 ( - 40 ~ 105 ℃ ) ,宽电压工作范围 2.4V 至 5.5V 、 22.1184 MHz 内 建 RC 晶振 ( 全温全压 2 % 精确度 ) 、并内建 Data Flash 、 欠压检测 、 高抗干扰能力 ( 8 kV ESD / 4 kV EFT ) 、 支持在线系统编程 ( ISP ) 、支持应用中在线更新 ( IAP ) 和在线电路编程 ( ICP ) , 提供 TSSOP28 和 TSSOP20 两种选择 。

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:25 | 显示全部楼层
本帖最后由 zhuotuzi 于 2020-2-22 16:34 编辑

你这个定义的错了,我查了一下资料,这个是1T的单片机,定时器0的模式1 是16位,向上计数,
通过计算如果达到10us,计数221个,的计数则初始值应该是0xff24=0xFFFF-221

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:35 | 显示全部楼层
而计数的最大值是65535,你算一下,如果达到10ms,你需要计数221,180‬个。这明显大于了65536.所以你一次是没法定时10ms

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:38 | 显示全部楼层
计数满才2.96ms

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:38 | 显示全部楼层
解决方法定时1ms,2ms,2.5ms
然后循环10次,5次,4次,这种对应关系实现延时10ms

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:39 | 显示全部楼层
ayb_ice 发表于 2019-9-11 10:29
不做其它事情有意义吗

只能尽量少做点事

这个是16位的定时器吧,看清楚了,这个是51内核的单片机啊。

使用特权

评论回复
zhuotuzi| | 2020-2-22 16:41 | 显示全部楼层
ayb_ice 发表于 2019-9-11 10:29
不做其它事情有意义吗

只能尽量少做点事

他说的是错的,他没看清楚,这个是1T的51单片机,16位的计数器。最大只能计数65536,按照楼主选的时钟只能计时2.96ms,所以肯定不能一次延时超过10ms,他可以在定时器里设置个变量,每次计时2ms,这样只需要5次中断就实现了10ms

使用特权

评论回复
杨德金| | 2020-3-11 19:51 | 显示全部楼层
谢谢 学习学习

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝