📄 fasong.lst
字号:
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE FASONG
OBJECT MODULE PLACED IN Fasong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Fasong.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //#pragma src
2 #include <REGX52.h>
3 #include <stdio.h>
4 #include <absacc.h>
5 #include <intrins.h>
6 /*---------------------*/
7 //#include <nrf905.h>
8 //#include "hotins.h"
9 /*---------------------*/
10 #pragma NOAREGS
11
12 void MainInit(void);//系统初始化
13 void SystemInit(void);//系统初始化
14 void SystemSetup(void);//系统设置
15 void SystemIoInit(void);//系统接口初始化
16 void TimeInit(void);//定时器定时参数设置
17 void UserSetup(void);//用户运行环境设置
18 void ClrWdt(void);//喂狗
19 void BeepSetup(unsigned char mode);//蜂鸣器发声模式设置
20 void Beep(void);//蜂鸣器发声驱动
21 void KeyInit(void);//键盘初始化
22 void KeyCommandExec(unsigned char commgroup, unsigned char commnum);//执行键盘命令
23
24 void Key00(void);//压键事件
25 void Key01(void);
26 void Key02(void);
27 void Key03(void);
28
29 void Key10(void);//放键事件
30 void Key11(void);
31 void Key12(void);
32 void Key13(void);
33
34 void Key20(void);//长键事件
35 void Key21(void);
36 void Key22(void);
37 void Key23(void);
38
39 /*-----------------------------------------------
40 nrf905库函数定义
41 ------------------------------------------------*/
42 unsigned char SpiReadWrite(unsigned char);
43 void WriteTXBuffer(const unsigned char[]);
44 unsigned char ReadStatus(void);
45 void nRFPowerUP(void);
46 void nRFInit(void);//无线模块初始化
47 unsigned char VerifynRFConfig(void);//校验配置nRF905
48 void WritenRFConfig(unsigned char[]);//写配置nRF905
49 void ReadnRFConfig(unsigned char[]);//读配置nRF905
50 void FastWritenRFConfig(unsigned char);//快速配置nRF905
51 void SetTxMode(void);//设置发送模式
52 void SetRxMode(void);//设置接收模式
53 void StartTx(void);//开始发送
54 void nRFReadWrite(void);//无线收发模块
55
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 2
56
57 //data SystemData SystemBuffers;//申请系统数据结构
58 //idata SioData SioBuffers;//申请系统数据结构
59
60 /*------------------------------------------------
61 SPI读写一体化函数SpiReadWrite()
62 入口参数:
63 val 写入命令或数据
64 出口参数:
65 R7 读出数据
66 ------------------------------------------------*/
67 unsigned char SpiReadWrite(unsigned char val) using 0
68 {
69 1 unsigned char i;
70 1 ACC = val;
71 1 for (i = 8; i > 0; i --)
72 1 {
73 2 CY = MISO;//取数据SO
*** ERROR C202 IN LINE 73 OF FASONG.C: 'MISO': undefined identifier
74 2 _rlca_();//存数据ACC.0读数据ACC.7同时进行,acc循环左移,acc.7移入cy(出),cy(入)移到acc.0
75 2 MOSI = CY;//送数据SI
76 2 SCK = 1;//上升沿打入数据
77 2 _nop_();
78 2 SCK = 0;//下降沿读入数据(首次为假动作)
79 2 }
80 1 return ACC;
81 1 }
82
83 /*------------------------------------------------
84 写入nRF905发送数据函数WriteTXBuffer()
85 入口参数:
86 buffer 发送数据包
87 出口参数:
88 无
89 ------------------------------------------------*/
90 void WriteTXBuffer(const unsigned char buffer[]) using 0
91 {
92 1 unsigned char i;
93 1 TRX_CE = 0;//设置nRF905为待机方式
94 1 _nop_();
95 1 CSN=0;//打开SPI
96 1 SpiReadWrite(WTA);//写发送地址
97 1 for (i = 0; i < 4; i++)
98 1 {
99 2 SpiReadWrite(buffer[i]); // Write 32 bytes Tx data
100 2 }
101 1 CSN=1;//关闭SPI
102 1 _nop_();
103 1 CSN=0;// Spi enable for write a spi command
104 1 SpiReadWrite(WTP); // Write payload command
105 1 for (i = 0; i < 32; i++)
106 1 {
107 2 SpiReadWrite(buffer[i]); // Write 32 bytes Tx data
108 2 }
109 1 CSN=1;// Spi disable
110 1 TRX_CE = !TX_EN;//
111 1 }
112
113 void FastWritenRFConfig(unsigned char low_ch_no) using 0
114 {
115 1 TRX_CE = 0;//设置nRF905为待机方式
116 1 _nop_();
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 3
117 1 CSN=0;//打开SPI
118 1 SpiReadWrite(CC PA_PWR_10dBm HFREQ_PLL_433MHz CH_NO_BIT8);
119 1 SpiReadWrite(low_ch_no);//CH_NO
120 1 CSN=1;// Spi disable
121 1 TRX_CE = !TX_EN;//
122 1 }
123
124 void StartTx(void) using 0
125 {
126 1 _nop_();
127 1 _nop_();
128 1 _nop_();
129 1 TRX_CE=1; // Set TRX_CE high,start Tx data transmission
130 1 _nop_();
131 1 _nop_();
132 1 _nop_();
133 1 _nop_();
134 1 _nop_();
135 1 _nop_();
136 1 _nop_();
137 1 _nop_();
138 1 _nop_();
139 1 _nop_();
140 1 TRX_CE=0; // Set TRX_CE low
141 1 }
142
143 /*------------------------------------------------
144 读入nRF905状态函数ReadStatus()
145 入口参数:
146 无
147 出口参数:
148 nRF905状态字
149 ------------------------------------------------*/
150 unsigned char ReadStatus(void) using 0
151 {
152 1 unsigned char val;
153 1 CSN = 0;//打开SPI
154 1 val = SpiReadWrite(RC);//读状态
155 1 CSN = 1;//关闭SPI
156 1 return val;//返回nRF905状态字
157 1 }
158
159 void nRFPowerUP(void) using 0
160 {
161 1 CSN = 1;//关闭SPI
162 1 SCK = 0;//拉低时钟
163 1 DR = 1;//设置DR为输入方式
164 1 AM = 1;//设置AM为输入方式
165 1 PWR_UP = 1;// nRF905上电
166 1 TRX_CE = 0;//设置nRF905为待机方式
167 1 TX_EN = 0;//设置接收方式
168 1 }
169
170
171 void main(void)
172 {
173 1 // ReadnRFConfig(SystemBuffers.nRFTxBuff);
174 1
175 1 MainInit();//系统初始化
176 1 while (1) {//主循环
177 2 IE = 0xb2;//保证中断可靠EA,ET2,ES,ET0
178 2 TCON = 0x55;//保证定时器开
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 4
179 2 PCON = SMOD_ + GF0_ + IDL_;//进入空闲状态并喂软件狗
180 2 _nop_();
181 2 _nop_();
182 2 }
183 1 }
184
185 void MainInit(void) using 0//系统初始化
186 {
187 1 _start_();
188 1 ClrWdt();//清除看门狗计数器
189 1 SystemIoInit();//系统接口初始化
190 1 SystemInit();//系统上电初始化
191 1 SystemSetup();//系统运行环境设置
192 1 UserSetup();//用户运行环境设置
193 1 }
194
195 void SystemInit(void) using 0//系统初始化
196 {
197 1 unsigned char i;
198 1 for (i = 0; i < 32; i ++) {
199 2 SioBuffers.SioTxBuff[i] = 0;
200 2 SioBuffers.SioRxBuff[i] = 0;
201 2 }
202 1 if (SystemBuffers.RamTest != 0x55aa) {//内存初始化
203 2 for (i = 0; i < 32; i ++) {
204 3 SystemBuffers.nRFTxBuff[i] = 0;
205 3 SystemBuffers.nRFRxBuff[i] = 0;
206 3 }
207 2 SystemBuffers.nRFRxBuff[0] = RX_ADDRESS_0;//本机地址
208 2 SystemBuffers.nRFRxBuff[1] = RX_ADDRESS_1;
209 2 SystemBuffers.nRFRxBuff[2] = RX_ADDRESS_2;
210 2 SystemBuffers.nRFRxBuff[3] = RX_ADDRESS_3;
211 2 SystemBuffers.nRFRxBuff[8] = CH_NO_BYTE;
212 2 SystemBuffers.nRFTxBuff[8] = CH_NO_BYTE;
213 2 SystemBuffers.RamTest = 0x55aa;
214 2 }
215 1 else {
216 2 }
217 1 }
218
219 void SystemSetup(void) using 0//系统设置
220 {
221 1 TimeInit();
222 1 IP = 0x05;//中断优先级EX0>EX1>ET0>ET1
223 1 SystemBuffers.TestTime = 0;
224 1 SystemBuffers.WaitTime = 0;
225 1 }
226
227 void TimeInit() using 0
228 {
229 1 // TCON = 0x55;//启动定时器
230 1 /*----------------------------------
231 1 定时器0定时参数设置
232 1 ----------------------------------*/
233 1 TL0 = 0;
234 1 TH0 = 0;
235 1 TR0 = 1;//启动定时器0
236 1 /*----------------------------------
237 1 定时器1定时参数设置
238 1 ----------------------------------*/
239 1 TMOD = 0x20; //timer1 working mode 1
240 1 TL1 = 0xfd; //f7=9600 for 16mhz Fosc,and ...
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 5
241 1 TH1 = 0xfd; //...fd=19200 for 11.0592mhz Fosc
242 1 SCON = 0xd8; //uart mode 3,ren==1
243 1 PCON = 0x80;
244 1 SioBuffers.SioTXCount = 0;//无发送数据
245 1 SioBuffers.SioRXCount = 32;//允许接收串口数据
246 1 TR1 = 1;//启动定时器1
247 1 /*----------------------------------
248 1 定时器2定时参数设置
249 1 ----------------------------------*/
250 1 TIMEER2 = T2_5mS;
251 1 RCAP = T2_5mS;
252 1 TR2 = 1;//启动定时器2
253 1 }
254
255 void nRFInit(void) using 0//无线模块初始化
256 {
257 1 do{
258 2 WritenRFConfig(SystemBuffers.nRFRxBuff);//配置nRF905
259 2 }
260 1 while(VerifynRFConfig());
261 1 SetRxMode();//设置接收模式
262 1 SystemBuffers.nRFTxCount = 0;//清空无线发送数据缓冲区
263 1 SystemBuffers.nRFRxCount = 0;//清空无线接收数据缓冲区
264 1 }
265
266 void ReadnRFConfig(unsigned char rxaddr[]) using 0//读配置nRF905
267 {
268 1 unsigned char i;
269 1 TRX_CE = 0;//设置nRF905为待机方式
270 1 _nop_();
271 1 CSN = 0;// Spi enable for write a spi command
272 1 SpiReadWrite(RC); // Read config command
273 1 for (i = 10; i < 20; i ++) rxaddr[i] = SpiReadWrite(0xff);
274 1 CSN = 1;// Disable Spi
275 1 TRX_CE = !TX_EN;//
276 1 }
277
278 void WritenRFConfig(unsigned char rxaddr[]) using 0//配置nRF905
279 {
280 1 TRX_CE = 0;//设置nRF905为待机方式
281 1 _nop_();
282 1 CSN = 0;// Spi enable for write a spi command
283 1 SpiReadWrite(WC); // Write config command
284 1 SpiReadWrite(rxaddr[8]); //中心频率低8位
285 1 SpiReadWrite(PA_PWR_10dBm HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
286 1 SpiReadWrite(TX_AFW_4BYTE RX_AFW_4BYTE); //接收地址宽度4字节,发送地址宽度4字节
287 1 SpiReadWrite(RX_PW_32BYTE); //接收数据宽度32字节
288 1 SpiReadWrite(TX_PW_32BYTE); //发送数据宽度32字节
289 1 SpiReadWrite(rxaddr[0]); //接收有效地址第1字节
290 1 SpiReadWrite(rxaddr[1]); //接收有效地址第2字节
291 1 SpiReadWrite(rxaddr[2]); //接收有效地址第3字节
292 1 SpiReadWrite(rxaddr[3]); //接收有效地址第4字节
293 1 SpiReadWrite(CRC16_EN XOF_16MHz); //CRC16模式使能,晶体振荡器频率16MHz
294 1 CSN = 1;// Disable Spi
295 1 TRX_CE = !TX_EN;//
296 1 }
297
298 unsigned char VerifynRFConfig(void) using 0//校验配置nRF905
299 {
300 1 unsigned char error = 0;
301 1 TRX_CE = 0;//设置nRF905为待机方式
302 1 _nop_();
C51 COMPILER V8.08 FASONG 03/28/2008 09:46:20 PAGE 6
303 1 CSN = 0;// Spi enable for write a spi command
304 1 SpiReadWrite(RC); // Read config command
305 1 SpiReadWrite(0xff); //中心频率低8位
306 1 if (SpiReadWrite(0xff) != (PA_PWR_10dBm HFREQ_PLL_433MHz)) error ++; //发射+10dBm,发射频率433MHz,中心频
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -