C51单片机计时器中断的学习

(29条消息) 51单片机定时器TMOD与TCON、SCON_51单片机的tmod和tcon_EmbededCoder的博客-CSDN博客

1.周期浅析

单片机中有两种周期,一种是时钟周期,另一种是机器周期,对于此单片机来说,时钟周期即为1/12*10-6 s,即为1/12 us。机器周期的大小一般是12个时钟周期,但是也有更快、更高效的单片机,它的机器周期更小。

2.计时器

注意:计时器即可以进行计时,也可以进行计数,但是两种功能不能在同一个计时器上使用!

计时器,顾名思义,就是用来计算时间的。它通过特定的计算以及程序的结合来实现时间的准确计算。

51单片机中断级别

中断源

默认中断级别

序号

INT0---外部中断0

最高

0

T0---定时器/计数器0中断

第2

1

INT1---外部中断1

第3

2

T1----定时器/计数器1中断

第4

3

TX/RX---串行口中断

第5

4

T2---定时器/计数器2中断

第6

5

2.1 TMOD定时器/计数器模式控制寄存器

C51单片机一般设置有两个定时器,分别为T0和T1,通过TMOD指令来控制。TMOD指令是一个八位二进制的数,每一位的二进制有不同的含义。

 

上图分可以直观的看到每一位对应的功能。

因为C51单片机有两个定时器,所以TMOD的D0~D3(T0)控制一个定时器,D4~D7(T1)控制另一个定时器。两个定时器的用法完全相同,因此只解释D0~D3(T0)所指定的定时器。

我们只能一次性定义:TMOD=0x(XX)将相应的二进制转化成16进制进行统一设置

D3(GATE):控制定时器打开的开关。如果此位为0,我们只需要在TCON中进行设置便可以使用定时器,如果此位为1,我们不仅需要在TCON中进行设置,而且还需要对外部引脚进行设置才能使用。

D2(C/T):定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。

M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。

 

 

M1和M0共同控制计时器的模式一般设置为01,采用16进制计数器

2.2 TCON定时器控制寄存器

定时器控制寄存器,作用是控制定时器的启、停,标志定时器溢出和中断情况。

 

TF0/TF1(D5/D7):TF1=1表示T1有中断产生。(判断是否有中断产生,如果有则此位变为1,一般需要编写程序使其复位,以便下一次继续使用)

TR0/TR1(D4、D6):TR1=1表示T1开始运行。(单片机中T0引脚,需要高低电平的驱动)

IE0/IE1(D1/D3):IE0/IE1(D1/D3)=1表示INT0/INT1有中断产生。

IT0/IT1(D0/D2):IT0/IT1(D0/D2)=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。(IE位和IT位是判断外部中断的,即如果芯片相应外部引脚接收到IT设置的对应脉冲信号,便会将IE位置为1,一般需要编写程序使其复位,以便下一次继续使用)

2.3中断允许寄存器IE

 

EA(D7):整体中断允许位;EA=1允许中断。(相当于总开关此位为1才可以使用中断的功能)

(D6):此位不论置1还是0不产生任何效果。

ET2(D5):T2中断允许位;ET2=1允许中断(S52才有,一般同D6)。

ES(D4):串行中断允许位;ES=1允许中断。

ET1(D3):T1中断允许位;ET1=1允许中断。

EX1(D2):INT1中断允许位;EX1=1允许中断。

ET0(D1):T0中断允许位;ET0=1允许中断。

EX0(D0):INT0中断允许位;EX0=1允许中断。

只有打开总开关(EA)的同时打开相应的分开关(ET2,ES,ET1,EX1,ET0,EX0),对应中断才可以使用。

2.4位定时器设定触发时间

(只对T0计时器进行说明,T1与其同理)

M1  M0

0     0 方式0时,N=13(此为TH为8位,TL为5位)

0     1 方式1时,N=16(此为TH为8位,TL为8位)

1 0 方式2时,N=8(此为TH为8位,TL为0位)

1     1 方式3时,N=8(此为TH为8位,TL为8位,只适用于T0,且T0被分成两个独立的8位计数器TH与TL)

注:一般使用仅使用工作方式1。

根据定时时间和工作方式,通过公式:定时时间T=(2的N次方-X)12/单片机晶振频率,计算出时间常数X,把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了,也可以直接将一个十进制数大于256的部分直接赋给TH0,小于256的部分直接赋给TL0。

例如:

 (设置T0每50ms触发一次,仅针对方式1)

  TH0=(65536-50000)/256

  TL0=(65536-50000)%256  或

TH0=0x3c

TL0=0x80

总结定时器的操作步骤如下:

1.选择工作方式(设置M0,M1的值)

2.选择控制方式GATE(为0是只要软件设定好参数即可,为1则需要软件设定参数,且定时器/计数器的中断引脚需要为高电平)

3.确定定时器的工作模式,是定时模式还是计数模式(C/T)

