大神,请问51单片机控制的智能小车识别铁片后进入外部中断,停车2秒,然后继续前进。程序该怎么写?

中断程序老是写不好,麻烦大神给看看我的这段程序有什么问题。谢谢了!
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar flag;
sbit P20=P2^0; // 控制左电机前进
sbit P21=P2^1;//控制左电机后退
sbit P22=P2^2;//控制右电机
sbit P23=P2^3;//控制右电机

sbit P13=P1^3;//左循迹
sbit P14=P1^4;// 中循迹
sbit P17=P1^7; // 右循迹

sbit P32=P3^2; //外部中断触发

void delayms(unsigned int xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
flag=0;
EA=1;//全局中断开
EX0=1;//外部中断0开
IT0=0;//低电平触发
while(1)
{ if(flag==1)
{
P2=0x06; //小车前进
}
}
}

void INT_0() interrupt 0
{
if(flag==0&&P32==0)
{
P2=0x00; //小车停车
delayms(2000); //延时两秒
flag=1;
}
}

你在中断里面把flag=1;进入主函数后flag一直保持1,而你中断的判断条件是if(flag==0&&P32==0),它就进不了中断了。你要想这么写的话可以改成这样看看:
void INT_0() interrupt 0
{
flag==0;
if(flag==0)
{
P2=0x00; //小车停车
delayms(2000); //延时两秒
flag=1;
}
}
或者干脆把if判断去了得了,(仅代表自己看法,我也不怎么懂啊)。自己多调试调试,肯定能做好的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-19
中断调用好像有问题!应该不能再调用p32,再找找资料,还有,
相似回答