中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题: 关于51单片机的问题1
发表新帖 回复该主题
回帖:4个,阅读:749 [上一页] [1] [下一页]
* 帖子主题:

关于51单片机的问题1

分享到
970
wangxd5429
文章数:41
年度积分:50
历史总积分:970
注册时间:2005/1/19
发站内信
发表于:2014/7/9 8:26:17
#0楼
各位高手,小弟正在基于STC51单片机开发程序,主程序的while循环中加入了一个if判断,如果start_xunji_flag全局变量等于ON,则进入当前分支,否则不进入分支,继续循环。在外部中断0服务子程序中,添加对全局变量start_xunji_flag设置为ON。测试程序,进入外部中断0,全局变量start_xunji_flag被设置为ON,但是主程序的while循环中未进入if分支。请教其中的原因,谢谢!代码如下:
/************************************************************
函数功能:主函数
*************************************************************/
void main()
{

start_xunji_flag = OFF;/*默认寻迹开关初始化为关闭*/


/*等待红外信号产生的中断,寻迹主循环*/
while(1)  //while循环
{
if (start_xunji_flag == ON)
{
if(SJ1==0&&SJ2==1) //右边传感器脱离黑线
   {
   left(); //小车左转
   }

   if(SJ1==1&&SJ2==0) //左边传感器脱离黑线
   {
   right(); //小车右转
   }

   if(SJ1==1&&SJ2==1) //两个传感器都在黑线两边,小车匀速前进
   {
   forward(); //小车前进
   }

   if(SJ1==0&&SJ2==0) //两个传感器都在黑线上时,小车匀速前进
   {
   forward(); //小车前进
   }
     }
};

}

/************************************************************
函数功能:红外线触发的外中断处理函数
*************************************************************/
void Int0(void) interrupt 0
{
if((LowTime>7800)&&(LowTime<8800)&&(HighTime>3600)&&(HighTime<4700))
 {
   if(DeCode()==1) // 执行遥控解码功能
{
  switch(IRcode[2])
{
case 0x46:
/*恢复原始速度*/
CCAP0H=CCAP0L=0x2C;
               CCAP1H=CCAP1L=0x2C;

forward();
LCD_write_string(7,1,"         ");
LCD_write_string(7,1,"forward");
break;
case 0x15:
//back();
//LCD_write_string(0,1,"         ");
  //LCD_write_string(0,1,"speed changed");

start_xunji_flag = ON;/*启动寻迹功能*/
//flag = ON;
//xunji();

LCD_write_string(7,1,"         ");
LCD_write_string(7,1,"back");
break;
case 0x44:
left();
LCD_write_string(7,1,"         ");
LCD_write_string(7,1,"left");
break;
case 0x43:
right();
LCD_write_string(7,1,"         ");
LCD_write_string(7,1,"right");
break;
case 0x40:
start_xunji_flag = OFF;/*停止寻迹功能*/
stop();
LCD_write_string(7,1,"         ");
LCD_write_string(7,1,"stop");
break;
default:
/*调整PWM占空比*/
CCAP0H=CCAP0L=0x4C;
               CCAP1H=CCAP1L=0x2C;

forward();/*调速后前进*/
//stop();
LCD_write_string(0,1,"         ");
LCD_write_string(0,1,"speed changed");
break;
}


}
}
EX0=1;   //开启外中断EX0
TR1 = 1; /*打开定时器1*/
 }
10分悬赏
1157
king_king2
文章数:43
年度积分:50
历史总积分:1157
注册时间:2014/6/9
发站内信
发表于:2014/7/9 10:15:28
#1楼
1、“start_xunji_flag”是否定义为了全局变量
2、在设置“start_xunji_flag”为ON的地方是否存在于其它文件,但在本文件中没有声名为“extern start_xunji_flag ”
3、ON这个信号是否为读取51本身引脚的输出信号(51并不能读取自己引脚所输出的电平)
4、是否有进入中断(EA貌似都没开吧,中断时间TH,TL也没有设置,使用模式也TMOD也没有,EX是外部中断的,但也有个TR1,还有其它很多的问题,都不清楚你是想使用外部引脚的中断,还是定时器中断,自己找个相关的看一下吧)!!
其本也就是上述的原因吧(中断设置的可能性很大),要是解决不了的话,可以把工程发给我!
[此贴子已经被作者于2014/7/10 9:29:19编辑过]
970
wangxd5429
文章数:41
年度积分:50
历史总积分:970
注册时间:2005/1/19
发站内信
发表于:2014/7/16 15:52:24
#2楼
谢谢king_king2的指导,但是问题仍然存在。您方便留一下QQ或者邮箱吗?我把工程发给您。我的QQ:292365479。
573
jiangq
文章数:5
年度积分:50
历史总积分:573
注册时间:2014/6/30
发站内信
发表于:2014/7/23 17:26:36
#3楼
这个程序结构太乱了,中断程序太长,
970
wangxd5429
文章数:41
年度积分:50
历史总积分:970
注册时间:2005/1/19
发站内信
发表于:2014/7/24 15:41:00
#4楼
问题解决了,谢谢各位高手!
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004