📄 intsio2.cod
字号:
02C8 C2AB CLR ET1
154:
155: PCON |= 0x80; /* 0x80=SMOD: set serial baudrate doubler */
02CA 438780 ORL PCON,#080H
156:
157: TMOD &= ~0xF0; /* clear timer 1 mode bits */
02CD 53890F ANL TMOD,#0FH
158: TMOD |= 0x20; /* put timer 1 into MODE 2 */
02D0 438920 ORL TMOD,#020H
159:
160: TH1 = (unsigned char) (256 - (XTAL / (16L * 12L * baudrate)));
02D3 FC MOV R4,A
02D4 FD MOV R5,A
02D5 7BC0 MOV R3,#0C0H
02D7 FA MOV R2,A
02D8 F9 MOV R1,A
02D9 F8 MOV R0,A
02DA 1126 ACALL ?C?LMUL
02DC A804 MOV R0,AR4
02DE A905 MOV R1,AR5
02E0 AA06 MOV R2,AR6
02E2 AB07 MOV R3,AR7
02E4 7F00 MOV R7,#00H
02E6 7EC0 MOV R6,#0C0H
02E8 7DA8 MOV R5,#0A8H
02EA 7C00 MOV R4,#00H
02EC 31CF ACALL ?C?SLDIV
02EE EF MOV A,R7
02EF F4 CPL A
02F0 04 INC A
02F1 F58D MOV TH1,A
161:
162: TR1 = 1; /* start timer 1 */
02F3 D28E SETB TR1
163: }
02F5 D0D0 POP PSW
02F7 92AF MOV EA,C
02F9 22 RET
----- FUNCTION _com_baudrate (END) -------
----- FUNCTION com_getchar (BEGIN) -----
FILE: 'SIO.C'
198: int com_getchar (void)
02FA D3 SETB C
02FB 10AF01 JBC EA,?C0020?SIO
02FE C3 CLR C
02FF ?C0020?SIO:
02FF C0D0 PUSH PSW
199: {
200: if (com_rbuflen () == 0)
201:
0301 711F ACALL com_rbuflen
0303 EF MOV A,R7
0304 7006 JNZ ?C0013?SIO
202: return (-1);
0306 7EFF MOV R6,#0FFH
0308 7FFF MOV R7,#0FFH
030A 800E SJMP ?C0014?SIO
030C ?C0013?SIO:
203:
204: return (rbuf [(r_out++) & (RBUF_SIZE - 1)]);
030C AF09 MOV R7,r_out
030E 0509 INC r_out
0310 EF MOV A,R7
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 6
0311 5407 ANL A,#07H
0313 2411 ADD A,#LOW rbuf
0315 F8 MOV R0,A
0316 E6 MOV A,@R0
0317 FF MOV R7,A
0318 7E00 MOV R6,#00H
205: }
031A ?C0014?SIO:
031A D0D0 POP PSW
031C 92AF MOV EA,C
031E 22 RET
----- FUNCTION com_getchar (END) -------
----- FUNCTION com_rbuflen (BEGIN) -----
FILE: 'SIO.C'
212: unsigned char com_rbuflen (void)
031F D3 SETB C
0320 10AF01 JBC EA,?C0021?SIO
0323 C3 CLR C
0324 ?C0021?SIO:
0324 C0D0 PUSH PSW
213: {
214:
215: return (r_in - r_out);
0326 C3 CLR C
0327 E508 MOV A,r_in
0329 9509 SUBB A,r_out
032B FF MOV R7,A
216:
217: }
032C ?C0015?SIO:
032C D0D0 POP PSW
032E 92AF MOV EA,C
0330 22 RET
----- FUNCTION com_rbuflen (END) -------
----- FUNCTION _com_putchar (BEGIN) -----
FILE: 'SIO.C'
169: char com_putchar (
0331 D3 SETB C
0332 10AF01 JBC EA,?C0019?SIO
0335 C3 CLR C
0336 ?C0019?SIO:
0336 C0D0 PUSH PSW
170: unsigned char c)
0338 8F0F MOV c,R7
171: {
172: /*------------------------------------------------
173: If the buffer is full, return an error value.
174: ------------------------------------------------*/
175: if (com_tbuflen () >= TBUF_SIZE)
033A 715F ACALL com_tbuflen
033C EF MOV A,R7
033D C3 CLR C
033E 9402 SUBB A,#02H
0340 4004 JC ?C0010?SIO
176: return (-1);
0342 7FFF MOV R7,#0FFH
0344 8014 SJMP ?C0011?SIO
0346 ?C0010?SIO:
177:
178: /*------------------------------------------------
179: Add the data to the transmit buffer. If the
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 7
180: transmit interrupt is disabled, then enable it.
181: ------------------------------------------------*/
182: tbuf [t_in & (TBUF_SIZE - 1)] = c;
0346 E50A MOV A,t_in
0348 5401 ANL A,#01H
034A 2419 ADD A,#LOW tbuf
034C F8 MOV R0,A
034D A60F MOV @R0,c
183: t_in++;
034F 050A INC t_in
184:
185: if (ti_restart)
0351 300004 JNB ti_restart,?C0012?SIO
186: {
187: ti_restart = 0;
0354 C200 CLR ti_restart
188: TI = 1; /* generate transmit interrupt */
0356 D299 SETB TI
189: }
0358 ?C0012?SIO:
190:
191: return (0);
0358 7F00 MOV R7,#00H
192: }
035A ?C0011?SIO:
035A D0D0 POP PSW
035C 92AF MOV EA,C
035E 22 RET
----- FUNCTION _com_putchar (END) -------
----- FUNCTION com_tbuflen (BEGIN) -----
FILE: 'SIO.C'
223: unsigned char com_tbuflen (void)
035F D3 SETB C
0360 10AF01 JBC EA,?C0022?SIO
0363 C3 CLR C
0364 ?C0022?SIO:
0364 C0D0 PUSH PSW
224: {
225: return (t_in - t_out);
226: }
0366 C3 CLR C
0367 E50A MOV A,t_in
0369 950B SUBB A,t_out
036B FF MOV R7,A
227:
036C ?C0016?SIO:
036C D0D0 POP PSW
036E 92AF MOV EA,C
0370 22 RET
----- FUNCTION com_tbuflen (END) -------
----- FUNCTION _putchar (BEGIN) -----
FILE: 'MAIN.C'
36: char putchar (char c)
37: {
0371 8F0C MOV c,R7
38: volatile unsigned int i;
0373 ?C0005?MAIN:
39:
40: while (com_putchar (c) != 0)
0373 AF0C MOV R7,c
0375 7131 ACALL _com_putchar
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 8
0377 EF MOV A,R7
0378 601A JZ ?C0006?MAIN
41: {
42: for (i=0; i<1000; i++)
037A E4 CLR A
037B F50D MOV i,A
037D F50E MOV i+01H,A
037F ?C0007?MAIN:
037F C3 CLR C
0380 E50E MOV A,i+01H
0382 94E8 SUBB A,#0E8H
0384 E50D MOV A,i
0386 9403 SUBB A,#03H
0388 50E9 JNC ?C0005?MAIN
43: {
44: /*** DO NOTHING ***/
45: }
038A 050E INC i+01H
038C E50E MOV A,i+01H
038E 7002 JNZ ?C0015?MAIN
0390 050D INC i
0392 ?C0015?MAIN:
0392 80EB SJMP ?C0007?MAIN
46: }
0394 ?C0006?MAIN:
47:
48: return (c);
0394 AF0C MOV R7,c
49: }
0396 22 RET
----- FUNCTION _putchar (END) -------
?PR?COM_ISR?SIO STATUS=3
MAX_BOT 3 ()
MAX_TOP 0 ()
?PR?COM_INITIALIZE?SIO STATUS=3
MAX_BOT 1 ()
MAX_TOP 2 (?PR?MAIN?MAIN)
?PR?_COM_BAUDRATE?SIO STATUS=3
MAX_BOT 1 ()
MAX_TOP 2 (?PR?MAIN?MAIN)
?PR?_COM_PUTCHAR?SIO STATUS=3
MAX_BOT 4 (?PR?COM_TBUFLEN?SIO)
MAX_TOP 2 (?PR?_PUTCHAR?MAIN)
?PR?COM_GETCHAR?SIO STATUS=3
MAX_BOT 4 (?PR?COM_RBUFLEN?SIO)
MAX_TOP 4 (?PR?_GETKEY?MAIN)
?PR?COM_RBUFLEN?SIO STATUS=3
MAX_BOT 1 ()
MAX_TOP 7 (?PR?COM_GETCHAR?SIO)
?PR?COM_TBUFLEN?SIO STATUS=3
MAX_BOT 1 ()
MAX_TOP 5 (?PR?_COM_PUTCHAR?SIO)
?SIO?00023 STATUS=3
MAX_BOT 0 ()
MAX_TOP 0 ()
?PR?_GETKEY?MAIN STATUS=3
MAX_BOT 6 (?PR?COM_GETCHAR?SIO)
MAX_TOP 2 (?PR?MAIN?MAIN)
?PR?_PUTCHAR?MAIN STATUS=3
MAX_BOT 6 (?PR?_COM_PUTCHAR?SIO)
MAX_TOP 0 ()
?PR?MAIN?MAIN STATUS=3
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 9
MAX_BOT 8 (?PR?_GETKEY?MAIN)
MAX_TOP 0 ()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -