保姆级C51内核定时器进中断配置ATM8040F SN8F0802D芯片实操

C51内核定时器工作原理

1.我们先了解我们编程的单片机是多少T的。 这个查看规格书芯片特性就可以知道。如下图1:
T是指令周期,也叫机械周期,1T就表明是晶振跳1下就运行一个指令,机械周期:单片机执行一单位指令所需要的时钟周期个数,如1T,就表示需要1个时钟周期;12T即为12个时钟周期。(这里做个比喻:每个芯片一般都会带有内部的时钟,也就是我们看到的工作频率。这个就相当于人的心脏,这个不动作也就芯片坏了。外部晶振就相当于安装了一个外部心脏。)32MHZ的1T的芯片执行一个指令的时间是1/32 等于0.03us。
在这里插入图片描述
图1

在这里插入图片描述
图2
2.了解计时器的工作原理,在这里插入图片描述
有16位/8位计数模式。他们有什么不一样?8位计数能计数比较小的单位,比如10us,50us。16位的能计数比较大一点的例如毫秒级别的。
它们是怎么工作的?先讲8位的,这里的8位什么意思?指的是8个二进制位。8个二进制能表示最大的数是多少(十进制)?,打开电脑计算器,切换到程序员。输入8个1.在切换到十进制。得到255。
计时原理,单片机的时钟频率是很规律的,节奏是滴答滴答。。。。。你可以控制他从0开始,滴答256次后又变成零。比如你想200us计时一下。时钟周期是1MHz,那么数一下的时间就是1s
除以1MHz,等于1us。你可以控制它从256-200开始计数。它数到256的时候就刚好是200下乘以走一下的时间等于200us。下一次在从156开始计数,这样就得到200us准确的计时了。
在这里插入图片描述

在这里插入图片描述

8位重装载模式计数代码实现

void T0_Init(void)
{
TIMPRS = 0x01;//系统4分频
TMOD = 0x02;//工作在8位自动重装模式下
TL0 = (256-200); //计数值200
TH0 = (256-200);
TF0=1; //发生中断请求使能
TR0=1; //启动定时器/计数器0
IEN0 |= 0X02;
EA=1;
TR0 = 1;
}
void main(void)
{
T0_Init();
while(1)
{
}
}
void T0_INT(void) interrupt 1
{
P1_1 = ~P1_1;
}

技术名词解释

在这里插入图片描述
8位重装载模式,意思是单片机从什么时候开始数 TL0 数到256后变成0,那下一次从多少开始数着就叫从装载 TH0用来存。在程序里面就只用在初始化的时候写上就行了。不用在中断里面再写。
不是重装载模式则需要再中断里面写下一次开始计数的值。例如16位计数。在这里插入图片描述
这两个值怎么来的下面接着介绍。

16位计数模式

这里的16位什么意思?指的是16个二进制位。16个二进制能表示最大的数是多少(十进制)?,打开电脑计算器,切换到程序员。输入16个1.在切换到十进制。得到65535。16进制0XFFFF.这里就不能用TL0了存初始值了。因为TL0只能存两位16进制。所以就引入TH0来存储高两位,TL0存低两位。
例如我想设置一个100us的计时器。我们这个单片机工作频率是32MHz。但是默认会8分频。在这里插入图片描述
通过SYSCON = 0XC0;//系统时钟不分频 定时器4分频 那么单片机数一次的时间1/(32/4)等于0.125us 100us单片机需要数100/0.125=800次。因为是16位的。所以单片机数到65535才开始置零。那开始值=65535-800=64735 在利用计算器转换成16进制得到FCDF.分别配置到TH0,TL0在这里插入图片描述

16位计数代码实现

void T0_Init(void)
{
TIMPRS = 0x01;//系统4分频
TMOD = 0x01; //16位计数模式
TL0 = 0XDF; //低位
TH0 = 0XFc; //高位
TF0=1; //发生中断请求使能
TR0=1; //启动定时器/计数器0
IEN0 |= 0X02;
EA=1;
}
void main(void)
{
T0_Init();
while(1)
{
}
}
void T0_INT(void) interrupt 1
{
TL0 = 0XDF; //低位
TH0 = 0XFc; //高位
P1_1 = ~P1_1;
}
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值