設定的參數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;
}
}
|