?? remote.lst
字號:
A51 MACRO ASSEMBLER REMOTE 11/17/2006 11:08:36 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN remote.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\C51\BIN\A51.EXE remote.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
0000 2 ORG 0000H
0000 0105 3 AJMP MAIN;轉入主程序
0003 4 ORG 0003H ;外部中斷P3.2腳INT0入口地址
0003 0110 5 AJMP INT ;轉入外部中斷服務子程序(解碼程序)
6 ;以下為主程序進行CPU中斷方式設置
0005 D2AF 7 MAIN:SETB EA ;打開CPU總中斷請求
0007 D288 8 SETB IT0 ;設定INT0的觸發方式為脈沖負邊沿觸發
0009 D2A8 9 SETB EX0 ;打開INT0中斷請求
10 ;以下對單片機的所有引腳進行初始化,全部設置成高電平
000B 759000 11 MOV P1,#00000000B
000E 010E 12 AJMP $
13
14 ;以下為進入P3.2腳外部中斷子程序,也就是解碼程序
0010 C2AF 15 INT: CLR EA ;暫時關閉CPU的所有中斷請求
16
0012 7E0A 17 MOV R6,#10
0014 1167 18 SB: ACALL YS1;調用882微秒延時子程序
0016 20B24B 19 JB P3.2,EXIT;延時882微秒后判斷P3.2腳是否出現高電平如果有就退出解碼程序
0019 DEF9 20 DJNZ R6, SB;重復10次,目的是檢測在8820微秒內如果出現高電平就退出解碼程序
21 ;以上完成對遙控信號的9000微秒的初始低電平信號的識別。
001B 30B2FD 22 JNB P3.2, $ ;等待高電平避開9毫秒低電平引導脈沖
001E 1170 23 ACALL YS2 ;延時4.74毫秒避開4.5毫秒的結果碼
24
0020 7F1A 25 MOV R7,#26;忽略前26位系統識別碼
26
0022 30B2FD 27 JJJJA:JNB P3.2,$;等待地址碼第一位的高電平信號
0025 120067 28 LCALL YS1;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
0028 A2B2 29 MOV C,P3.2;將P3.2引腳此時的電平狀態0或1存入C中
002A 5003 30 JNC UUUA;如果為0就跳轉到UUUA
002C 120079 31 LCALL YS3;檢測到高電平1的話延時1毫秒等待脈沖高電平結束
002F DFF1 32 UUUA: DJNZ R7,JJJJA
33
0031 791A 34 MOV R1,#1AH ;設定1AH為起始RAM區
0033 7A02 35 MOV R2,#2;接收從1AH到1BH的2個內存,用于存放操作碼和操作反碼
0035 7B08 36 PP: MOV R3,#8;每組數據為8位
37
0037 30B2FD 38 JJJJ: JNB P3.2,$;等待地址碼第一位的高電平信號
003A 120067 39 LCALL YS1;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
003D A2B2 40 MOV C,P3.2;將P3.2引腳此時的電平狀態0或1存入C中
003F 5003 41 JNC UUU;如果為0就跳轉到UUU
0041 120079 42 LCALL YS3;檢測到高電平1的話延時1毫秒等待脈沖高電平結束
0044 E7 43 UUU: MOV A,@R1;將R1中地址的給A
0045 13 44 RRC A;將C中的值0或1移入A中的最低位
0046 F7 45 MOV @R1,A;將A中的數暫時存放在R1數值的內存中
0047 DBEE 46 DJNZ R3,JJJJ;接收滿8位換一個內存
0049 09 47 INC R1;對R1中的值加1,換下一個RAM
004A DAE9 48 DJNZ R2,PP ;接收完8位數據碼和8位數據反碼,存放在1AH/1BH中
004C B290 49 cpl P1.0
004E E51A 50 MOV A,1AH
0050 F4 51 CPL A;對1AH取反后和1BH比較
0051 B51B10 52 CJNE A,1BH,EXIT;如果不等表示接收數據發生錯誤,放棄
53
0054 851A90 54 MOV P1,1AH;將按鍵的鍵值通過P1口的8個LED顯示出來!
0057 C2A5 55 CLR P2.5;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
0059 120070 56 LCALL YS2
005C 120070 57 LCALL YS2
005F 120070 58 LCALL YS2
A51 MACRO ASSEMBLER REMOTE 11/17/2006 11:08:36 PAGE 2
0062 D2A5 59 SETB P2.5;蜂鳴器停止
0064 D2AF 60 EXIT: SETB EA ;允許中斷
0066 32 61 RETI ;退出解碼子程序
62
0067 7C14 63 YS1: MOV R4,#20 ;延時子程序1,精確延時882微秒
0069 7D14 64 D1: MOV R5,#20
006B DDFE 65 DJNZ R5,$
006D DCFA 66 DJNZ R4,D1
006F 22 67 RET
0070 7C0A 68 YS2: MOV R4,#10 ;延時子程序2,精確延時4740微秒
0072 7DEB 69 D2: MOV R5,#235
0074 DDFE 70 DJNZ R5,$
0076 DCFA 71 DJNZ R4,D2
0078 22 72 RET
0079 7C02 73 YS3: MOV R4,#2;延時程序3,精確延時1000微秒
007B 7DF8 74 D3:MOV R5,#248
007D DDFE 75 DJNZ R5,$
007F DCFA 76 DJNZ R4,D3
0081 22 77 RET
78 END
A51 MACRO ASSEMBLER REMOTE 11/17/2006 11:08:36 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
D1 . . . . . . . . C ADDR 0069H A
D2 . . . . . . . . C ADDR 0072H A
D3 . . . . . . . . C ADDR 007BH A
EA . . . . . . . . B ADDR 00A8H.7 A
EX0. . . . . . . . B ADDR 00A8H.0 A
EXIT . . . . . . . C ADDR 0064H A
INT. . . . . . . . C ADDR 0010H A
IT0. . . . . . . . B ADDR 0088H.0 A
JJJJ . . . . . . . C ADDR 0037H A
JJJJA. . . . . . . C ADDR 0022H A
MAIN . . . . . . . C ADDR 0005H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PP . . . . . . . . C ADDR 0035H A
SB . . . . . . . . C ADDR 0014H A
UUU. . . . . . . . C ADDR 0044H A
UUUA . . . . . . . C ADDR 002FH A
YS1. . . . . . . . C ADDR 0067H A
YS2. . . . . . . . C ADDR 0070H A
YS3. . . . . . . . C ADDR 0079H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -