0、CPU时序知识
一个机器周期是12个振荡周期,换算成频率的话,是晶振频率的1/12;
使用汇编语言编写程序的时候,一条指令一般是1~4个机器周期。
1) 51单片机有两组定时器/计时器,既可以用来定时,也可以用来计数,故称为定时器/计数器
2)定时器/计数器和单片机的CPU是相互独立的,定时器/计数器的工作过程是自动完成的,不需要CPU参与。(计时器仍然是内嵌在CPU板中的)
3)定时器/计数器是根据机器内部的时钟或者脉冲信号(P3^4/P3^5引脚接入)对寄存器中的数据加1(每个定时器都有2个寄存器TH0、TL0(TH1、TL1))
4)有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器去做,CPU转而处理一些复杂的事情。同时可以实现精确定时的功能。(因为定时器与CPU相互独立)
1、定时器结构
1) 51单片机有2个计数器(16位加1计数器),每个计数器又有高8位和低8位两个寄存器TH0、TL0(TH1、TL1.)组成。
2)工作方式寄存器:TMOD
3)控制寄存器:TCON
使用定时器/计数器,就是要对上述4个寄存器进行操作。
1.1TMOD寄存器
对于TMOD寄存器,高4位是控制T1定时器的运行模式;低4位是控制T0定时器的运行模式;
每个定时器都有4种方式,我们常用的是方式1;
GATE是门控位,用于控制定时器的启动是否受外部中断源信号的影响。GATE=0,不受影响;GATE=1,受影响。
一般情况下,我们用于定时,GATE=0;只要用软件使TCON中断的TR0或TR1为1,就可以启动定时器工作。
注意:当GATE =1时,使TCON中断的TR0或TR1为1外,还需要额外加上外部中断引脚INT0/1为高电平,才能启动定时器工作。
C/T:0,定时器模式,1计数模式;
M1M0:工作方式设置位。
方式1常用,我们以方式1来分析;只有方式2才可以自动装载初值。
用作定时器的时候,采用的是内部的机器周期,12MHz的晶振,机器周期是1us;
T0引脚(P3^4)接外部方波的时候,一般作为计数器使用。
方式2在串口通信的时候会用到,在高8位TH0中写入初值,低8位TL0来计数,计数完成溢出后变为0后,TH0将初值自动装载到TL0中,继续计数。方式2适合用作较精确的脉冲信号发生器,波特率。
1.2控制寄存器TCON
对于TCON寄存器,高4位是定时器位TF1,TR1是定时器1;TF0,TR0是定时器0;控制定时器启动和中断申请。
低4位,在上文中使用过,用来控制外部中断0和外部中断1的触发方式。
TF1、TF0的操作,都是硬件自动操作的,不用我们操作什么。
2使用定时器步骤:
1)对TMOD赋值,确定T0和T1的工作方式。
2)计算初值,并将其写入TH0、TL0或TH1、TL1.
3)中断方式时,则对EA赋值,开放定时器中断。
4)使TR0或TR1置位,启动定时/计数器定时或计数。
5)写中断服务程序
中断使能位ET0 = 1及中断号1参见本文
//功能:数码管每隔1s,数字加1
unsigned char kk,num;
unsigned char code smg_du[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
void main()
{
TMOD = 0x01;//定时器0 工作方式1
TH0 = (65536-5000)/256; //计算初值//50ms
TL0 = (65536-5000)%256;
EA = 1;//打开总中断开关
ET0 = 1;//打开定时器0中断
TR0 = 1;//启动定时器
while(1)
{
if(kk == 20)//1s
{
kk =0;
P1 = smg_du[num];
num++;
if(num==10)
num = 0;
}
}
}
void timer0() interrupt 1 //每次50ms,共20次,总计1s
{
//50ms后,高8位,低8位全都进位了,都为0,所以需要重新设定初值
TH0 = (65536-5000)/256; //存放整数个256//方式1需要先装载初值//8位即逢256进1
TL0 = (65536-5000)%256;//存放不够256的值
kk++;
}
总结:
方式1情形下,写入初值后,启动定时器,1us加一个数,加到65536,THx、TLx溢出,使TFx置1,触发CPU中断,执行中断函数,TFx置0;
不受外部中断影响--->GATE=0;定时模式---->C/T = 0; 方式1----->01;------------>TMOD = 0x01;//0000 0001
在此过程中,我们并没有在P3^4引脚上接外界电路(即保持计时模式)
上一篇:89C51中断系统介绍(外部中断)
下一篇:独立键盘的使用
设计资源 培训 开发板 精华推荐
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展
- 创实技术electronica 2024首秀:加速国内分销商海外拓展之路