senddat.lst
来自「绝对原创」· LST 代码 · 共 415 行 · 第 1/2 页
LST
415 行
184 5 Breed_Dat = 0 ;
185 5 Send_Finger = 0 ;
186 5 }
187 4 break ;
188 4
189 4 default:
190 4 break ;
191 4 }
192 3
193 3 Send_DatBag[2] = Send_DatBag[4] ; // 重发数据包
194 3 Send_DatBag[1] = Send_DatBag[3] ; //
195 3 Send_DatBag[0] = 0xff ; // 结束标志
196 3 SBUF = Send_DatBag[Send_Counter - 1] ;
197 3 Send_Counter-- ;
198 3 }
199 2 }
200 1 else // 继续发送,发完6个数据
201 1 {
202 2 SBUF = Send_DatBag[Send_Counter - 1] ;
203 2 Send_Counter-- ;
204 2 }
205 1 }
206
207
208 /*********************************************************************************************************
-****
209 * 函数名称 :
210 * 功能描述 :
211 * 实际参数 :
212 * 返回值 :
213 * 说明 : 发送数据
214 **********************************************************************************************************
-****/
215
216 /* void SendDat(uchar dat0,uchar dat1,road_dat)
217 {
218 uchar c ;
219
220 SBUF = road_dat ; // 段数据
221 while(Send_Flag == 0) ;
222 Send_Flag = 0 ;
223
224 for(c = 0;c < 2;c++) // 发送两次数据
225 {
226 SBUF = dat1 ; // 第一次发送00,
227 while(Send_Flag == 0) ;
228 Send_Flag = 0 ;
229
C51 COMPILER V7.07 SENDDAT 08/26/2006 11:15:07 PAGE 5
230 SBUF = dat0 ; // 加温标志或,断线标志
231 while(Send_Flag == 0) ;
232 Send_Flag = 0 ;
233 }
234
235 SBUF = 0xff ; // 发送结束标志
236 while(Send_Flag == 0) ;
237 Send_Flag = 0 ;
238 }
239
240 /*********************************************************************************************************
-****
241 * 函数名称 :
242 * 功能描述 :
243 * 实际参数 :
244 * 返回值 :
245 * 说明 : 处理发送温度数据子程序,变BCD码,及小数点运算,
246 **********************************************************************************************************
-****/
247
248 /* void ChangeBCB(uchar *temp_dat0,uchar *temp_dat1,uint ack_data)
249 {
250 uchar temp,temp1 ;
251 uint temp_dat ;
252
253 temp_dat = (ack_data >> 2) ; // 取整数,去小数点
254 temp = (uchar)(ack_data & 0x03) ;
255 if (temp >= 2) // 四舍五入,2 X 0.25 = 0.5 度
256 temp_dat++ ;
257
258 temp = ((temp_dat / 1000) % 10) ; // 取温度千位数
259 temp <<= 4 ;
260 temp1 = ((temp_dat / 100) % 10) & 0x0f ; // 取温度百位数
261
262 *temp_dat1 = (temp | temp1) ;
263
264 temp = ((temp_dat / 10) % 10) ; // 取温度十位数
265 temp <<= 4 ;
266 temp1 = ((temp_dat % 10) & 0x0f) ; // 取温度十位数和个位数
267
268 *temp_dat0 = (temp | temp1) ;
269 return ;
270 }
271
272
273
274 /*********************************************************************************************************
-****
275 * 函数名称 :
276 * 功能描述 :
277 * 实际参数 :
278 * 返回值 :
279 * 说明 : 发送温度数据子程序,此温度为实际温度的4倍,road_data为几路0-9)
280 **********************************************************************************************************
-****/
281
282 /* void SendTemp(uchar road_data) // temp_data为温度数据,road_data为路数数据
283 {
284 uchar a,open_dat,temp0,temp1 ;
285 uchar *temp00_dat,*temp11_dat ;
286 uint temp_data ;
287
C51 COMPILER V7.07 SENDDAT 08/26/2006 11:15:07 PAGE 6
288 temp00_dat = &temp0 ;
289 temp11_dat = &temp1 ;
290
291 if (road_data < 4)
292 {
293 a = road_data ;
294 temp_data = Fact_Temp0[a] ; // 0-4段温度
295 open_dat = Thermocouple0_Open[a] ;
296 }
297 else
298 {
299 a = road_data - 5 ;
300 temp_data = Fact_Temp1[a] ; // 5-9段温度
301 open_dat = Thermocouple1_Open[a] ;
302 }
303
304 ChangeBCB(temp00_dat,temp11_dat,temp_data) ; // 去小数点,转BCD码
305
306 a = (road_data | 0xf0) ; // 先发送段数据F0,F1,F2,F3
307
308 SendDat(temp0,temp1,a) ; // 发送
309
310 // 发状态标志
311 a = (road_data | 0xe0) ; // 段数据
312
313 SendDat(open_dat,0x00,a) ; // 发送
314 }
315
316 /*********************************************************************************************************
-****
317 * 函数名称 :
318 * 功能描述 :
319 * 实际参数 :
320 * 返回值 :
321 * 说明 : 发送温度数据子程序,此温度为实际温度的4倍,road_data为几路0-9)
322 **********************************************************************************************************
-****/
323
324 /* void SendTempDat(uchar road_data) // temp_data为温度数据,road_data为路数数据
325 {
326 SendTemp(road_data) ; // 第一个MAX6675
327 SendTemp(road_data + 5) ; // 第二个MAX6675
328 }
329
330 /*********************************************************************************************************
-****
331 * 函数名称 :
332 * 功能描述 :
333 * 实际参数 :
334 * 返回值 :
335 * 说明 : 发送温度修正值
336 **********************************************************************************************************
-****/
337
338 /* void SendAdjustDat(void)
339 {
340 SendDat(SiteFack_Temp,0x00,0xd0) ; // 发送几度开始运算加温
341 SendDat(Check_TempTimeCycle,0x00,0xd1) ; // 发送运算周期时间以秒为单位
342 }
343
344 /*********************************************************************************************************
-****
C51 COMPILER V7.07 SENDDAT 08/26/2006 11:15:07 PAGE 7
345 * 函数名称 : void ReceiptDat(void)
346 * 功能描述 :
347 * 实际参数 :
348 * 返回值 :
349 * 说明 : 接收数据
350 **********************************************************************************************************
-****/
351
352 void ReceiptDat(void)
353 {
354 1 uchar sbuf_dat ;
355 1
356 1 sbuf_dat = SBUF & 0xf0 ;
357 1
358 1 if ((sbuf_dat == 0xf0) || (sbuf_dat == 0xe0) || (sbuf_dat == 0xc0) || (sbuf_dat == 0xd0))
359 1 if ((SBUF & 0x0f) < 0x0a) // 判断是否是一帧数据的包头
360 1 {
361 2 AllowReceipt_Flag = 1 ; // 置位容许接收
362 2 Receive_Finger = 0 ; // 重新接收
363 2 }
364 1
365 1 if (AllowReceipt_Flag) // 判断是否容许接收
366 1 {
367 2 Receive_Dat[Receive_Finger] = SBUF ; // 存储接收到的数据,
368 2 Receive_Finger ++ ; // 存储数据指针
369 2
370 2 if (Receive_Finger == 6) // 判断是否接收完一帧数据
371 2 if (Receive_Dat[5] == 0xff) // 判断帧尾是否是结束标志
372 2 if ((Receive_Dat[1] == Receive_Dat[3]) && (Receive_Dat[2] == Receive_Dat[4])) //判断接收到的两次数据是
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?