TA的每日心情 | 开心 4 天前 |
---|
签到天数: 127 天 [LV.7]常住居民III
高级会员
- 积分
- 690
|
开天斧开发板,用中断方式产生1000HZ的PWM控制LED0灯的亮度,想输出占空比为50%的PWM输出,为什么输出的波形不对,帮忙看哈程序哪里有问题
#include <stc8h.h>
sbit LED0=P2^0;
sbit LED1=P2^1;
unsigned char HighRH=0; //高电平重载值的高字节
unsigned char HighRL=0; //高电平重载值的低字节
unsigned char LowRH=0; //低电平重载值的高字节
unsigned char LowRL=0; //低电平重载值的低字节
/***********配置PWM占空比,周期为1000HZ******/
void ConfigPWM( unsigned char dc)
{
unsigned int high,low;
high = (11059*dc)/100; // 计算高电平所需的计数值
low = 11059 - high; // 计算低电平所需的计数值
high=65536-high +12;
low=65536-low+12;
// 计算两个时序需要的定时器重载值
HighRH = (unsigned char)(high>>8);
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low>>8);
LowRL = (unsigned char)low;
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = HighRL; //设置定时初始值
TH0 = HighRH; //设置定时初始值
TF0 = 0; //清除TF0中断标志
ET0=1; //打开T0中断
TR0 = 1; //定时器0开始计时
LED0=1; //输出高电平
}
/************定时器0中断,产生PWM**************/
void InterruptTimer0() interrupt 1
{
if(LED0==1) //当前输出为高电平时,装载低电平值并输出低电平
{
TH0 = LowRH;
TL0 = LowRL;
LED0 = 0;
}
else //当前输出为低电平时,装载高电平值并输出高电平
{
TH0 = HighRH;
TL0 = HighRL;
LED0 = 1;
}
}
void main()
{
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
EA=1;
LED1=0;
ConfigPWM(50);
while(1);
}
|
-
采样周期100us,2.5v,以上频率为1000HZ,
-
|