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

📄 ir.lst

📁 《PIC单片机应用开发典型模块》源代码及图片
💻 LST
字号:
A51 MACRO ASSEMBLER  IR                                                                   06/23/2007 11:00:00 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;----------------------------------
                       2     ;                   单片机红外遥控实例
                       3     ;          功能:通过红外遥控实现对LED的控制
                       4     ;-----------------------------------
                       5     
0000                   6     ORG 0000H
                       7     
0000                   8     MAIN:
0000 30A203            9         JNB P2.2,IR         ; 遥控扫描       
0003 020000           10         LJMP MAIN        ; 在正常无遥控信号时一体化红外接收头输出是高电平,程序一直在循环。
                      11     
                      12     ;------------------------------
                      13     ;         解码程序
                      14     ;-------------------------------
0006                  15     IR:
                      16     ; 以下对遥控信号的9000微秒的初始低电平信号的识别
                      17         
0006 7E0A             18      MOV R6,#10
0008                  19     IR_SB:
0008 1163             20          ACALL DELAY882    ; 调用882微秒延时子程序
000A 20A22B           21          JB P2.2,IR_ERROR    ; 延时882微秒后判断P2.2脚是否出现高电平,如果有就退出解码程序
000D DEF9             22          DJNZ R6,IR_SB      ; 重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
                      23     
                      24          ; 识别连发码,和跳过4.5ms高电平
000F 30A2FD           25          JNB P2.2,$        ; 等待高电平避开9毫秒低电平引导脉冲
0012 1171             26          ACALL DELAY2400
0014 30A21F           27          JNB P2.2,IR_Rp    ; 这里为低电平,认为是连发码信号?
0017 1171             28          ACALL DELAY2400
                      29     
                      30          ; 以下32位数据码读取
0019 792A             31          MOV R1,#2AH          ; 设定2AH为初始RAM
001B 7A04             32          MOV R2,#4
001D                  33     IR_4BYTE:
001D 7B08             34          MOV R3,#8
001F                  35     IR_8BIT:
001F 30A2FD           36          JNB P2.2,$             ; 等待地址码第一位的高电平信号
0022 120063           37          LCALL DELAY882       ; 高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
0025 A2A2             38          MOV C,P2.2             ; 将P2.2引脚此时的电平状态0或1存入C中
0027 5003             39          JNC IR_8BIT_0          ; 如果为0就跳到IR_8BIT_0
0029 12006A           40          LCALL DELAY1000
002C                  41      IR_8BIT_0:
002C E7               42          MOV A,@R1              ; 将R1中地址给A
002D 13               43          RRC A                  ; 将C中的值0或者1移入A中的最高位
002E F7               44          MOV @R1,A              ; 将A中的数暂时存放到R1中
002F DBEE             45          DJNZ R3,IR_8BIT        ; 接收地址码的高8位
0031 09               46          INC R1                 ; 对R1中的值加1,换下一个ram
0032 DAE9             47          DJNZ R2,IR_4BYTE       ; 接收完16位地址码和8位数据码和8位数据反码
                      48                                 ; 存放在2AH、2bh、2ch、2dh的ram中
                      49          ; 解码成功
0034 8005             50          JMP IR_GOTO
                      51     
0036                  52     IR_Rp:
                      53     ; 这里为重复码执行处
                      54     ; 按住遥控按键时,每过108ms就到这里来
0036 8003             55         JMP IR_GOTO
                      56     
0038                  57     IR_ERROR:
                      58     ; 出错退出
A51 MACRO ASSEMBLER  IR                                                                   06/23/2007 11:00:00 PAGE     2

0038 020000           59         LJMP MAIN              ; 退出解码子程序
                      60     
                      61     ;---------------------------
                      62     ;     遥控执行部分
                      63     ;---------------------------
003B                  64     IR_GOTO:
                      65     ; 这里还要判断1AH和1BH两个系统码或用户码,用于识别不同的遥控器
003B E52A             66          MOV A,2AH 
003D B407F8           67          CJNE A,#07H,IR_ERROR    ; 用户码1不对则退出
0040 E52B             68          MOV A,2BH
0042 B411F3           69          CJNE A,#11H,IR_ERROR    ; 用户码2不对则退出
                      70     
                      71          ; 判断两个数据码是否相反
0045 E52C             72          MOV A,2CH
0047 F4               73          CPL A
0048 B52DED           74          CJNE A,2DH,IR_ERROR     ; 两个数据码不相反则退出
                      75     
                      76          ; 遥控执行部分
004B 851D90           77          MOV P1,1DH               ; 将按键的键值通过P1口的8个LED显示出来
                      78          
004E 120071           79          LCALL DELAY2400
0051 120071           80          LCALL DELAY2400
0054 120071           81          LCALL DELAY2400
                      82          
                      83          ; 清除遥控值使连按失败
0057 751A00           84          MOV 1AH,#00H
005A 751B00           85          MOV 1BH,#00H
005D 751C00           86          MOV 1CH,#00H
0060 020000           87          LJMP MAIN
                      88     
                      89     ;------------------------
                      90     ;      延时子程序
                      91     ;------------------------
0063                  92     DELAY882:
                      93     ;-------------
                      94     ; 1.085*((202*4)+5)=882
                      95     ;-------------
0063 7FCA             96          MOV R7,#202
0065                  97     DELAY882_A:
0065 00               98          NOP
0066 00               99          NOP
0067 DFFC            100          DJNZ R7,DELAY882_A
0069 22              101          RET
                     102     
006A                 103     DELAY1000:
                     104     ;-------------
                     105     ; 1.085*((229*4)+5)=1000
                     106     ;-------------
006A 7FE5            107          MOV R7,#229
006C                 108     DELAY1000_A:
006C 00              109          NOP
006D 00              110          NOP
006E DFF5            111          DJNZ R7,DELAY882_A
0070 22              112          RET
                     113     
0071                 114     DELAY2400:
                     115     ;-------------
                     116     ; 1.085*((245*9)+5)=2397.85
                     117     ;-------------
0071 7FF5            118          MOV R7,#245
0073                 119     DELAY2400_A:
0073 00              120          NOP
0074 00              121          NOP
0075 00              122          NOP
0076 00              123          NOP
0077 00              124          NOP
A51 MACRO ASSEMBLER  IR                                                                   06/23/2007 11:00:00 PAGE     3

0078 00              125          NOP
0079 00              126          NOP
007A DFE9            127          DJNZ R7,DELAY882_A
007C 22              128          RET
                     129     END
A51 MACRO ASSEMBLER  IR                                                                   06/23/2007 11:00:00 PAGE     4

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


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

DELAY1000. . . . .  C ADDR   006AH   A   
DELAY1000_A. . . .  C ADDR   006CH   A   
DELAY2400. . . . .  C ADDR   0071H   A   
DELAY2400_A. . . .  C ADDR   0073H   A   
DELAY882 . . . . .  C ADDR   0063H   A   
DELAY882_A . . . .  C ADDR   0065H   A   
IR . . . . . . . .  C ADDR   0006H   A   
IR_4BYTE . . . . .  C ADDR   001DH   A   
IR_8BIT. . . . . .  C ADDR   001FH   A   
IR_8BIT_0. . . . .  C ADDR   002CH   A   
IR_ERROR . . . . .  C ADDR   0038H   A   
IR_GOTO. . . . . .  C ADDR   003BH   A   
IR_RP. . . . . . .  C ADDR   0036H   A   
IR_SB. . . . . . .  C ADDR   0008H   A   
MAIN . . . . . . .  C ADDR   0000H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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