📄 pyzc3.lst
字号:
007E @0011:
156 1 return(receive_buff[begin_rec_buff]); /* return the character in
007E BC061C R ldbse Tmp0,begin_rec_buff
0081 B31D14001C R ldb Tmp0,receive_buff[Tmp0]
0086 2000 br @000D
157 1 buffer. */
158 1 }
0088 @000D:
0088 F0 ret
; Function Statistics for: getchar
; Code Size : 27 Parameter Count:
; Stack Size: Parameter Size :
; OReg Size : Stack Depth :
159
16 void receive(void) /* serial interrupt routine */
161 {
0089 receive:
0089 C800 R push ?OVRBASE
162 1 unsigned char c;
163 1 sp_status_image |= sp_stat; /* image sp_stat into status_image */
008B 900002 E orb sp_status_image,sp_stat
164 1
165 1 /* If the input buffer is full, the last character can be handled
166 1 as desired. */
167 1
168 1 if(end_rec_buff+1==begin_rec_buff || (end_rec_buff==RECEIVE_BUF_SIZE-1 &&
169 1 !begin_rec_buff))
008E BC051C R ldbse Tmp0,end_rec_buff
0091 071C inc Tmp0
0093 BC061E R ldbse Tmp2,begin_rec_buff
0096 881E1C cmp Tmp0,Tmp2
0099 DF0A be @0014
009B 991305 R cmpb end_rec_buff,#13H
C196 Compiler pyzc3 14-Dec-106 09:06:41 Page 6
Assembly Listing of Object Code
009E D707 bne @0013
00A0 980600 R cmpb R0,begin_rec_buff
00A3 D702 bne @0013
00A5 @0014:
17 1 {
171 2 ; /* input overrun code */
172 2 }
173 1 else
00A5 20AB br @0015
00A7 @0013:
174 1 {
175 2
176 2 /* The next statement makes the buffer circular by starting over when the
177 2 index reaches the end of the buffer. */
178 2
179 2 if(++end_rec_buff > RECEIVE_BUF_SIZE - 1) end_rec_buff=0;
00A7 1705 R incb end_rec_buff
00A9 991305 R cmpb end_rec_buff,#13H
00AC DA02 ble @0016
00AE 1105 R clrb end_rec_buff
00B0 @0016:
18 2 receive_buff[end_rec_buff]=sbuf; /* place character in
00B0 BC051C R ldbse Tmp0,end_rec_buff
00B3 C71D140000 E stb sbuf,receive_buff[Tmp0]
181 2 buffer */
182 2 if(receive_buff[end_rec_buff]==0x45 && receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-1)%RECEIVE_BUF
-_SIZE]==0x00 && receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-5)%RECEIVE_BUF_SIZE]==0x53)
00B8 B31D14001C R ldb Tmp0,receive_buff[Tmp0]
00BD 99451C cmpb Tmp0,#45H
00C0 D773 bne @0017
00C2 BC051C R ldbse Tmp0,end_rec_buff
00C5 6513001C add Tmp0,#13H
00C9 061C ext Tmp0
00CB FE8D14001C div Tmp0,#14H
00D0 9B1F140000 R cmpb R0,receive_buff[Tmp2]
00D5 D75E bne @0017
00D7 BC051C R ldbse Tmp0,end_rec_buff
00DA 650F001C add Tmp0,#0FH
00DE 061C ext Tmp0
00E0 FE8D14001C div Tmp0,#14H
00E5 B31F14001E R ldb Tmp2,receive_buff[Tmp2]
00EA 99531E cmpb Tmp2,#53H
00ED D746 bne @0017
183 2 {
184 3 triggle_in=1;
00EF B10102 R ldb triggle_in,#1
185 3 mess[8]=mess[8]+1;
00F2 B30108001C R ldb Tmp0,mess+8
00F7 171C incb Tmp0
00F9 C70108001C R stb Tmp0,mess+8
186 3 pwm0_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-4)%RECEIVE_BUF_SIZE];
00FE BC051C R ldbse Tmp0,end_rec_buff
0101 4510001C20 add Tmp4,Tmp0,#1
0106 0620 ext Tmp4
0108 FE8D140020 div Tmp4,#14H
010D B323140007 R ldb pwm0_byte,receive_buff[Tmp6]
C196 Compiler pyzc3 14-Dec-106 09:06:41 Page 7
Assembly Listing of Object Code
187 3 ioport1_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-3)%RECEIVE_BUF_SIZE];
0112 6511001C add Tmp0,#11H
0116 061C ext Tmp0
0118 FE8D14001C div Tmp0,#14H
011D B31F140008 R ldb ioport1_byte,receive_buff[Tmp2]
188 3 hso_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-2)%RECEIVE_BUF_SIZE];
0122 BC051C R ldbse Tmp0,end_rec_buff
0125 6512001C add Tmp0,#12H
0129 061C ext Tmp0
012B FE8D14001C div Tmp0,#14H
0130 B31F140009 R ldb hso_byte,receive_buff[Tmp2]
0135 @0017:
189 3 }
19 2 c=getchar(); //Discard a char,since now deal it in serial_in_interrupt.
0135 2F37 call getchar
0137 B01C00 R ldb c,Tmp0
191 2 if(checkbit(sp_status_image, FE_BIT))
013A 5110021C R andb Tmp0,sp_status_image,#1
013E 981C00 cmpb R0,Tmp0
0141 DF03 be @0018
192 2 {
193 3 ; /* User code for framing error */
194 3 clrbit(sp_status_image, FE_BIT);
0143 71EF02 R andb sp_status_image,#0EFH
0146 @0018:
195 3 }
196 2 if(checkbit(sp_status_image, OE_BIT))
0146 5104021C R andb Tmp0,sp_status_image,#4
014A 981C00 cmpb R0,Tmp0
014D DF03 be @0019
197 2 {
198 3 ; /* User code for overrun error */
199 3 clrbit(sp_status_image, OE_BIT);
014F 71FB02 R andb sp_status_image,#0FBH
0152 @0019:
0152 @0015:
2 3 }
2 2 }
2 1 clrbit(sp_status_image,RI_BIT); /* clear RI bit in status_image. */
0152 71BF02 R andb sp_status_image,#0BFH
2 1 }
0155 CC00 R pop ?OVRBASE
0157 F0 ret
; Function Statistics for: receive
; Code Size : 2 Parameter Count:
; Stack Size: Parameter Size :
; OReg Size : 1 Stack Depth : 4
2
2 /* The seperate txd and rxd interrupts can more efficiently process
2 the interrupts than the generic serial interrupt as this one
2 does.
2 */
2
21 void serial_isr(void)
C196 Compiler pyzc3 14-Dec-106 09:06:41 Page 8
Assembly Listing of Object Code
211 {
0158 serial_isr:
0158 F2 pushf
0159 C81C push Tmp0
015B C81E push Tmp2
015D C820 push Tmp4
015F C822 push Tmp6
212 1 sp_status_image |= sp_stat; /* image sp_stat into status_image */
0161 900002 E orb sp_status_image,sp_stat
213 1
214 1 if(checkbit(sp_status_image, RI_BIT))
0164 5140021C R andb Tmp0,sp_status_image,#4
0168 981C00 cmpb R0,Tmp0
016B DF04 be @001B
215 1 receive();
016D 2F1A call receive
216 1 else if(checkbit(sp_status_image, TI_BIT))
016F 200B br @001C
0171 @001B:
0171 5120021C R andb Tmp0,sp_status_image,#2
0175 981C00 cmpb R0,Tmp0
0178 DF02 be @001D
217 1 transmit();
017A 2E93 call transmit
017C @001D:
017C @001C:
218 1 }
017C CC22 pop Tmp6
017E CC20 pop Tmp4
0180 CC1E pop Tmp2
0182 CC1C pop Tmp0
0184 F3 popf
0185 F0 ret
; Function Statistics for: serial_isr
; Code Size : 46 Parameter Count:
; Stack Size: Parameter Size :
; OReg Size : Stack Depth : 18
219
22 void init_serial()
221 {
0186 init_serial:
222 1
223 1 /*
224 1 * Serial port configuration:
225 1 * serial mode = 1
226 1 * even parity = disabled
227 1 * serial receive = enabled
228 1 * serial transmit = enabled
229 1 */
23 1
231 1 _SetSFR_bit (ioc1, TXD_ENABLE_BIT);
0186 B10F00 E ldb wsr,#0FH
0189 B00000 E ldb tmpreg,ioc1
018C 912000 R orb tmpreg,#2
C196 Compiler pyzc3 14-Dec-106 09:06:41 Page 9
Assembly Listing of Object Code
018F 1101 R clrb tmpreg+1
0191 1100 E clrb wsr
0193 B00000 E ldb ioc1,tmpreg
232 1 _WriteSFR (sp_con, 0x9);
0196 1100 E clrb wsr
0198 B10900 E ldb sp_con,#9
233 1
234 1 /*
235 1 * Baud Rate = 0
236 1 */
237 1
238 1 _WriteSFR (baud_rate, 0x70);
019B 1100 E clrb wsr
019D B17000 E ldb baud_rate,#7
239 1 _WriteSFR (baud_rate, 0x82);
01A0 1100 E clrb wsr
01A2 B18200 E ldb baud_rate,#82H
24 1
241 1 /*
242 1 * Interrupts:
243 1 * transmit interrupt = disabled
244 1 * receive interrupt = disabled
245 1 * serial interrupt = enabled
246 1 */
247 1
248 1 _SetSFR_bit (int_mask, SERIAL_INT);
01A5 2000 br @0024
01A7 @0024:
01A7 B00000 E ldb tmpreg,int_mask
01AA 914000 R orb tmpreg,#4
01AD 1101 R clrb tmpreg+1
01AF 2000 br @0025
01B1 @0025:
01B1 B00000 E ldb int_mask,tmpreg
249 1 _ClrSFR_bit (int_mask1, TXD_INTERRUPT);
01B4 2000 br @0026
01B6 @0026:
01B6 AC0000 E ldbze tmpreg,imask1
01B9 61FEFF00 R and tmpreg,#0FFFEH
01BD 2000 br @0027
01BF @0027:
01BF B00000 E ldb imask1,tmpreg
25 1 _ClrSFR_bit (int_mask1, RXD_INTERRUPT);
01C2 2000 br @0028
01C4 @0028:
01C4 AC0000 E ldbze tmpreg,imask1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -