📄 6r.lst
字号:
安徽工程科技学院 计算机科学与工程系 谢永宁
1 ;*************************************
2 ;* (INCEPT3.ASM) *
3 ;* 十五路遥控接收板 *
4 ;* 2001.7.18 *
5 ;* *
6 ;*************************************
7 ;
8 ;**********************************************************************
9 ;* *
10 ;* A P1.0 1 40 VCC *
11 ;* B P1.1 2 39 P0.0 LED0 *
12 ;* C P1.2 3 38 P0.1 LED1 *
13 ;* P1.3 4 37 P0.2 LED2 *
14 ;* P1.4 5 36 P0.3 LED3 *
15 ;* P1.5 6 35 P0.4 LED4 *
16 ;* P1.6 7 34 P0.5 LED5 *
17 ;* P1.7 8 33 P0.6 LED6 *
18 ;* 100HZ RST 9 32 P0.7 LED7 *
19 ;* P3.0 10 MCS-51 31 EA VDD *
20 ;* P3.1 11 30 ALE *
21 ;* REMOTEIN P3.2 12 29 PSEN *
22 ;* P3.3 13 28 P2.7 调光脉冲 *
23 ;* P3.4 14 27 P2.6 LED8 *
24 ;* P3.5 15 26 P2.5 LED9 *
25 ;* P3.6 16 25 P2.4 LED10 *
26 ;* P3.7 17 24 P2.3 LED11 *
27 ;* XTAL2 18 23 P2.2 LED12 *
28 ;* XTAL1 19 22 P2.1 LED13 *
29 ;* VSS 20 21 P2.0 DEV14(灯泡) *
30 ;* *
31 ;* *
32 ;**********************************************************************
33 ;注: P3.0为100HZ的交流电源过零点相位参考输入
34 ;
35 ;
36 ;*************************************
37 ;* *
38 ;* 主程序和中断程序入口 *
39 ;* *
40 ;*************************************
41 ORG 0000H ;程序开始地址
0000 02003E 42 LJMP START ;跳至START执行
43 ORG 0003H ;外中断0中断入口
0003 020059 44 LJMP INTEX0 ;跳至INTEX0执行中断服务程序
45 ORG 000BH ;定时器T0中断入口地址
000B 32 46 RETI ;中断返回(不开中断)
47 ORG 0013H ;外中断1中断入口地址
0013 32 48 RETI ;中断返回(不开中断)
49 ORG 001BH ;定时器T1中断入口地址
001B 32 50 RETI ;中断返回(不开中断)
51 ORG 0023H ;串行口中断入口地址
0023 32 52 RETI ;中断返回(不开中断)
53 ORG 002BH ;定时器T2中断入口地址
002B 32 54 RETI ;中断返回(不开中断)
55 ;
56 ;***************************
57 ;* *
58 ;* 初始化程序 *
59 ;* *
60 ;****************************
002C E4 61 CLEARMEMIO: CLR A ;
002D 14 62 DEC A ;A为#0FFH
002E F580 63 MOV P0,A ;P1-P3口置1
0030 F590 64 MOV P1,A ;
0032 F5A0 65 MOV P2,A ;
0034 F5B0 66 MOV P3,A ;
0036 75A800 67 CLEARMEM: MOV IE,#00H ;关所有中断
0039 D2A8 68 SETB EX0 ;开外中断
003B D2AF 69 SETB EA ;总中断允许
003D 22 70 RET ;子程序返回
71 ;
72 ;*************************************
73 ;* *
74 ;* 主程序 *
75 ;* *
76 ;*************************************
003E 12002C 77 START: LCALL CLEARMEMIO ;上电初始化
0041 120129 78 LCALL LOOP ;调用调光控制程序
79 ;
0044 20B0FD 80 MAIN: JB P3.0,MAIN ;50HZ交流电未过零转MAIN
0047 120121 81 LCALL DLX ;过零点时调用延时子程序(延时可变)
004A C2A7 82 CLR P2.7 ;发调光脉冲
004C 120114 83 LCALL DELAY ;持续512微秒
004F D2A7 84 SETB P2.7 ;关调光脉冲
0051 020044 85 LJMP MAIN ;转MAIN循环
0054 00 86 NOP ;PC值出错处理
0055 00 87 NOP
0056 02003E 88 LJMP START ;出错时重新初始化
89 ;******************************
90 ;遥控接收程序
91 ;******************************
92 ;采用中断接收
0059 C2A8 93 INTEX0: CLR EX0 ;关外中断
005B 30B103 94 JNB P3.1,READ1 ;P3.1口为低电平转READ1
005E D2A8 95 READOUTT0: SETB EX0 ;P3.1口为高电平开中断(系干扰)
0060 32 96 RETI ;退出中断
97 ;
0061 E4 98 READ1: CLR A ;清A
0062 F583 99 MOV DPH,A ;清DPTR
0064 F582 100 MOV DPL,A ;
0066 20B106 101 HARD1: JB P3.1,HARD11 ;P3.1变高电平转HARD11
0069 A3 102 INC DPTR ;用DPTR对低电平计数
006B 00 103 NOP ;1微秒延时
006C 00 104 NOP
006D 0166 105 AJMP HARD1 ;转HARD1循环(循环周期为8微秒)
006F E583 106 HARD11: MOV A,DPH ;DPTR高8位放入A
0071 60EB 107 JZ READOUTT0 ;为0(脉宽小于8*255=2毫秒)退出
0073 E4 108 CLR A ;不为0,说明是第一个宽脉冲(3毫秒)
0074 04 109 READ11: INC A ;脉冲个数计1
0075 30B1FD 110 READ12: JNB P3.1,READ12 ;低电平时等待
0078 7906 111 MOV R1,#06H ;高电平宽度判断定时值
007A 30B1F7 112 READ13: JNB P3.1,READ11 ;变低电平时转READ11脉冲计数
007D 120114 113 LCALL DELAY ;延时(512微秒)
0080 D9F8 114 DJNZ R1,READ13 ;6次延时不到转READ13再延时
0082 14 115 DEC A ;超过3毫秒判为结束,减1
0083 14 116 DEC A ;减1
0084 6032 117 JZ FUN0 ;为0执行FUN0(2个脉冲)
0086 14 118 DEC A ;减1
0087 6034 119 JZ FUN1 ;为0执行FUN1(3个脉冲)
0089 14 120 DEC A ;
008A 6036 121 JZ FUN2 ;为0执行FUN2(4个脉冲)
008C 14 122 DEC A ;
008D 6038 123 JZ FUN3 ;为0执行FUN3(5个脉冲)
008F 14 124 DEC A ;
0090 603A 125 JZ FUN4 ;为0执行FUN4(6个脉冲)
0092 14 126 DEC A ;
0093 603C 127 JZ FUN5 ;为0执行FUN5(7个脉冲)
0095 14 128 DEC A ;
0096 603E 129 JZ FUN6 ;为0执行FUN6(8个脉冲)
0098 14 130 DEC A ;
0099 6040 131 JZ FUN7 ;为0执行FUN7(9个脉冲)
009B 14 132 DEC A ;
009C 6042 133 JZ FUN8 ;为0执行FUN8(10个脉冲)
009E 14 134 DEC A ;
009F 6044 135 JZ FUN9 ;为0执行FUN9(11个脉冲)
00A1 14 136 DEC A ;
00A2 6046 137 JZ FUN10 ;为0执行FUN10(12个脉冲)
00A4 14 138 DEC A ;
00A5 6048 139 JZ FUN11 ;为0执行FUN11(13个脉冲)
00A7 14 140 DEC A ;
00A8 604A 141 JZ FUN12 ;为0执行FUN12(14个脉冲)
00AA 14 142 DEC A ;
00AB 604C 143 JZ FUN13 ;为0执行FUN13(15个脉冲)
00AD 14 144 DEC A ;
00AE 604E 145 JZ FUN14 ;为0执行FUN14(16个脉冲)
00B0 14 146 DEC A ;
00B1 6050 147 JZ FUN15 ;为0执行FUN15(17个脉冲)
00B3 00 148 NOP ;
00B4 00 149 NOP ;
00B5 02005E 150 LJMP READOUTT0 ;出错退出
151 ;
00B8 B280 152 FUN0: CPL P0.0 ;P0口各端口开关输出控制
00BA 02005E 153 LJMP READOUTT0 ;转中断退出
00BD B281 154 FUN1: CPL P0.1 ;
00BF 02005E 155 LJMP READOUTT0 ;
00C2 B282 156 FUN2: CPL P0.2
00C4 02005E 157 LJMP READOUTT0
00C7 B283 158 FUN3: CPL P0.3
00C9 02005E 159 LJMP READOUTT0
00CC B284 160 FUN4: CPL P0.4
00CE 02005E 161 LJMP READOUTT0
00D1 B285 162 FUN5: CPL P0.5
00D3 02005E 163 LJMP READOUTT0
00D6 B286 164 FUN6: CPL P0.6
00D8 02005E 165 LJMP READOUTT0
00DB B287 166 FUN7: CPL P0.7
00DD 02005E 167 LJMP READOUTT0
00E0 B2A6 168 FUN8: CPL P2.6 ;P2口各端口开关输出控制
00E2 02005E 169 LJMP READOUTT0 ;转中断退出
00E5 B2A5 170 FUN9: CPL P2.5
00E7 02005E 171 LJMP READOUTT0
00EA B2A4 172 FUN10: CPL P2.4
00EC 02005E 173 LJMP READOUTT0
00EF B2A3 174 FUN11: CPL P2.3
00F1 02005E 175 LJMP READOUTT0
00F4 B2A2 176 FUN12: CPL P2.2
00F6 02005E 177 LJMP READOUTT0
00F9 B2A1 178 FUN13: CPL P2.1
00FB 02005E 179 LJMP READOUTT0
00FE B2A0 180 FUN14: CPL P2.0 ;P2.0口开关控制
0100 02005E 181 LJMP READOUTT0 ;转中断退出
0103 1590 182 FUN15: DEC P1 ;P1口值减1
0105 E590 183 MOV A,P1 ;移入A
0107 B4F704 184 CJNE A,#0F7H,OUTT0 ;不等转OUTT0(显示值小于7)
010A E4 185 CLR A ;相等清A
010B 14 186 DEC A ;A为#0FFH
010C F590 187 MOV P1,A ;放回P1(显示值为7)
010E 120129 188 OUTT0: LCALL LOOP ;亮度调整
0111 02005E 189 LJMP READOUTT0 ;中断退出
190 ;
191 ;*************************************
192 ;* 延时 255 X 2 = 512 US *
193 ;*************************************
194 ;
0114 78FF 195 DELAY: MOV R0,#0FFH
0116 D8FE 196 DELAY1: DJNZ R0,DELAY1
0118 22 197 RET
198 ;
199 ;*************************************
200 ;* 延时10 MS *
201 ;*************************************
202 ;
0119 7914 203 DL10MS: MOV R1,#14H
011B 120114 204 DL10MS1: LCALL DELAY
011E D9FB 205 DJNZ R1,DL10MS1
0120 22 206 RET
207 ;
208 ;*************************************
209 ;* 调光延时时间控制 *
210 ;*************************************
211 ;
0121 AAF0 212 DLX: MOV R2,B ;置延时初值
0123 120114 213 DLX1: LCALL DELAY ;调512微秒延时子程序
0126 DAFB 214 DJNZ R2,DLX1 ;循环控制
0128 22 215 RET ;返回
216 ;
217 ;*************************************
218 ;* 调光控制程序 *
219 ;*************************************
220 ;根据数码管指示值设置调光脉冲延时值
0129 E590 221 LOOP: MOV A,P1 ;读入P1口值
012B 94FF 222 SUBB A,#0FFH ;比较
012D 602B 223 JZ LOOP7 ;值为#0FFH(显示7)时转LOOP7
012F E590 224 MOV A,P1 ;
0131 94FE 225 SUBB A,#0FEH ;
0133 6029 226 JZ LOOP6 ;值为#0FEH(显示6)时转LOOP6
0135 E590 227 MOV A,P1 ;
0137 94FD 228 SUBB A,#0FDH ;
0139 6027 229 JZ LOOP5 ;值为#0FDH(显示5)时转LOOP5
013B E590 230 MOV A,P1 ;
013D 94FC 231 SUBB A,#0FCH ;
013F 6025 232 JZ LOOP4 ;值为#0FCH(显示4)时转LOOP4
0141 E590 233 MOV A,P1 ;
0143 94FB 234 SUBB A,#0FBH ;
0145 6023 235 JZ LOOP3 ;值为#0FBH(显示3)时转LOOP3
0147 E590 236 MOV A,P1 ;
0149 94FA 237 SUBB A,#0FAH ;
014B 6021 238 JZ LOOP2 ;值为#0FAH(显示2)时转LOOP2
014D E590 239 MOV A,P1 ;
014F 94F9 240 SUBB A,#0F9H ;
0151 601F 241 JZ LOOP1 ;值为#0F9H(显示1)时转LOOP1
0153 E590 242 MOV A,P1 ;
0155 94F8 243 SUBB A,#0F8H ;
0157 601D 244 JZ LOOP0 ;值为#0F8H(显示0)时转LOOP0
0159 22 245 RET ;返回
246 ;
015A 75F001 247 LOOP7: MOV B,#01H ;设置延时值#01H(最亮)
015D 22 248 RET ;返回
015E 75F002 249 LOOP6: MOV B,#02H ;设置延时值#02H(次亮)
0161 22 250 RET ;返回
0162 75F004 251 LOOP5: MOV B,#04H ;
0165 22 252 RET
0166 75F006 253 LOOP4: MOV B,#06H ;
0169 22 254 RET
016A 75F008 255 LOOP3: MOV B,#08H ;
016D 22 256 RET
016E 75F00A 257 LOOP2: MOV B,#0AH ;
0171 22 258 RET
0172 75F00C 259 LOOP1: MOV B,#0CH ;设置延时值#0CH(次暗)
0175 22 260 RET ;返回
0176 75F00D 261 LOOP0: MOV B,#0DH ;设置延时值#0DH(最暗)
0179 22 262 RET ;返回
263 ;
017A 264 END ;程序结束
265 END
程序中使用的标号如下:
CLEARMEMIO 002C
CLEARMEM 0036
START 003E
MAIN 0044
INTEX0 0059
READOUTT0 005E
READ1 0061
HARD1 0066
HARD11 006F
READ11 0074
READ12 0075
READ13 007A
FUN0 00B8
FUN1 00BD
FUN2 00C2
FUN3 00C7
FUN4 00CC
FUN5 00D1
FUN6 00D6
FUN7 00DB
FUN8 00E0
FUN9 00E5
FUN10 00EA
FUN11 00EF
FUN12 00F4
FUN13 00F9
FUN14 00FE
FUN15 0103
OUTT0 010E
DELAY 0114
DELAY1 0116
DL10MS 0119
DL10MS1 011B
DLX 0121
DLX1 0123
LOOP 0129
LOOP7 015A
LOOP6 015E
LOOP5 0162
LOOP4 0166
LOOP3 016A
LOOP2 016E
LOOP1 0172
LOOP0 0176
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -