51模块_定时器与中断

定时器 寄存器相关

表 ① 定时具体值
名称描述SFR地址
TH0定时器 0 高字节8CH
TL0定时器 0 低字节8AH
TH1定时器 1 高字节8DH
TL1定时器 1 低字节8BH
表 ② TCON-定时器/计数器控制寄存器的位分配(地址:88H)

可位寻址;复位值:0x00;复位源:任何复位

76543210
符号TF1TR1TF0TR0IE1IT1IE0IT0
表 2.1 TCON-位描述
符号描述
7TF1定时器1溢出标志:一旦定时器1发生溢出时硬件置1,它不会对定时器是否继续运行产生任何影响。
清零有两种方式:软件清零,或者进入定时器中断时硬件清零。
6TR1定时1运行控制位。
软件置位/清零来进行启动/关闭定时器
5TF0定时器0溢出标志。一旦定时器0发生溢出时硬件置1,它不会对定时器是否继续运行产生任何影响。
清零有两种方式:软件清零,或者进入定时器中断时硬件清零。
4TR0定时1运行控制位。
软件置位/清零来进行启动/关闭定时器
3IE1
2IT1
1IE0
0IT0
表 ③ TMOD–定时器方式控制寄存器的位分配(地址 89H)

不可位寻址;复位值:0x00;复位源:任何复位

76543210
符号GATE
(T1)
C/T
(T1)
M1
(T1)
M0
(T1)
GATE
(T0)
C/T
(T0)
M1
(T0)
M0
(T0)
表 3.1 TMOD-位描述
符号描述
7 / 4GATE该位被置1时为门控位,仅当’INTx’脚为高,且’TRx’控制位被置1时使能定时器’x’,定时器开始计时;
当该位被清0时,只要’TRx’位被置1,定时器x就使能开始计时,不受到单片机引脚’INTx’外部信号的干扰,常用来测量外部信号脉冲宽度。
这是定时器一个额外功能,即GATE为1时,定时器需要TRx和外部中断INTx同时启用才运行。
6 / 3C/T定时器或计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置1用作计数器功能。
M1M0工作模式描述
000THn的8位和TLn的5位组成一个13位定时器,
兼容8048单片机的13位定时器
011THn和TLn组成一个16位的定时器
1028位自动重装模式,定时器溢出后THn重装到TLn中
113禁用定时器1,定时器0变成2个8位定时器

以上这4种模式的配置,
①、模式 0 是为了兼容老的8048单片机而设的,现在的51几乎不会用到这种模式;

②、模式 1 就是THn和TLn组成了一个16位的定时器,取值范围是0到65535,
       溢出后,只要不对THn和TLn重新赋值,则从0开始计数。

③、模式 2 的功能是自动装载,就是TLn溢出后,TFn就直接置1了,并且THn的值直接赋给TLn,然后TLn从新赋值的这个数字开始计数。

④、模式 3 他的功能模式2完全可以取代,所以基本上也是不用

定时器程序应用

使用步骤

第一步:设置特殊功能寄存器TMOD,配置好工作模式;

第二步:设置计数寄存器TH0和TL0的初值;

第三步:设置TCON,通过打开TR0位来让定时器开始计数。

第四步:判断TCON寄存器的TF0位,监测定时器溢出情况。

如何用定时器定时时间。
我们的晶振是11.0592M,时钟周期就是1/11059200,机器周期就是12/11059200,我们假如要定时20ms,就是0.02秒,要经过x个机器周期得到0.02秒,我们来算一下x*12/11059200=0.02,得到x= 18432。那么我们现在16位的定时器溢出值是65536,我们可以这样,先给TH0和TL0一个初值,让他们经过18432个机器周期后刚好溢出,溢出后我们可以通过检测TF0位得知,就刚好是0.02秒。
这个初值y = 65536 - 18432 = 47104,转成16进制就是0xB800,那么就是TH0 = 0xB8,TL0 = 0x00。
那0.02秒我们已经定时出来了,细心的同学会发现,我们如果初值直接给一个0x0000,一直到65536溢出,定时器定时值最大也就是71ms左右,那么我们想定时更长时间怎么办呢?用你小学学过的逻辑,倍数关系就可以解决此问题。

中断寄存器

表 ① 中断使能

不可位寻址;复位值:0x00;复位源:任何复位

76543210
符号EAET2ESET1EX1ET0EX0
表 1.1 IE-位描述
符号描述
7EA总中断使能位,相当于总开关
6
5ET2定时器2中断使能
4ES串口中断使能
3ET1定时器1溢出中断使能
2EX1外部中断1使能
1ET0定时器0溢出中断使能
0EX0外部中断0使能
表 ② 中断函数
描述中断标志中断使能中断使能中断使能
外部中断0IE0EX00003H1(最高)
T0中断TF0ET0000BH2
外部中断1IE1EX10013H3
T1中断TF1ET1001BH4
UART中断TI/RIES0023H5
T2中断TF2/EXF2ET2002BH6

这个表格同样不需要大家记住,需要的时候过来查就可以了。我们现在看第二行T0中断,它的中断标志是TF0,也就是当TF0变成1的时候,就会触发中断。而在interrupt后边的数字x的计算方法是 x*8+3=向量地址,T0的向量地址是000BH,那么我们可以求得x的值是1。这样这个中断函数名字我们就彻底明白了。

表 ③ 中断优先级
  • 可位寻址;复位值:0x00;复位源:任何复位*
76543210
符号PT2PSPT1PX1PT0PX0
表 1.1 IP-位描述
符号描述
7
6
5PT2定时器2中断优先级控制位
4PS串口中断优先级控制位
3PT1定时器1中断优先级控制位
2PX1外部中断1中断优先级控制位
1PT0定时器0…
0PX0外部中断0…
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值