📄 hwfs.lst
字号:
A51 MACRO ASSEMBLER HWFS 08/06/2005 09:10:52 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN HWFS.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE HWFS.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;=============电风扇红外发射(遥控器)程序=====================================
2 ;按键说明:
3 ;K1:低风档,键值为 01
4 ;K2:中风档,键值为 02
5 ;K3:高风档,键值为 03
6 ;K4:彩灯档,键值为 04
7 ;K5:自然风档,键值为05
8 ;K6:睡眠风档,键值为06
9 ;K7:正常风档,键值为07
10 ;K8:定时档,键值为08
11 ;K9:开关机,键值为9
12 ;采用+5V供电,用89C2051作主芯片,当没有按键按下时,进入待机状态
13 ;按键采用INT0进行中断,只采用了8个按键
14 ;==============================================================================
15 ;$include (2051RAM.INC)
+1 16 ;-------------------------------------------------------------------------------
+1 17 ; AT89C2051 内存RAM分配 Fiel = 2051ram.INC
+1 18 ;-------------------------------------------------------------------------------
+1 19 +1 $save
+1 35 +1 $restore
+1 36
37
38 ;$include(REG51.INC)
39
0000 40 ORG 0000H
0000 2100 41 JMP MAIN
0003 42 ORG 0003H ;INT0的中断入口
0003 213D 43 JMP KEY_INT0
000B 44 ORG 000BH ;T0的中断入口
000B 2195 45 JMP FM_T0
0100 46 ORG 0100H
47 ;------------------------------------------------------------------------------
48 ;进入主程序
49 ;------------------------------------------------------------------------------
0100 787F 50 MAIN: MOV R0,#7FH ;预使用单元清0
0102 E4 51 CLR A
0103 52 MAIN0:
0103 F6 53 MOV @R0,A
0104 D8FD 54 DJNZ R0,MAIN0 ;清缓冲的地址单元值
55
0106 758160 56 MOV SP,#60H
57
0109 75900F 58 MOV P1,#00001111B ;将P1置输入
010C C200 59 CLR KEYON
010E C288 60 CLR IT0 ;设置电平触发
0110 D2B9 61 SETB PT0
0112 D2A8 62 SETB EX0
0114 D2AF 63 SETB EA
64
65
0116 7540FF 66 MOV 40H,#0FFH
0119 7541FF 67 MOV 41H,#0FFH
011C 7542FF 68 MOV 42H,#0FFH
69
011F C2B0 70 CLR DATAOUT
71
0121 C2B3 72 CLR FMOUT ;38K的中断初始值
0123 758902 73 MOV TMOD,#02H ;T0的工作方式2
A51 MACRO ASSEMBLER HWFS 08/06/2005 09:10:52 PAGE 2
0126 758CF7 74 MOV TH0,#0F7H ;送初值
75
0129 D2B3 76 SETB FMOUT
012B C28C 77 CLR TR0 ;1/3的高电平标志
012D 7A02 78 MOV R2,#02H ;2/3的循环次数
79
012F D54009 80 DJNZ 40H,LOOP1
0132 D54106 81 DJNZ 41H,LOOP1
0135 D54203 82 DJNZ 42H,LOOP1
0138 758701 83 MOV PCON,#01H ;进入待机
013B 80C3 84 LOOP1: JMP MAIN
85
86 ;=============================================================
87 ;中断程序:完成其按键按下的标志位
88 ;=============================================================
013D 89 KEY_INT0:
013D C0E0 90 PUSH ACC
013F C0D0 91 PUSH PSW
0141 C2A8 92 CLR EX0
0143 E590 93 MOV A,P1
0145 F4 94 CPL A
0146 540F 95 ANL A,#0FH
0148 FA 96 MOV R2,A ;将行号存入R2中
0149 7590F0 97 MOV P1,#0F0H ;将列置输入端
014C E590 98 MOV A,P1
014E F4 99 CPL A
014F 54F0 100 ANL A,#0F0H ;取列号并存入A中
0151 7903 101 MOV R1,#03H ;置列初号
0153 7B03 102 MOV R3,#03H ;置循环次数
0155 C3 103 CLR C
0156 33 104 PINT01: RLC A ;取列号
0157 40FD 105 JC PINT01
0159 19 106 DEC R1
015A DBFA 107 DJNZ R3,PINT01
108
015C EA 109 PINT02: MOV A,R2 ;取行号
015D 7A00 110 MOV R2,#00H
015F 7B03 111 MOV R3,#03H ;置循环次数
0161 13 112 PINT03: RRC A
0162 4003 113 JC PINT04
0164 0A 114 INC R2
0165 DBFA 115 DJNZ R3,PINT03
0167 EA 116 PINT04: MOV A,R2
0168 C3 117 CLR C
0169 33 118 RLC A
016A 33 119 RLC A
016B 29 120 ADD A,R1
016C F532 121 MOV SENDBUF+2,A ;键号存于32H单元中
016E F4 122 CPL A
016F F533 123 MOV SENDBUF+3,A ;存键号的反码
0171 7530FF 124 MOV SENDBUF,#0FFH ;系统码在30H单元中
0174 753100 125 MOV SENDBUF+1,#00H ;系统反码在31H单元中
0177 1201A1 126 LCALL SEND
017A D2A9 127 SETB ET0 ;发送引导码
017C D28C 128 SETB TR0 ;启动T0
017E 1201AC 129 LCALL PP ;发送一帧数据.包括系统码和数据码
0181 C28C 130 CLR TR0 ;当发送完后关断定时器
0183 C2A9 131 CLR ET0 ;关T0的中断
0185 D2A8 132 SETB EX0 ;执行完后打开外INT0
0187 7540FF 133 MOV 40H,#0FFH
018A 7541FF 134 MOV 41H,#0FFH
018D 7542FF 135 MOV 42H,#0FFH
0190 D0D0 136 POP PSW
0192 D0E0 137 POP ACC
0194 32 138 RETI
139 ;=============================================================================
A51 MACRO ASSEMBLER HWFS 08/06/2005 09:10:52 PAGE 3
0195 20D504 140 FM_T0: JB F0,IT01
0198 DA06 141 DJNZ R2,GRET
019A 7A02 142 MOV R2,#2
019C B2B3 143 IT01: CPL FMOUT
019E B2D5 144 CPL F0
01A0 32 145 GRET: RETI
146 ;==============================================================================
147 ;引导脉冲子程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -