导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[wangxd5429][求助]关于51单片机的问题1



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*/
  ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:406毫秒 查询6次