51单片机的定时器深入讲解
单片机的定时器是作为片外资源,开启定时器需要设置相关的寄存器,当然,这些寄存器是可以位寻址的,怎么位寻址?在头文件中reg52.h中已经预定义好了。不用担心,你只需要学会设置就好了:
TMOD=0X01; //定时器0工作在方式1(16位计数器)
TH0=0xfe;
TL0=0x33;
EA=1;
ET0=1;
TR0=1;
以上6条语句,已经将定时器设置好了,现在协议个led的项目来时间一下:
#include
#define uint unsigned int
#define uchar unsigned char
uint count=0;
sbit led=P1^0;
int main()
{
TMOD=0X01; //定时器0工作在方式1(16位计数器)
TH0=0xfe; //赋初值
//TH0=(65536-5000)/256; //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为 5000微秒(5ms),之后产生中断
TL0=0x33;
TH0=(65536-5000)%6; //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //启动T0开始计数
while(1)//大循环,循环执行里面的程序
{
if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led
{
count=0; //重新赋成0
led=~led; //led状态取反一次
}
}
void timer0() interrupt 1 //中断函数
{
TH0=0xfe; //,重新赋值
//TH0=(65536-5000)/256; //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位)
TL0=0x33;
TH0=(65536-5000)%6; //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
count++;//0.5ms的次数加1
}
注意:这里使用到了中断,有时无需使用到中断:
#include
#define uint unsigned int
#define uchar unsigned char
uint count=0; //5000微秒的次数,用于在中断中加1,count有多少,定时count*5ms
sbit led=P1^0;
int main()
{
TMOD=0X01; //定时器0工作在方式1(16位计数器)
TH0=0xfe; //赋初值
//TH0=(65536-5000)/256; //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为 5000微秒(5ms),之后产生中断
TL0=0x33;
TH0=(65536-5000)%6; //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //启动T0开始计数
while(1)//大循环,循环执行里面的程序
{
if(TF0==1)//每次产生中断的时候,TFx(0或1)都会置位
{
TF0=0;
count++;
}
if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led
{
count=0; //重新赋成0
led=~led; //led状态取反一次
}
}
转载于:https://www.cnblogs.com/ifreewolf/p/9346697.html
51单片机的定时器深入讲解相关推荐
- (六)51单片机基础——定时器
定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成. 定时器主要作用: 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作. 替代长时间的Dela ...
- 51单片机之定时器\计数器的工作原理
51单片机之定时器\计数器的工作原理 定时器/计数器的结构: 何时处于计数器方式?何时处于定时器方式? TCON和TMOD特殊功能寄存器: 定时器/计数器工作方式: 方式0:13位的定时器/计数器 方 ...
- 【51单片机】定时器/计数器的工作原理和结构(一)
[51单片机]定时器/计数器的工作原理和结构 回看下单片机中断系统内部结构: 分析内部中断触发: 先看图 TCON:和外部中断相比少了IT位设置触发方式 :1跳沿触发 0电平触发:此处我的理解是:就好 ...
- 51单片机计算定时器初值
51单片机计算定时器初值 前言 理论分析 工作方式寄存器 TMOD GATE 门控位 C/T' 计数器模式和定时器模式选择位 M1 M0 工作方式选择位 定时器/计数器控制寄存器 TCON TCON补 ...
- 关于用51单片机内部定时器实现时钟和闹钟功能的概述
关于用51单片机内部定时器实现时钟和闹钟功能的概述 仅个人观点,欢迎大家相互学习和讨论 STC89C52单片机,内部配置了三个定时器,T0\T1\T2,其中T2定时器我们几乎不用,或者说很少用到.我们 ...
- 51单片机用定时器0实现流水灯
51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值.原先写的都是用查表来移位的,个人感觉不怎么 ...
- 51单片机内部定时器/计数器实验
51单片机内部定时器/计数器实验 一.实验内容 使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED). ...
- 51单片机:定时器实现1秒时数码管数字自动加一并循环
51单片机:定时器实现1秒时数码管数字自动加一并循环 题目要求: 定时器中断实现每来1s,P1口接的一位共阳极数码管显示数+1, 加到9之后再来1s清零并重复上述过程 代码如下: (仅供参考) /* ...
- 51单片机学习--定时器--中断--串口通信
51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...
最新文章
- Win10下VisualStudio2019安装和Helloworld测试
- HTML中的Content-Type的类型
- Python10/22--面向对象编程/类与对象/init函数
- fluidity详解
- 支付业务与技术架构学习总结(3)——账务系统
- 王爽《汇编语言》第2版-----2、寄存器
- CSS:公共样式(自用)
- wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]
- 换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...
- H.265与H.264对比有哪些优势
- 手机号正则表达式(含大陆港澳台)
- 通信技术发展的自然辩证法
- 7z文件格式及其源码的分析(四)
- java文件上传像素限制,JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
- 一个简单的界面拖动切换效果类ScrollViewGroup
- 摩尔定律到摩尔第二定律
- 实现简单的通信协议(STM32 F411RET6开发版)
- AirSim仿真学习记录(1)
- 如何在Android 2.2(Froyo)上创建闹钟快捷方式
- Activiti多人会签的实现 Activiti