No.107065 作者:wangxd5429 邮件:wangxd5429@sohu.com ID:30288 登陆:55次 文章数:56篇 最后登陆IP:211.103.220.197 最后登陆:2017/1/4 14:21:50 注册:2005/1/21 11:46:15 财富:452 发帖时间:2014/7/8 14:47:20 发贴者IP:61.148.242.48 标题:wangxd5429:[求助]关于51单片机的问题1 摘要:No.107065[求助]关于51单片机的问题1 各位高手,小弟正在基于STC51单片机开发程序,主程序的while循环中加入了一个if判断,如果start_xunji_flag全局变量等于ON,则进入当前分支,否则不进入分支,继续循环。在外部中断0服务子程序中,添加对全局变量start_xunji_flag设置为ON。测试程序,进入外部中断0,全局变量start_xunji_flag被设置为ON,但是主程序的while循环中未进入if分支。请教其中的原因,谢谢!代码如下: /************************************************************ 函数功能:主函数 *************************************************************/ void main() { LCD_init(); //调用LCD初始化函数 LCD_write_string(0,0,dis1);/*从第0列第0行起显示"smart car"*/ LCD_write_string(0,1,dis2);/*从第0列第1行起显示智能小车状态,初始值为停止*/ Pwm_Init();/*脉宽调制初始化*/ /*设置红外线中断为最高优先级*/ IPH|=PX0H; PX0 = 1; /*设置定时器1中断为最低优先级*/ IPH &= ~PT1H; PT1 = 0; EA=1; //开启总中断 EX0=1; //开外中断0 ,接收红外模块信号中断 ET0=1; //定时器T0中断允许 IT0=1; //外部中断0的下降沿触发 TMOD=0x11; //使用定时器T0的模式1,使用16位定时器,设置定时器T1,使用16位定时器 TR0=0; //定时器T0关闭,停止定时器 /*初始化占空比*/ CCAP0H=CCAP0L=0x2C; CCAP1H=CCAP1L=0x2C; /*定时器1调速占空比设置*/ count1 = 50; count2 = 50; /*设置P0.7~P0.2为准双向口,P0.1为高阻输入,P0.0为高阻输入,引脚的输出阻抗大于输入阻抗即为高阻输入*/ P0M1 = 0x03; P0M0 = 0x00; T1_Init();/*定时器1初始化*/ start_xunji_flag = OFF;/*默认寻迹开关初始化为关闭*/ /*等待红外信号产生的中断,寻迹主循环*/ while(1) //while循环 { //LCD_write_string(0,1," "); //LCD_write_string(0,1,"while"); if (start_xunji_flag == ON) { //LCD_write_string(0,1," "); //LCD_write_string(0,1,"enter"); 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 { TR1 = 0; /*关闭定时器1*/ ......
>>返回讨论的主题
|