?? 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實(shí)驗(yàn)c51程序
2
3 /*----------------------------------------------------------------------
4 nrf401實(shí)驗(yàn)程序
5 雁塔菜農(nóng)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 系統(tǒng)函數(shù)
21 -----------------------------------------------------------------------*/
22 void MainInit(void);//系統(tǒng)初始化
23 void ClrWdt(void);//喂狗
24 void nRFInit(void);
25 void SystemInit(void);//系統(tǒng)初始化
26 void SystemSetup(void);//系統(tǒng)設(shè)置
27 void SystemIoInit(void);//系統(tǒng)接口初始化
28 void UserSetup(void);//用戶運(yùn)行環(huán)境設(shè)置
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;//申請系統(tǒng)數(shù)據(jù)結(jié)構(gòu)
*** ERROR C129 IN LINE 38 OF .\NFR401.C: missing ';' before 'SystemBuffers'
39
40 SioData SioBuffers;
41
42 /*-----------------------------------------
43 主程序初始化
44 -------------------------------------------*/
45 void MainInit(void)//系統(tǒng)初始化
46 {
47 SystemIoInit();//系統(tǒng)接口初始化
48 ClrWdt();//清除看門狗計(jì)數(shù)器
49 if (SystemBuffers.RamTest != 0x55aa) {//內(nèi)存測試
50 SystemInit();//系統(tǒng)上電初始化
51 }
52 SystemSetup();//系統(tǒng)運(yùn)行環(huán)境設(shè)置
C51 COMPILER V6.12 NFR401 07/18/2006 11:25:03 PAGE 2
53 UserSetup();//用戶運(yùn)行環(huán)境設(shè)置
54 }
55
56 void SystemInit(void)//系統(tǒng)初始化
57 {
58 SystemBuffers.RamTest = 0x55aa;//內(nèi)存初始化
59 }
60
61 void SystemSetup(void)//系統(tǒng)設(shè)置
62 {
63 AUXR = 0x01;//關(guān)閉EMI
64 nRFInit();
65 TimeInit();
66 IP = 0x10;//中斷優(yōu)先級EX1>ET2>ET0>EX0>ES
67 IE = 0xb4;//開中斷EA,ET2,ET1,EX1,ET0
68 }
69
70 void UserSetup(void)//用戶運(yùn)行環(huán)境設(shè)置
71 {
72 }
73
74 void SystemIoInit(void)
75 {
76 IE = 0x00;//關(guān)閉中斷
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;//定時(shí)器0,1為方式1(十六位定時(shí)器)
86 TCON = 0x55;//啟動定時(shí)器TR1EQUTR0EQU1,IT1EQUIT0EQU1
87 /*----------------------------------
88 定時(shí)器0定時(shí)參數(shù)設(shè)置
89 ----------------------------------*/
90 TL0 = 0;
91 TH0 = 0;
92 TR0 = 1;//啟動定時(shí)器0
93 /*----------------------------------
94 定時(shí)器0定時(shí)參數(shù)設(shè)置
95 ----------------------------------*/
96 TL1 = SIO_BPS;
97 TH1 = SIO_BPS;
98 PCON = 0x00;
99 TR1 = 1;//啟動定時(shí)器1
100 /*----------------------------------
101 定時(shí)器2定時(shí)參數(shù)設(shè)置
102 ----------------------------------*/
103 TIMEER2 = T2_1_25mS;
104 RCAP = T2_1_25mS;
105 TR2 = 1;//啟動定時(shí)器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中斷服務(wù)程序
123 ------------------------------------*/
124 void int0proc() interrupt IE0_VECTOR// using 1
125 {
126 }
127
128 /*------------------------------------
129 定時(shí)器T0中斷服務(wù)程序
130 ------------------------------------*/
131 void t0proc() interrupt TF0_VECTOR// using 1
132 {
133 }
134
135 /*------------------------------------
136 外部INT1中斷服務(wù)程序
137 ------------------------------------*/
138 void int1proc() interrupt IE1_VECTOR using 1
139 {
140 }
141
142 /*------------------------------------
143 定時(shí)器T1中斷服務(wù)程序
144 ------------------------------------*/
145 void t1proc() interrupt TF1_VECTOR// using 1
146 {
147 }
148
149 /*------------------------------------
150 串口SIO中斷服務(wù)程序
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個(gè)數(shù)據(jù)
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;//發(fā)送
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;//接收結(jié)束立即轉(zhuǎn)為發(fā)送
184 }
185 break;
186 }
187 }
188 }
189 if (TI) {//發(fā)送中斷
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;//發(fā)送結(jié)束立即轉(zhuǎn)為接收
207 SioBuffers.RXCount = 20;
208 }
209 }
210 }
211 }
212 }
213
214 /*------------------------------------
215 定時(shí)器T2中斷服務(wù)程序(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) {//中斷是從主循環(huán)內(nèi)跳入的才能喂狗
223 ClrWdt();//清除看門狗計(jì)數(shù)器
224 PCON &= ~GF0;//清除標(biāo)志
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;//發(fā)送
242 TI = 1;
243 ES = 1;
244 }
245 */
246 // SioBuffers.TXCount = 8;
247 // nRFTXEN = 1;//發(fā)送
248 // SBUF = SioBuffers.TXBuffers[0];
249 // ES = 1;
250 }
251 }
252
253 void ClrWdt(void)//喂狗
254 {
255 WDTRST = 0x1e;//89s52內(nèi)狗
256 WDTRST = 0xe1;//89s52內(nèi)狗
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -