c51两个定时器中断冲突_【单片机自学】4.定时器

1硬件连接

定时器是单片机内部的特殊功能模块。

在控制系统中,常常要求有一些实时时钟以实现定时或者延时控制,如定时中断、定时检测、定时扫描等等,也往往要求有计数器,对外部事件进行计数。

要实现定时或者延时功能,一般有三种方法:软件定时,不可编程硬件定时,可编程硬件定时。

软件定时——让软件循环执行一段程序,程序本身并无执行目的,而是通过执行程序延时固定的时间,也就是以前的程序中经常使用的延时程序。这种方法降低了cpu的利用率。

不可编程硬件定时——如外部芯片555 时基电路,通过外部阻容,达到一定的延时功能,改变阻容大小可以改变延时长度。这种定时器取决于硬件,设定好以后不能通过软件更改。

可编程定时器——这种定时器的定时值可以通过软件确定和修改,使用灵活便捷。

本节所讲的定时器为第三种,可编程定时器,51单片机中T0/T1为2个相同的16位定时/计数器。

定时/计数器的结构:

7a179c8d63508b833429fe3a269dd1cb.png
图 1 定时/计数器的结构

TCON控制寄存器:

f7b2f0dff65d20acbd54e4e12441ad79.png

TCON用于控制外部中断和定时/计数器启动和中断,低4位用于控制外部中断,高4位用于控制定时/计数器T0和T1。

TCON.0~TCON.3(IT0、IE0、IT1、IE1)均为外部中断相关位,详见外部中断。

TR0(TCON.4):定时/计数器T0运行控制位。TR0=1时,T0开始工作;TR0=0时,T0停止工作。TR0由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

TF0(TCON.5):定时/计数器T0溢出中断请求标志位。TF0=1时,申请进去定时器中断。T0计数溢出时由硬件自动置TF0为1。CPU响应中断后TF0由硬件自动清0。T0工作时,CPU可随时查询TF0的状态。所以,TF0可用作查询测试的标志。TF0也可以用软件置1或清0,同硬件置1或清0的效果一样。

TR1(TCON.6):定时/计数器T1运行控制位,其功能与TR0类同。

TF1(TCON.7):定时/计数器T1溢出中断请求标志位,其功能与TF0类同。

TMOD模式控制寄存器:

e4e89d7200723f5fe3fc8f1d0621ef7d.png

图 3 TMOD模式控制寄存器格式

TMOD用于设置定时/计数器的工

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基本的C51单片机带外部中断定时器中断的程序: ```c #include <reg52.h> // 头文件,包含单片机特有的寄存器定义 void delay_ms(unsigned int t) // 延时函数 { unsigned int i, j; for(i = 0; i < t; i++) { for(j = 0; j < 120; j++); } } void timer0_init() // 定时器0初始化函数 { TMOD |= 0x01; // 设置为16位定时器模式 TH0 = 0xFC; // 定时器初值,1ms定时 TL0 = 0x67; ET0 = 1; // 允许定时器0中断 TR0 = 1; // 启动定时器0 } void external_interrupt_init() // 外部中断初始化函数 { IT0 = 1; // P3.2设置为下降沿触发 EX0 = 1; // 允许外部中断0 EA = 1; // 开启总中断 } void timer0_handler() interrupt 1 // 定时器0中断处理函数 { TH0 = 0xFC; // 定时器初值,1ms定时 TL0 = 0x67; // 在这里编写需要执行的定时任务代码 } void external_interrupt_handler() interrupt 0 // 外部中断0中断处理函数 { // 在这里编写需要执行的外部中断任务代码 } void main() { timer0_init(); // 定时器0初始化 external_interrupt_init(); // 外部中断初始化 while(1) // 无限循环 { // 在这里编写需要执行的主循环任务代码 } } ``` 这个程序中使用了一个定时器中断和一个外部中断0,定时器中断用于定时执行某些任务,外部中断0用于响应外部事件。程序中使用了定时器0来实现定时中断,需要根据具体的需求和硬件连接情况进行相应的设置。同时,需要在程序中编写定时器0和外部中断0的中断处理函数,以处理相应的中断事件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值