欢迎光临散文网 会员登陆 & 注册

单片机学习——定时器秒闪(自用)

2023-03-17 21:08 作者:huabi_fxz  | 我要投稿

定时器工作原理:

定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向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)

 {


 }

}





单片机学习——定时器秒闪(自用)的评论 (共 条)

分享到微博请遵守国家法律