?? 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 + -