📄 24e1.lst
字号:
C51 COMPILER V7.02a 24E1 07/10/2006 12:05:33 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE 24E1
OBJECT MODULE PLACED IN 24E1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24E1.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /*=================================================================================================
3 Copyright (C), 2005, RCG Tech. Co., Ltd.
4 File name: 24E1.C
5 Author: Zhangui Duan Version: v1.3 Date: 2005-3-30
6
7 Description:
8 此程序文件主要是完成无线数据的基本发送和传输。
9 1,nRF24E1的初始化控制
10 2,nRF24E1的数据发射与数据接收
11 3,串口数据打印
12 4,延时程序
13 5,在主程序main.c中调用这里面的函数
14 6,收发速度为250Kbps(最小),发射功率为0dBm(最大),目的是保证发送距离最远
15 Other Description:
16 由 Keil C51 V7.05 编译通过
17
18 Function List:
19 1. 对nRF2401子系统进行数据读写操作
20 unsigned char SpiReadWrite(unsigned char b);
21 2, 配置接收器
22 void Init_Receiver(void);
23 3, 接收数据块
24 void Receiver(unsigned char *rxbuf);
25 4, 发送数据块
26 void Transmitter(unsigned char txbuf[]);
27
28 History:
29 1. Date: 2005-6-12
30 Author:Zhangui Duan
31 Modification: 由于卡号要与普通的IC卡兼容,将卡号设置为4个字节,所以发送的有效数据宽度
32 由原来的48位改为56位(1字节前置码+4字节卡号+1字节卡参数值+1字节校验字节)
33
34 ===============================================================================================*/
35
36 #include "24E1.h"
37
38 #define DATAT_W 0x70 //发送有效数据宽度:DATA2_W:112位,DATA1_W:112位
39 #define DATAR_W 0x80 //接收有效数据宽度:DATA2_W:128位,DATA1_W:128位
40 #define RATE_POWER 0x4f //收发速度为250Kbps,发射功率为0dBm
41 unsigned char TxBuf[TNUM];
42 unsigned char RxBuf[RNUM];
43 unsigned char TRCOUNT;
44 unsigned char TIME;
45 RFConfig tconf =
46 {
47 15,
48 DATAT_W, DATAT_W,//发送有效数据宽度:DATA2_W:112位,DATA1_W:112位
49 0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
50 0x00,0xaa, 0xbb, 0x12, 0x34, //ADDR1地址宽度
51 0x83, RATE_POWER, //250Kbps,0dBm
52 0x04
53 };
54 RFConfig rconf =
55 {
C51 COMPILER V7.02a 24E1 07/10/2006 12:05:33 PAGE 2
56 15,
57 DATAR_W, DATAR_W, //接收有效数据宽度:DATA2_W:112位,DATA1_W:112位
58 0x00, 0x00, 0x00, 0x00, 0x00,//ADDR2地址宽度
59 0x00, 0xaa, 0xbb, 0x12, 0x34,//ADDR1地址宽度
60 0x83, RATE_POWER,//250Kbps,0dBm
61 0x05
62 };
63
64 /***************************************************************************************
65 Function: WriteRTC
66 Description: RTC定时时钟初始化
67 Calls:
68 Called By:
69 void main(void)
70 Input:
71 Output:
72 Return:
73 Others:
74 ***************************************************************************************/
75 void WriteRTC(unsigned int w)
76 {
77 1 while(REGX_CTRL & 0x10) // Wait for the interface to be ready
78 1 ;
79 1 REGX_MSB = w >> 8;
80 1 REGX_LSB = w & 0xff;
81 1 REGX_CTRL = 0x0a;
82 1 while(REGX_CTRL & 0x10) // Wait for the interface to be ready
83 1 ;
84 1 }
85
86 /***************************************************************************************
87 Function: SpiReadWrite
88 Description: 对nRF2401子系统进行数据读写操作
89 Calls:
90 Called By:
91 void Init_Receiver(void)
92 void Transmitter(unsigned char txbuf[])
93 Input: b
94 发送的时候是要发送的单个数据,接收的时候初始化值
95 Output:
96 Return: SPI_DATA
97 接收数据时是接收的数据
98 Others:
99 ***************************************************************************************/
100 unsigned char SpiReadWrite(unsigned char b)
101 {
102 1 EXIF &= ~0x20; // Clear SPI interrupt
103 1 SPI_DATA = b; // Move byte to send to SPI data register
104 1 while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting
105 1 ;
106 1 return SPI_DATA;
107 1 }
108
109 /***************************************************************************************
110 Function: Transmitter
111 Description: 发送数据块
112 Calls: Delay100us();
113 SpiReadWrite();
114 Called By:
115 void main(void)
116 Input: txbuf[]
117 要发送的数据串
C51 COMPILER V7.02a 24E1 07/10/2006 12:05:33 PAGE 3
118 Output:
119 Return:
120 Others:
121 ***************************************************************************************/
122
123 void Transmitter(unsigned char *txbuf)
124 {
125 1 unsigned char i;
126 1 CS = 1; //开配置方式
127 1 CE = 0;
128 1 Delay100us(0);
129 1 for(i=0;i<tconf.n;i++)
130 1 {
131 2 SpiReadWrite(tconf.buf[i]);//发送器配置字
132 2 }
133 1 CS = 0; //关配置方式
134 1
135 1 CE = 1; //nRF2401开始工作
136 1 Delay100us(0);
137 1 for(i=0;i<ADDR_COUNT;i++) //发送接收节点地址到nRF2401
138 1 SpiReadWrite(tconf.buf[ADDR_INDEX+i]);
139 1
140 1 for (i=0;i<TNUM;i++)
141 1 {
142 2 EXIF &= ~0x20; // Clear SPI interrupt
143 2 SPI_DATA = txbuf[i]; // Move byte to send to SPI data register
144 2 while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting
145 2 ;
146 2 // PutChar(txbuf[i]); //送串口显示
147 2 }
148 1 CE = 0; //激活ShockBurst发送
149 1 //Delay100us(3); // Wait ~300us
150 1 }
151
152 /***************************************************************************************
153 Function: Init_Receiver
154 Description: 配置接收器的接收地址,接收数据长度,接收地址,
155 Calls: Delay100us();
156 SpiReadWrite();
157 Called By:
158 void main(void)
159 Input:
160 Output:
161 Return:
162 Others:
163 ***************************************************************************************/
164 void Init_Receiver(void)
165 {
166 1 unsigned char b;
167 1 CE = 0;
168 1 CS = 1; //打开配置方式
169 1
170 1 Delay100us(0);
171 1 for(b=0;b<rconf.n;b++)
172 1 {
173 2 SpiReadWrite(rconf.buf[b]);//发送接收器配置字
174 2 }
175 1
176 1 CS = 0; //关配置方式
177 1 CE = 1; //使能收发功能
178 1 }
179
C51 COMPILER V7.02a 24E1 07/10/2006 12:05:33 PAGE 4
180 /***************************************************************************************
181 Function: Receiver
182 Description: 接收数据块
183 Calls: Delay100us();
184 SpiReadWrite();
185 Called By:
186 void main(void)
187 Input: *rxbuf
188 存储接收数据的数组的首地址
189 Output: 接收的数据存放在数据接收数组中
190 Return:
191 Others: 在调用此函数之前一定得调用函数Init_Receiver()
192 进行接收初始化配置
193
194 ***************************************************************************************/
195 void Receiver(unsigned char *rxbuf)
196 {
197 1 unsigned char rnum;
198 1 // Delay100us(30);
199 1 while(DR1==1)
200 1 {
201 2 CS = 0; //关配置方式
202 2 CE = 0; //关收发功能
203 2 for(rnum=0;rnum<RNUM;rnum++){
204 3 EXIF &= ~0x20; // Clear SPI interrupt
205 3 SPI_DATA = 0; // Write dummy byte to SPI data register
206 3 while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished receiving
207 3 ;
208 3 rxbuf[TRCOUNT] = SPI_DATA;
209 3 //PutChar(rxbuf[TRCOUNT]);
210 3 TRCOUNT++;
211 3 if(TRCOUNT==RNUM)TRCOUNT=0;
212 3 Delay100us(3);
213 3 }
214 2 }
215 1 //CS = 0; //关配置方式
216 1 // CE = 0; //关收发功能
217 1
218 1 }
219
220
221 /*
222 char GetChar(void)
223 {
224 while(!RI)
225 ;
226 RI = 0;
227 return SBUF;
228 }
229
230 */
231 /*
232 void PutChar(char c)
233 {
234 while(!TI)
235 ;
236 TI = 0;
237 SBUF = c;
238 }
239 */
240 void PutChar(char c)
241 {
C51 COMPILER V7.02a 24E1 07/10/2006 12:05:33 PAGE 5
242 1 SBUF = c;
243 1 while(TI==0);
244 1 TI = 0;
245 1 }
246
247 void Delayms(volatile unsigned char n)
248 {
249 1 unsigned char j;
250 1 while(n--)
251 1 for(j=0;j<10;j++)
252 1 Delay100us(10);
253 1
254 1 }
255
256 void Delay100us(volatile unsigned int n)
257 {
258 1 unsigned char i;
259 1 while(n--)
260 1 for(i=0;i<35;i++)
261 1 ;
262 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 295 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -