Bootstrap

【单片机】以输出方波为例的 定时器使用

实验要求:

利用Proteus软件画出电路图,单片机定时器/计数器以查询方式工作,在P1.0口产生周期为100us的连续方波,在P1.0口线上接上示波器观察波形。

前言:写这篇博客的意义在于,借助本实验可以复习定时器中断的使用以及了解proteus的一些新操作

代码实现:

#include <reg52.h>

sbit out1 = P1^0;

void initTimer0(){
	TMOD = 0X01;
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	//使能定时/计数器中断	
	ET0 = 1;
	EA = 1;
	//启动定时器0
	TR0 = 1;
}

void severTimer0() interrupt 1{
	TH0 = (65535 - 100) / 256;
	TL0 = (65535 - 100) % 256;
	out1 = ~out1;
}
void main(){
	initTimer0();
	//注意这个while(1)很重要,否则无法实现功能
	while(1);
}

定时器的使用:

1、TMOD寄存器的配置:

1)定时功能和计数功能的区别:

定时的时候触发源是时钟信号,其周期固定,所以可以计算时间;计数时触发源是外部脉冲,无法保证周期固定,只能记录脉冲的个数。

2)使用TR0、TR1来启动定时器所示GATE = 0

3)使用定时功能所以C/T  = 0

4)使用16位定时器,所以M1 M0为01

注:只用定时器0,所以定时器1相关的直接定于0即可

 

2、THX TLX初始化配置

1)计算出初始值:

一个脉冲为1us,如我们要定100us就将初始值定位(65535)

2)分别配置给THX TLX,如代码所示

注:

(1)如果要记的时间T超过了65535us就需要找到一个t在65535um内且T是t的整数倍

(2)分配时的256是因为低八位一共能表示到256

 

3、ET0、ET1控制使能定时/计数器中断,当值为1时表示打开中断

 

4、EA控制总中断,当值为1时表示打开中断

 

5、TRX = 1表示启动定时器

 

中断的使用:

1、中断号

 

主程序:

1、其中最主要的是while(1),main函数本身就是一个自循环函数,如果不加while(1)函数就一直在进行定时器初始化,所以无法进入中断

 

硬件实现:

电路图

 

示波器的使用:

1、放置示波器

2、如果示波器显示内容没有自动弹出来

 

 

 

 

 

 

 

 

 

 

 

;