📄 pyzc2.lst
字号:
139 2 transmitting. */
14 2 }
141 1 }
006B CC00 E pop ?FRAME01
006D F0 ret
; Function Statistics for: putchar
; Code Size : 66 Parameter Count: 1
; Stack Size: Parameter Size : 2
; OReg Size : Stack Depth : 2
142
143 unsigned char getchar()
144 {
C196 Compiler pyzc2 13-Dec-106 22:07:20 Page 5
Assembly Listing of Object Code
006E getchar:
006E 2000 br @000F
0070 @000E:
145 1 while(begin_rec_buff==end_rec_buff); /* remain in loop while there is
0070 @000F:
0070 980506 R cmpb begin_rec_buff,end_rec_buff
0073 DFFB be @000E
146 1 not a character avaliable. */
147 1 if(++begin_rec_buff>RECEIVE_BUF_SIZE - 1) /* make buffer appear */
0075 1706 R incb begin_rec_buff
0077 991306 R cmpb begin_rec_buff,#13H
007A DA02 ble @0011
148 1 begin_rec_buff=0; /* circular. */
007C 1106 R clrb begin_rec_buff
007E @0011:
149 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
15 1 buffer. */
151 1 }
0088 @000D:
0088 F0 ret
; Function Statistics for: getchar
; Code Size : 27 Parameter Count:
; Stack Size: Parameter Size :
; OReg Size : Stack Depth :
152
153 void receive(void) /* serial interrupt routine */
154 {
0089 receive:
0089 C800 R push ?OVRBASE
155 1 unsigned char c;
156 1 sp_status_image |= sp_stat; /* image sp_stat into status_image */
008B 900002 E orb sp_status_image,sp_stat
157 1
158 1 /* If the input buffer is full, the last character can be handled
159 1 as desired. */
16 1
161 1 if(end_rec_buff+1==begin_rec_buff || (end_rec_buff==RECEIVE_BUF_SIZE-1 &&
162 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
009E D707 bne @0013
00A0 980600 R cmpb R0,begin_rec_buff
00A3 D702 bne @0013
00A5 @0014:
163 1 {
164 2 ; /* input overrun code */
165 2 }
C196 Compiler pyzc2 13-Dec-106 22:07:20 Page 6
Assembly Listing of Object Code
166 1 else
00A5 20AB br @0015
00A7 @0013:
167 1 {
168 2
169 2 /* The next statement makes the buffer circular by starting over when the
17 2 index reaches the end of the buffer. */
171 2
172 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:
173 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]
174 2 buffer */
175 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
176 2 {
177 3 triggle_in=1;
00EF B10102 R ldb triggle_in,#1
178 3 mess[1]=~mess[1];
00F2 AF0101001C R ldbze Tmp0,mess+1
00F7 021C not Tmp0
00F9 C70101001C R stb Tmp0,mess+1
179 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]
18 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]
181 3 hso_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-2)%RECEIVE_BUF_SIZE];
0122 BC051C R ldbse Tmp0,end_rec_buff
C196 Compiler pyzc2 13-Dec-106 22:07:20 Page 7
Assembly Listing of Object Code
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:
182 3 }
183 2 c=getchar(); //Discard a char,since now deal it in serial_in_interrupt.
0135 2F37 call getchar
0137 B01C00 R ldb c,Tmp0
184 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
185 2 {
186 3 ; /* User code for framing error */
187 3 clrbit(sp_status_image, FE_BIT);
0143 71EF02 R andb sp_status_image,#0EFH
0146 @0018:
188 3 }
189 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
19 2 {
191 3 ; /* User code for overrun error */
192 3 clrbit(sp_status_image, OE_BIT);
014F 71FB02 R andb sp_status_image,#0FBH
0152 @0019:
0152 @0015:
193 3 }
194 2 }
195 1 clrbit(sp_status_image,RI_BIT); /* clear RI bit in status_image. */
0152 71BF02 R andb sp_status_image,#0BFH
196 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
197
198 /* The seperate txd and rxd interrupts can more efficiently process
199 the interrupts than the generic serial interrupt as this one
2 does.
2 */
2
2 void serial_isr(void)
2 {
0158 serial_isr:
0158 F2 pushf
0159 C81C push Tmp0
015B C81E push Tmp2
015D C820 push Tmp4
015F C822 push Tmp6
C196 Compiler pyzc2 13-Dec-106 22:07:20 Page 8
Assembly Listing of Object Code
2 1 sp_status_image |= sp_stat; /* image sp_stat into status_image */
0161 900002 E orb sp_status_image,sp_stat
2 1
2 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
2 1 receive();
016D 2F1A call receive
2 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
21 1 transmit();
017A 2E93 call transmit
017C @001D:
017C @001C:
211 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -