【51单片机STC89C52】定时器(中断)控制LED
目录
一、定时器/计数器T0
1、定时器/计数器的相关寄存器
2、定时器/计数器控制寄存器TCON
3、定时器/计数器工作模式寄存器TMOD
二、配置相关寄存器
1、使用STC-ISP工具
2、配置寄存器
设置定时器模式(16位定时器)
设置定时器初值
清除TF0标志
定时器0开始计时
三、定时器控制LED
四、定时器中断方式控制
1、中断寄存器
2、定时器中断控制LED
一、定时器/计数器T0
1、定时器/计数器的相关寄存器
2、定时器/计数器控制寄存器TCON
TCON格式如下:
3、定时器/计数器工作模式寄存器TMOD
模式选择:
二、配置相关寄存器
1、使用STC-ISP工具
2、配置寄存器
设置定时器模式(16位定时器)
配寄存器推荐使用按位操作:
需要清零的位与等于0,不清零的位与等于1
需要置1的位或等于1,不需要置一的位或等于0
TMOD &= 0xF0; //清零低四位、高四位不变TMOD |= 0x01; //低四位的bit0置1
设置定时器初值
TL0=0x00; //低八位、需要计算TH0=0xDC; //高八位、需要计算
89C52的晶振频率是 11.0592MHz机器周期 = 12 x 时钟周期 =12 x ( 1 / 时钟频率 ) s = 1.085us在 TH0 和 TL0 寄存器中计数 , 最多能计数2^16= 65536 ,累计计时大约 71ms
清除TF0标志
TF0 = 0;
不使用中断时,必须软件清零
定时器0开始计时
TRO = 1;
三、定时器控制LED
#include "reg52.h"sbit led = P3^6;void delay10ms()
{//1. 配置定时器0工作模式为16位计数TMOD = 0x01;//2. 定10ms的初值TL0=0x00;TH0=0xDC;//3. 开始计时TR0 = 1;TF0 = 0;
}void main()
{int cnt = 0;led = 1;delay10ms();while(1){if(TF0 == 1)//当最高位产生溢出时,由硬件置1 {TF0 = 0;//不使用中断时,必须软件清零cnt++; //统计溢出的次数//重新给初值TL0=0x00;TH0=0xDC;if(cnt == 100){//当溢出100次,经过了1scnt = 0; //cnt重新计数led = !led;//每经过1s,翻转led的状态}}}
}
四、定时器中断方式控制
1、中断寄存器
EA :总中断允许控制位。EA=1,CPU开放中断
ET0:T0的溢出中断允许位。ET0=1,允许T0中断
![](/assets/blank.gif)
2、定时器中断控制LED
定时器中断控制LED1每秒亮灭一次,主函数里LED2每300ms亮灭一次
#include "reg52.h"sbit led1 = P3^6;
sbit led2 = P3^7;
int cnt = 0;void Time0Init()
{//1. 配置定时器0工作模式为16位TMOD = 0x01;//2. 定10ms的初值TL0 = 0x00;TH0 = 0xDC;//3. 开始计时TR0 = 1;TF0 = 0;//4. 打开定时器0中断ET0 = 1;//5. 打开总中断EAEA = 1;
}void Delay300ms() //@11.0592MHz
{unsigned char i, j, k;i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}void main()
{led1 = 1;Time0Init();while(1){led2 = 0;Delay300ms();led2 = 1;Delay300ms();}
}void Time0Handler() interrupt 1
{cnt++; //统计溢出的次数//重新给初值TL0=0x00;TH0=0xDC;if(cnt == 100){ //当溢出100次,经过了1scnt = 0; led1 = !led1; //每经过1s,翻转led的状态}
}
【51单片机STC89C52】定时器(中断)控制LED相关推荐
- 51单片机学习--定时器--中断--串口通信
51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...
- 51单片机红外通信及控制LED灯(LCD1602显示)
51单片机红外通信及控制LED灯(LCD1602显示) 大家好,又和大家见面了,离上一次DS18B20传感器的文章已经过去了一个星期了,这期我将给大家带来,基于STC89C52芯片和HS0038红外接 ...
- 定时器中断控制LED闪烁(每隔1s)---普中科技开发仪
定时器中断o,利用中断控制LED闪烁每隔1s闪烁一次(精确的1s) notes: (1)工作方式寄存器TMOD ,低四位用于To,高四位用于T1,(GATE,C/T- ,M1,M0) 一般让GATE ...
- 51单片机(STC89C52)的中断和定时器
STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...
- STM32之定时器中断控制LED闪烁
上篇博客我们是用延时函数实现了LED的闪烁,今天我们使用STM32的定时器来使LED闪烁. 关于32的定时器的种类,今天我在这先不做过多的说明,有时间我会再另写一篇博客来专门介绍32的定时器.今天我们 ...
- 51单片机STC89C52点亮一个LED(IO口的位操作)
51单片机点亮一个LED(IO口的位操作)STC89C52 程序源码 /*-----------------------包含头文件区域-------------------------*/ #incl ...
- 定时器中断控制led灯闪烁
定时器 stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7).至于三者之间的区别可以参考以下博客:[https ...
- 51单片机实现独立按键控制LED灯
本节博客主要实现以下效果: 3-1独立按键控制LED亮灭 本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭 #include <REGX51.H>void m ...
- 02讲 | 51单片机按键外部中断实现LED灯的亮灭
前言 专栏内容持续补充更新,目前正在进行优惠活动! 目录 一.按键中断控制原理 二.外部中断实现 LED 灯亮灭功能代码
- 51单片机——电脑通过串口控制LED
目录 1. 串口相关寄存器 1.1 串行控制寄存器SCON 1.2 电源控制寄存器PCON 1.3 与串行口中断相关的寄存器E和IPH.IP 2.源码 2.1 main.c 2.2 UART.c 2. ...
最新文章
- 深入学习JavaScript: apply call方法 详解(转)
- MySQL笔记1:考察内链接、左连接、右连接。
- java 内存泄露对象排查_记录一次 java内存泄漏的排查
- BugKuCTF WEB 你必须让他停下
- mysql group by 集合_MySQL高级查询之与Group By集合使用介绍
- array.unshift_Ruby中带有示例的Array.unshift()方法
- 干货!Python与MySQL数据库的交互实战
- C语言表达式5 0的结果是,c语言程序设计期末试题B(含答案)(5页).doc
- easyui下拉选项多怎么解决_作物根部病害多原因在哪?解决病害生根措施怎么做?...
- python导入selenium快捷键_python,_Selenium工具自动打开的浏览器和用快捷方式打开的样式不一样?,python - phpStudy...
- 【翻译】Siesta事件记录器入门
- libiconv android编译,编译cBPM-android-19—CodeBlocks—CentOS7— ndk10—编译libiconv和xerces-c...
- Telos 首份年报(中译版-下)
- jar文件打不开,用什么打开
- 【自动驾驶】浅谈自动驾驶在业界的发展
- ESP32-Ardunio 心知天气 hhtps 获取数据 +NTP对时
- 机器学习之降维方法总结
- 大富豪5.3全网首发,真正的5.3正版破解授权,不是高防端
- Xilinx HLS 导出IP失败的最新解决方案(2022.1.15)
- 少壮不努力,一生在内地
热门文章
- Unity基础篇:解决Asset Store资源商店点下载或导入没反应
- 理一理 OC/OD 门、开漏输出、推挽输出等一些相关概念
- office套件_OfficeSuite Premium 免费专业Office办公套件
- W800BT Plus耳机测评 【耳机测评】 【分贝测试】
- 机器学习实现了脑机语言翻译,那距离“意念交流”还有多远?
- 【天光学术】经济统计学论文:“三权分置”下土地经营权抵押贷款证券化研究(节选)
- msi文件替换修改cab文件
- Mac OS下的自带虚拟光驱
- flex4兼容flex3
- unity3D实践报告-忍者跑酷