方波
方波的占空比固定是50%,即高电平和低电平的时间为1:1;
方波的周期:从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间;
由此可得知周期为1s的方波就是高电平占0.5s,低电平占0.5s的波形;
单片机定时器
MCS-51有两个定时器,定时器0,定时器1;
相关寄存器
TMOD
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
GATE | C/T(非) | M1 | M0 | GATE | C/T(非) | M1 | M0 |
D7-D4控制定时器1,D3-D0控制定时器0
GATE:门控制位
GATE=0::由TR0,TR1置位分别启动定时器T0、T1
GATE=1:由外部中断引脚INT0、INT1来启动定时器T0、T1
当INT0引脚为高电平时TR0置位,启动定时器T0;
当INT1引脚为高电平时TR1置位,启动定时器T1;
C/T(非):功能选择位
C/T(非)=0:定时功能
C/T(非)=1:计数功能
M1,M0:定时器工作方式选择位
M1 | M0 | 工作方式 | 功能 |
---|---|---|---|
0 | 0 | 方式0 | 13位定时器/计数器 |
0 | 1 | 方式1 | 16位定时器/计数器 |
1 | 0 | 方式2 | 自动重装8位定时器/计数器 |
1 | 1 | 方式3 | T0分为两个独立计数器,T1没有该功能 |
解析
1.通过定时器实现0.5s的计时
2.每0.5s进行取反,得到周期为1s的方波
方式1的定时时间设置
定时器的定时时间T=N*Tcy;
N(计数值)=65536-X(计数器初值);
Tcy=12/晶振;
例:若晶振为12M,定时时间为50ms,求定时器需设置的初值;
Tcy=12/12M=1us;
T=0.05s;
N=T/Tcy=0.5s/1us=50000;
初值X=65536-50000=15536=3CB0;
由于N计数范围为1-65536,所以定时范围为1-65536us。为了定时0.5s,可以以50ms为基础,每50ms都会产生一次中断,每进一次中断我们通过一个变量对其计数,当计满10次,则是0.5s;
定时器使用步骤:
1.进行TMOD的配置;
2.定时器初值的设置;
3.开总中断(EA=1);
4.开定时器中断(ET0/ET1=0);
5.启动定时(TR0/TR1=1);
6.中断函数(…interrupt…)
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED=P1^0;
sbit PWM=P2^1;
uchar aa;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
PWM=1;
while(1);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==10)
{
aa=0;
PWM=!PWM;
LED=!LED;
}
}