1 1 ;--------------------------------------------------------
2 2 ; File Created by SDCC : FreeWare ANSI-C Compiler
3 3 ; Version 2.1.9Ga Sun Jan 16 17:31:35 2000
5 5 ;--------------------------------------------------------
7 7 ;--------------------------------------------------------
8 8 ; publics variables in this module
9 9 ;--------------------------------------------------------
10 10 .globl _serial_getc
11 11 .globl _serial_putc
12 12 .globl _serial_interrupt_handler
13 13 .globl _serial_init
14 14 ;--------------------------------------------------------
15 15 ; special function registers
16 16 ;--------------------------------------------------------
17 0080 17 G$P0$0$0 == 0x0080
19 0090 19 G$P1$0$0 == 0x0090
21 00A0 21 G$P2$0$0 == 0x00a0
23 00B0 23 G$P3$0$0 == 0x00b0
25 00D0 25 G$PSW$0$0 == 0x00d0
27 00E0 27 G$ACC$0$0 == 0x00e0
29 00F0 29 G$B$0$0 == 0x00f0
31 0081 31 G$SP$0$0 == 0x0081
33 0082 33 G$DPL$0$0 == 0x0082
35 0083 35 G$DPH$0$0 == 0x0083
37 0087 37 G$PCON$0$0 == 0x0087
38 0087 38 _PCON = 0x0087
39 0088 39 G$TCON$0$0 == 0x0088
40 0088 40 _TCON = 0x0088
41 0089 41 G$TMOD$0$0 == 0x0089
42 0089 42 _TMOD = 0x0089
43 008A 43 G$TL0$0$0 == 0x008a
45 008B 45 G$TL1$0$0 == 0x008b
47 008C 47 G$TH0$0$0 == 0x008c
49 008D 49 G$TH1$0$0 == 0x008d
51 008E 51 G$AUXR$0$0 == 0x008e
52 008E 52 _AUXR = 0x008e
53 00A8 53 G$IE$0$0 == 0x00a8
55 00B8 55 G$IP$0$0 == 0x00b8
57 0098 57 G$SCON$0$0 == 0x0098
58 0098 58 _SCON = 0x0098
59 0099 59 G$SBUF$0$0 == 0x0099
60 0099 60 _SBUF = 0x0099
61 00C8 61 G$T2CON$0$0 == 0x00c8
62 00C8 62 _T2CON = 0x00c8
63 00CB 63 G$RCAP2H$0$0 == 0x00cb
64 00CB 64 _RCAP2H = 0x00cb
65 00CA 65 G$RCAP2L$0$0 == 0x00ca
66 00CA 66 _RCAP2L = 0x00ca
67 67 ;--------------------------------------------------------
68 68 ; special function bits
69 69 ;--------------------------------------------------------
70 00D7 70 G$CY$0$0 == 0x00d7
72 00D6 72 G$AC$0$0 == 0x00d6
74 00D5 74 G$F0$0$0 == 0x00d5
76 00D4 76 G$RS1$0$0 == 0x00d4
78 00D3 78 G$RS0$0$0 == 0x00d3
80 00D2 80 G$OV$0$0 == 0x00d2
82 00D0 82 G$P$0$0 == 0x00d0
84 008F 84 G$TF1$0$0 == 0x008f
86 008E 86 G$TR1$0$0 == 0x008e
88 008D 88 G$TF0$0$0 == 0x008d
90 008C 90 G$TR0$0$0 == 0x008c
92 008B 92 G$IE1$0$0 == 0x008b
94 008A 94 G$IT1$0$0 == 0x008a
96 0089 96 G$IE0$0$0 == 0x0089
98 0088 98 G$IT0$0$0 == 0x0088
100 00AF 100 G$EA$0$0 == 0x00af
101 00AF 101 _EA = 0x00af
102 00AC 102 G$ES$0$0 == 0x00ac
103 00AC 103 _ES = 0x00ac
104 00AB 104 G$ET1$0$0 == 0x00ab
105 00AB 105 _ET1 = 0x00ab
106 00AA 106 G$EX1$0$0 == 0x00aa
107 00AA 107 _EX1 = 0x00aa
108 00A9 108 G$ET0$0$0 == 0x00a9
109 00A9 109 _ET0 = 0x00a9
110 00A8 110 G$EX0$0$0 == 0x00a8
111 00A8 111 _EX0 = 0x00a8
112 00BC 112 G$PS$0$0 == 0x00bc
113 00BC 113 _PS = 0x00bc
114 00BB 114 G$PT1$0$0 == 0x00bb
115 00BB 115 _PT1 = 0x00bb
116 00BA 116 G$PX1$0$0 == 0x00ba
117 00BA 117 _PX1 = 0x00ba
118 00B9 118 G$PT0$0$0 == 0x00b9
119 00B9 119 _PT0 = 0x00b9
120 00B8 120 G$PX0$0$0 == 0x00b8
121 00B8 121 _PX0 = 0x00b8
122 00B7 122 G$RD$0$0 == 0x00b7
123 00B7 123 _RD = 0x00b7
124 00B6 124 G$WR$0$0 == 0x00b6
125 00B6 125 _WR = 0x00b6
126 00B5 126 G$T1$0$0 == 0x00b5
127 00B5 127 _T1 = 0x00b5
128 00B4 128 G$T0$0$0 == 0x00b4
129 00B4 129 _T0 = 0x00b4
130 00B3 130 G$INT1$0$0 == 0x00b3
131 00B3 131 _INT1 = 0x00b3
132 00B2 132 G$INT0$0$0 == 0x00b2
133 00B2 133 _INT0 = 0x00b2
134 00B1 134 G$TXD$0$0 == 0x00b1
135 00B1 135 _TXD = 0x00b1
136 00B0 136 G$RXD$0$0 == 0x00b0
137 00B0 137 _RXD = 0x00b0
138 0090 138 G$P1_0$0$0 == 0x0090
139 0090 139 _P1_0 = 0x0090
140 0091 140 G$P1_1$0$0 == 0x0091
141 0091 141 _P1_1 = 0x0091
142 0092 142 G$P1_2$0$0 == 0x0092
143 0092 143 _P1_2 = 0x0092
144 0093 144 G$P1_3$0$0 == 0x0093
145 0093 145 _P1_3 = 0x0093
146 0094 146 G$P1_4$0$0 == 0x0094
147 0094 147 _P1_4 = 0x0094
148 0095 148 G$P1_5$0$0 == 0x0095
149 0095 149 _P1_5 = 0x0095
150 0096 150 G$P1_6$0$0 == 0x0096
151 0096 151 _P1_6 = 0x0096
152 0097 152 G$P1_7$0$0 == 0x0097
153 0097 153 _P1_7 = 0x0097
154 009F 154 G$SM0$0$0 == 0x009f
155 009F 155 _SM0 = 0x009f
156 009E 156 G$SM1$0$0 == 0x009e
157 009E 157 _SM1 = 0x009e
158 009D 158 G$SM2$0$0 == 0x009d
159 009D 159 _SM2 = 0x009d
160 009C 160 G$REN$0$0 == 0x009c
161 009C 161 _REN = 0x009c
162 009B 162 G$TB8$0$0 == 0x009b
163 009B 163 _TB8 = 0x009b
164 009A 164 G$RB8$0$0 == 0x009a
165 009A 165 _RB8 = 0x009a
166 0099 166 G$TI$0$0 == 0x0099
167 0099 167 _TI = 0x0099
168 0098 168 G$RI$0$0 == 0x0098
169 0098 169 _RI = 0x0098
170 00C8 170 G$T2CON_0$0$0 == 0x00c8
171 00C8 171 _T2CON_0 = 0x00c8
172 00C9 172 G$T2CON_1$0$0 == 0x00c9
173 00C9 173 _T2CON_1 = 0x00c9
174 00CA 174 G$T2CON_2$0$0 == 0x00ca
175 00CA 175 _T2CON_2 = 0x00ca
176 00CB 176 G$T2CON_3$0$0 == 0x00cb
177 00CB 177 _T2CON_3 = 0x00cb
178 00CC 178 G$T2CON_4$0$0 == 0x00cc
179 00CC 179 _T2CON_4 = 0x00cc
180 00CD 180 G$T2CON_5$0$0 == 0x00cd
181 00CD 181 _T2CON_5 = 0x00cd
182 00CE 182 G$T2CON_6$0$0 == 0x00ce
183 00CE 183 _T2CON_6 = 0x00ce
184 00CF 184 G$T2CON_7$0$0 == 0x00cf
185 00CF 185 _T2CON_7 = 0x00cf
186 186 ;--------------------------------------------------------
187 187 ; internal ram data
188 188 ;--------------------------------------------------------
189 189 .area DSEG (DATA)
190 190 ;--------------------------------------------------------
191 191 ; overlayable items in internal ram
192 192 ;--------------------------------------------------------
193 193 .area OSEG (OVR,DATA)
194 194 ;--------------------------------------------------------
195 195 ; indirectly addressable internal ram data
196 196 ;--------------------------------------------------------
197 197 .area ISEG (DATA)
198 198 ;--------------------------------------------------------
200 200 ;--------------------------------------------------------
202 0000 202 Fserial$work_flag_byte_arrived$0$0==.
203 0000 203 _work_flag_byte_arrived:
205 0001 205 Fserial$work_flag_buffer_transfered$0$0==.
206 0001 206 _work_flag_buffer_transfered:
208 0002 208 Fserial$tx_serial_buffer_empty$0$0==.
209 0002 209 _tx_serial_buffer_empty:
211 0003 211 Fserial$rx_serial_buffer_empty$0$0==.
212 0003 212 _rx_serial_buffer_empty:
214 214 ;--------------------------------------------------------
215 215 ; external ram data
216 216 ;--------------------------------------------------------
217 217 .area XSEG (XDATA)
218 0000 218 Fserial$stx_index_in$0$0==.
219 0000 219 _stx_index_in:
221 0001 221 Fserial$srx_index_in$0$0==.
222 0001 222 _srx_index_in:
224 0002 224 Fserial$stx_index_out$0$0==.
225 0002 225 _stx_index_out:
227 0003 227 Fserial$srx_index_out$0$0==.
228 0003 228 _srx_index_out:
230 0004 230 Fserial$stx_buffer$0$0==.
231 0004 231 _stx_buffer:
233 0104 233 Fserial$srx_buffer$0$0==.
234 0104 234 _srx_buffer:
236 0204 236 _serial_putc_c_1_1:
238 238 ;--------------------------------------------------------
239 239 ; global & static initialisations
240 240 ;--------------------------------------------------------
241 241 .area GSINIT (CODE)
242 242 ;--------------------------------------------------------
244 244 ;--------------------------------------------------------
245 245 .area CSEG (CODE)
246 0000 246 G$serial_init$0$0 ==.
248 248 ; -----------------------------------------
249 249 ; function serial_init
250 250 ; -----------------------------------------
251 0000 251 _serial_init:
261 0000 75 98 50 261 mov _SCON,#0x50
263 0003 75 C8 34 263 mov _T2CON,#0x34
265 0006 D2 BC 265 setb _PS
267 0008 75 C8 34 267 mov _T2CON,#0x34
269 000B 75 CB FF 269 mov _RCAP2H,#0xff
271 000E 75 CA DA 271 mov _RCAP2L,#0xda
273 0011 C2 98 273 clr _RI
275 0013 C2 99 275 clr _TI
277 0015 90s00r03 277 mov dptr,#_srx_index_out
278 278 ; Peephole 180 changed mov to clr
280 0019 F0 280 movx @dptr,a
281 001A 90s00r02 281 mov dptr,#_stx_index_out
282 282 ; Peephole 180 changed mov to clr
284 001E F0 284 movx @dptr,a
285 001F 90s00r01 285 mov dptr,#_srx_index_in
286 286 ; Peephole 180 changed mov to clr
288 0023 F0 288 movx @dptr,a
289 0024 90s00r00 289 mov dptr,#_stx_index_in
290 290 ; Peephole 180 changed mov to clr
292 0028 F0 292 movx @dptr,a
294 0029 D2*02 294 setb _tx_serial_buffer_empty
295 002B D2*03 295 setb _rx_serial_buffer_empty
297 002D C2*01 297 clr _work_flag_buffer_transfered
299 002F C2*00 299 clr _work_flag_byte_arrived
301 0031 D2 AC 301 setb _ES
303 0033 303 C$serial.c$41$1$1 ==.
304 0033 304 XG$serial_init$0$0 ==.
306 0034 306 G$serial_interrupt_handler$0$0 ==.
308 308 ; -----------------------------------------
309 309 ; function serial_interrupt_handler
310 310 ; -----------------------------------------
311 0034 311 _serial_interrupt_handler:
320 0034 C0 E0 320 push acc
321 0036 C0 F0 321 push b
322 0038 C0 82 322 push dpl
323 003A C0 83 323 push dph
324 003C C0 D0 324 push psw
325 003E 75 D0 08 325 mov psw,#0x08
327 0041 C2 AC 327 clr _ES
329 329 ; Peephole 111 removed ljmp by inverse jump logic
330 0043 30 99 29 330 jnb _TI,00105$
333 0046 C2 99 333 clr _TI
335 0048 90s00r00 335 mov dptr,#_stx_index_in
336 004B E0 336 movx a,@dptr
338 004D 90s00r02 338 mov dptr,#_stx_index_out
339 0050 E0 339 movx a,@dptr
340 340 ; Peephole 105 removed redundant mov
342 342 ; Peephole 132 changed ljmp to sjmp
343 343 ; Peephole 199 optimized misc jump sequence
344 0052 B5 0A 06 344 cjne a,ar2,00102$
345 345 ; Peephole 201 removed redundant sjmp
349 0055 D2*02 349 setb _tx_serial_buffer_empty
351 0057 D2*01 351 setb _work_flag_buffer_transfered
352 352 ; Peephole 132 changed ljmp to sjmp
353 0059 80 14 353 sjmp 00105$
356 005B 90s00r02 356 mov dptr,#_stx_index_out
357 005E 74 01 357 mov a,#0x01
359 0061 F0 359 movx @dptr,a
361 0063 24r04 361 add a,#_stx_buffer
362 0065 F5 82 362 mov dpl,a
363 363 ; Peephole 180 changed mov to clr
365 0068 34s00 365 addc a,#(_stx_buffer >> 8)
366 006A F5 83 366 mov dph,a
367 006C E0 367 movx a,@dptr
368 006D F5 99 368 mov _SBUF,a
371 371 ; Peephole 111 removed ljmp by inverse jump logic
372 006F 30 98 1F 372 jnb _RI,00107$
375 0072 C2 98 375 clr _RI
377 0074 90s00r01 377 mov dptr,#_srx_index_in
378 0077 E0 378 movx a,@dptr
380 0079 90s00r01 380 mov dptr,#_srx_index_in
381 007C 74 01 381 mov a,#0x01
383 007F F0 383 movx @dptr,a
385 0081 24r04 385 add a,#_srx_buffer
386 0083 F5 82 386 mov dpl,a
387 387 ; Peephole 180 changed mov to clr
389 0086 34s01 389 addc a,#(_srx_buffer >> 8)
390 0088 F5 83 390 mov dph,a
391 008A E5 99 391 mov a,_SBUF
392 008C F0 392 movx @dptr,a
394 008D D2*00 394 setb _work_flag_byte_arrived
396 008F C2*03 396 clr _rx_serial_buffer_empty
399 0091 D2 AC 399 setb _ES
401 0093 D0 D0 401 pop psw
402 0095 D0 83 402 pop dph
403 0097 D0 82 403 pop dpl
405 009B D0 E0 405 pop acc
406 009D 406 C$serial.c$64$1$1 ==.
407 009D 407 XG$serial_interrupt_handler$0$0 ==.
409 009E 409 G$serial_putc$0$0 ==.
411 411 ; -----------------------------------------
412 412 ; function serial_putc
413 413 ; -----------------------------------------
414 009E 414 _serial_putc:
424 009E C0 82 424 push dpl
425 00A0 90s02r04 425 mov dptr,#_serial_putc_c_1_1
426 00A3 D0 E0 426 pop acc
427 00A5 F0 427 movx @dptr,a
429 00A6 90s00r00 429 mov dptr,#_stx_index_in
430 00A9 E0 430 movx a,@dptr
432 00AB 90s00r00 432 mov dptr,#_stx_index_in
433 00AE 74 01 433 mov a,#0x01
435 00B1 F0 435 movx @dptr,a
437 00B3 24r04 437 add a,#_stx_buffer
439 439 ; Peephole 180 changed mov to clr
441 00B7 34s00 441 addc a,#(_stx_buffer >> 8)
443 00BA 90s02r04 443 mov dptr,#_serial_putc_c_1_1
444 00BD E0 444 movx a,@dptr
445 445 ; Peephole 136 removed redundant moves
447 00BF 8A 82 447 mov dpl,r2
448 00C1 8B 83 448 mov dph,r3
449 00C3 F0 449 movx @dptr,a
451 00C4 C2 AC 451 clr _ES
453 453 ; Peephole 111 removed ljmp by inverse jump logic
454 00C6 30*02 04 454 jnb _tx_serial_buffer_empty,00102$
457 00C9 C2*02 457 clr _tx_serial_buffer_empty
459 00CB D2 99 459 setb _TI
462 00CD D2 AC 462 setb _ES
464 00CF 464 C$serial.c$78$1$1 ==.
465 00CF 465 XG$serial_putc$0$0 ==.
467 00D0 467 G$serial_getc$0$0 ==.
469 469 ; -----------------------------------------
470 470 ; function serial_getc
471 471 ; -----------------------------------------
472 00D0 472 _serial_getc:
474 00D0 90s00r03 474 mov dptr,#_srx_index_out
475 00D3 E0 475 movx a,@dptr
476 476 ; Peephole 214 reduced some extra movs
478 00D5 24 01 478 add a,#0x01
479 479 ; Peephole 100 removed redundant mov
481 00D8 90s00r03 481 mov dptr,#_srx_index_out
482 00DB F0 482 movx @dptr,a
484 00DD 24r04 484 add a,#_srx_buffer
485 00DF F5 82 485 mov dpl,a
486 486 ; Peephole 180 changed mov to clr
488 00E2 34s01 488 addc a,#(_srx_buffer >> 8)
489 00E4 F5 83 489 mov dph,a
490 00E6 E0 490 movx a,@dptr
493 00E8 C2 AC 493 clr _ES
495 00EA 90s00r01 495 mov dptr,#_srx_index_in
496 00ED E0 496 movx a,@dptr
499 499 ; Peephole 132 changed ljmp to sjmp
500 500 ; Peephole 199 optimized misc jump sequence
501 00F0 B5 04 02 501 cjne a,ar4,00102$
502 502 ; Peephole 201 removed redundant sjmp
505 00F3 D2*03 505 setb _rx_serial_buffer_empty
508 00F5 D2 AC 508 setb _ES
510 00F7 8A 82 510 mov dpl,r2
512 00F9 512 C$serial.c$87$1$1 ==.
513 00F9 513 XG$serial_getc$0$0 ==.
515 515 .area CSEG (CODE)