0
点赞
收藏
分享

微信扫一扫

蓝桥杯之单片机学习(八)——定时器的基本原理与应用


文章目录

  • ​​一、训练任务​​
  • ​​1.1 训练重点​​
  • ​​二、基本概念​​
  • ​​2.1 理解定时器的工作原理​​
  • ​​2.2 51单片机的定时/计数器​​
  • ​​三、定时/计数器的编程思路​​
  • ​​四、代码展示​​

一、训练任务

在CT107D单片机综合训练平台上,利用51单片机的定时/计数器T0的模式1实现间隔定时,每隔1秒L1指示灯闪烁一下, 也就是点亮0.5秒,熄灭0.5秒;每隔10秒L8指示灯闪烁一下, 即点亮5秒,熄灭5秒。

1.1 训练重点

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_51单片机


蓝桥杯之单片机学习(八)——定时器的基本原理与应用_工作原理_02

二、基本概念

定时/计数器的最基本工作原理是进行计数,作为定时器时,计数信号的来源选择周期性的内部时钟脉冲,作为计数器时,计数信号的来源选择非周期性的外部输入信号

2.1 理解定时器的工作原理

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_寄存器_03

2.2 51单片机的定时/计数器

51单片机有两个定时/计数器T0和T1,为16位加法计数器,由低八位TLx和高八位THx两个寄存器组成,最大计数值为65532个计数脉冲

计数信号可以由两个,一个是系统时钟脉冲(时间可以自己设定,作为定时作用),一个是外部事件信号(不固定,来一次才加一,用作计数)

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_蓝桥杯_04


蓝桥杯之单片机学习(八)——定时器的基本原理与应用_工作原理_05


蓝桥杯之单片机学习(八)——定时器的基本原理与应用_51单片机_06


这里需要用到TCON寄存器两个位置

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_寄存器_07


TMOD模式寄存器,不能进行位操作,只能字节操作

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_51单片机_08

三、定时/计数器的编程思路

蓝桥杯之单片机学习(八)——定时器的基本原理与应用_寄存器_09

四、代码展示

#include <reg52.h>

typedef unsigned int uint;
typedef unsigned char uchar;

sbit L1 = P0^0;
sbit L8 = P0^7;

//配置HC138
void SelectHC138(uchar channel)
{
switch(channel)
{
case 4:
P2 = (P2 & 0X1F) | 0X80;
break;
case 5:
P2 = (P2 & 0X1F) | 0Xa0;
break;
case 6:
P2 = (P2 & 0X1F) | 0Xc0;
break;
case 7:
P2 = (P2 & 0X1F) | 0Xe0;
break;
}
}

//初始化系统
void Initsys()
{
SelectHC138(5);
P0 = 0X00;//关闭蜂鸣器和继电器
SelectHC138(4);
P0 = 0XFF;//关闭LED
}
//********************************
void InitTime0()
{
TMOD = 0X01;
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;

ET0 = 1;
EA = 1;
TR0 = 1;
}

uchar count = 0;
void ServiceTime0() interrupt 1
{
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
count++;
if(count % 10 == 0)
{
L1 = ~L1;
}
if(count == 100)
{
L8 = ~L8;
count = 0;
}
}
//********************************

void main()
{
SelectHC138(4);
InitTime0();
Initsys();
while(1)
{

}
}


举报

相关推荐

0 条评论