自己写了一个关于用软件延时产生PWM波的程序。通过外部中断来改变占空比
由于T0和T1用到别的地方了,所以只能用延时函数。我仿真之后,先加速了,按减速键,直接减到占空比为0,全是低电平,这是哪儿的问题啊
单片机源程序如下:
#include <REGX52.H>
unsigned int m=50,n=50; //
sbit pwm=P1^3;
sbit k1=P3^2;
sbit k2=P3^3;
void delayus(unsigned int x)//延时,x=1大概为10微秒
{
while(x--);
}
void Int0Init() //INT0
{
IT0=1;//????????????????????
EX0=1;//??INT0???ж??????
EA=1;//?????ж?
}
void Int1Init() //INT1
{
Int0Init();
Int1Init();
IT1=1;//????????????????????
EX1=1;//??INT1???ж??????
EA=1;//?????ж?
void jiasu() interrupt 0 //加速
{
delay(1000);
if(k1==0)
{
m=m+10;
n=n-10;
}
}
void jiansu() interrupt 2 //减速
{
delay(1000);
if(k2==0)
{
m=m-10;
n=n-10;
}
}
void main(){
while(1)
{
pwm=1;
delayus(m);
pwm=0;
delayus(n); //n+m=100us
}
while((m>100)||(n<0))
{
m=50;
n=50;
}
}
|