📄 rec_analysis.lst
字号:
C51 COMPILER V7.50 REC_ANALYSIS 10/08/2006 08:51:41 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE REC_ANALYSIS
OBJECT MODULE PLACED IN Rec_Analysis.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Rec_Analysis.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "recframe.h"
2 #include "Rec_Analysis.h"
3 #include "process.h"
4 /*********************************************************************
5 * 函 数 名: Rec_Analysis
6 * 功能描述: 判断每一个接收字节,进行状态转移,置标识位
7 * 函数说明: 帧头68H,帧尾16H
8 * 调用函数: 无
9 * 全局变量:无
10 * 输 入: 无
11 * 返 回: 无
12 * 设 计 者:
13 ***********************************************************************/
14 void Rec_Analysis(void)
15 {
16 1 uchar ch,i;
17 1 static uchar RecCount,RecState,count, DataLen,cs;
18 1
19 1 if(s_end==0) //数据没有发送完,返回
20 1 return;
21 1
22 1 ch=SBUF;
23 1 RecBuf[RecCount]=ch; //将接收到的字节存入缓冲区
24 1 RecCount++;
25 1
26 1 switch(RecState)
27 1 {
28 2 case RS_WAIT:
29 2 if(ch==FRAME_START_CHAR)
30 2 {
31 3 RecState++;
32 3 count=1;
33 3 }
34 2 else
35 2 RecCount=0;
36 2 break;
37 2
38 2 case RS_HEADER:
39 2 count++;
40 2
41 2 if(count==5)
42 2 {
43 3 if(RecBuf[4]!=FRAME_START_CHAR) //若不是帧起始字符,返回到等待状态
44 3 {
45 4 RecCount=0;
46 4 RecState=RS_WAIT;
47 4 break;
48 4 }
49 3 }
50 2
51 2 if(count==6)
52 2 {
53 3 fc_flag=0;
54 3 switch(RecBuf[5])
55 3 {
C51 COMPILER V7.50 REC_ANALYSIS 10/08/2006 08:51:41 PAGE 2
56 4 case 0:
57 4 fc_flag=0x00;
58 4 break;
59 4 case 1:
60 4 fc_flag=0x01;
61 4 break;
62 4 case 2:
63 4 fc_flag=0x02;
64 4 break;
65 4 case 4:
66 4 fc_flag=0x04;
67 4 break;
68 4 case 5:
69 4 fc_flag=0x05;
70 4 break;
71 4 case 6:
72 4 fc_flag=0x06;
73 4 break;
74 4 case 7:
75 4 fc_flag=0x07;
76 4 break;
77 4 case 10:
78 4 fc_flag=0x0a;
79 4 break;
80 4 case 11:
81 4 fc_flag=0x0b;
82 4 break;
83 4 case 12:
84 4 fc_flag=0x0c;
85 4 break;
86 4 default:
87 4 RecCount=0;
88 4 RecState=RS_WAIT;
89 4 break;
90 4 }
91 3 }
92 2
93 2 if(count==7) //第7个字节为数据域长度字节
94 2 {
95 3 DataLen=ch;
96 3 if(ch==0) RecState++;
97 3 RecState++;
98 3 count=0;
99 3 break;
100 3 }
101 2 break;
102 2
103 2 case RS_DATA:
104 2 count++;
105 2 if(count==DataLen)
106 2 RecState++;
107 2 break;
108 2
109 2 case RS_CHECK:
110 2 cs=0;
111 2 for(i=0;i<RecCount-1;i++)
112 2 cs+=RecBuf[i];
113 2 if(cs!=RecBuf[RecCount-1]) //校验和不正确,返回到等待状态
114 2 {
115 3 RecCount=0;
116 3 RecState=RS_WAIT;
117 3 break;
C51 COMPILER V7.50 REC_ANALYSIS 10/08/2006 08:51:41 PAGE 3
118 3 }
119 2 else
120 2 RecState++;
121 2 break;
122 2
123 2 case RS_END:
124 2 RecState=RS_WAIT;
125 2 if(ch==FRAME_END_CHAR) //如果帧结束字符正确,置接收结束标识位
126 2 {
127 3 r_end=1;
128 3 p_end=0;
129 3 s_end=0;
130 3 RecCount=0;
131 3 rec_lamp=!rec_lamp;
132 3 }
133 2 else
134 2 RecCount=0;
135 2 break;
136 2 }
137 1
138 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 345 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 129 ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -