📄 nfr401.lst
字号:
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE NFR401
OBJECT MODULE PLACED IN .\nfr401.OBJ
COMPILER INVOKED BY: d:\toolfiles\Keil\C51\BIN\C51.EXE .\nfr401.c DEBUG OBJECTEXTEND
stmt level source
1 //nrf401实验c51程序
2
3 /*----------------------------------------------------------------------
4 nrf401实验程序
5 雁塔菜农HotPower@126.com
6 -----------------------------------------------------------------------*/
7 #include <AT89X52.h>
8 #include <stdio.h>
9 #include <absacc.h>
10 #include <intrins.h>
11 #include <nrf401.h>
*** ERROR 318 IN LINE 11 OF .\nfr401.c: can't open file 'nrf401.h'
12 #include <hotins.h>
*** ERROR 318 IN LINE 12 OF .\nfr401.c: can't open file 'hotins.h'
13
14 #define T0_8mS -8000
15 #define T1_8mS -8000
16 #define T2_1_25mS -576 //-1250*0.9216=1.25MS
17
18
19 /*----------------------------------------------------------------------
20 系统函数
21 -----------------------------------------------------------------------*/
22 void MainInit(void);//系统初始化
23 void ClrWdt(void);//喂狗
24 void nRFInit(void);
25 void SystemInit(void);//系统初始化
26 void SystemSetup(void);//系统设置
27 void SystemIoInit(void);//系统接口初始化
28 void UserSetup(void);//用户运行环境设置
29 void TimeInit(void);
30 unsigned char crc8r(unsigned char crcbyte);
31 unsigned int crc16r(unsigned int crcword, unsigned int crc);
32 unsigned int GetTXBuffWord(unsigned char ledpos);
33 void SetTXBuffWord(unsigned char ledpos, unsigned int val);
34 unsigned int GetRXBuffWord(unsigned char ledpos);
35 void SetRXBuffWord(unsigned char ledpos, unsigned int val);
36
37
38 SystemData SystemBuffers;//申请系统数据结构
*** ERROR C129 IN LINE 38 OF .\NFR401.C: missing ';' before 'SystemBuffers'
39
40 SioData SioBuffers;
41
42 /*-----------------------------------------
43 主程序初始化
44 -------------------------------------------*/
45 void MainInit(void)//系统初始化
46 {
47 SystemIoInit();//系统接口初始化
48 ClrWdt();//清除看门狗计数器
49 if (SystemBuffers.RamTest != 0x55aa) {//内存测试
50 SystemInit();//系统上电初始化
51 }
52 SystemSetup();//系统运行环境设置
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 2
53 UserSetup();//用户运行环境设置
54 }
55
56 void SystemInit(void)//系统初始化
57 {
58 SystemBuffers.RamTest = 0x55aa;//内存初始化
59 }
60
61 void SystemSetup(void)//系统设置
62 {
63 AUXR = 0x01;//关闭EMI
64 nRFInit();
65 TimeInit();
66 IP = 0x10;//中断优先级EX1>ET2>ET0>EX0>ES
67 IE = 0xb4;//开中断EA,ET2,ET1,EX1,ET0
68 }
69
70 void UserSetup(void)//用户运行环境设置
71 {
72 }
73
74 void SystemIoInit(void)
75 {
76 IE = 0x00;//关闭中断
77 P0 = 0xff;//P0口初始化
78 P1 = 0xff;//P1口初始化
79 P2 = 0xff;//P2口初始化
80 P3 = 0xff;//P3口初始化
81 }
82
83 void TimeInit()
84 {
85 TMOD = 0x21;//定时器0,1为方式1(十六位定时器)
86 TCON = 0x55;//启动定时器TR1EQUTR0EQU1,IT1EQUIT0EQU1
87 /*----------------------------------
88 定时器0定时参数设置
89 ----------------------------------*/
90 TL0 = 0;
91 TH0 = 0;
92 TR0 = 1;//启动定时器0
93 /*----------------------------------
94 定时器0定时参数设置
95 ----------------------------------*/
96 TL1 = SIO_BPS;
97 TH1 = SIO_BPS;
98 PCON = 0x00;
99 TR1 = 1;//启动定时器1
100 /*----------------------------------
101 定时器2定时参数设置
102 ----------------------------------*/
103 TIMEER2 = T2_1_25mS;
104 RCAP = T2_1_25mS;
105 TR2 = 1;//启动定时器2
106 }
107
108 void nRFInit(void)
109 {
110 nRFCS = 0;//433.92MHz//1//434.33MHz
111 nRFTXEN = 0;//接收
112 nRFPWR = 1;//上电
113 SioBuffers.TXMAXCount = 0;
114 SioBuffers.TXCount = 0;
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 3
115 // SioBuffers.RXCount = 0;
116 SCON = 0x50; /* SCON: mode 2, 9-bit UART, enable rcvr */
117 SioBuffers.RXCount = 16;
118 }
119
120
121 /*------------------------------------
122 外部INT0中断服务程序
123 ------------------------------------*/
124 void int0proc() interrupt IE0_VECTOR// using 1
125 {
126 }
127
128 /*------------------------------------
129 定时器T0中断服务程序
130 ------------------------------------*/
131 void t0proc() interrupt TF0_VECTOR// using 1
132 {
133 }
134
135 /*------------------------------------
136 外部INT1中断服务程序
137 ------------------------------------*/
138 void int1proc() interrupt IE1_VECTOR using 1
139 {
140 }
141
142 /*------------------------------------
143 定时器T1中断服务程序
144 ------------------------------------*/
145 void t1proc() interrupt TF1_VECTOR// using 1
146 {
147 }
148
149 /*------------------------------------
150 串口SIO中断服务程序
151 ------------------------------------*/
152 void sioproc() interrupt SIO_VECTOR// using 1
153 {
154 unsigned char i;
155 unsigned int crc;
156 if (RI) {//接收中断
157 RI = 0;
158 if (!nRFTXEN && SioBuffers.RXCount) {//每次接收20个数据
159 i = SBUF;
160 SioBuffers.RXCount --;
161 SioBuffers.RXBuffers[19 - SioBuffers.RXCount] = i;
162 switch(SioBuffers.RXCount) {
163 case 19:
164 if (i != 0x55) SioBuffers.RXCount = 20;
165 break;
166 case 18:
167 if (i != 0xaa) SioBuffers.RXCount = 20;
168 break;
169 case 0:
170 crc = 0;
171 for (i = 1; i <= 8; i ++) {
172 crc = crc16r(GetRXBuffWord(i + i), crc);
173 }
174 if (crc != GetRXBuffWord(18))
175 SioBuffers.RXCount = 20;
176 else {
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 4
177 nRFTXEN = 1;//发送
178 for (i = 0; i < 20; i ++) {
179 SioBuffers.TXBuffers[i] = SioBuffers.RXBuffers[i];
180 }
181 SioBuffers.TXMAXCount = TX_MAXCount;
182 SioBuffers.TXCount = TX_Count + 32;
183 TI = 1;//接收结束立即转为发送
184 }
185 break;
186 }
187 }
188 }
189 if (TI) {//发送中断
190 TI = 0;
191 if (nRFTXEN && SioBuffers.TXCount) {
192 SioBuffers.TXCount --;
193 if (SioBuffers.TXCount > 19) {
194 SBUF = 0x00;
195 // SBUF = 0xff;
196 }
197 else {
198 SBUF = SioBuffers.TXBuffers[19 - SioBuffers.TXCount];
199 }
200 if (SioBuffers.TXCount == 0) {
201 if (SioBuffers.TXMAXCount) {
202 SioBuffers.TXMAXCount --;
203 SioBuffers.TXCount = TX_Count;
204 }
205 else {
206 nRFTXEN = 0;//发送结束立即转为接收
207 SioBuffers.RXCount = 20;
208 }
209 }
210 }
211 }
212 }
213
214 /*------------------------------------
215 定时器T2中断服务程序(1.25mS)
216 ------------------------------------*/
217 void t2proc() interrupt TF2_VECTOR// using 2
218 {
219 //unsigned char i;
220 //unsigned int crc;
221 TF2 = 0;
222 if (PCON & GF0) {//中断是从主循环内跳入的才能喂狗
223 ClrWdt();//清除看门狗计数器
224 PCON &= ~GF0;//清除标志
225 }
226 SystemBuffers.T2Count ++;
227
228
229
230 // if (SystemBuffers.T2Count >= 80) {//100mS到
231 if (SystemBuffers.T2Count >= 400) {//500mS到
232 SystemBuffers.T2Count = 0;
233 //if (((SystemBuffers.T2Count & 3) == 0) && (SioBuffers.TXCount == 0)) {//10mS
234 //if (SioBuffers.TXCount == 0) {//10mS
235 /*
236 if (!ES && (SioBuffers.TXCount == 0)) {//10mS
237 SioBuffers.TXCount = 18;
238 crc =GetTXBuffWord(2);
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 5
239 crc = crc16r(crc);
240 SetTXBuffWord(4, crc);
241 nRFTXEN = 1;//发送
242 TI = 1;
243 ES = 1;
244 }
245 */
246 // SioBuffers.TXCount = 8;
247 // nRFTXEN = 1;//发送
248 // SBUF = SioBuffers.TXBuffers[0];
249 // ES = 1;
250 }
251 }
252
253 void ClrWdt(void)//喂狗
254 {
255 WDTRST = 0x1e;//89s52内狗
256 WDTRST = 0xe1;//89s52内狗
257 }
258
259 unsigned char crc8r(unsigned char crcbyte)
260 {
261 unsigned char i,crc;
262 crc = 0;
263 for(i = 0; i < 8; i++) {
264 if(((crc ^ crcbyte) & 0x01) == 0) crc >>= 1;
265 else{
266 crc ^= 0x18;//0x18;//CRC=X8+X5+X4+1
267 crc >>= 1;
268 crc |= 0x80;
269 }
270 crcbyte >>= 1;
271 }
272 return crc;
273 }
274
275 unsigned int crc16r(unsigned int crcword, unsigned int crc)
276 {
277 unsigned char i;
278 for(i = 0; i < 16; i++){
279 if(((crc ^ crcword ) & 0x0001) == 0) crc >>= 1;
280 else{
281 crc ^= 0x810;//0x0810;//CRC=X16+X12+X5+1
282 crc >>= 1;
283 crc |= 0x8000;
284 }
285 crcword >>= 1;
286 }
287 return crc;
288 }
289
290 unsigned int GetTXBuffWord(unsigned char ledpos)
291 {
292 unsigned char val1, val2;
293 unsigned int val;
294 val1 = SioBuffers.TXBuffers[ledpos];
295 val2 = SioBuffers.TXBuffers[ledpos + 1];
296 val = (val1 << 8) + val2;
297 return val;
298 }
299
300 void SetTXBuffWord(unsigned char ledpos, unsigned int val)
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 6
301 {
302 SioBuffers.TXBuffers[ledpos] = (val >> 8);
303 SioBuffers.TXBuffers[ledpos + 1] = val & 0xff;
304 }
305
306 unsigned int GetRXBuffWord(unsigned char ledpos)
307 {
308 unsigned char val1, val2;
309 unsigned int val;
310 val1 = SioBuffers.RXBuffers[ledpos];
311 val2 = SioBuffers.RXBuffers[ledpos + 1];
312 val = (val1 << 8) + val2;
313 return val;
314 }
315
316 void SetRXBuffWord(unsigned char ledpos, unsigned int val)
317 {
318 SioBuffers.RXBuffers[ledpos] = (val >> 8);
319 SioBuffers.RXBuffers[ledpos + 1] = val & 0xff;
320 }
321
C51 COMPILATION COMPLETE. 0 WARNING(S), 3 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -