📄 07_08.lst
字号:
1 /*
2 AV_2451 双路马达
3 备注:
4 1;电源部分没有加放电电阻,会造成掉电时电压下不去,RAM无法清除,上电便开机运行
5 2;软件中断中所做功能过多,造成中断不准确,后续软件需要改善
6 3;创建日期OCT 18 08
7 4; 731F
8
9 JASON HUANG
10 */
11
12 0000 R0 == 0X00
13 0001 TCC == 0X01
14 0002 PC == 0X02
15 0003 STATUS == 0X03
16 0002 Z == 2
17 0000 C == 0
18 0004 RSR == 0X04
19 0005 PORT5 == 0X05
20 0006 PORT6 == 0X06
21 000D RD == 0X0D
22 000E WPC == 0X0E
23 000F ISR == 0X0F
24 0000 TCIF == 0
25
26 0005 P5CR == 0X05
27 0006 P6CR == 0X06
28 000A PCR == 0X0A
29 000B PDCR == 0X0B
30 000C ODCR == 0X0C
31 000D PHCR == 0X0D
32 000E WDTCR == 0X0E
33 000F IMR == 0X0F
34
35 ;R10-R1F and R20-R3F is general purpose register
36 0010 TEMP == 0X10 ;use for clean genernal registers
37 0011 ACC_BUF == 0X11
38 0012 R3_BUF == 0X12
39 0013 R4_BUF == 0X13
40 0014 R6_BUF == 0X14
41 0015 R5_BUF == 0X15
42 0002 CONT1_L == 2 ;CONT1+ G+
43 0001 CONT2_L == 1 ;CONT1- G-
44 0003 CONT1_R == 3 ;CONT2+ M+
45 0004 CONT2_R == 4 ;CONT2- M-
46 0016 R6_REG == 0X16 ;save the port6 data in keyswitch
47 0017 FLAG0 == 0X17
48 0000 KEY_LONG == 0 ;long keypress flag
49 0001 TURNL_FLAG== 1 ;left motor turner flag
50 0002 TURNR_FLAG== 2 ;right motor turner flag
51 0003 DYONL_FLAG== 3 ;left motor on/off timer flag 7/18 8/18 9/18...14/18 0=on 1=off
52 0004 DYONR_FLAG== 4 ;right motor on/off timer flag 2/12 3/12 4/12...9/12
53 0018 FLAG1 == 0X18
54 0000 MOTORL_ON == 0 ;left motor on/off falg
55 0001 MOTORR_ON == 1
56 0002 MID_MID_FLAG == 2
57 0003 MID_DOWN_FLAG == 3
58 0019 FLAG_1MS == 0X19 ;TCC interrupter count flag
59 001A REGL_18MS == 0X1A ;the 18ms register use in left motor play
60 001B REGR_18MS == 0X1B ;the 18ms register use in right motor play
61 001C REG_1MS == 0X1C
62 001D REG_10MS == 0X1D ;10ms count flag use in 30ms count
63 001E REG_30MS == 0X1E ;30ms timer led display use in mode2 30ms*2
64 001F FLAG_30MS == 0X1F ;30ms in mode3
65 0020 KEYTIME_L == 0X20 ;count the left keypress timedelay for long keypress_on
66 0021 KEYTIME_R == 0X21
67 0022 SPEED_L == 0X22 ;left motor speed
68 0023 SPEED_R == 0X23
69 0024 LED_DUTY == 0X24 ;led dispaly duty p60,p61,p62,p63
70 0025 MODE == 0X25 ;motor work mode
71 0026 SPEEDL_DUTY == 0X26 ;left led display duty use in mode2
72 0027 SPEEDL_FLAG == 0X27 ;left the mode2 led display duty from 1 to 8 or 8 to 1
73 0028 SPEEDR_DUTY == 0X28
74 0029 SPEEDR_FLAG == 0X29
75 002A DELAY == 0X2A ;delay for keytest
76 002B DELAY_ON_L == 0X2B ;left motor on timer in one cycle
77 002C DELAY_OFF_L == 0X2C ;the whole cycle timer
78 002D DELAY_ON_R == 0X2D ;right motor on timer
79 002E DELAY_OFF_R == 0X2E ;the whole cycle timer
80 002F POSL_REG == 0X2F ;the left cycle timer in mode2 and mode3
81 0030 NEV_REG == 0X30 ;the motor close timer in one cycle
82 0031 POSR_REG == 0X31 ;the right cycle timer
83 0032 POWERTEST1 == 0X32 ;powertest1
84 0033 POWERTEST2 == 0X33 ;powertest2
85 0034 SLEEP_FLAG == 0X34 ;200MS then sleep
86 0035 SLEEP_STATE == 0X35
87 0036 R6_REG1 == 0X36
88 0037 R6_REG2 == 0X37
89 0038 KEY_FLAG == 0X38
90 0000 S1_FLAG == 0
91 0001 S2_FLAG == 1
92 0002 S3_FLAG == 2
93 0003 S4_FLAG == 3
94 0004 S5_FLAG == 4
95 0005 S6_FLAG == 5
96 0006 S8_FLAG == 6
97 0039 KEY_STATE == 0X39
98 0000 S1_STATE == 0
99 0001 S2_STATE == 1
100 0002 S3_STATE == 2
101 0003 S4_STATE == 3
102 0004 S5_STATE == 4
103 0005 S6_STATE == 5
104 0006 S8_STATE == 6
105
106
107 ;********************************PROCESS START
108 ORG 000H
109 00000 0000 NOP
110 00001 0000 NOP
111 00002 0000 NOP
112 00003 0000 NOP
113 00004 0000 NOP
114 00005 16C4 JMP POWERON ;jump to poweron
115 00006 0000 NOP
116 ORG 008H ;interrupter address
117 00008 147C JMP INT_TCC ;jump to TCC interupter
118
119
120 ORG 040H
121 ;****************************************
122 00040 MODE1_TABH: ;mode1 led display table for low four bit
123 00040 03C2 ADD PC,A ;
124 00041 1C00 RETL @0B00000000
125 00042 1C10 RETL @0B00010000 ;led1~1
126 00043 1C30 RETL @0B00110000 ;led1~2
127 00044 1C70 RETL @0B01110000 ;led1~3
128 00045 1CF0 RETL @0B11110000 ;led1~4
129
130 00046 1CF0 RETL @0B11110000 ;led1~4 ;
131 00047 1CF0 RETL @0B11110000 ;led1~4
132 00048 1CF0 RETL @0B11110000 ;led1~4
133 00049 1CF0 RETL @0B11110000 ;led1~4
134 0004A MODE1_TABL: ;mode1 led display table for high four bit
135 0004A 03C2 ADD PC,A ;
136 0004B 1C00 RETL @0B00000000
137 0004C 1C00 RETL @0B00000000 ;led1~1
138 0004D 1C00 RETL @0B00000000 ;led1~2
139 0004E 1C00 RETL @0B00000000 ;led1~3
140 0004F 1C00 RETL @0B00000000 ;led1~4
141
142 00050 1C10 RETL @0B00010000 ;led5~5 ;
143 00051 1C30 RETL @0B00110000 ;led5~6
144 00052 1C70 RETL @0B01110000 ;led5~7
145 00053 1CF0 RETL @0B11110000 ;led5~8
146
147 00054 MODE2L_TAB: ;mode2 and mode3 led display table for left
148
149 00054 03C2 ADD PC,A
150 00055 1C0F RETL @0b00001111 ;
151 00056 1C1E RETL @0b00011110 ;led1
152 00057 1C2E RETL @0b00101110 ;led2
153 00058 1C4E RETL @0b01001110 ;led3
154 00059 1C8E RETL @0b10001110 ;led4
155 0005A 1C1D RETL @0b00011101 ;led5
156 0005B 1C2D RETL @0b00101101 ;led6
157 0005C 1C4D RETL @0b01001101 ;led7
158 0005D 1C8D RETL @0b10001101 ;led8
159
160
161 0005E MODE2R_TAB: ;mode2 and mode3 led display table for right
162 0005E 03C2 ADD PC,A
163 0005F 1C0F RETL @0b00001111 ;
164 00060 1C1B RETL @0b00011011 ;led1
165 00061 1C2B RETL @0b00101011 ;led2
166 00062 1C4B RETL @0b01001011 ;led3
167 00063 1C8B RETL @0b10001011 ;led4
168 00064 1C17 RETL @0b00010111 ;led5
169 00065 1C27 RETL @0b00100111 ;led6
170 00066 1C47 RETL @0b01000111 ;led7
171 00067 1C87 RETL @0b10000111 ;led8
172
173
174 00068 DELAYON_L_TAB: ;motor play table for left (G+)
175 00068 03C2 ADD PC,A
176 00069 1C00 RETL @0X00 ;TOTAL IS 0X12 (9MS*2)
177 0006A 1C07 RETL @0X07 ;SPEEDL 1
178 0006B 1C08 RETL @0X08 ;SPEEDL 2
179 0006C 1C09 RETL @0X09 ;SPEEDL 3
180 0006D 1C0A RETL @0X0A ;SPEEDL 4
181 0006E 1C0B RETL @0X0B ;SPEEDL 5
182 0006F 1C0C RETL @0X0C ;SPEEDL 6
183 00070 1C0D RETL @0X0D ;SPEEDL 7
184 00071 1C0E RETL @0X0E ;SPEEDL 8
185
186
187
188 00072 DELAYON_R_TAB: ;motor play table for right (M+)
189 00072 03C2 ADD PC,A
190 00073 1C00 RETL @0X00 ;TOTAL IS 0X0C (6MS*2)
191 00074 1C02 RETL @0X02 ;SPEEDR 1
192 00075 1C03 RETL @0X03 ;SPEEDR 2
193 00076 1C04 RETL @0X04 ;SPEEDR 3
194 00077 1C05 RETL @0X05 ;SPEEDR 4
195 00078 1C06 RETL @0X06 ;SPEEDR 5
196 00079 1C07 RETL @0X07 ;SPEEDR 6
197 0007A 1C08 RETL @0X08 ;SPEEDR 7
198 0007B 1C09 RETL @0X09 ;SPEEDR 8
199
200 ;*************************************************************
201 0007C INT_TCC:
202 0007C 0051 MOV ACC_BUF,A ;save the A ,RSR and STATUS register
203 0007D 0751 SWAP ACC_BUF
204 0007E 0403 MOV A,STATUS
205 0007F 0052 MOV R3_BUF,A
206 00080 0404 MOV A,RSR
207 00081 0053 MOV R4_BUF,A
208
209 00082 0E0F JBS ISR,TCIF ;test the TCC interrupter flag
210 00083 16BD JMP INT_EXIT
211
212 00084 0564 INC LED_DUTY ;for led dipaly bit (P=0,G=1,F=2,E=3)
213 00085 0CA4 JBC LED_DUTY,2
214 00086 00E4 CLR LED_DUTY
215
216 00087 0559 INC FLAG_1MS ;for count TCC interrupt times for 18ms
217 00088 055C INC REG_1MS ;for 10ms
218
219 00089 0574 INC SLEEP_FLAG
220 0008A 0462 MOV SPEED_L,SPEED_L
221 0008B 0E83 JBS STATUS,Z
222 0008C 00F4 CLR SLEEP_FLAG
223
224 0008D 0463 MOV SPEED_R,SPEED_R
225 0008E 0E83 JBS STATUS,Z
226 0008F 00F4 CLR SLEEP_FLAG
227
228 00090 1812 MOV A,@0X12 ;timer 18ms
229 00091 0319 XOR A,FLAG_1MS
230 00092 0E83 JBS STATUS,Z
231 00093 1497 JMP $+4
232 00094 055A INC REGL_18MS ;for left motor timer
233 00095 055B INC REGR_18MS ;for right motor timer
234 00096 00D9 CLR FLAG_1MS
235
236
237 00097 180A MOV A,@0X0A ;timer 10ms for keyscan
238 00098 031C XOR A,REG_1MS
239 00099 0E83 JBS STATUS,Z
240 0009A 1582 JMP DISPLAY ;display one bit every 1ms
241
242 0009B 180F MOV A,@0X0F ;set the i/o port use for keyscan
243 0009C 0006 IOW P6CR ;port6 as input
244 0009D 1800 MOV A,@0X00
245 0009E 0046 MOV PORT6,A
246
247 0009F 1800 MOV A,@0X00
248 000A0 0005 IOW P5CR ;port5 as output
249 000A1 1840 MOV A,@0X40 ;for keyscan all key
250 000A2 0045 MOV PORT5,A
251
252 000A3 18F0 MOV A,@0XF0
253 000A4 000D IOW PHCR ;port6 pull high enable
254
255
256 000A5 00DC CLR REG_1MS
257 000A6 055D INC REG_10MS ;for 40ms timer
258 000A7 1803 MOV A,@0X03
259 000A8 031D XOR A,REG_10MS
260 000A9 0E83 JBS STATUS,Z
261 000AA 14AE JMP KEY_SCAN
262
263 000AB 00DD CLR REG_10MS
264 000AC 055E INC REG_30MS ;for mode2 display timer
265 000AD 055F INC FLAG_30MS ;for mode3 display timer
266
267
268 000AE KEY_SCAN:
269 000AE 1830 MOV A,@0X30 ;delay time
270 000AF 006A MOV DELAY,A
271 000B0 LOOP5:
272 000B0 05EA DJZ DELAY
273 000B1 14B0 JMP LOOP5
274 ;COM1
275 000B2 0E06 JBS PORT6,0 ;KEY SCAN START
276 000B3 14DF JMP S2_KEY_ON
277 000B4 0E46 JBS PORT6,1
278 000B5 14FA JMP S5_KEY_ON
279 000B6 0E86 JBS PORT6,2
280 000B7 1503 JMP S6_KEY_ON
281 000B8 0EC6 JBS PORT6,3
282 000B9 14F1 JMP S4_KEY_ON
283
284
285 ;COM2
286
287 000BA 1820 MOV A,@0X20 ;switch com2
288 000BB 0045 MOV PORT5,A
289
290 000BC 1830 MOV A,@0X30 ;delay time
291 000BD 006A MOV DELAY,A
292 000BE LOOP4:
293 000BE 05EA DJZ DELAY
294 000BF 14BE JMP LOOP4
295
296
297 000C0 0E06 JBS PORT6,0
298 000C1 14D6 JMP S1_KEY_ON
299 000C2 0E46 JBS PORT6,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -