📄 16c554.lst
字号:
C51 COMPILER V7.09 16C554 09/25/2008 11:56:16 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 16C554
OBJECT MODULE PLACED IN .\output\bin\16c554.obj
COMPILER INVOKED BY: C:\Keil709\C51\BIN\C51.EXE extendUART\16c554.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash
-\;gps\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\16c554.lst) OBJECT(.\output\bin
-\16c554.obj)
line level source
1 /**********************************************************
2 *此程序是一个测试程序,实际上GPRS是在通道A,此程序改在通道B
3 *16C554的驱动程序
4 *16C554是一个4串口的芯片
5 *B口分配为调试以及客流采集器
6 *C口分配给LED屏
7 **********************************************************/
8
9 #include "w77e532.h"
10 #include "16c554.h"
11 #include "uart.h"
12 #include "mcuInit.h"
13 #include "string.h"
14 unsigned char volatile xdata uartInt _at_ (INT_BASE);
15
16 /*通道A的寄存器定义*/
17 unsigned char volatile xdata chALcr _at_ (CHA_BASE+LCR_ADD);
18 unsigned char volatile xdata chAMcr _at_ (CHA_BASE+MCR_ADD);
19 unsigned char volatile xdata chAIer _at_ (CHA_BASE+IER_ADD);
20 unsigned char volatile xdata chAIir _at_ (CHA_BASE+IIR_ADD);
21 unsigned char volatile xdata chALsr _at_ (CHA_BASE+LSR_ADD);
22 unsigned char volatile xdata chAMsr _at_ (CHA_BASE+MSR_ADD);
23 unsigned char volatile xdata chARxd _at_ (CHA_BASE+RBR_ADD);
24 unsigned char volatile xdata chAScr _at_ (CHA_BASE+SCR_ADD);
25 #define chATxd chARxd
26 #define chADll chARxd
27 #define chADlm chAIer
28 #define chAFcr chAIir
29
30 /*通道B的寄存器定义*/
31 unsigned char volatile xdata chBLcr _at_ (CHB_BASE+LCR_ADD);
32 unsigned char volatile xdata chBMcr _at_ (CHB_BASE+MCR_ADD);
33 unsigned char volatile xdata chBIer _at_ (CHB_BASE+IER_ADD);
34 unsigned char volatile xdata chBIir _at_ (CHB_BASE+IIR_ADD);
35 unsigned char volatile xdata chBLsr _at_ (CHB_BASE+LSR_ADD);
36 unsigned char volatile xdata chBMsr _at_ (CHB_BASE+MSR_ADD);
37 unsigned char volatile xdata chBRxd _at_ (CHB_BASE+RBR_ADD);
38 unsigned char volatile xdata chBScr _at_ (CHB_BASE+SCR_ADD);
39 #define chBTxd chBRxd
40 #define chBDll chBRxd
41 #define chBDlm chBIer
42 #define chBFcr chBIir
43
44 /*通道C的寄存器定义*/
45 unsigned char volatile xdata chCLcr _at_ (CHC_BASE+LCR_ADD);
46 unsigned char volatile xdata chCMcr _at_ (CHC_BASE+MCR_ADD);
47 unsigned char volatile xdata chCIer _at_ (CHC_BASE+IER_ADD);
48 unsigned char volatile xdata chCIir _at_ (CHC_BASE+IIR_ADD);
49 unsigned char volatile xdata chCLsr _at_ (CHC_BASE+LSR_ADD);
50 unsigned char volatile xdata chCMsr _at_ (CHC_BASE+MSR_ADD);
51 unsigned char volatile xdata chCRxd _at_ (CHC_BASE+RBR_ADD);
52 unsigned char volatile xdata chCScr _at_ (CHC_BASE+SCR_ADD);
53 #define chCTxd chCRxd
C51 COMPILER V7.09 16C554 09/25/2008 11:56:16 PAGE 2
54 #define chCDll chCRxd
55 #define chCDlm chCIer
56 #define chCFcr chCIir
57
58 /*通道D的寄存器定义*/
59 unsigned char volatile xdata chDLcr _at_ (CHD_BASE+LCR_ADD);
60 unsigned char volatile xdata chDMcr _at_ (CHD_BASE+MCR_ADD);
61 unsigned char volatile xdata chDIer _at_ (CHD_BASE+IER_ADD);
62 unsigned char volatile xdata chDIir _at_ (CHD_BASE+IIR_ADD);
63 unsigned char volatile xdata chDLsr _at_ (CHD_BASE+LSR_ADD);
64 unsigned char volatile xdata chDMsr _at_ (CHD_BASE+MSR_ADD);
65 unsigned char volatile xdata chDRxd _at_ (CHD_BASE+RBR_ADD);
66 unsigned char volatile xdata chDScr _at_ (CHD_BASE+SCR_ADD);
67 #define chDTxd chDRxd
68 #define chDDll chDRxd
69 #define chDDlm chDIer
70 #define chDFcr chDIir
71
72 /*与GPRS相连的串口数据结构*/
73 struct
74 {
75 unsigned char txState; /*发送状态标志*/
76 unsigned char rxState; /*接收状态标志*/
77 unsigned char txTimer; /*发送数据包间隔控制定时器*/
78 unsigned char rxTimer;
79 unsigned int txLen; /*发送数据长度*/
80 unsigned int rxLen; /*接收数据长度*/
81 unsigned char *txPtr; /*当前发送指针*/
82 unsigned char xdata *rxHeadPtr;
83 unsigned char xdata *rxCurPtr; /*当前接收指针*/
84 } atInfo,siobInfo, siocInfo, siodInfo;
85
86
87
88 /*最大发送字节减1须为全1.即须是64,128,256,512,1024,2048等*/
89 #define AT_MAX_SEND_BYTE 1024 - 1
90
91 char xdata rxTmpBuffer[350] _at_ 0x0;
92
93
94 static void chA_init()
95 {
96 1 //chAIer = 0x00; /*禁止中断*/
97 1 //return;
98 1
99 1
100 1 /*通道A的初始化*/
101 1 chALcr = 0x80; /*准备设置波特率*/
102 1 chADlm = TI16C554_38400 >> 8;//9600 >> 8;
103 1 chADll = TI16C554_38400;//9600;
104 1
105 1 chALcr = 0x03; /*设置为8,1,N*/
106 1 chAMcr = 0x03; /*设置RTS,DTR有效,也可以控制环回*/
107 1 chAFcr = 0x00; /*采用16C450模式*/
108 1 chAIer = 0x03; /*允许发送和接收中断*/
109 1
110 1 }
111
112 static void chB_init()
113 {
114 1 //chBIer = 0x00; /*禁止中断*/
115 1 //return;
C51 COMPILER V7.09 16C554 09/25/2008 11:56:16 PAGE 3
116 1
117 1 /*通道B的初始化*/
118 1 chBLcr = 0x80; /*准备设置波特率*/
119 1 chBDlm = TI16C554_19200 >> 8;
120 1 chBDll = TI16C554_19200;
121 1
122 1 chBLcr = 0x03; /*设置为8,1,N*/
123 1 chBMcr = 0x03; /*设置RTS,DTR有效,也可以控制环回*/
124 1 chBFcr = 0x00; /*采用16C450模式*/
125 1 chBIer = 0x03; /*允许发送和接收中断*/
126 1
127 1 }
128
129 static void chC_init()
130 {
131 1 // chCIer = 0x00; /*禁止中断*/
132 1 chCLcr = 0x80; /*准备设置波特率*/
133 1 chCDlm = TI16C554_19200 >> 8;
134 1 chCDll = TI16C554_19200;
135 1
136 1 chCLcr = 0x03; /*设置为8,1,N*/
137 1 chCMcr = 0x03; /*设置RTS,DTR有效,也可以控制环回*/
138 1 chCFcr = 0x00; /*采用16C450模式*/
139 1 chCIer = 0x03; /*允许发送和接收中断*/
140 1 }
141
142 static void chD_init()
143 {
144 1 chDIer = 0x00; /*禁止中断*/
145 1 /*通道D的初始化*/
146 1 // chDLcr = 0x80; /*准备设置波特率*/
147 1 // chDDlm = TI16C554_38400 >> 8;//9600 >> 8;
148 1 // chDDll = TI16C554_38400;//9600;
149 1
150 1 // chDLcr = 0x03; /*设置为8,1,N*/
151 1 // chDMcr = 0x03; /*设置RTS,DTR有效,也可以控制环回*/
152 1 // chDFcr = 0x00; /*采用16C450模式*/
153 1 // chDIer = 0x03; /*允许发送和接收中断*/
154 1 }
155
156 /**************************中断服务程序************************/
157 char intPend;
158 char bdata intSource;
159 sbit intChA = intSource ^ 0;//4; /*通道A中断*/
160 sbit intChB = intSource ^ 1;//5; /*通道B中断*/
161 sbit intChC = intSource ^ 2;//6; /*通道C中断*/
162 sbit intChD = intSource ^ 3;//7; /*通道D中断*/
163
164 void ISRExtInt1(void) interrupt 2 using 2
165 {
166 1
167 1 intSource = uartInt & 0x0f;
168 1 while(intSource != 0)
169 1 {
170 2 /*通道A*/
171 2 if( intChA )
172 2 {
173 3 intPend = chAIir;
174 3 if( intPend == 0x04 )
175 3 {/*接收数据中断*/
176 4
177 4 *atInfo.rxCurPtr = chARxd;
C51 COMPILER V7.09 16C554 09/25/2008 11:56:16 PAGE 4
178 4 atInfo.rxCurPtr ++;
179 4 if( atInfo.rxCurPtr == (char xdata *)0x100 )
180 4 atInfo.rxCurPtr = (char xdata *)0;
181 4
182 4 if( atInfo.rxHeadPtr == atInfo.rxCurPtr )
183 4 atInfo.rxCurPtr --;
184 4
185 4
186 4 }
187 3 else if( intPend == 0x02 )
188 3 {/*发送数据中断*/
189 4
190 4 if( atInfo.txLen == 0 )
191 4 {
192 5 atInfo.txState = 0;
193 5 }
194 4 else
195 4 {
196 5 chATxd = *atInfo.txPtr;
197 5 atInfo.txPtr ++;
198 5 atInfo.txLen --;
199 5 }
200 4
201 4 }
202 3 }
203 2
204 2 /*通道B*/
205 2 if( intChB )
206 2 {
207 3 intPend = chBIir;
208 3 if( intPend == 0x04 )
209 3 {/*接收数据中断*/
210 4
211 4 *siobInfo.rxCurPtr = chBRxd;
212 4 siobInfo.rxTimer = 10;
213 4 siobInfo.rxState = 1;
214 4 if( siobInfo.rxLen < 0xFFFF )
215 4 {
216 5 siobInfo.rxLen ++;
217 5 siobInfo.rxCurPtr ++;
218 5 }
219 4 }
220 3 else if( intPend == 0x02 )
221 3 {/*发送数据中断*/
222 4
223 4 if( siobInfo.txLen == 0 )
224 4 {
225 5 siobInfo.txState = 0;
226 5 }
227 4 else
228 4 {
229 5 chBTxd = *siobInfo.txPtr;
230 5 siobInfo.txPtr ++;
231 5 siobInfo.txLen --;
232 5 }
233 4
234 4 }
235 3 }
236 2
237 2
238 2 /*通道C*/
239 2 if( intChC )
C51 COMPILER V7.09 16C554 09/25/2008 11:56:16 PAGE 5
240 2 {
241 3 intPend = chCIir;
242 3 if( intPend == 0x04 )
243 3 {/*接收数据中断*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -