📄 commrs485.lst
字号:
C51 COMPILER V7.06 COMMRS485 10/30/2008 13:20:06 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE COMMRS485
OBJECT MODULE PLACED IN CommRS485.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CommRS485.C OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"include.h"
2
3 /********************************************************************************************************
-*
4 ** 函数名称: void Initiate_RS232(void)
5 ** 功能描述: 串口初始化函数
6 ** 输 入: 无
7 ** 输 出: 无
8 ** 全局变量:
9 ** 调用模块:
10 **
11 ** 作 者: 李伟
12 ** 日 期: 2008年12月09日
13 **-------------------------------------------------------------------------------------------------------
14 ** 修 改 人:
15 ** 日 期:
16 **-------------------------------------------------------------------------------------------------------
17 ********************************************************************************************************/
18 void Initiate_RS485(void)
19 {
20 1 ES = 0;
21 1 PCON |= 0x80; //SMOD=1
22 1 SCON = 0x50; //0101,0001 8位数据位,无奇偶校验
23 1 TMOD &= 0x0F;
24 1 TMOD |= 0x20; //设置T1为波特率发生器
25 1 TH1 = 0xFA; //11.0592MHz 晶振,波特率=9600
26 1 TL1 = 0xFA;
27 1 // AUXR |=0x10;
28 1 ES = 1; //允许串口中断
29 1 EA = 1; //开总中断
30 1 TR1 = 1; //开定时器1
31 1 }
32 /*********************************************************************************************************
33 ** 函数名称: void Suart_Send_Byte(uint8 Send_Byte)
34 ** 功能描述: 串口发送函数
35 ** 输 入: 无
36 ** 输 出: 无
37 ** 全局变量:
38 ** 调用模块:
39 **
40 ** 作 者: 李伟
41 ** 日 期: 2008年12月09日
42 **-------------------------------------------------------------------------------------------------------
43 ** 修 改 人:
44 ** 日 期:
45 **-------------------------------------------------------------------------------------------------------
46 ********************************************************************************************************/
47 void Suart_Send_Byte(uint8 Send_Byte)
48 {
49 1 ES = 0; //关串口中断
50 1 TI = 0; //清零串口发送完成中断请求标志
51 1 SBUF = Send_Byte;
52 1 //WDT_CONTR = 0x3c; /**********************喂狗**********************/
53 1 while(TI == 0); //等待发送完成
54 1 TI = 0; //清零串口发送完成中断请求标志
C51 COMPILER V7.06 COMMRS485 10/30/2008 13:20:06 PAGE 2
55 1 ES = 1; //允许串口中断
56 1
57 1 }
58 /*********************************************************************************************************
59 ** 函数名称: void CommSendByteWithChk(uint8 Commdata)
60 ** 功能描述:
61 ** 输 入: 无
62 ** 输 出: 无
63 ** 全局变量:
64 ** 调用模块:
65 **
66 ** 作 者: 李伟
67 ** 日 期: 2008年12月09日
68 **-------------------------------------------------------------------------------------------------------
69 ** 修 改 人:
70 ** 日 期:
71 **-------------------------------------------------------------------------------------------------------
72 ********************************************************************************************************/
73 void CommSendByteWithChk(uint8 Commdata)
74 {
75 1 uint8 i,j;
76 1 i = Commdata >> 4;
77 1 j = Commdata & 0x0F;
78 1 if(i<10)
79 1 i += 0x30;
80 1 else
81 1 i += 0x37;
82 1 if(j<10)
83 1 j += 0x30;
84 1 else
85 1 j += 0x37;
86 1 ComCalculChkSum += i;
87 1 ComCalculChkSum += j;
88 1 Suart_Send_Byte(i);
89 1 Suart_Send_Byte(j);
90 1 }
91 /*********************************************************************************************************
92 ** 函数名称: void CommSendByteWithoutChk(uint8 Commdata)
93 ** 功能描述:
94 ** 输 入: 无
95 ** 输 出: 无
96 ** 全局变量:
97 ** 调用模块:
98 **
99 ** 作 者: 李伟
100 ** 日 期: 2008年12月10日
101 **-------------------------------------------------------------------------------------------------------
102 ** 修 改 人:
103 ** 日 期:
104 **-------------------------------------------------------------------------------------------------------
105 ********************************************************************************************************/
106 void CommSendByteWithoutChk(uint8 Commdata)
107 {
108 1 uint8 i,j;
109 1 i = Commdata >> 4;
110 1 j = Commdata & 0x0F;
111 1 if(i<10)
112 1 i += 0x30;
113 1 else
114 1 i += 0x37;
115 1 Suart_Send_Byte(i);
116 1 if(j<10)
C51 COMPILER V7.06 COMMRS485 10/30/2008 13:20:06 PAGE 3
117 1 j += 0x30;
118 1 else
119 1 j += 0x37;
120 1 Suart_Send_Byte(j);
121 1 }
122 /*********************************************************************************************************
123 ** 函数名称: void CommSendWordWithChk(uint16 Commword)
124 ** 功能描述:
125 ** 输 入: 无
126 ** 输 出: 无
127 ** 全局变量:
128 ** 调用模块:
129 **
130 ** 作 者: 李伟
131 ** 日 期: 2008年12月10日
132 **-------------------------------------------------------------------------------------------------------
133 ** 修 改 人:
134 ** 日 期:
135 **-------------------------------------------------------------------------------------------------------
136 ********************************************************************************************************/
137 void CommSendWordWithChk(uint16 Commword)
138 {
139 1 CommSendByteWithChk((uint8)(Commword>>8));
140 1 CommSendByteWithChk((uint8)(Commword));
141 1 }
142 /*********************************************************************************************************
143 ** 函数名称: void Comm(void) interrupt 4
144 ** 功能描述: 串口中断函数
145 ** 输 入: 无
146 ** 输 出: 无
147 ** 全局变量:
148 ** 调用模块:
149 **
150 ** 作 者: 李伟
151 ** 日 期: 2008年12月10日
152 **-------------------------------------------------------------------------------------------------------
153 ** 修 改 人:
154 ** 日 期:
155 **-------------------------------------------------------------------------------------------------------
156 ********************************************************************************************************/
157 void Comm(void) interrupt 4
158 {
159 1 uint8 ea_time;
160 1 ea_time = EA;
161 1 EA = 0;
162 1 if(RI == 1)
163 1 {
164 2 CommTemp0 = SBUF;
165 2 if(CommTemp0 == 0x7e)
166 2 {
167 3 CommState = 0;
168 3 CommAscii = 0;
169 3 CommBytehilow = 0;
170 3 ComCalculChkSum = 0;
171 3 }
172 2 if(CommState != 0 && CommState != 5 && CommState != 6)
173 2 {
174 3 ComCalculChkSum += CommTemp0;
175 3 }
176 2 if(CommState != 0 && CommState != 6)
177 2 {
178 3 if(CommAscii == 0)
C51 COMPILER V7.06 COMMRS485 10/30/2008 13:20:06 PAGE 4
179 3 {
180 4 CommAscii = 1;
181 4 CommTemp1 = CommTemp0;
182 4 if(CommTemp1 < 0x3a)
183 4 CommTemp1 -= 0x30;
184 4 else
185 4 CommTemp1 -= 0x37;
186 4 }
187 3 else
188 3 {
189 4 CommAscii = 0;
190 4 if(CommTemp0 < 0x3a)
191 4 CommTemp0 -= 0x30;
192 4 else
193 4 CommTemp0 -= 0x37;
194 4 CommTemp1 <<= 4;
195 4 CommTemp1 |= CommTemp0;
196 4 }
197 3 }
198 2 if(CommAscii == 0)
199 2 {
200 3 switch(CommState)
201 3 {
202 4 case 0: /*SOI*/
203 4 {
204 5 if(CommTemp0 == 0x7e)
205 5 {
206 6 CommState++;
207 6 }
208 5 }break;
209 4 case 1: /*ADD*/
210 4 {
211 5 if(CommTemp1 == (uint8)(ModeSysConfig[8])) //BoardAddress
212 5 {
213 6 CommState++;
214 6 }
215 5 else
216 5 {
217 6 CommState = 0;
218 6 }
219 5 }break;
220 4 case 2: /*CID*/
221 4 {
222 5 CommCid = CommTemp1;
223 5 CommState++;
224 5 if(CommCid > 0x10) CommState = 0;
225 5
226 5 }break;
227 4 case 3: /*LENGTH*/
228 4 {
229 5 if(CommBytehilow == 0 )
230 5 {
231 6 CommLengthH = CommTemp1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -