📄 rf_manchester.lst
字号:
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RF_MANCHESTER
OBJECT MODULE PLACED IN RF_Manchester.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RF_Manchester.c OMF2 BROWSE DEBUG
line level source
1 #include <REGX51.H>
2 #include <intrins.h>
3
4 //#include <REGX51.H>
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define IRout P2_1
8 #define MaxAllLevel 600 //周期最大值650uS
9 #define MaxHalfLevel 300 //半周期最大值350uS
10 #define MinAllLevel 400 //周期最小值450uS
11 #define MinHalfLevel 100 //半周期最小值200uS
12
13 #define Start_Check 0x01 //数据头已经检测到,开始接受剩余数据
14 #define Start_Find 0x02 //正在检测数据头
15 #define mcsHead 0x03
16 #define mcsHeadNull 0x04
17 #define mcsHighTimer 0x05
18 #define mcsLowTimer 0x06
19
20 uchar code Adj[16]={0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0};
21 /*
22 uchar code uData[]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
23 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
24 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
25 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};
26 */
27
28 uint High_Timer,Low_Timer;
29 uchar temp1,temp2;
30 //uchar bdata mcsbuf=0;
31 uchar bdata buffer=0;
32 sbit IRbitPri=buffer^0;
33 sbit IRbitNext=buffer^1;
34 uchar i=0;
35 uchar OS_Status;
36 uchar RecvBuf[7]; //接收数据缓冲
37
38 typedef struct{
39 uchar Head; //数据检测头(一个周期的高电平)
40 uchar Pro; //前一次读取的电平长度
41 }Mchste_MSG;
42 Mchste_MSG mcsbuf;
43
44 typedef struct{ //接收数据头标志判别(9个1)
45 uchar intHigh; //+接收数据个数(1 or 0)
46 uchar intLow;
47 }DataHead_MSG;
48 DataHead_MSG DataHeadbuf;
49
50 uchar bdata pBuf; //接收数据后组合缓冲(将8位数组合成字节数据)
51 sbit pBuf0=pBuf^0;
52 sbit pBuf1=pBuf^1;
53 sbit pBuf2=pBuf^2;
54 sbit pBuf3=pBuf^3;
55 sbit pBuf4=pBuf^4;
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 2
56 sbit pBuf5=pBuf^5;
57 sbit pBuf6=pBuf^6;
58 sbit pBuf7=pBuf^7;
59
60 void InitReg(void);
61 uchar Calibration(void);
62 void Send_Data(uchar SDData);
63 uchar Manchster(uchar index);
64 void Push_Data(uchar PDData);
65 uchar Calibration(void);
66 void HeadFindHandle(uchar HFHData);
67 void DataRecvHandle(uchar DRHData);
68
69 void InitReg(void)
70 {
71 1 SCON = 0x40;
72 1 TMOD = 0x21;
73 1 TH1 = 0xFD;
74 1 TL1 = 0xFD;
75 1 PCON = 0x00; //9600bps
76 1 TR1 = 1;
77 1 TR0 = 0;
78 1 TH0 = 0x00;
79 1 TL0 = 0x00;
80 1 IRout = 1;
81 1 ET0 = 1;
82 1 ES = 1;
83 1 OS_Status=Start_Find;
84 1 mcsbuf.Head=mcsHeadNull;
85 1 DataHeadbuf.intHigh=0;
86 1 DataHeadbuf.intLow=0;
87 1
88 1 // AUXR = 0x00;
89 1 }
90
91
92 /*--------------------------------------------------------------------------------
93 函数:
94 功能:
95 引用值:
96 返回值:
97 --------------------------------------------------------------------------------*/
98 void FeedDog(void)
99 {
100 1 _nop_();
101 1 _nop_();
102 1 // WDTRST = 0x1E;
103 1 _nop_();
104 1 _nop_();
105 1 // WDTRST = 0xE1;
106 1 }
107
108 /*--------------------------------------------------------------------------------
109 函数:
110 功能:
111 引用值:
112 返回值:
113 --------------------------------------------------------------------------------*/
114
115 /*--------------------------------------------------------------------------------
116 函数:
117 功能:
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 3
118 引用值:
119 返回值:
120 --------------------------------------------------------------------------------*/
121 void T0_service(void) interrupt 1
122 {
123 1 /*
124 1 IRbit = IRout;
125 1 i++;
126 1 if(i==8)
127 1 {
128 1 TI=0;
129 1 SBUF=buffer;
130 1 i=0;
131 1 }
132 1 buffer=buffer<<1;
133 1 */
134 1 }
135
136 void Send_Data(uchar SDData)
137 {
138 1 SBUF=SDData;
139 1 while(TI==0);
140 1 TI=0;
141 1 }
142 /*--------------------------------------------------------------------------------
143 函数: Manchster(uchar index)
144 功能: Manchster数据处理
145 引用值:index: mcsLowTimer:低电平数据处理;mcsHighTimer:高电平数据处理
146 返回值:0:数据0;1:数据1;2:数据还未分析完毕,需下次才能判断;3:错误
147 --------------------------------------------------------------------------------*/
148 uchar Manchster(uchar index)
149 {
150 1 if(index==mcsLowTimer) //处理Low_Timer
151 1 {
152 2 if((Low_Timer>MinAllLevel)&&(Low_Timer<MaxAllLevel))
153 2 {
154 3 if(mcsbuf.Head==mcsHead)
155 3 {
156 4 if((mcsbuf.Pro==0x21) || (mcsbuf.Pro==0x11))
157 4 {
158 5 mcsbuf.Pro=0x20; //0x20:2个0;0x10:1个0
159 5 return(0);
160 5 }
161 4 else
162 4 {
163 5 mcsbuf.Head=mcsHeadNull;
164 5 return(3); //在没有确定起始检测位时所有数据不予理会
165 5 }
166 4 }
167 3 else
168 3 {
169 4 mcsbuf.Head=mcsHeadNull;
170 4 return(3); //在没有确定起始检测位时所有数据不予理会
171 4 }
172 3 }
173 2 else if((Low_Timer>MinHalfLevel)&&(Low_Timer<MaxHalfLevel))
174 2 {
175 3 if(mcsbuf.Head==mcsHead)
176 3 {
177 4 if(mcsbuf.Pro!=0xff) //只要前一位数据没有处理完,则结合本次数据进行处理并返回同时置数据处理完毕标志
178 4 {
179 5 mcsbuf.Pro=0xff;
C51 COMPILER V7.50 RF_MANCHESTER 05/31/2006 22:17:06 PAGE 4
180 5 return(0);
181 5 }
182 4 else
183 4 {
184 5 mcsbuf.Pro=0x10;
185 5 return(2); //如果前一位数据已经处理完毕,则从新开始纪录数据便于下次处理
186 5 }
187 4 }
188 3 else
189 3 {
190 4 mcsbuf.Head=mcsHeadNull;
191 4 return(3); //在没有确定起始检测位时所有数据不予理会
192 4 }
193 3 }
194 2 else if((Low_Timer<MinHalfLevel)||(Low_Timer>MaxAllLevel))
195 2 {
196 3 mcsbuf.Head=mcsHeadNull;
197 3 return(3); //在没有确定起始检测位时所有数据不予理会
198 3 }
199 2 }
200 1 else if(index==mcsHighTimer) //处理High_Timer
201 1 {
202 2 if((High_Timer>MinAllLevel)&&(High_Timer<MaxAllLevel))
203 2 {
204 3 if(mcsbuf.Head==mcsHeadNull)
205 3 {
206 4 mcsbuf.Head=mcsHead; //确定数据检测起始位置
207 4 mcsbuf.Pro=0x21; //0x21:2个1;0x11:1个1
208 4 }
209 3 else
210 3 {
211 4 if((mcsbuf.Pro==0x20) || (mcsbuf.Pro==0x10))
212 4 {
213 5 mcsbuf.Pro=0x21; //0x21:2个1;0x11:1个1
214 5 return(1);
215 5 }
216 4 else
217 4 {
218 5 mcsbuf.Head=mcsHeadNull;
219 5 return(3); //在没有确定起始检测位时所有数据不予理会
220 5 }
221 4 }
222 3 }
223 2 else if((High_Timer>MinHalfLevel)&&(High_Timer<MaxHalfLevel))
224 2 {
225 3 if(mcsbuf.Head==mcsHead)
226 3 {
227 4 if(mcsbuf.Pro!=0xff) //只要前一位数据没有处理完,则结合本次数据进行处理并返回同时置数据处理完毕标志
228 4 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -