51单片机定时器。实验(六):定时器实验:使用AT89S51单片机的定时器/计数器T1控制LED每隔3秒点亮一次(即亮3秒,灭3秒,如此反复)

目录

题目:

proteus仿真:

代码:

分析题目:

定时器:

工作方式寄存器TMOD设置:

控制寄存器TCON设置:

设定计数初值:

 定时器四种工作方式:

实验过程讲解:

配置定时器:设置TMOD寄存器

设定定时器初值:THx和TLx(x=0,1)

设置IE寄存器:

启动定时器:

中断检测:


题目:

使用51单片机的定时器/计数器T1控制LED每隔3秒点亮一次(即亮3秒,灭3秒,如此反复)

proteus仿真:

 本实验涉及的Proteus文件以及程序源码均在Github上免费下载

https://github.com/iceacream/C_CODE.git

代码:

#include<reg51.h>
sbit LED1=P1^5;
char i = 100;
char t = 0;

void t1_init()
{
  TMOD = 0x01;		//定时器T0为方式1
	TH0 = 0xd8;			//设置定时器初值(1s)
	TL0 = 0xef;
	LED1 = 1;				//LED1熄灭
	ET0 = 1;				//允许定时器T0中断
	TR0 = 1;				//启动定时器T0
	EA = 1;					//开总中断
}

void main()
{
  t1_init();
  while(1);
}

void timer0() interrupt 1			//T0中断程序
{
			TH0 = 0xd8;
			TL0 = 0xef;
			i--;
			if(i<=0)
			{
				if(t==3)						//3s
					{					
						TR0 = 0;				//关闭定时器T0
						LED1 = ~LED1;		//LED灯状态取反
						t=0;
					}
						i = 100;
						t++;
			}
				TR0 = 1;				//重新启动定时器T0
} 

  本实验涉及的Proteus文件以及程序源码均在Github上免费下载

https://github.com/iceacream/C_CODE.git

分析题目:

实验需要通过定时器配合中断,实现LED每隔3秒点亮一次,只需简单配置定时器就能达到实验效果。

定时器:

  • AT89S51单片机内有两个可编程的定时器/计数器T1、T0。
  • T0由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。
  • T0、T1都具有定时器、计数器两种工作模式。
  • 定时器模式是对单片机的系统时钟信号经片内12分频后的内部脉冲信号计数。
  • 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数。
  • 两个计时器/计数器属于增1计数器,即每对一个脉冲计数则计数器增1。
  • T0、T1具有四种工作模式:方式0、方式1、方式2和方式3。

 2个16位计数器T0 (TH0TL0)T1 (TH1TL1)——1计数器

2个8位控制寄存器TCONTMOD——管理计数器的运行

2个外部引脚T0(P3.4)T1(P3.5)——接入外部脉冲

工作方式寄存器TMOD设置:

控制寄存器TCON设置:

例:TR0 = 1;   T0计数         TR0 = 0 ;   停止T0计数

设定计数初值:

计数器溢出空间 = 计数器最大空间 - 计数初值

定时时间t = (计数器最大空间 - 计数初值机器周期=(2^{n}-a)×12/fosc  (us)

 定时器四种工作方式:

参考:http://t.csdn.cn/c44ol

实验过程讲解:

配置定时器:设置TMOD寄存器

本实验选择定时器T0工作在方式1,应使TMOD寄存器的M1M0 = 01;应设置C/\overline{T}​ = 0为定时器工作模式;对T0的运行仅由TR0来控制,应使相应的GATE位为0。定时器T1不使用,各相关位均设为0。所以TMOD寄存器应初始化为0x01。

设定定时器初值:THx和TLx(x=0,1)

设定时时间为1秒,设置10毫秒(即10000微秒)循环100次,设定时器 T0的计数初值为X,假设晶体振荡器的频率为11.0592 MHz  则定时时间为:

定时时间 = (2^{16}​-X)*12/晶体振荡器频率

10000 = (2^{16}​-X)*12/11.0592

X  \approx​ 55535(0xd8ef)

 转换成16 进制数后为0xd8ef     其中0xd8装入TH0      0xef装入TH0

设置IE寄存器:

本题由于采用定时器T0中断,因此需将IE寄存器中的EA、ET0位置“1”。

启动定时器:

启动和停止定时器T0:将定时器控制寄存器TCON中的TR0=1,则启动定时器T0。TR0=0,停止计时器T0计时。

中断检测:

重装定时器初值。

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值