打印

红外遥控接收为何频繁接收不到?代码如下

[复制链接]
2620|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningling_21|  楼主 | 2010-1-21 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_IN    EQU       P3.2
BZ    EQU       P2.0
LED      EQU       P2.1   ;进入中断后亮,退出中断熄灭  
LED1  EQU       P2.7   ;程序正常运行,长亮或不亮表示死循环
LED2     EQU       P2.2   ;串口正在发送数据
LED3  EQU       P3.4   ;解码正确则亮,否则熄灭
LED4  EQU       P3.5   ;解码错误指示灯亮
LED_PORT EQU       P0   ;数码管显示端口
FLAG     EQU       20H.0  ;接收正确标志
R_Data   EQU       30H
DATA_USR EQU       31H   ;接收红外编码中的用户码
DATA_USN EQU       32H   ;反码
DATA_OPT EQU       33H   ;接收红外编码中的操作码
DATA_OPN EQU     34H           ;反码
DISP_BUF EQU       35H   ;存放数码管显示的内容
TX_BUF   EQU       36H
CONT0  EQU       40H
CONT1  EQU       41H
CONT2    EQU       42H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         ORG       0000H
         AJMP      RESET
    ORG    0003H
    AJMP      INT0_ISR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;RESET AND SYSTEM INIT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RESET:   MOV       SP,  #60H
    CLR       BZ
    MOV       R0,  #07FH
    CLR       A
R_LP:  MOV       @R0, A
     DJNZ      R0,  R_LP
    MOV       R0,  #0FFH
    CLR       A
R_LP0:   MOV       @R0, A
      DEC       R0
      CJNE      R0,  #7FH,R_LP0
         LCALL     INT0_INIT
      MOV       TMOD,#21H
      MOV       TH1, #0FDH
      MOV       TL1, #0FDH
   MOV    TH0, #00H
   MOV       TL0, #00H
      MOV       SCON,#50H
   CLR       TR0
      SETB      TR1
      SETB      LED3
      SETB      LED4
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:  NOP      
    INC    CONT0
    MOV       A,CONT0
    CJNE      A,#250,JIXU0
    MOV       CONT0,#00
      INC       CONT1
    MOV       A,CONT1
   CJNE      A,#250,JIXU0
    MOV       CONT1,#00
   CPL       LED1
    INC       CONT2
    MOV       A,CONT2
    CJNE      A,#2,JIXU0
    MOV       CONT2,#0
   CPL       P2.2
JIXU0:  NOP
         JNB    FLAG,MAIN                ;接收正确?   
      MOV       A,DATA_OPT    ;正确,显示数字,发送数码   
   ANL       A,#0FH
   MOV       R2,A
   CLR       CY
   SUBB      A,#10
   JB        CY,XIAOYU10
   AJMP      JIXU1
XIAOYU10:MOV       A,R2
JIXU1:  MOV       DISP_BUF,A         ;操作码送显示数码管
         LCALL     LED_DISPLAY
TX_TRS:  CLR       LED2
    CLR       EA         ;TX DATA TO PC
   MOV     A,DATA_USR
   CJNE      A,#0FFH,TX_TRS0
   AJMP      TX_EXIT
TX_TRS0:
   MOV       TX_BUF,DATA_USR
   ;LCALL     TX_BYTE
      MOV       TX_BUF,DATA_USN
   ;LCALL     TX_BYTE
   MOV       TX_BUF,DATA_OPT
   LCALL     TX_BYTE
   MOV       TX_BUF,DATA_OPN
   ;LCALL     TX_BYTE
TX_EXIT:
   SETB      EA
   SETB      LED2
      AJMP      MAIN

LED_DISPLAY:
      MOV    A,DISP_BUF
   MOV    DPTR,#TABLED
   MOVC    A,@A+DPTR
   MOV    LED_PORT,A
   NOP
   RET

INT0_ISR:
   PUSH       ACC
   PUSH       PSW
   CLR        EA   
      CLR        LED  
   SETB       BZ
   MOV        R4,#0AH
I_LOP:  
   LCALL      DEL840
   JB         IR_IN,DECODE_ERROR_0    ;9MS内出现高电平则出错
   DJNZ       R4,I_LOP                ;引导码检测 9MS_H
   JNB        IR_IN, $              ;引导码检测 ;等待高
   
   
   LCALL      DEL4D7MS                ;延时4.7MS,避开引导码   
;--------------------------------------------------------
    MOV        R3,#04H        ;共4个字节
   MOV        R1,#DATA_USR
NEXT_BYTE:
   MOV        R4,#08H
NEXT_BIT:                               ;检测一位数据
   JNB     IR_IN,$                 ;等待560US结束,;560=230H
        
   LCALL   DEL840                  ;840US后的IR_IN状态即为此时对应的数据位   
   MOV     C,IR_IN
   RRC     A
   JNB     IR_IN,BIT_IS_ZERO
   LCALL     DEL1120                 ;数据位是1时,延时1120US,
BIT_IS_ZERO:
      NOP                                ;否则不延时                                    
   DJNZ     R4,NEXT_BIT
   MOV     @R1,A
   INC     R1
   DJNZ     R3,NEXT_BYTE
   MOV        R1,#DATA_USR            ;检查操作码正确?
   MOV        A,@R1
   INC        R1
   ANL        A,@R1
   CJNE       A,#00H,DECODE_ERROR     ;操作码检验失败
   CLR        P3.7   
   SETB       P3.6
   SETB       LED4
NEXTBY3:
   SETB       FLAG                    ;置1接接收正确标志
                  ;解码正确,LED3熄灭   
   AJMP       DE_EXT0
;-------------------------------------------------------  
DE_EXIT: CLR        FLAG      
DE_EXT0: SETB       LED
   CLR        BZ
   SETB       EA
   POP        PSW
    POP        ACC
   RETI                              ;接收完成中断返回
;-------------------------------------------------------
DECODE_ERROR_0:
   
   CLR        P3.6
   SETB       P3.7
   SETB       LED4
   AJMP       DE_EXIT
           ;引导码出错,返回
;-------------------------------------------------------
DECODE_ERROR:
      CLR        FLAG   
   CLR        LED4
   SETB       P3.6
   SETB       P3.7
   AJMP       DE_EXIT     ;解码校验出错,返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;NAME    : TABLED:
;        : GONG YIN JI LED TAB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TABLED:  DB     0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,0BFH,0FFH
      ; 0,   1,   2, 3,   4,   5,   6,  ,7    8,   9,   -,   灭
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;NAME    : INT0_INIT
;FUNCTION: ;外部中断0初始化
;INPUT   : NONE
;OUTPUT  : NONE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT0_INIT:
       SETB        EX0    ;外中断允许
      SETB        IT0           
      SETB        EA        ;start the int0
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;NAME    : TX_BYTE
;FUNCTION: SEND BYTE TO RS232
;INPUT   : TX_BUF
;OUTPUT  : PC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TX_BYTE:
    CLR         TI
      MOV         SBUF,TX_BUF
      JNB         TI,$
      CLR         TI
      RET

DEL4D7MS:
      MOV        R7,#15
L_LOP0:  MOV        R6,#155
      DJNZ       R6,$
      DJNZ       R7,L_LOP0
      RET

DEL470US:
      MOV        R7,#4
L_LOP1:  MOV        R6,#52
      DJNZ       R6,$
      DJNZ       R7,L_LOP1
      RET

DEL1120:
      MOV        R7,#5
L_LOP2:
      MOV        R6,#110
      DJNZ       R6,$
      DJNZ       R7,L_LOP2
      RET

DEL840:
      MOV        R7,#5
L_LOP3:
      MOV        R6,#82
      DJNZ       R6,$
      DJNZ       R7,L_LOP3
      RET

DEL880US:
         MOV     R6,#5        ;//延时880微秒
D2:      MOV     R7,#86     ;
         DJNZ    R7,$         
         DJNZ    R6,D2
         RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         END

相关帖子

沙发
Txapp| | 2010-1-21 17:41 | 只看该作者
C code will be best to understand.

使用特权

评论回复
板凳
ningling_21|  楼主 | 2010-1-22 13:14 | 只看该作者
本帖最后由 ningling_21 于 2010-1-22 17:03 编辑

楼上这英文什么意思?

使用特权

评论回复
地板
ningling_21|  楼主 | 2010-1-22 17:03 | 只看该作者
遥控器发送4,5次才收到一次,什么原因?

使用特权

评论回复
5
呱唧呱唧| | 2010-1-22 17:59 | 只看该作者
看到汇编,就头大了,呵呵

使用特权

评论回复
6
呱唧呱唧| | 2010-1-22 18:00 | 只看该作者
能不动就不用,要是别人来看你的汇编,估计要吐血

使用特权

评论回复
7
ningling_21|  楼主 | 2010-1-22 20:57 | 只看该作者
能不动就不用,要是别人来看你的汇编,估计要吐血
呱唧呱唧 发表于 2010-1-22 18:00


那不一定哦...

使用特权

评论回复
8
ningling_21|  楼主 | 2010-1-23 18:23 | 只看该作者
问题已经解决...

使用特权

评论回复
9
war3inst| | 2014-4-22 19:07 | 只看该作者
你好 我也遇到同样问题。我的QQ   1354960756   我想与你交流一下  请问你怎么解决的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5013

主题

17736

帖子

51

粉丝