⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir-dsy.lst

📁 红外遥控键值解码
💻 LST
字号:
A51 MACRO ASSEMBLER  IR_DSY                                                               10/12/2006 08:59:00 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN IR-DSY.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-DSY.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;*         数码管显示, P0口为数码管的数据口                                     *
                       2     ;*                                                                              *
                       3     ;*         K17键按下,继电器吸合。K19键按下,继电器关闭。                       *
                       4     ;*                                                                              *
                       5     
                       6     ;-----------------------------------------------
  0020                 7            IRCOM  EQU  20H       ;20H-23H IR使用
                       8     
  00B2                 9            IRIN   EQU  P3.2
  00B7                10            BEEP   EQU  P3.7
  0093                11            RELAY  EQU  P1.3
                      12     ;------------------------------------------------
0000                  13              ORG 0000H
0000 8003             14              JMP  MAIN
                      15     
0003                  16              ORG 0003H         ;外部中断INT0入口地址
0003 802A             17              JMP  IR_IN
                      18     ;------------------------------------------------
0005                  19     MAIN:
0005 758160           20               MOV   SP,#60H
0008 7400             21               MOV   A,#00H
000A 7820             22               MOV   R0,#20H
000C F6               23     LOOP0:    MOV   @R0,A          ;20H-27H清零
000D 08               24               INC   R0
000E B828FB           25               CJNE  R0,#28H,LOOP0
0011 75A881           26               MOV  IE,#81H       ;允许总中断中断,使能 INT0 外部中断
0014 758801           27               MOV  TCON,#01H     ;触发方式为脉冲负边沿触发
                      28     
0017 D2B2             29               SETB  IRIN
0019 D2B7             30               SETB  BEEP
001B D293             31               SETB  RELAY
001D 11A2             32               CALL  IR_SHOW
                      33     
001F                  34     LOOP1:
001F 11A2             35               CALL  IR_SHOW
0021 E522             36               MOV  A,22H
0023 B44002           37               CJNE  A,#40H,LOOP2    ;K17键按下
0026 C293             38               CLR   RELAY           ;继电器吸合
0028 B40402           39     LOOP2:    CJNE  A,#04H,LOOP3    ;K19键按下
002B D293             40               SETB  RELAY           ;继电器关闭
002D 80F0             41     LOOP3:    JMP   LOOP1
                      42     
                      43     ;---------------------------------------------------
                      44     ; IR 译码子程序
                      45     ;---------------------------------------------------
002F                  46     IR_IN:
002F C2AF             47               CLR EA         ;暂时关闭CPU的所有中断请求
0031 C0E0             48               PUSH  ACC
0033 C0D0             49               PUSH  PSW
0035 D2D3             50               SETB  PSW.3     ;选择工作寄存器组1
0037 C2D4             51               CLR   PSW.4
0039 7A04             52               MOV   R2,#04H
003B 7820             53               MOV   R0,#IRCOM
003D 30B204           54      I1:      JNB  IRIN,I2       ;等待 IR 信号出现
0040 DAFB             55               DJNZ  R2,I1
0042 803E             56               JMP  IR_OUT        ;IR信号没出现,退出。
0044 7C14             57      I2:      MOV  R4,#20
0046 11EF             58      I20:     CALL  DEL
A51 MACRO ASSEMBLER  IR_DSY                                                               10/12/2006 08:59:00 PAGE     2

0048 DCFC             59               DJNZ  R4,I20
004A 20B2F0           60               JB  IRIN,I1        ;确认IR信号出现
004D 20B204           61      I21:     JB  IRIN,I3        ;等 IR 变为高电平
0050 11EF             62               CALL  DEL
0052 80F9             63               JMP  I21
0054 7B00             64      I3:      MOV  R3,#0         ;8位数清为0
0056 30B204           65      LL:      JNB  IRIN,I4       ;等 IR 变为低电平
0059 11EF             66               CALL  DEL
005B 80F9             67               JMP  LL
005D 20B204           68      I4:      JB  IRIN,I5        ;等 IR 变为高电平
0060 11EF             69               CALL  DEL
0062 80F9             70               JMP  I4
0064 7A00             71      I5:      MOV  R2,#0         ;0.14ms 计数
0066 11EF             72      L1:      CALL  DEL
0068 20B213           73               JB  IRIN, N1       ;等 IR 变为高电平
                      74                                  ;IR=0,检查R2中的计数值
006B 7408             75               MOV  A,#8
006D C3               76               CLR  C
006E 9A               77               SUBB  A,R2         ;判断高低位
                      78                                  ;IF C=0  BIT=0
006F E6               79               MOV  A,@R0
0070 13               80               RRC  A
0071 F6               81               MOV  @R0,A         ;处理完一位
0072 0B               82               INC  R3
0073 BB08E0           83               CJNE  R3,#8,LL     ;需处理完8位
0076 7B00             84               MOV  R3,#0
0078 08               85               INC  R0
0079 B824DA           86               CJNE  R0,#24H,LL   ;收集到4字节了
007C 800B             87               JMP  IR_COMP
007E 0A               88      N1:      INC  R2
007F BA1EE4           89               CJNE  R2,#30,L1    ;0.14ms 计数过长则时间到自动离开
                      90     
0082 D0D0             91     IR_OUT:   POP  PSW
0084 D0E0             92               POP  ACC
0086 D2AF             93               SETB  EA
0088 32               94               RETI
                      95     ;---------------------------------------------------------------
                      96     ;键值比较与键值数据处理
                      97     ;22H存入用户编码,23H存入用户编码的反码
                      98     ;---------------------------------------------------------------
0089                  99     IR_COMP:
0089 E522            100               MOV A,22H
008B F4              101               CPL A                ;将22H取反后和23H比较
008C B523F3          102               CJNE A,23H,IR_OUT    ;如果不等表示接收数据发生错误,放弃
008F                 103     IR_CHULI:
008F E522            104               MOV  A,22H
0091 540F            105               ANL  A,#0FH
0093 F525            106               MOV  25H,A           ;送个位显示单元
0095 E522            107               MOV  A,22H
0097 54F0            108               ANL  A,#0F0H
0099 C4              109               SWAP  A
009A F526            110               MOV  26H,A           ;送十位显示单元
009C 11A2            111               CALL  IR_SHOW        ;显示键值
009E 11D1            112               CALL  BEEP_BL        ;蜂鸣器鸣响表示解码成功
00A0 80E0            113               JMP  IR_OUT
                     114     
                     115     ;=======================================================
                     116     ;键值显示
                     117     ;=======================================================
00A2                 118     IR_SHOW:
00A2 E525            119                  MOV   A,25H               ;取显示数据到A
00A4 9000C1          120                  MOV   DPTR,#TAB           ;取段码表地址
00A7 93              121                  MOVC  A,@A+DPTR           ;查显示数据对应段码
00A8 F580            122                  MOV   P0,A                ;段码放入P0口
00AA C2A7            123                  CLR   P2.7
00AC D2A6            124                  SETB  P2.6
A51 MACRO ASSEMBLER  IR_DSY                                                               10/12/2006 08:59:00 PAGE     3

00AE 1200FC          125                  LCALL  DELAY1
00B1 E526            126                  MOV   A,26H               ;取显示数据到A
00B3 9000C1          127                  MOV   DPTR,#TAB           ;取段码表地址
00B6 93              128                  MOVC  A,@A+DPTR           ;查显示数据对应段码
00B7 F580            129                  MOV   P0,A                ;段码放入P0口
00B9 C2A6            130                  CLR   P2.6
00BB D2A7            131                  SETB  P2.7
00BD 1200FC          132                  LCALL  DELAY1
00C0 22              133                  RET
                     134     ;-----------------------------------------------------
00C1                 135     TAB:
00C1 C0F9A4B0        136      DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
00C5 999282F8                
00C9 80908883        137      DB  80H,90H,88h,83h,0c6h,0a1h,86h,8eh        ;0-F
00CD C6A1868E                
                     138     ;-----------------------------------------------------
                     139     
                     140     ;--------------------------------------------------------
                     141     ;蜂鸣器响一声子程序
                     142     ;--------------------------------------------------------
