蓝桥杯单片机定时器学习

矩阵键盘学习过了,该轮到定时器和中断程序设计了

首先我来说一下51单片机的定时器的工作原理

TMOD : 控制定时器的工作方式。8个bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。因为定时器有4种工作方式;TMOD = 0x00(工作方式0),TMOD = 0x01(工作方式0),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。以上是控制低4位的,所以是对应着T0。

TR0:T0定时器 使能开关,TR0 = 1,开始工作; =0停止工作。

ET0:T0定时器中断开关,定时时间一到,就会跑去中断程序。ET0=1,中断使能,=0失能。

EA : 中断总开关,你可以想象成电路的总电闸,EA=1,中断使能; =0,中断失能。

TH0,TL0 : T0定时器计数寄存器,组成16位的计数,0x0000–0xFFFF(0–65535),只要TH0TL0=0xFFFF(65535),程序就会跑去中断程序,在中断程序中,我们要重新给TH0,TL0重新赋值的。


以上是蓝桥杯官网单片机组有资料包里面的内容,了解以上内容我们才能编写程序实现定时器
总结要点TMOD 8位是定时器的工作方式 前四位是T1 后四位是T0 四位的不同状态有不一样的方式
EA是总开关,TR0是定时器的开关,TH0,TL0是计数的储存器,16位,也就是0-65535,溢出就是归零并发生一次中断,所以可以利用这个实现中断,也就是设置TH0,TL0的值

中断不是直接程序停止,而是停下目前的指令,去处理另一个指令,然后返回来接着执行

假如说,我们定时50毫秒,TH0,TL0对应着什么值呢? 上面我们说了,TH0,TL0,组成的16位计数器计数范围是 0—65535 。50ms = 50 000us,我们只要让 TH0 TL0 从(65535 - 500

### 蓝桥杯单片机定时器与数码管应用 #### 定时器工作原理及其寄存器设置 在蓝桥杯竞赛中,对于单片机而言,定时器是一个非常重要的组件。通过控制寄存器`TCON`可以实现对定时器启动、停止的操作,并能检测到定时器是否发生溢出或者触发了中断事件[^1]。而另一个关键寄存器`TMOD`则决定了定时器的工作方式——既可以作为时间间隔测量工具也可以用于外部脉冲计数。 为了更精确地掌握时间流逝,在某些应用场景下可能还会涉及到分频的概念;比如当采用12分频模式时,意味着每经过12个机器周期才会计入一次增量操作,这有助于提高测量精度并简化后续的数据处理过程。 #### 数码管显示机制概述 数码管是一种常见的七段式发光二极管显示器,广泛应用于各种电子产品之中。为了让其能够正常工作并与其它外设协调运作(如LED),通常需要合理规划I/O端口分配策略来避免潜在冲突问题的发生[^2]。具体来说就是确保不同类型的输出信号之间不会相互干扰影响各自功能表现。 #### 示例代码展示 下面给出一段基于上述理论基础构建起来的简单程序片段,该例子展示了如何利用定时器配合软件延时方法完成动态扫描刷新多位数码管上的数值: ```c #include <reg52.h> sbit D0=P2^0; //定义P2.0-P2.7为8位数据总线接口连接至数码管A-G及DP点段选脚 sbit D1=P2^1; //...省略其他D2-D7定义... void delay(unsigned int i){ while(i--); } void main(){ unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99}; //预置要显示字符对应编码表 P0=table[0]; //初始状态下先让第一位显示出'0' TR0=1; //开启Timer0开始计时 while(1){ TH0=(65536-5000)/256; TL0=(65536-5000)%256;//设定重装载初值以获得约5ms延迟 TF0=0; //清除TF标志位准备新一轮计数 if(TF0==1){ //判断是否达到预定毫秒级延时期间 for(int j=0;j<5;j++){ P0=table[j]; delay(11); //适当微调此参数可改变亮度强弱程度 } } } } ``` 这段代码实现了基本的时间分割多路复用技术,使得多个独立工作的元件可以在同一时间内共享有限数量的物理引脚资源而不至于造成混乱局面。值得注意的是这里仅提供了一个较为通用框架结构供参考学习之用,在实际参赛过程中还需要针对特定题目要求做进一步修改完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值