📄 serial.lst
字号:
C51 COMPILER V7.06 SERIAL 01/26/2004 20:24:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN SERIAL.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SERIAL.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-------------------------------------------------------------------------
2 // Filename : Serial.C
3 // Language : C for AT89S8252
4 // Revision : 1.0
5 // Initial Date : 07/10/2000
6 // Last Modify :
7 // System clock : 24.00MHZ
8 // Description : Panel controller serial communication Plc64i32o
9 //-------------------------------------------------------------------------
10 #define _SERIAL_H_
11 #include <reg52.h>
12 #include "serial.h"
13 #undef _SERIAL_H_
14 //-------------------------------------------------------------------------
15 bit TransOK;
16 bit ReceEnd;
17 bit ReceData;
18 bit SerialMode;
19 unsigned char out_proc;
20 unsigned char in_proc;
21 unsigned char reply_wait;
22 sbit DE_RE = P3^2;
23 //-------------------------------------------------------------------------
24 void _init_serial (unsigned baud)
25 {
26 1 RCAP2H = baud/256;
27 1 RCAP2L = baud%256;
28 1 T2CON = 0x34;
29 1 SCON = 0x70; // serial port mothed 1
30 1 ES = ON; // open serial port interrupt
31 1 ReceData = TRUE;
32 1 DE_RE = RXENABL; // enable receive
33 1 SerialMode = RXENABL;
34 1 in_proc = RECE_STFLAG;
35 1 }
36 //-------------------------------------------------------------------------
37 void _trf_msge (char a,char c,char l)
38 {
39 1 TransOK = FALSE;
40 1 TranStream.address = a;
41 1 TranStream.command = c;
42 1 TranStream.length = l;
43 1 SerialMode = TXENABL;
44 1 DE_RE = TXENABL;
45 1 SBUF = 0x7e;
46 1 out_proc = SEND_ADDRESS;
47 1 }
48 //-------------------------------------------------------------------------
49 void _out_comm(void) using 3
50 {
51 1 if (TI == 1){
52 2 TI = 0;
53 2 if (SerialMode == TXENABL){
54 3 switch (out_proc){
55 4 case SEND_ADDRESS :
C51 COMPILER V7.06 SERIAL 01/26/2004 20:24:42 PAGE 2
56 4 SBUF=TranStream.address;
57 4 out_proc++;
58 4 break;
59 4 case SEND_COMMAND :
60 4 SBUF=TranStream.command;
61 4 out_proc++;
62 4 break;
63 4 case SEND_LENGTH :
64 4 SBUF=TranStream.length;
65 4 if (!TranStream.length)
66 4 out_proc = SEND_WAIT;
67 4 else{
68 5 out_proc++;
69 5 TranStream.data_ptr = 0;
70 5 TranStream.checksum = 0;}
71 4 break;
72 4 case SEND_DATABLK :
73 4 SBUF = TranStream.datablk[TranStream.data_ptr];
74 4 TranStream.checksum += TranStream.datablk[TranStream.data_ptr];
75 4 if (++TranStream.data_ptr == TranStream.length)
76 4 out_proc++;
77 4 break;
78 4 case SEND_CHKSUM :
79 4 SBUF = TranStream.checksum;
80 4 out_proc++;
81 4 break;
82 4 case SEND_WAIT :
83 4 DE_RE = RXENABL;
84 4 out_proc++;
85 4 reply_wait = RECENABL;
86 4 break;
87 4 case SEND_END :
88 4 DE_RE = RXENABL;
89 4 SerialMode = RXENABL;
90 4 out_proc = SEND_ADDRESS;
91 4 }
92 3 }
93 2 else
94 2 DE_RE = RXENABL;
95 2 }
96 1 }
97 //-------------------------------------------------------------------------
98 void _in_comm (void) using 3
99 {
100 1 if (RI == 1){
101 2 RI = 0;
102 2 if (reply_wait == RECENABL){
103 3 if(SBUF == 0x66)
104 3 TransOK=PASS;
105 3 else
106 3 TransOK=FALSE;
107 3 reply_wait = OFF;
108 3 DE_RE = TXENABL;
109 3 SBUF = 0x3c;
110 3 }
111 2 if (SerialMode == RXENABL){
112 3 switch (in_proc){
113 4 case RECE_STFLAG :
114 4 if (SBUF == 0x7e)
115 4 in_proc++;
116 4 break;
117 4 case RECE_ADDRESS :
C51 COMPILER V7.06 SERIAL 01/26/2004 20:24:42 PAGE 3
118 4 if (SBUF == ReceStream.address)
119 4 in_proc++;
120 4 else
121 4 in_proc = RECE_STFLAG;
122 4 break;
123 4 case RECE_COMMAND :
124 4 ReceStream.command = SBUF;
125 4 in_proc++;
126 4 break;
127 4 case RECE_LENGTH :
128 4 ReceStream.length = SBUF;
129 4 if (!ReceStream.length){
130 5 in_proc = RECE_END;
131 5 DE_RE = TXENABL;
132 5 SBUF = 0x66;}
133 4 else{
134 5 in_proc++;
135 5 ReceStream.data_ptr = 0;
136 5 ReceStream.checksum = 0;}
137 4 break;
138 4 case RECE_DATABLK :
139 4 ReceStream.datablk[ReceStream.data_ptr++] = SBUF;
140 4 ReceStream.checksum += SBUF;
141 4 if (ReceStream.data_ptr == ReceStream.length)
142 4 in_proc++;
143 4 break;
144 4 case RECE_CHKSUM :
145 4 DE_RE = TXENABL;
146 4 if (ReceStream.checksum == SBUF){
147 5 SBUF = 0x66;
148 5 ReceData = TRUE;}
149 4 else{
150 5 SBUF = 0xff;
151 5 ReceData = WRONG;}
152 4 in_proc++;
153 4 break;
154 4 case RECE_END :
155 4 if (SBUF == 0x3c)
156 4 ReceEnd = FINISH;
157 4 else
158 4 ReceEnd = FAILURE;
159 4 DE_RE = RXENABL;
160 4 SerialMode = RXENABL;
161 4 in_proc = RECE_STFLAG;
162 4 }
163 3 }
164 2 }
165 1 }
166 //-------------------------------------------------------------------------
167 // serial: serial receiver / transmitter interrupt
168 //-------------------------------------------------------------------------
169 serial () interrupt 4 using 3 // use registerbank 3 for interrupt
170 {
171 1 unsigned char i;
172 1 unsigned char length;
173 1 _in_comm();
174 1 _out_comm();
175 1 if (ReceEnd == FINISH){
176 2 if (ReceData == TRUE){
177 3 rece_com = ReceStream.command;
178 3 ReceEnd = OFF;
179 3 if (ReceStream.length){
C51 COMPILER V7.06 SERIAL 01/26/2004 20:24:42 PAGE 4
180 4 length = ReceStream.length + 1;
181 4 for (i=0; i<length; i++){
182 5 rece_data[i] = ReceStream.datablk[i];
183 5 }
184 4 }
185 3 }
186 2 }
187 1 }
188 //-------------------------------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 465 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = 41 ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -