一个简单的样例,定时器T2实现PWM波的控制。
尤其注意定时器T2的初始化过程,是直接对8位
寄存器进行操作的,然后还有T2
在15系列
的中断号 12
。
#include <stc15.h>
typedef unsigned char u8;
void Timer2Init(void);
void CloseFucker();
void main()
{
EA = 1;
CloseFucker();
Timer2Init();
while(1);
}
void CloseFucker()
{
P2 = (P2&0x1F) | 0xA0;
P0 &= 0xAF;
P2 = P2&0x1F;
}
void Timer2Init(void) //10微秒@11.0592MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x91; //设置定时初值
T2H = 0xFF; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2 |= (1<<2); //允许中断
}
void InterruptTimer2() interrupt 12
{
static u8 PWMCnt = 0;
PWMCnt++;
if(PWMCnt >= 250)
{
PWMCnt = 0;
}
if(PWMCnt <= 200)
{
P2 = (P2&0x1F) | 0x80;
P0 = 0xFE;
P2 = P2&0x1F;
}
else
{
P2 = (P2&0x1F) | 0x80;
P0 = 0xFF;
P2 = P2&0x1F;
}
}