网站首页 > 开源技术 正文
前面我们用的延时都是非精确延时,我们可以用一种比较精确的方法,单片机自带的定时器中断模块,89C52RC 带2个定时器中断,ET0 和ET1,中断的工作模式有4种,
定时器0为例,定时器0和定时器1是一样的都在TMOD中,
TMOD 中有8位 0000 0000 前4位是定时器1的控制选择 后4位是定时器0的控制选择,
4位中的后2位是模式选择
(1) 模式0 后两位是00 13位计数模式 不需要了解,平时都是用定时器1.
(2) 模式1 后两位是01 16位计数模式最大65535 分位高8位TH0,低八位TL0
(3) 模式2 后两位是10 自动装填模式 主要用在 串行通讯时计算 波特率
(4) 模式3 后两位是11 变成2个最大255的计数器
我们先用模式1 怎么计算定时值呢?
我们用12M举例 单片机有个12分频,也就是晶振动作12次,就是单片机执行一条程序所用的时间 12M=12 000 000 除以12= 1 000 000 这是单片机1秒所能执行的程序条数
那1秒执行1000000次,一条程序需要1秒除以1000000=0.000001秒=1us
我们模式1计数最大65535,再加就是满溢为0, 65533 65534 65535 0 1 2 3
65535按照1us一条最大定时65毫秒=65000微秒如果我们定时1秒怎么定时呢?
我们可以先定时10毫秒就是65536-10000=55536转成16进制等于D8EF
将D8送入 TH0 (T在应用中时间的首字母,H是高的首字母,0是定时器0的意思)
将EF送入 TL0 (T在应用中时间的首字母,L是低级的首字母,0是定时器0的意思)
EA 是所有中断的总开关的意思
ET0是定时器0的开关(不开这个开关,定时器0可以工作,我们就需要时时观察TR0为1还是为0)
TR0 是定时器0开始运行的开关(TR0=1开始工作,=0停止工作,当满溢时自动变0)
我们试试让一个小灯1秒一亮,一秒一熄灭。
#include<reg52.h>
sbit LED=P2^0;
void main( )
{
EA=1; // 开总开关
TMOD=0x01; //让定时器0工作在模式1 16位计数方式
TH0=0xD8; //高8位
TL0=0xEF; / /低8位
ET0=1; //开定时器0的开关
TR0=1; //开始运行定时器0
LED=0; 小灯亮
while (1); //这里我们让循环在这里一直等待,
让定时器0去控制小灯的亮 灭
}
void dingshiqi0() interrupt 1 这里后面的interrupt 1 时定时器0的固定写法
下面解释一下
{
static unsigned char i=0; //static时静态变量的意思 只在这个子程序中运行
TH0=0xD8; // 重新给高字节赋值
TL0=0xEF; //重新给低字节赋值
i++; // i 中数每次加1
if(i>=100) //如果i加到100就是100个10毫秒就是1秒
{
i=0; //让i从0开始
LED=~LED // 每经过1秒 LED转换一次状态,亮 灭
}
}
我们用的变量分为全局变量和静态变量,局部变量,
全局变量是说在所有的子程序都可以用这个变量。公用的物品
局部变量是只有这个函数或者称子程序才可以用,你自己家的洗衣机
不过局部变量执行完这个程序跳到别的程序的时候,再进这个程序局部变量变成初始值,
静态变量=静态局部变量,就是和局部变量一样只有这个程序能用,但是可以保留上一次运行完的值。
咱们的中断是有顺序的,
外部中断0 是第0个中断 优先级最高
定时器0 是第1个中断
外部中断1 是第2个中断
定时器1 是第3个中断
串行通讯中断 是第4个中断
我们用的是定时器0,所以就写成 interrupt 1
- 上一篇: 单片机编程用什么软件?单片机开发软件有哪些?
- 下一篇: 原创DIY:自制简单实用的C51单片机开发板
猜你喜欢
- 2025-08-02 编写汇编语言常见错误分析
- 2025-08-02 HC89S003P 20引脚8位ADC型FLASH单片机
- 2025-08-02 基于51单片机的万年历
- 2025-08-02 基于AT89S51单片机接口电路的时序仿真研究
- 2025-08-02 MON-51单片机仿真器使用手册
- 2025-08-02 重要提醒,单片机发展史,它到底是一个什么东西
- 2025-08-02 keil软件是干嘛的?keil软件怎么用?
- 2025-08-02 51单片机多机通信系统实现方法
- 2025-08-02 红外遥控发射程序,stc红外遥控c51程序,智能家居控制
- 2025-08-02 三相异步电机点动控制改造成西门子PLC程序
你 发表评论:
欢迎- 08-032025年Linux可视化面板深度评测:从新手到企业级维的全能工具
- 08-03自学学习网络安全,渗透测试的环境搭建总结
- 08-03夏日“打卡”:一场集体“情绪漂移”的实验?
- 08-03PHP 8.3 JIT 深度优化:让图像处理性能超越C++(附压测数据)
- 08-03「推荐」收藏过千,给新手的7个入门php实战项目
- 08-03PHP内存池分析
- 08-03PHP 性能分析与实验——性能的宏观分析
- 08-03空开上的DZ47是什么意思?6000A是什么电流?
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)