00D1                 143     BEEP_BL:
00D1 7E64            144              MOV  R6,#100
00D3 11DE            145       BL1:   CALL  DEX1
00D5 B2B7            146              CPL  BEEP
00D7 DEFA            147              DJNZ  R6,BL1
00D9 7D14            148              MOV  R5,#20
00DB 11E4            149              CALL  DELAY
00DD 22              150              RET
00DE 7FB4            151      DEX1:   MOV  R7,#180
00E0 00              152      DEX2:   NOP
00E1 DFFD            153              DJNZ  R7,DEX2
00E3 22              154              RET
00E4                 155      DELAY:                    ;延时R5×10MS
00E4 7E19            156              MOV  R6,#25
00E6 7F64            157       D1:    MOV  R7,#100
00E8 DFFE            158              DJNZ  R7,$
00EA DEFA            159              DJNZ  R6,D1
00EC DDF6            160              DJNZ  R5,DELAY
00EE 22              161              RET
                     162     ;------------------------------------------------
                     163     ; DELAY  R5*0.14MS
00EF                 164     DEL:
00EF 7D01            165               MOV  R5,#1       ;IR解码使用
00F1 7E02            166     DEL0:     MOV  R6,#2
00F3 7F20            167     DEL1:     MOV  R7,#32
00F5 DFFE            168     DEL2:     DJNZ  R7,DEL2
00F7 DEFA            169               DJNZ  R6,DEL1
00F9 DDF6            170               DJNZ  R5,DEL0
00FB 22              171               RET
                     172     ;-------------------------------------------------
00FC                 173     DELAY1:                    ;数码管延时4MS
                     174     
00FC 7E14            175              MOV  R6,#20
00FE 7F64            176       DL2:   MOV  R7,#100
0100 DFFE            177              DJNZ  R7,$
0102 DEFA            178              DJNZ  R6,DL2
0104 22              179              RET
                     180     ;-------------------------------------------------
                     181             END               ;结束
                             
A51 MACRO ASSEMBLER  IR_DSY                                                               10/12/2006 08:59:00 PAGE     4

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

ACC. . . . . . . .  D ADDR   00E0H   A   
BEEP . . . . . . .  B ADDR   00B0H.7 A   
BEEP_BL. . . . . .  C ADDR   00D1H   A   
BL1. . . . . . . .  C ADDR   00D3H   A   
D1 . . . . . . . .  C ADDR   00E6H   A   
DEL. . . . . . . .  C ADDR   00EFH   A   
DEL0 . . . . . . .  C ADDR   00F1H   A   
DEL1 . . . . . . .  C ADDR   00F3H   A   
DEL2 . . . . . . .  C ADDR   00F5H   A   
DELAY. . . . . . .  C ADDR   00E4H   A   
DELAY1 . . . . . .  C ADDR   00FCH   A   
DEX1 . . . . . . .  C ADDR   00DEH   A   
DEX2 . . . . . . .  C ADDR   00E0H   A   
DL2. . . . . . . .  C ADDR   00FEH   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
I1 . . . . . . . .  C ADDR   003DH   A   
I2 . . . . . . . .  C ADDR   0044H   A   
I20. . . . . . . .  C ADDR   0046H   A   
I21. . . . . . . .  C ADDR   004DH   A   
I3 . . . . . . . .  C ADDR   0054H   A   
I4 . . . . . . . .  C ADDR   005DH   A   
I5 . . . . . . . .  C ADDR   0064H   A   
IE . . . . . . . .  D ADDR   00A8H   A   
IRCOM. . . . . . .  N NUMB   0020H   A   
IRIN . . . . . . .  B ADDR   00B0H.2 A   
IR_CHULI . . . . .  C ADDR   008FH   A   
IR_COMP. . . . . .  C ADDR   0089H   A   
IR_IN. . . . . . .  C ADDR   002FH   A   
IR_OUT . . . . . .  C ADDR   0082H   A   
IR_SHOW. . . . . .  C ADDR   00A2H   A   
L1 . . . . . . . .  C ADDR   0066H   A   
LL . . . . . . . .  C ADDR   0056H   A   
LOOP0. . . . . . .  C ADDR   000CH   A   
LOOP1. . . . . . .  C ADDR   001FH   A   
LOOP2. . . . . . .  C ADDR   0028H   A   
LOOP3. . . . . . .  C ADDR   002DH   A   
MAIN . . . . . . .  C ADDR   0005H   A   
N1 . . . . . . . .  C ADDR   007EH   A   
P0 . . . . . . . .  D ADDR   0080H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RELAY. . . . . . .  B ADDR   0090H.3 A   
SP . . . . . . . .  D ADDR   0081H   A   
TAB. . . . . . . .  C ADDR   00C1H   A   
TCON . . . . . . .  D ADDR   0088H   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -