1.定时器介绍
单片机的定时器资源
工作原理
定时器工作模式
对原理图进行拆分
根据左边提供的脉冲,16位计数器内部会加一,到达最大值会溢出,申请中断
和沙漏相似
时钟
中断系统
流程图
中断资源
定时器和中断系统的结合运行
想要实现以上内容还需要结合寄存器
TCON寄存器
TMOD寄存器
需要配置的是M1,M0,以及C/横杠T
中断除了可以被TR0单独控制还可以和GATE一起控制,通过逻辑的与非门实现
实际写程序的时候重要的是配置寄存器
可位寻址,可以单独为一位赋值,不可位寻址,只能全体赋值
实际操作
测试中断是否进行
#include <REGX52.H>
void Timer0_Init() //初始化,设定需要的模式
{
TMOD=0x01; //0000 0001
TF0=0;
TR0=1;
TH0=64535/256; //取高8位
TL0=64535%256; //取低8位
ET0=1;
EA=1;
PT0=0;
}
void main()
{
Timer0_Init();
while(1)
{
}
}
unsigned int T0Count;
void Timer0_Routine() interrupt 1
{
TH0=64535/256;
TL0=64535%256; //重新赋初值
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
P2_0=~P2_0; //间隔为一秒进行闪烁
}
}
可以利用stc软件生成配置函数,但是需要增加和删除一部分代码
删除第一行的AUXR寄存器,再配置上中断寄存器ET0,EA,PT0。
void Timer0_Init() //初始化,设定需要的模式 1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
#include <REGX52.H>
#include "Timer0.h"
#include "Key.H"
#include "INTRINS.H"
unsigned char KeyNum,LEDMode;
void main()
{
P2=0xFE;
Timer0_Init();
while(1)
{
KeyNum=Key();
if(KeyNum)
{
if(KeyNum==1)
{
LEDMode++;
if(LEDMode>=2)LEDMode=0;
}
}
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x18;
TH0 = 0xFC; //设置初值
T0Count++;
if(T0Count>=500)
{
T0Count=0;
if(LEDMode==0)
P2=_crol_(P2,1);
if(LEDMode==1)
P2=_cror_(P2,1);
}
}
插入头文件 #include "INTRINS.H"
循环函数:1.crol 向左移,最后一个字母为LEFT的缩写,有两个参数
2.cror 向右移,最后一个字母为Right的缩写,有两个参数。
实现效果:实现LED流水灯,且可以通过独立按键K1来改变流水灯的方向,向右或者向左实现流水灯,由于使用循环函数,不用担心会移出去,可以一直循环移动。
#include <REGX52.H>
#include "Delay.H"
#include "LCD1602.H"
#include "Timer0.H"
unsigned char Sec,Min,Hour;
void main()
{
LCD_INit();
Timer0_Init();
LCD_ShowString(1,1,"Clock");
LCD_ShowString(2,1," : :");
while(1)
{
LCD_ShowNum(2,1,Hour,2);
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Sec,2);
}
}
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x18;
TH0 = 0xFC; //设置初值
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
Sec++;
if(Sec>=60)
{
Sec=0;
Min++;
if(Min>=60)
{
Min=0;
Hour++;
}
if(Hour>=24)
{
Hour=0;
}
}
}
}
显示效果
独立按键原理图
因篇幅问题不能全部显示,请点此查看更多更全内容