📄 serial1.lst
字号:
205 3 F76_RX_Sta=2;
206 3 F76_RX_Buff[0]=Uart1RBuf;
207 3 F76_RX_cnt=1;
208 3 }
209 3
210 3 break;
211 3 case 2:
212 3 F76_RX_Buff[F76_RX_cnt++]=Uart1RBuf;
213 3 if( F76_RX_cnt>=F76_BUFF_MAX) {
214 3 F76_RX_Sta=0;
215 3
216 3 }
217 3 if(Uart1RBuf==0xab) { // over byte flag
218 3 Xin_F76_RX_B=1;
219 3 F76_RX_Sta=0;
220 3
221 3 }
222 3
223 3 break;
224 3
225 3 default:
226 3 F76_RX_Sta=0;
227 3
228 3 break;
229 3
230 3 }
231 3 */
232 3
233 3
234 3 }
235 2 else { //子串口0接收到一个字节
236 3 //子串口0 来自DiZh 的数据
237 3 // if(Xin_DiZh_RX_B==0) { //未处理不能接收防止覆盖
238 3 Uart0RBuf=SBUF1; //缓存子串口0收到的数据,以便接收后续数据
239 3 DiZh_Rx_Buff[DiZh_RX_cnt++]=Uart0RBuf;
240 3 DiZh_Es_jie_cnt=16; //80ms 时限到认为接收结束in:
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 5
241 3 if(DiZh_RX_cnt>=DiZh_BUFF_MAX)
242 3 DiZh_RX_cnt=0;
243 3 //}
244 3 }
245 2 }
246 1
247 1
248 1
249 1
250 1 //以下是发送数据==以下是发送数据===以下是发送数据==以下是发送数据
251 1 //以下是发送数据==以下是发送数据===以下是发送数据==以下是发送数据
252 1 //以下是发送数据==以下是发送数据===以下是发送数据==以下是发送数据
253 1 //以下是发送数据==以下是发送数据===以下是发送数据==以下是发送数据
254 1 if (SCON1&0x02) //-->_testbit_(TI_1))
255 1 {
256 2 //TI=0; //已经产生发送中断,准备解析下一个需要发送的数据
257 2 switch(UartPointer){ //判断即将向哪个子串口发送数据?
258 3 case 0:{ //准备向子串口0发送数据
259 4 // 子串口0 fa DiZh 的数据
260 4 if( DiZh_TX_Len>DiZh_BUFF_MAX)
261 4 DiZh_TX_Len= DiZh_BUFF_MAX;
262 4 UartPointer++; //下一次发送中断准备向子串口1发送数据
263 4 if(DiZh_TX_Len){ //串口0发送缓存区是否有数据需要发送?
264 5 AdrOut0_0; //有数据需要发送,则选通子串口0的地址
265 5 AdrOut1_0;
266 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
267 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
268 5 DiZh_TX_Len--;
269 5 DiZh_TX_is_over_B=0;
270 5 if(DiZh_TX_Len==0) {
271 6 DiZh_TX_is_over_B=1;
272 6 }
273 5 SBUF1=DiZh_Tx_Buff[DiZh_TX_cnt++];//将串口0发送缓存中的一个字节
274 5 break; //由子串口0发送到下位机
275 5 }
276 4 else
277 4 goto T_NopInstruction; //若子串口0没有数据发送则准备发送空指令
278 4 }
279 3
280 3 case 1:{ //准备向子串口1发送数据
281 4 //子串口1 来自报警板的数据
282 4 if( F76_TX_Len>F76_BUFF_MAX)
283 4 F76_TX_Len= F76_BUFF_MAX;
284 4
285 4 UartPointer++; //下一次发送中断准备向子串口2发送数据
286 4 if(F76_TX_Len){ //串口1发送缓存区是否有数据需要发送?
287 5 AdrOut0_1; //有数据需要发送,则选通子串口2的地址
288 5 AdrOut1_0;
289 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
290 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
291 5 F76_TX_Len--;
292 5 F76_TX_is_over_B=0;
293 5 if(F76_TX_Len==0) {
294 6 F76_TX_is_over_B=1;
295 6 //Dis_FA_485shou; //为推完,要上拉电阻
296 6 }
297 5 SBUF1=F76_TX_Buff[F76_TX_cnt++];//将串口1发送缓存中的一个字节
298 5 break; //由子串口1发送到下位机
299 5 }
300 4 else
301 4 goto T_NopInstruction; //若子串口1没有数据发送则准备发送空指令
302 4
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 6
303 4 }
304 3 case 2:{ //准备向子串口2发送数据
305 4
306 4 //子串口2 发给键盘的数据
307 4 if( KEY_TX_Len>KEY_BUFF_MAX)
308 4 KEY_TX_Len= KEY_BUFF_MAX;
309 4 UartPointer++; //下一次发送中断准备向子串口2发送数据
310 4 if(KEY_TX_Len){ //串口2发送缓存区是否有数据需要发送?
311 5 AdrOut0_0; //有数据需要发送,则选通子串口0的地址
312 5 AdrOut1_1;
313 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
314 5 _nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
315 5 KEY_TX_Len--;
316 5 KEY_TX_is_over_B=0;
317 5 if(KEY_TX_Len==0) {
318 6 KEY_TX_is_over_B=1;
319 6 KEY_TX_is_over_Start_cnt_B=1; // 帧间隔计时位
320 6 KEY_TX_is_over_Start_cnt=0; // 帧间隔计时计数器
321 6
322 6 }
323 5 SBUF1=KEY_TX_Buff[KEY_TX_cnt++];//将串口2发送缓存中的一个字节
324 5 break; //由子串口2发送到下位机
325 5 }
326 4 else
327 4 goto T_NopInstruction; //若子串口2没有数据发送则准备发送空指令
328 4
329 4
330 4 } //而只能够发送一条空指令用于时序配合
331 3
332 3 default:{
333 4 UartPointer=0; //下一次发送中断准备向串口0发送数据
334 4 T_NopInstruction:
335 4 AdrOut0_1; //选通目串口准备发送空指令或者其他指令
336 4 AdrOut1_1;
337 4 if(bInstructFlag){ //判断是否需要发送其他指令?
338 5 bInstructFlag=0; //清除指令发送标志
339 5 SBUF1=InstructBuf; //将需要发送的指令发送到串口扩展IC
340 5 break;
341 5 }
342 4 //else if(Uart0TNum|Uart1TNum|Uart2TNum){//判断所有子串口的数据是否
343 4 else if(F76_TX_Len|KEY_TX_Len|DiZh_TX_Len){//判断所有子串口的数据是否
344 5 SBUF1=0; //都已经全部发送完毕?若没有完毕则发送空指令
345 5 break;
346 5 }
347 4 else {bUartBusy=0;break;}//若所有子串口数据都已经发送完毕,则立即
348 4 } //清除"串口忙"标志(主程序将根据该标志来决定是否执行"TI=1"这条指令)
349 3 }
350 2 }
351 1
352 1
353 1 SCON1&=0xfc; //CKR TI, RI
354 1
355 1
356 1 }
357
358
359
360 /*****************************************************************
361 Function: OpenComm
362 Description: Sets the serial port up for debug use and resets
363 the ring buffer pointers to 0.
364 Parameters: None.
C51 COMPILER V7.50 SERIAL1 06/10/2007 23:11:20 PAGE 7
365 Returns: Nothing.
366 *****************************************************************/
367 // 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
368
369 void Open_URRA_1(void)
370 {
371 1 // SCON1=0xf0; /*设置串行口1工作于方式3,主从式*/
372 1 /*SM0_1 SM1_1 SM2_1 REN_1 TB8_1 RB8_1 TI_1 RI_1*/
373 1 /* 1 1 1 1 0 0 0 0 */
374 1 /*when SM2_1=1 receice addr */
375 1 TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */
376 1 PCON|=0x10;//-->SMOD_1=1; /*bps double*/
377 1 CKCON |= 0x10; // Timer 1 derived from SYSCLK
378 1 TH1 = -(SYSCLK/BAUDRATE1/16); //11.0592 ->4800-115200
379 1 TR1 = 1; // Start Timer 1
380 1 SCON1 = 0x50; // Configure UART1 for mode 1, receiver enabled.
381 1 SCON1|=0x10;//--> REN1=1;
382 1 EIE2|=0x40; //--> ES1=1; // allow the serial interrupt
383 1
384 1 }
385
386
387 /**********************************************************************
388 **函数原型: void FA_DiZhen_Buff()
389 **入口参数:
390 **出口参数: 无
391 **返 回 值: 无
392 **说 明: 对地震仪发数据子程序
393 *************************************************************************/
394 void FA_DiZhen_Buff() {
395 1
396 1 DiZh_TX_Len= DiZh_Tx_Buff[3]+6;
397 1 DiZh_TX_cnt=0;
398 1 if(bUartBusy==0){ //判断发送中断是否处于激活状态,若没有激活则:
399 2 SCON1|=2; //TI=1; //激活MCU的串口发送程序
400 2 bUartBusy=1; //置发送程序已经激活的标志
401 2 }
402 1
403 1 }
404
405
406
407
408 //等待得到控制权
409 //等待得到控制权
410 //只有得到权限才能更新缓冲区数据
411 /*
412 void Get_Fa_DiZh_buffer_Right( )
413 { xdata uchar ttt=0;
414
415 while(DiZh_TX_is_over_B==0) { //TX所完标志位,没发完再发时要等待
416 os_wait2(K_TMO, 50); //100ms
417 if(ttt++>100) //延时5秒 到也认为发送有空
418 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -