📄 zlg500s_comm.lst
字号:
C51 COMPILER V7.50 ZLG500S_COMM 05/17/2008 12:45:01 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ZLG500S_COMM
OBJECT MODULE PLACED IN zlg500S_comm.OBJ
COMPILER INVOKED BY: D:\Program Files\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 1 }
43
44 void ZLG500S_COMM_Init()
45 {
46 1 PCON = 0x80; // SMOD = 1;
47 1 SCON = 0x50; // Mode 1, 8-bit UART, enable receiption
48 1 TMOD = 0x21; // Timer 1, mode 2, 8-bit auto reload,
49 1
50 1 TH1=BAUDRATE;
51 1 TL1=BAUDRATE;
52 1 TR1 = 1;
53 1
54 1 SerDTvalid = FALSE;
55 1
C51 COMPILER V7.50 ZLG500S_COMM 05/17/2008 12:45:01 PAGE 2
56 1 SetBaud();
57 1
58 1 ES = 1;
59 1 }
60
61 void UART_Isr() interrupt 4 using 1
62 {
63 1 if(RI)
64 1 {
65 2 RI = 0;
66 2 SerBfr[SerBfrIdx] = SBUF;
67 2 if(SerBfrIdx == FRAMELEN)
68 2 {
69 3 if(SerBfr[FRAMELEN] < PRTCLEN || SerBfr[FRAMELEN] > MAXSERSIZE)
70 3 {
71 4 return;
72 4 }
73 3 }
74 2 SerBfrIdx++;
75 2
76 2 if(SerBfrIdx >= SerBfr[FRAMELEN])
77 2 {
78 3 SerDTvalid = TRUE;
79 3 SerBfrIdx = FRAMELEN;
80 3 }
81 2 }
82 1 else
83 1 {
84 2 TI = 0;
85 2 if(SerBfrIdx < SerBfr[FRAMELEN])
86 2 {
87 3 SBUF = SerBfr[SerBfrIdx];
88 3 SerBfrIdx++;
89 3 }
90 2 else
91 2 {
92 3 SerBfrIdx = FRAMELEN;
93 3 REN = 1; //发送响应完毕,重新使能接收
94 3 }
95 2 }
96 1 }
97
98 INT8U Ser_Rcv()
99 {
100 1 INT8U i,BCC;
101 1 INT8U Status = FALSE;
102 1
103 1 if(SerDTvalid)
104 1 { //已接收一帧数据,进行数据校验
105 2 if(SerBfr[SerBfr[FRAMELEN]-1] == ETX && SerBfr[FRAMELEN] == (SerBfr[LENGTH]+PRTCLEN))
106 2 { //正确接收到ETX,及帧长度等于数据长度加协议长度,则数据有效
107 3 BCC = 0;
108 3 for(i=0; i<(SerBfr[FRAMELEN]-1); i++)
109 3 {
110 4 BCC ^= SerBfr[i];
111 4 }
112 3 if(BCC == 0xff)
113 3 Status = TRUE; //BCC校验通过
114 3 }
115 2 SerDTvalid = FALSE;
116 2 }
117 1 return Status;
C51 COMPILER V7.50 ZLG500S_COMM 05/17/2008 12:45:01 PAGE 3
118 1 }
119
120 INT8U Ser_Send()
121 {
122 1 INT8U i,BCC;
123 1
124 1 SerBfr[FRAMELEN] = SerBfr[LENGTH]+PRTCLEN; //帧长度等于数据长度加协议长度
125 1 BCC = 0;
126 1 for(i=0; i<(SerBfr[FRAMELEN]-2); i++)
127 1 BCC ^= SerBfr[i];
128 1 SerBfr[SerBfr[FRAMELEN]-2] = ~BCC;
129 1 SerBfr[SerBfr[FRAMELEN]-1] = ETX;
130 1
131 1 SerBfrIdx = FRAMELEN;
132 1 TI = 1;
133 1
134 1 return TRUE;
135 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 + -