u8 idata PWM_Write_Byte[4]=0; // 占空比
#define FOSC 30000000UL // 声明系统频率,30M,要与STC-ISP同步设置
#define PWM_F 1000 // 设置PWM频率,不宜太高。
#define PWM_D 255 // 设置占空阈值,必须大于占空比的最大值,并且小于256
#define PWM_TL (256-(FOSC/12/PWM_F/PWM_D)) // 计算定时器初值(8位)
// 定时器0初始化
void PWM_Init()
{
TMOD &= 0xF0; //配置定时器工作模式
TMOD |= 0x02; //配置定时器工作模式 8位自动重装模式
TL0 = PWM_TL; //定时器初值
TH0 = PWM_TL; //定时器重装初值
TR0 = 1; //启动定时器0
ET0=1; //允许定时器0申请中断
EA=1; //中断总闸闭合
}
//定时器0的CPU处理函数,位置任意写都行
void PWM_Display_timer0() interrupt 1
{
static u8 pwm_t=0; //局部变量,不丢失数据
if(pwm_t<PWM_Write_Byte[2])
{
PWM_GPIO_G=0; //绿
}
else PWM_GPIO_G=1;
pwm_t++;
pwm_t=pwm_t%PWM_D; //限制占空比小于占空阈值
} |