实验要求:
利用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、如果示波器显示内容没有自动弹出来