单片机学习——定时器秒闪(自用)
定时器工作原理:
定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。定时/计数器的最基本工作原理是进行计数。
作为定时器时,计数信号的来源选择周期性的内部时钟脉冲。
用作计数器时,计数信号的来源选择非周期性的外部输入信号。
51单片机有两个定时/计数器T0和T1,为16位加法计数器,由低8位TLx和高8位THx两个寄存器组成,最大计数值为65535个计数脉冲。
常用:
TH0 = (65535 - 10000) / 256;(高八位)
TL0 = (65535 - 10000) % 256;(低八位)
软件实现:利用51单片机的定时/计数器T0的模式1实现间隔定时,每隔1秒LED1闪烁一下,也就是点亮0.5秒,熄灭0.5秒;每隔2秒LED2闪烁一下,即点亮1秒,熄灭1秒。
软件部分:
#include "reg52.h"
sbit L1=P0^0;
sbit L8=P0^7;
void selectHC573()
{
P2=(P2&0x1f)|0x80;
}
//==========================
void Inittimer()
{
TMOD=0x01;//①只能写一个字节,01选择16位定时/计数器
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;//定时50毫秒
ET0=1;//②打开定时中断使能
EA=1;//③总开关
TR0=1;//④启动定时器,定时器开始工作
}
unsigned char count=0;
void servicetimer() interrupt 1//定义中断为定时器
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;//无自动重装功能,必须在中断服务函数中重新定义
count++;
if(count==10)
{
L1=~L1;//循环十次,即5ms时,L1取反
count=0;//重新循环
}
}
//==========================
void main()
{
selectHC573();
Inittimer();//让定时器开始工作
while(1)
{
}
}