4.给定时器设初值(设置THX与TLX)

5.开启定时器中断(设置ET0或ET1)

6.开启总中断(设置EA的值)

7.定时器/计数器的选择T0/T1(设置TR1或TR0的值)

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
300个C51单片机设计proteus仿真源码软件源码: 100000秒以内的计时程序 10秒的秒表 12864LCD图形滚动演示 128X64LED 160128LCD图文演示 1602字符液晶滚动演示程序 1602液晶显示的DS1302实时时钟 16×16点阵(滚动显示) 16×16点阵2(滚动显示) 2io5键盘模拟音量数码管显示 2×20串行字符液晶演示 32x16汉字 44行列键盘 485全双工通信 4×4键盘矩阵控制条形LED显示 4个独立式按键控制LED开关 4个独立式按键控制LED移位 4只数码管滚动显示0~3 555可调PWM发生器 555的应用 6264扩展内存 6个16×16点阵 74HC154译码器应用 74HC595 74HC595串入并出芯片应用 74LS138译码器应用 74LS148扩展中断 8051双机通信简例 8255并行口扩展实例 89C51PWM 8x8LED汉字显示 8x8点阵做的贪吃蛇游戏 8×8LED点阵屏显示数字 8只数码管同时显示不同字符 8只数码管显示多个不同字符 8只数码管滚动显示8~F 8只数码管滚动显示单个数字 8只数码管滚动显示数字串 8只数码管闪烁显示 8通道自动温度检测系统仿真(含原程序) ADC0808 PWM实验 ADC0809模数转换与显示 ADC0832模数转换与显示 AT89C51对直流电动机的驱动 AVR_Uart BCD译码数码管显示数字 c51 可预设电压的数控电源(功能强大) clock Conter CPU控制的独立式键盘扫描实验 da、ad。液晶,传递函数模型综合应用的实例 DIY51式数控电源 DS1621温度传感器实验 ds18b20 DS18B20温度传感器实验 DS18B20温度检测及其液晶显示 HorseLight I2C IIC-24C04与数码管 IIC-24C04与蜂鸣器 INT0与INT1中断计数 INT0中断3位计数 INT0及INT1中断计数 INT0和INT1控制条形LED INT1中断5位计数 IO并行口直接驱动单个数码管 K1-K4 分组控制LED K1-K4 控制LED移位 K1-K4 控制数码管加减演示 K1-K4 控制数码管移位显示 K1-K4 键状态显示 key_lcd ks0108 液晶12864 LCD频率计仿真 LED代码查询V1[1].1 LED模拟交通灯 LED闪烁 M16_AN_Compare M16_EEPROM M16_Horse MAX7221控制数码管动态显示 my16key_c NT0中断控制LED NT0中断计数 NumberDisplay P3口流水灯 PCF8574 PCF8583+LCD1602 PCF8591模数与数模转换实验 proteus ADDC的练习程序 PWM PWMLED PWM控制LED的亮度仿真程序 PWM控制马达的方法 PWM波输出(可调) PWM电机正反转 pwm程序实例 PWM调温 RAM扩展练习 sscom32串口调试 TIMER0与TIMER1控制条形LED TIMER0控制LED二进制计数 TIMER0控制单只LED闪烁 TIMER0控制四只LED滚动闪烁 TIMER0控制流水灯 ULN2803 usart_t 《lcd1602仿真实例》 一个数控直流稳压电源 一个步进电机的仿真 一步一步教你51_PC串口通信 万能逻辑电路实验 三机通讯 串口仿真mcu_pc 串口方式1 串行数据转换为并行数据 交通灯 从左到右的流水灯 光藕隔离驱动电机 内部函数intrins.h应用举例 净水控制器仿真电路 刚做好的十个字的led屏模拟有程序 包含单片机寄存器的头文件 单只按键控制单只数码管滚动显示 单只数码管循环显示0-9 单只数码管循环显示0~F 单片机与PC机串口通讯仿真 单片机之间双向通信 单片机向PC发送数据 单片机向主机发送字符串 单片机接收PC发出的数据 单片机控制的电动自行车驱动系统 单片机数据发送程序 发一个用定时器做的PWM 基于1602+ds12b80+ds1302+音乐+电子书+流水灯的多功能电子表 基于ADC0832的数字电压表 基于AT24C02的多机通信 基于AT89C51+MAX7219的频率计 附带proteus仿真电路图 实际硬件电路测试通过 基于DS1302的日历时钟 基于yjwpm测试过的DS18B20仿真实例 多功能电子钟 多点温度测量 多路开关状态指示 大屏幕仿真 子电路做的一个H型电机驱动电路 字符串函数string.h应用举例 字符函数ctype.h应用举例 宏定义应用举例 定时器中断控制的独立式键盘扫描实验 定时器控制交通指示灯 定时器控制数码动态显示 定时器控制数码管动管显示 对I2C总线上挂接多个AT24C0

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值