📄 intsio2.cod
字号:
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 1
ASSEMBLER CODE PACKING OF MODULE: intsio2 (SIO)
----- FUNCTION _getkey (BEGIN) -----
FILE: 'MAIN.C'
21: char _getkey (void)
22: {
23: int k;
0012 ?C0003?MAIN:
24:
25: do
26: {
27: k = com_getchar ();
0012 51FA ACALL com_getchar
;---- Variable 'k' assigned to Register 'R6/R7' ----
28: }
29: while (k == -1);
0014 EF MOV A,R7
0015 F4 CPL A
0016 7002 JNZ ?C0014?MAIN
0018 EE MOV A,R6
0019 F4 CPL A
001A ?C0014?MAIN:
001A 60F6 JZ ?C0003?MAIN
30:
31: return ((unsigned char) k);
32: }
001C 22 RET
----- FUNCTION _getkey (END) -------
0023 4113 AJMP 01000213H
----- FUNCTION com_isr (BEGIN) -----
FILE: 'SIO.C'
62: static void com_isr (void) interrupt 4
0213 C0E0 PUSH ACC
0215 C0D0 PUSH PSW
0217 75D000 MOV PSW,#00H
021A C000 PUSH AR0
63: { unsigned char temp ;
64: /*------------------------------------------------
65: Received data interrupt.
66: ------------------------------------------------*/
67: if (RI != 0)
021C 309819 JNB RI,?C0001?SIO
68: {
69: RI = 0;
021F C298 CLR RI
70: if( P34 == 0 ) { //P34 == 0,主机呼叫
0221 20B414 JB P34,?C0001?SIO
71: if (((r_in - r_out) & ~(RBUF_SIZE-1)) == 0)
0224 C3 CLR C
0225 E508 MOV A,r_in
0227 9509 SUBB A,r_out
0229 54F8 ANL A,#0F8H
022B 700B JNZ ?C0001?SIO
72: {
73: rbuf [r_in & (RBUF_SIZE-1)] = SBUF;
022D E508 MOV A,r_in
022F 5407 ANL A,#07H
0231 2411 ADD A,#LOW rbuf
0233 F8 MOV R0,A
0234 A699 MOV @R0,SBUF
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 2
74: r_in++;
0236 0508 INC r_in
75: }
76: }// if( P34 )
77: }
0238 ?C0001?SIO:
78: P34 = 1;
0238 D2B4 SETB P34
79: /*------------------------------------------------
80: Transmitted data interrupt.
81: ------------------------------------------------*/
82: if (TI != 0)
023A 30991A JNB TI,?C0007?SIO
83: {
84: TI = 0;
023D C299 CLR TI
85:
86: if (t_in != t_out)
023F E50A MOV A,t_in
0241 650B XRL A,t_out
0243 6010 JZ ?C0005?SIO
87: {
88: SBUF = tbuf [t_out & (TBUF_SIZE-1)];
0245 E50B MOV A,t_out
0247 5401 ANL A,#01H
0249 2419 ADD A,#LOW tbuf
024B F8 MOV R0,A
024C E6 MOV A,@R0
024D F599 MOV SBUF,A
89: t_out++;
024F 050B INC t_out
90: ti_restart = 0;
0251 C200 CLR ti_restart
91: }
0253 8002 SJMP ?C0007?SIO
0255 ?C0005?SIO:
92: else
93: {
94: ti_restart = 1;
0255 D200 SETB ti_restart
95: }
96: }
97:
98: }
0257 ?C0007?SIO:
0257 D000 POP AR0
0259 D0D0 POP PSW
025B D0E0 POP ACC
025D 32 RETI
----- FUNCTION com_isr (END) -------
----- FUNCTION com_initialize (BEGIN) -----
FILE: 'SIO.C'
104: void com_initialize (void)
025E D3 SETB C
025F 10AF01 JBC EA,?C0017?SIO
0262 C3 CLR C
0263 ?C0017?SIO:
0263 C0D0 PUSH PSW
105: {
106: /*------------------------------------------------
107: Setup TIMER1 to generate the proper baud rate.
108: ------------------------------------------------*/
109: //com_baudrate (1200);
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 3
110:
111: /*------------------------------------------------
112: Clear com buffer indexes.
113: ------------------------------------------------*/
114: t_in = 0;
0265 E4 CLR A
0266 F50A MOV t_in,A
115: t_out = 0;
0268 F50B MOV t_out,A
116:
117: r_in = 0;
026A F508 MOV r_in,A
118: r_out = 0;
026C F509 MOV r_out,A
119:
120: /*------------------------------------------------
121: Setup serial port registers.
122: ------------------------------------------------*/
123: SM0 = 0; SM1 = 1; /* serial port MODE 1 */
026E C29F CLR SM0
0270 D29E SETB SM1
124: SM2 = 0;
0272 C29D CLR SM2
125: REN = 1; /* enable serial receiver */
0274 D29C SETB REN
126:
127: RI = 0; /* clear receiver interrupt */
0276 C298 CLR RI
128: TI = 0; /* clear transmit interrupt */
0278 C299 CLR TI
129: ti_restart = 1;
027A D200 SETB ti_restart
130:
131: ES = 1; /* enable serial interrupts */
027C D2AC SETB ES
132: PS = 0; /* set serial interrupts to low priority */
027E C2BC CLR PS
133: }
0280 D0D0 POP PSW
0282 92AF MOV EA,C
0284 22 RET
----- FUNCTION com_initialize (END) -------
----- FUNCTION main (BEGIN) -----
FILE: 'MAIN.C'
52: void main (void)
53: { //unsigned int i;
54: //unsigned char j;
55: unsigned char k;
56: com_initialize (); /* initialize interrupt driven serial I/O */
0285 515E ACALL com_initialize
57: com_baudrate (9600);
0287 7F80 MOV R7,#080H
0289 7E25 MOV R6,#025H
028B 51B8 ACALL _com_baudrate
58: P1 = 0xAA ;
028D 7590AA MOV P1,#0AAH
59: P2 = 0x55 ;
0290 75A055 MOV P2,#055H
60: P3 = 0xff ;
0293 75B0FF MOV P3,#0FFH
61: MasterCall = 1 ; //ready to wait for master call
0296 D2B4 SETB P34
62: EA = 1; /* Enable Interrupts */
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 4
0298 D2AF SETB EA
029A ?C0011?MAIN:
63: while (1)
64: { P30 = 1; //进入串行接收状态
029A D2B0 SETB P30
65: P0 = _getkey () ;
029C 1112 ACALL _getkey
029E 8F80 MOV P0,R7
66: P1 = _getkey () ;
02A0 1112 ACALL _getkey
02A2 8F90 MOV P1,R7
67: P2 = _getkey () ;
02A4 1112 ACALL _getkey
02A6 8FA0 MOV P2,R7
68: k = _getkey () | 0x11 ; //p30,p34为1不变
02A8 1112 ACALL _getkey
02AA EF MOV A,R7
02AB 4411 ORL A,#011H
02AD FF MOV R7,A
;---- Variable 'k' assigned to Register 'R7' ----
69: P3 = k ;
02AE F5B0 MOV P3,A
70: P30 = 0; //回应主机接收到
02B0 C2B0 CLR P30
71: _nop_();
02B2 00 NOP
72: _nop_();
02B3 00 NOP
73: _nop_();
02B4 00 NOP
74: _nop_();
02B5 00 NOP
75: } //end of while(1)
02B6 80E2 SJMP ?C0011?MAIN
----- FUNCTION main (END) -------
----- FUNCTION _com_baudrate (BEGIN) -----
FILE: 'SIO.C'
139: void com_baudrate (
02B8 D3 SETB C
02B9 10AF01 JBC EA,?C0018?SIO
02BC C3 CLR C
02BD ?C0018?SIO:
02BD C0D0 PUSH PSW
140: unsigned baudrate)
;---- Variable 'baudrate' assigned to Register 'R6/R7' ----
141: {
142: /*------------------------------------------------
143: Clear transmit interrupt and buffer.
144: ------------------------------------------------*/
145: TI = 0; /* clear transmit interrupt */
02BF C299 CLR TI
146: t_in = 0; /* empty transmit buffer */
02C1 E4 CLR A
02C2 F50A MOV t_in,A
147: t_out = 0;
02C4 F50B MOV t_out,A
148:
149: /*------------------------------------------------
150: Set timer 1 up as a baud rate generator.
151: ------------------------------------------------*/
152: TR1 = 0; /* stop timer 1 */
02C6 C28E CLR TR1
153: ET1 = 0; /* disable timer 1 interrupt */
LX51 LINKER/LOCATER V3.23 05/11/2007 14:36:35 PAGE 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -