还请c语言大神帮忙看一下,程序能用,但是想改善不知怎么改。
#include"reg51.h"#defineuintunsignedint#defineucharunsignedcharsbitp12=P1^2;sbitp20=P...
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit p12=P1^2;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p30=P3^0;
sbit p31=P3^1;
void Delay(unsigned i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main(void)
{
P3=0x01;
while(p12==0)
{
if(p20==0)
{
loop:P3=0xff;
Delay(3000);
P3=0x01;
}
}
while(p12==1)
{
if(p21==0)
{
Delay(8000);
P3=0x00;
Delay(3000);
if(p12==0)
goto loop;
else
P3=0x01;
Delay(2000);
if(p21==1) break;
}
}
}
这是源程序通过单片机控制电机 P3=0xff为正转,P3=0x00为反转,P3=0x01为停止,需改善的在于后面,Delay(8000)后 反转 这时需要检测p12 是否为0 若为0则需要 立刻运行LOOP 若不为0则停止跳出,可是 我的程序只能 在延迟3S后去 判断p12 是否为0,我想在这延时的这段时间里去判断,应该如何改善,还请大神详细说明,不胜感谢! 展开
#define uint unsigned int
#define uchar unsigned char
sbit p12=P1^2;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p22=P2^2;
sbit p30=P3^0;
sbit p31=P3^1;
void Delay(unsigned i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main(void)
{
P3=0x01;
while(p12==0)
{
if(p20==0)
{
loop:P3=0xff;
Delay(3000);
P3=0x01;
}
}
while(p12==1)
{
if(p21==0)
{
Delay(8000);
P3=0x00;
Delay(3000);
if(p12==0)
goto loop;
else
P3=0x01;
Delay(2000);
if(p21==1) break;
}
}
}
这是源程序通过单片机控制电机 P3=0xff为正转,P3=0x00为反转,P3=0x01为停止,需改善的在于后面,Delay(8000)后 反转 这时需要检测p12 是否为0 若为0则需要 立刻运行LOOP 若不为0则停止跳出,可是 我的程序只能 在延迟3S后去 判断p12 是否为0,我想在这延时的这段时间里去判断,应该如何改善,还请大神详细说明,不胜感谢! 展开
1个回答
展开全部
Delay(3000);
if(p12==0)
goto loop;
else
P3=0x01;
改为:(姑且称为时间分割法,每30ms检测一次)
int count=0;
do{
if(p12==0)
goto loop;
count++;
if(count<=100){
Delay(30);
}
else{
break;
}
}while(true)
P3=0x01;
好久了,单片机知识忘完了,你看可不可以用用中断、定时器啥的!
if(p12==0)
goto loop;
else
P3=0x01;
改为:(姑且称为时间分割法,每30ms检测一次)
int count=0;
do{
if(p12==0)
goto loop;
count++;
if(count<=100){
Delay(30);
}
else{
break;
}
}while(true)
P3=0x01;
好久了,单片机知识忘完了,你看可不可以用用中断、定时器啥的!
追答
int count=0; //有定义的 ,你看是不是放错位置了,或者你把int 改成 uint
true 改为 1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询