📄 zlg500s_comm.lst
字号:
C51 COMPILER V8.02 ZLG500S_COMM 03/16/2009 15:23:02 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ZLG500S_COMM
OBJECT MODULE PLACED IN zlg500S_comm.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE zlg500S_comm.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define ZLG500S_COMM_GLOBALS
2 #include "config.h"
3 #include "Zlg500S.h"
4 #include "zlg500S_comm.h"
5
6
7 INT8U SetBaud()
8 {
9 1 INT8U temp;
10 1 INT8U SetCunt = 3;
11 1
12 1 while(SetCunt)
13 1 {
14 2 SBUF = STX;
15 2 while(TI == 0); TI = 0;
16 2 for(temp=15;temp>0;temp--); //延时30us
17 2 SBUF = STX;
18 2 while(TI == 0); TI = 0;
19 2
20 2 WaitRespDly = ZLG500S_DELAY_10ms;
21 2 while(RI == 0 && WaitRespDly);
22 2 RI = 0;
23 2 if(WaitRespDly == 0)
24 2 {
25 3 SetCunt--;
26 3 continue;
27 3 }
28 2 else
29 2 {
30 3 temp = SBUF;
31 3 if(temp == ACK)
32 3 return TRUE;
33 3 else
34 3 {
35 4 SetCunt--;
36 4 continue;
37 4 }
38 3 }
39 2 }
40 1 return FALSE;
41 1 }
42
43 void ZLG500S_COMM_Init()
44 {
45 1 PCON = 0x80; // SMOD = 1;
46 1 SCON = 0x50; // Mode 1, 8-bit UART, enable receiption
47 1 TMOD = 0x21; // Timer 1, mode 2, 8-bit auto reload,
48 1
49 1 TH1=BAUDRATE;
50 1 TL1=BAUDRATE;
51 1 TR1 = 1; //开定时器1
52 1
53 1 SerDTvalid = FALSE; //串行数据接收有效位置0
54 1
55 1 SetBaud();
C51 COMPILER V8.02 ZLG500S_COMM 03/16/2009 15:23:02 PAGE 2
56 1
57 1 ES = 1;
58 1 }
59
60 void UART_Isr() interrupt 4 using 1
61 {
62 1 if(RI)
63 1 {
64 2 RI = 0;
65 2 SerBfr[SerBfrIdx] = SBUF;
66 2 if(SerBfrIdx == FRAMELEN)
67 2 {
68 3 if(SerBfr[FRAMELEN] < PRTCLEN || SerBfr[FRAMELEN] > MAXSERSIZE)
69 3 {
70 4 return;
71 4 }
72 3 }
73 2 SerBfrIdx++;
74 2
75 2 if(SerBfrIdx >= SerBfr[FRAMELEN])
76 2 {
77 3 SerDTvalid = TRUE;
78 3 SerBfrIdx = FRAMELEN;
79 3 }
80 2 }
81 1 else
82 1 {
83 2 TI = 0;
84 2 if(SerBfrIdx < SerBfr[FRAMELEN])
85 2 {
86 3 SBUF = SerBfr[SerBfrIdx];
87 3 SerBfrIdx++;
88 3 }
89 2 else
90 2 {
91 3 SerBfrIdx = FRAMELEN;
92 3 REN = 1; //发送响应完毕,重新使能接收
93 3 }
94 2 }
95 1 }
96
97 INT8U Ser_Rcv()
98 {
99 1 INT8U i,BCC;
100 1 INT8U Status = FALSE;
101 1
102 1 if(SerDTvalid)
103 1 { //已接收一帧数据,进行数据校验
104 2 if(SerBfr[SerBfr[FRAMELEN]-1] == ETX && SerBfr[FRAMELEN] == (SerBfr[LENGTH]+PRTCLEN))
105 2 { //正确接收到ETX,及帧长度等于数据长度加协议长度,则数据有效
106 3 BCC = 0;
107 3 for(i=0; i<(SerBfr[FRAMELEN]-1); i++)
108 3 {
109 4 BCC ^= SerBfr[i];
110 4 }
111 3 if(BCC == 0xff)
112 3 Status = TRUE; //BCC校验通过
113 3 }
114 2 SerDTvalid = FALSE;
115 2 }
116 1 return Status;
117 1 }
C51 COMPILER V8.02 ZLG500S_COMM 03/16/2009 15:23:02 PAGE 3
118
119 INT8U Ser_Send()
120 {
121 1 INT8U i,BCC;
122 1
123 1 SerBfr[FRAMELEN] = SerBfr[LENGTH]+PRTCLEN; //帧长度等于数据长度加协议长度
124 1 BCC = 0;
125 1 for(i=0; i<(SerBfr[FRAMELEN]-2); i++)
126 1 BCC ^= SerBfr[i];
127 1 SerBfr[SerBfr[FRAMELEN]-2] = ~BCC;
128 1 SerBfr[SerBfr[FRAMELEN]-1] = ETX;
129 1
130 1 SerBfrIdx = FRAMELEN;
131 1 TI = 1;
132 1
133 1 return TRUE;
134 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 291 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = 37 ----
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 + -