写在前面:以下涉及到的程序及电路图不保证为最优方案,会存在很多不足之处,望谅解。另外,C51的内容是在整理很久之前所学的知识,可能会存在错误,欢迎指正。
正文
学习目标:学会使用51单片机中的定时器0。
学习内容:
- 用定时器0控制LED灯的亮灭
- 用定时器在数码管上实现计时
程序一:控制LED灯
功能要求:运行程序后连接在单片机上的LED灯以1s的频率闪烁。
定时器寄存器简单介绍
在本次内容中将使用定时器0,定时器1的使用方式与定时器0大体相同,以下简单介绍一下将要使用到的几个中断寄存器,具体介绍请以官方数据手册为准:
TMOD:定时器模式寄存器,大致分为4个模式:
00:定时器0或1选择13位定时/计数器模式,该模式下TL0只使用低5位,TH0整个8位全用,选择TR0控制,作为定时器使用;
01:定时器0或1选择16位定时/计数器模式,该模式下TL0和TH0的整个8位均全用,选择TR0控制,作为定时器使;
10:定时器0或1选择8位定时/计数器模式,该模式下只有TL0的整个8位参与实际计时,TH0的整个8位为重装做准备,该模式为自动重装模式,当溢出时TH0的值赋予TL0,选择TR0控制,作为定时器使用;
11:定时器0做双8位定时/计数器,TL0作为一个8位定时/计数器由定时器0控制,TH0作为一个8位定时/计数器由定时器1控制。
TH0、TL0:用作计数,其中TH0为高8位,TL0位低8位,从0 开始最大计数0xFFFF。
TR0:当TR0=1时,允许T0开始计数,即允许TH0和TL0计数;当TR0=0时,只有INT0输入高电平时,T0才可以计数。
ET0:T0溢出中断允许位,当ET0=1时,允许中断,反之禁止中断。
EA:总中断允许位,当EA=1时,开放中断,反之,禁止所有中断请求,即上述中断操作将全部失效。
中断优先级:定时器0优先级排在第二位,如图4-1:
图4-1 中断优先级查询(图片来自官方芯片手册 第6章 中断系统)
源程序
#include "reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;
sbit led = P2^0; //led灯端口
uint i; //计时变量
void main()
{
TMOD |= 0X01; //选择定时器0模式1,16位,TR0控制
TL0 = 0x18; //定时1ms,低8位
TH0 = 0XFC; //定时1ms,高8位
TR0 = 1; //允许计时
ET0 = 1; //溢出中断允许位,置1允许
EA = 1; //打开总中断
while(1);
}
void timer0() interrupt 1 //定时器0中断程序,定时器0优先级为1
{
TL0 = 0x18;
TH0 = 0XFC; //复位TH0和TL0
i++;
if(i == 1000) //当时间计够1s时,i清零,同时led灯状态取反
{
i = 0;
led = ~led; //状态取反,即灯亮时取反灭,灯灭时取反亮s
}
}
仿真图
程序二:数码管计时
功能要求:实现正计时0~F。
源程序
#include "reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define display P0 //定义数码管端口为P0
uint i; //计时变量
uchar temp; //数码管变量
uchar code smg[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //定义数码管显示内容0~15(F)
void main()
{
TMOD |= 0X01; //选择定时器0模式1,16位,TR0控制
TL0 = 0x18; //定时1ms,低8位
TH0 = 0XFC; //定时1ms,高8位
TR0 = 1; //允许计时
ET0 = 1; //溢出中断允许位,置1允许
EA = 1; //打开总中断
display = 0x3f; //初始化显示0
while(1)
{
if(i == 0) //当i清0时显示数据加1
{
display = smg[temp]; //显示数据随temp的自加而自增
}
}
}
void timer0() interrupt 1 //定时器0中断程序,定时器0优先级为1
{
TL0 = 0x18;
TH0 = 0XFC; //复位TH0和TL0
i++;
if(i == 1000) //当时间计够1s时,i清零,同时temp自加1
{
i = 0;
temp++;
if(temp == 16) //限制显示最大加到F
temp = 0;
}
}
仿真图