导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助:一个单片机串口通信的程序,请帮忙找下错误

* 104426: 求助:一个单片机串口通信的程序,请帮忙找下错误

   kexiner 
kexiner发表的帖子 

 求助:一个单片机串口通信的程序,请帮忙找下错误
将单片机与计算机通过RS232相连,单片机的P1.4接蜂鸣器,P1.5接红灯,P1.6接绿灯。调试时使用串口调试助手。当从输入18H时,要求蜂鸣器响,19H时红、绿灯一起亮,1AH时红灯亮,1BH时绿灯亮。
下面是我的程序。调试时基本已实现了要求,可是,有一点毛病,比如我先输入18H,蜂鸣器响了,然后我再输入1AH,正确的结果是红灯亮,我的程序是先是蜂鸣器响,然后再发一次,红灯才会亮,我搞了好久,真不知道怎么办了,哪位高手帮帮忙啊! 

ORG    0000H
          LJMP   START
          ORG    0023H    
        
  START:  MOV    SP,#30H
          MOV    TMOD, #21H     ; 定时计数器0工作于方式1,1工作于方式2
          MOV    TH1,  #0FDH    ; 波特率9600
          MOV    TL1,  #0FDH
          MOV    SCON, #50H     ; 置串口为方式1,允许接收
          SETB   TR1
          SETB   EA             ; 开中断
          SETB   ES             ; 允许串口中断   
           
 LOOP:    LCALL  SIN         
          LCALL  DELAY_1
          AJMP   LOOP   
          
 SIN:     MOV    A,SBUF
          JNB    RI,$
          CLR    RI                                
          CJNE   A,#18H,GR        ;如果收到18H,即"↑",蜂鸣器响 
          JNB    RI,$
          CLR    RI
          CLR    P1.4
          LCALL  DELAY_1
          SETB   P1.4
          RET
                    
 GR:      CJNE   A,#19H,RED        ;如果收到19H,即"↓",红、绿灯一起亮
          JNB    RI,$
          CLR    RI
          CLR    P1.6             
          CLR    P1.5
          LCALL  DELAY_1 
          SETB   P1.6
          SETB   P1.5
          SETB   ES
          RET
                    
 RED:     CJNE   A,#1AH,GREEN          ;如果收到1AH,即"→",红灯亮          
          JNB    RI,$
          CLR    RI 
          CLR    P1.5
          LCALL  DELAY_1
          SETB    P1.5
          SETB    ES
          RET
                    
 GREEN:   CJNE   A,#1BH,ENT0           ;如果收到1BH,即"←",绿灯亮         
          CLR    RI
          CLR    P1.6
          LCALL  DELAY_1
          SETB   P1.6
          SETB   ES
          RET
                 
  ENT0:   SETB   ES                   ;允许串行中断
          RETI                        ;中断返回
          
 
         
       
DELAY_1:
        MOV  R0, #0FFH
  LOOP2:MOV  R1, #0FFH
  LOOP1:NOP
        NOP
        DJNZ R1, LOOP1
        DJNZ R0, LOOP2  
        RET
        
        END


 ORG    0000H
          LJMP   START
          ORG    0023H    
        
  START:  MOV    SP,#30H
          MOV    TMOD, #21H     ; 定时计数器0工作于方式1,1工作于方式2
          MOV    TH1,  #0FDH    ; 波特率9600
          MOV    TL1,  #0FDH
          MOV    SCON, #50H     ; 置串口为方式1,允许接收
          SETB   TR1
          SETB   EA             ; 开中断
          SETB   ES             ; 允许串口中断   
           
 LOOP:    LCALL  SIN          ; 返回初始状态( $QQT:0000  <CR>    <LF>   )
          LCALL  DELAY_1
          AJMP   LOOP   
          
 SIN:     MOV    A,SBUF
          JNB    RI,$
          CLR    RI                                
          CJNE   A,#18H,GR        ;如果收到18H,即"↑",蜂鸣器响 
          JNB    RI,$
          CLR    RI
          CLR    P1.4
          LCALL  DELAY_1
          SETB   P1.4
          RET
                    
 GR:      CJNE   A,#19H,RED        ;如果收到19H,即"↓",红、绿灯一起亮
          JNB    RI,$
          CLR    RI
          CLR    P1.6             
          CLR    P1.5
          LCALL  DELAY_1 
          SETB   P1.6
          SETB   P1.5
          SETB   ES
          RET
                    
 RED:     CJNE   A,#1AH,GREEN          ;如果收到1AH,即"→",红灯亮          
          JNB    RI,$
          CLR    RI 
          CLR    P1.5
          LCALL  DELAY_1
          SETB    P1.5
          SETB    ES
          RET
                    
 GREEN:   CJNE   A,#1BH,ENT0           ;如果收到1BH,即"←",绿灯亮         
          CLR    RI
          CLR    P1.6
          LCALL  DELAY_1
          SETB   P1.6
          SETB   ES
          RET
                 
  ENT0:   SETB   ES                   ;允许串行中断
          RETI                        ;中断返回
          
 
         
       
DELAY_1:
        MOV  R0, #0FFH
  LOOP2:MOV  R1, #0FFH
  LOOP1:NOP
        NOP
        DJNZ R1, LOOP1
        DJNZ R0, LOOP2  
        RET
        
        END

发表时间:2007年4月9日19:03:22

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  104706.[详细]谢谢
摘要:在仿真机上调试通过了,下面是正确的程序:  ORG    0000H         &n......(2200字)
- [kexiner][704次] 2007年4月15日

[上一篇帖子]:关于KS8695X问题请教各位大虾,小弟最近看到KS8695X的ARM,感觉不错。不过在看了一些资料
[下一篇帖子]:求教ADC0809和89C51的连接数据采集系统?[color=#FFF8DC]按照书上的接法但没有