3622|8

42

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口接收正常,LED却不亮,WHY? [复制链接]

想单片机接收一个PC发送过来的指定字符(例如's'),LED就亮,否则LED灭,字符接收发送正常,但是LED就是没有反应,请教...新手...呜呜!
  1. #include
  2. #include "serial2.h"
  3. bit recFlag=0;
  4. uchar ch ;
  5. sbit D1= P1^7;
  6. bit led_on=0;
  7. void init_serialcom( void )  
  8.   {  
  9.           SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr  
  10.           TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload  
  11.           PCON &= 0xef ; //SMOD=0;  
  12.           TH1 = 0xFD ;  //Baud:19200 fosc=11.0592MHz  
  13.           IE |= 0x90 ;  //Enable Serial Interrupt  
  14.           TR1 = 1 ;    // timer 1 run  
  15.           TI=1;            
  16.         }
  17. //向串口发送一个字符  
  18.           void send_char_com( uchar ch)  
  19.           {  
  20.         
  21.             SBUF=ch;  
  22.             while (TI== 0);  
  23.                 TI= 0 ;  
  24.           }  


  25. //串口接收中断函数  
  26. void serial () interrupt 4 using 3  
  27. {   
  28.     EA = 0;
  29.     if (RI)  
  30.     {  
  31.         RI = 0 ;
  32.         
  33.         ch = SBUF;  
  34.             recFlag= 1 ; //就置位取数标志
  35.          }
  36.          if(ch=='s')
  37.          {
  38.           led_on=1;
  39.          }
  40.     EA = 1;

  41. }
  42. main()  
  43. {   D1=1;
  44.     init_serialcom(); //初始化串口  
  45.     while ( 1 )  
  46.     {
  47.         if( recFlag )
  48.         {  
  49.                     recFlag=0;
  50.             send_char_com( ch );
  51.                      
  52.         }
  53.                   if(led_on)
  54.                   {
  55.                      while(1)
  56.                     {
  57.                       D1=0;
  58.                      }
  59.                 }
  60.      }
  61. }
复制代码

最新回复

原来是仿真的。  详情 回复 发表于 2009-7-22 00:04
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
volatile bit recFlag=0;
volatile bit led_on=0;
这样定义,避免编译器不恰当的优化产生。
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
先确定
发送过来的指定字符(例如's'),LED就亮,否则LED灭
这个, 这个确定再测试其他的。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
确定一下P1.7这个IO口是不是已经初始化为输出了?
我看你的代码好像没有初始化哦。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
先确定那个LED是高驱动还是低驱动
再确定你的口线的驱动够不够
然后再看串口通信是不是正确的
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
觉得最大的可能还是IO口没有初始化。高驱动还是低驱动,在这个程序都会亮一下吧。因为最开始是高电平的。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
我的设计是D1=0(低电平)LED会亮,其实我觉得main()函数入面的初始化D1=1;都是多余的,因为51上电就默认高电平,我PROTEUS仿真的,就是没有反应,郁闷~~是不是我的程序没有问题呢?可惜我不会把KEIL同PROTEUS联合单步调试~
main()  
{   D1=1;
    init_serialcom(); //初始化串口  
    while ( 1 )  
    {
        if( recFlag )
        {  
            recFlag=0;
            send_char_com( ch );
              
        }
          if(led_on)
          {
             while(1)
            {
              D1=0;
             }
            }
     }
}
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
硬件问题
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

9
 
原来是仿真的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表