📄 demo232.lst
字号:
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE DEMO232
OBJECT MODULE PLACED IN Demo232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Demo232.C BROWSE DEBUG OBJECTEXTEND TABS(6)
line level source
1 /*
2
3 #define LOOPBACK 如果想本地回放,不能注释掉此定义
4 #define PARALLEL 0
5 南京梧桐 11:27:06
6 这个定义,放开是并行工作方式
7 南京梧桐 11:27:17
8 注释掉是串行工作方式
9
10 */
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include "Demo232.h"
26 #define PARALLEL
27 #define LOOPBACK //如果想本地回放,不能注释掉此定义
28
29 HIBYTE pFrameData[34];
30
31 BYTE nRXD_STATE = STATE_RXD_IDLE;
32 BYTE pRXBUF[8];
33 BYTE nRxByteCnt;
34 BOOL bReceived = 0;
35
36 main()
37 {
38 1 BYTE nI;
39 1
40 1 DISABLE;
41 1
42 1 #ifdef PARALLEL
43 1
44 1 PS1_SDO = 0;
45 1 PS2_SOCK = 0;
46 1 #else
PS2_SOCK = 0;
PS1_SDO = 1;
PRD_SOSTRB = 1;
P0 = 0;
#endif
52 1
53 1 //Reset AMBE1000
54 1 _AMBERST = 0;
55 1 for(nI = 0; nI < 100; nI++) Delay15uS();
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 2
56 1 _AMBERST = 1;
57 1
58 1 pFrameData[0] = 0x13;
59 1 pFrameData[1] = 0xec;
60 1 for(nI = 2; nI < 34; nI++)
61 1 {
62 2 pFrameData[nI] = 0;
63 2 }
64 1
65 1 Uart_Initial();
66 1
67 1 ES = 1;
68 1 ENABLE;
69 1
70 1
71 1 #ifdef PARALLEL
72 1 while(1)
73 1 {
74 2 while(!EPR);
75 2 AMBEReadParallel();
76 2
77 2 TXData();
78 2
79 2 while(!DPE);
80 2
81 2 AMBEWriteParallel();
82 2 }
83 1 #else
while(1)
{
while(!EPR);
//if(EPR)
AMBEReadSerial();
while(!DPE);
//if(DPE)
AMBEWriteSerial();
}
#endif
95 1
96 1 }
97
98 void AMBEReadParallel(void)
99 {
100 1 BYTE nI;
101 1 P0 = 0xFF;
102 1 for(nI = 0; nI < 34; nI++)
103 1 {
104 2 PRD_SOSTRB = 0;
105 2 pFrameData[nI]= P0;
106 2 PRD_SOSTRB = 1;
107 2 Delay15uS();//大于350个AMBE1000的时钟周期
108 2 }
109 1 }
110
111 void AMBEWriteParallel(void)
112 {
113 1 BYTE nI;
114 1 P0 = 0x00;
115 1 #ifdef LOOPBACK
116 1
117 1 for(nI = 0; nI < 34; nI++)
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 3
118 1 {
119 2 P0 = pFrameData[nI];
120 2 PWR_SISTRB = 0;
121 2 PWR_SISTRB = 1;
122 2 Delay15uS();//大于350个AMBE1000的时钟周期
123 2 }
124 1
125 1 #else
if(bReceived)
{
DISABLE;
for(nI = 0; nI < 6; nI++)
pFrameData[nI+10] = pRXBUF[nI];
bReceived =0;
ENABLE;
for(nI = 0; nI < 34; nI++)
{
P0 = pFrameData[nI];
PWR_SISTRB = 0;
PWR_SISTRB = 1;
Delay15uS();//大于350个AMBE1000的时钟周期
}
}
#endif
145 1 }
146
147
148 void AMBEReadSerial(void)
149 {
150 1 BYTE nI, nK ,nTemp;
151 1 for(nI = 0; nI < 17; nI ++)
152 1 {
153 2 PRD_SOSTRB = 0;
154 2 nTemp = 0;//xFF;
155 2 for(nK = 0; nK < 8; nK ++)
156 2 {
157 3 PS2_SOCK = 1;
158 3 if(PS1_SDO == 1) Sfr_Bit_Set(nTemp,7-nK);
159 3 PS2_SOCK = 0;
160 3 }
161 2 pFrameData[2*nI] = nTemp;
162 2 PRD_SOSTRB = 1;
163 2 nTemp = 0;
164 2 for(nK = 0; nK < 8; nK ++)
165 2 {
166 3 PS2_SOCK = 1;
167 3 if(PS1_SDO == 1) Sfr_Bit_Set(nTemp,7-nK);
168 3 PS2_SOCK = 0;
169 3 }
170 2 pFrameData[2*nI+1] = nTemp;
171 2 Delay15uS();//大于350个AMBE1000的时钟周期
172 2 }
173 1 }
174
175
176 void AMBEWriteSerial(void)
177 {
178 1 BYTE nI, nK ,nTemp;
179 1 for(nI = 0; nI < 17; nI++)
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 4
180 1 {
181 2 PWR_SISTRB = 0;
182 2 //Delay();
183 2 SICK = 0;
184 2 SICK = 1;
185 2 nTemp = pFrameData[2*nI];
186 2 for(nK = 0; nK <=7; nK++)
187 2 {
188 3 SICK = 0;
189 3 SDI = Sfr_Bit_Test_True(nTemp ,7-nK);
190 3 SICK = 1;
191 3 }
192 2 PWR_SISTRB = 1;
193 2 nTemp = pFrameData[2*nI+1];
194 2 for(nK = 0; nK <=7; nK++)
195 2 {
196 3 SICK = 0;
197 3 SDI = Sfr_Bit_Test_True(nTemp ,7-nK);
198 3 SICK = 1;
199 3 }
200 2 Delay15uS();//大于350个AMBE1000的时钟周期
201 2 }
202 1 }
203
204
205 //P89C51 24Mhz
206 void Delay15uS(void)
207 {
208 1 _nop_();_nop_();_nop_();_nop_();_nop_();
209 1 _nop_();_nop_();_nop_();_nop_();_nop_();
210 1 _nop_();_nop_();_nop_();_nop_();_nop_();
211 1 _nop_();_nop_();_nop_();_nop_();_nop_();
212 1 _nop_();_nop_();_nop_();_nop_();_nop_();
213 1 _nop_();_nop_();_nop_();_nop_();_nop_();
214 1
215 1 }
216
217 void Uart_Initial(void)
218 {
219 1 //Mode 1 ,Receive Enable
220 1 SCON = 0x50;
221 1 //Mode 3 ,Receive Enable
222 1
223 1 // SCON = 0xD0;
224 1 //SMOD = 1
225 1 PCON = 0x80;
226 1 //T0 T1 Mode 2(8bit auto reload Timer)
227 1 TMOD = 0x22;
228 1
229 1 // PCON = 0x00;//9600BPS
230 1 // SM2 = 1;
231 1 // TB8 = 1;
232 1
233 1 //19200BPS 22.1184MHz Crystal
234 1 TL1 = 0xFA;
235 1 TH1 = 0xFA;
236 1
237 1 // TL1 = 0xFB;
238 1 // TH1 = 0xFB;
239 1 bReceived = 0;
240 1
241 1 TR1 = 1;
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 5
242 1 }
243
244 void TXData(void)
245 {
246 1 BYTE nI;
247 1 SBUF = 0x13;
248 1 while(!TI);
249 1 TI = 0;
250 1 SBUF = 0xEC;
251 1 while(!TI);
252 1 TI = 0;
253 1
254 1 for(nI = 0; nI < 6; nI++)
255 1 {
256 2 SBUF = pFrameData[nI+10];
257 2 while(!TI);
258 2 TI = 0;
259 2 }
260 1
261 1 }
262
263 //AMBE1000:2.4kbps
264 //Head:0x13ec
265 //Packet:Head + 6 Bytes Voice Data
266
267 void Uart_INTService(void) interrupt INTERRUPT_UART
268 {
269 1
270 1 BYTE nRxData;
271 1 //if(TI == 1) return;
272 1
273 1 if(RI == 1)
274 1 {
275 2 RI = 0;
276 2 if(bReceived) return;
277 2
278 2 nRxData = SBUF;
279 2
280 2 switch(nRXD_STATE)
281 2 {
282 3 case STATE_RXD_IDLE:
283 3 {
284 4 if (nRxData == 0x13) //Head
285 4 {
286 5 nRXD_STATE = STATE_RXD_HEAD;
287 5 nRxByteCnt = 0;
288 5 }
289 4 break;
290 4 }
291 3 case STATE_RXD_HEAD:
292 3 {
293 4 if (nRxData == 0xEC) //Head
294 4 {
295 5 nRXD_STATE = STATE_RXD_DATA;
296 5 nRxByteCnt = 0;
297 5 }
298 4 else
299 4 {
300 5 nRXD_STATE = STATE_RXD_IDLE;
301 5 nRxByteCnt = 0;
302 5 }
303 4 break;
C51 COMPILER V8.05a DEMO232 04/20/2009 19:12:12 PAGE 6
304 4 }
305 3
306 3 case STATE_RXD_DATA: //Voice Data
307 3 {
308 4
309 4 pRXBUF[nRxByteCnt] = nRxData;
310 4 nRxByteCnt ++;
311 4 if(nRxByteCnt == 6)
312 4 {
313 5 nRxByteCnt = 0;
314 5 bReceived = 1;
315 5 nRXD_STATE = STATE_RXD_IDLE;
316 5 }
317 4 break;
318 4 }
319 3 default: break;
320 3 }
321 2 }
322 1 }
323
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 541 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 6
IDATA SIZE = 34 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -