📄 6r.lt
字号:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -