设定的参数tt代表半周期,step代表脉冲个数,范围(50~200),仿真时按键调整的时候tt的调整一切正常,step增大调整也正常,step减小调整的时候就变成了一条直线,不再计数了,如果一开始就进行step减小调整,有时候也能正常调整。问题到底出在哪里?
单片机源程序如下:
#include <reg51.h>
unsigned int tt,step;
sbit PWM=P2^3;
sbit DIR=P2^4;
sbit EN=P2^5;
sbit k7=P3^7;
sbit k8=P3^6;
sbit k9=P2^7;
sbit k10=P2^6;
void Manual()
{
EN=1;
tt=5000;
step=50;
while(1)
{
shoudong();
keyscan();
}
}
void keyscan()
{
while(1)
{
if(k7==0)
{
delay(10);
tt=tt+500;
if(tt>=5000)
{
tt=5000;
}
while(!k7);
}
else if(k8==0)
{
delay(10);
tt=tt-500;
if(tt<=2500)
{
tt=2500;
}
while(!k8);
}
else if(k9==0)
{
delay(10);
step=step+50;
if(step>=200)
{
step=200;
}
while(!k9);
}
else if(k10==0)
{
delay(10);
step=step-50;
if(step<=50)
{
step=50;
}
while(!k10);
}
}
}
void shoudong()
{
TMOD=0x01;
TH0=(65536-tt)/256;
TL0=(65536-tt)%256;
EA=1;
ET0=1;
TR0=1;
}
void zhongduan( ) interrupt 1
{
TH0=(65536-tt)/256;
TL0=(65536-tt)%256;
PWM=~PWM;
t++;
if(t==step)
{
t=0;
DIR=~DIR;
}
}
|