📄 main.lst
字号:
155 void RX_Mode(void)
156 {
157 1 RFCE=0;
158 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // 上电, CRC为2 bytes,接收模式,允许RX_DR产生中断
159 1 RFCE = 1; // 启动接收模式
160 1 }
161 /**************************************************
162 功能:设置为发射模式
163 **************************************************/
164 void TX_Mode(void)
165 {
166 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // 上电, CRC为2 bytes,接收模式,允许RX_DR产生中断
167 1 SPI_Write_Buf(WR_TX_PLOAD, id_buf, TX_PLOAD_WIDTH); // 写数据到FIFO
168 1 RFCE=1; // 启动发射
169 1 delay(10); // 发射脉冲
170 1 RFCE=0;
171 1 }
172 /**************************************************
173 功能:RF初始化
174 **************************************************/
175 void rf_init(void)
176 {
177 1 RFCE = 0; // RF发射模式关闭,因为前面的串口设置为接收模式了
178 1 RFCKEN = 1; // 启动RF时钟,16M
179 1 RF = 1; // 允许RF中断,
C51 COMPILER V9.00 MAIN 08/21/2012 11:13:53 PAGE 4
180 1 delay(1000);
181 1 SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 设置发射地址长度
182 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 设置接收地址长度
183 1 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 启动自动应答功能
184 1 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // PIPE0接收数据
185 1 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 自动重传10次
186 1 SPI_RW_Reg(WRITE_REG + RF_CH, 40); // RF频率2440MHz
187 1 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); // 发射功率0dBm, 传输速率2Mbps,
188 1 SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // PIPE0 接收数据包长度
189 1 }
190 /**************************************************
191 功能:RF中断服务程序
192 **************************************************/
193 void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
194 {
195 1 sta=SPI_Read(STATUS); // 读出状态值
196 1
197 1 if(RX_DR)
198 1 {
199 2 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// 读出FIFO的数据
200 2 SPI_RW_Reg(FLUSH_RX,0); // 清除RX的FIFO
201 2 }
202 1
203 1 SPI_RW_Reg(WRITE_REG+STATUS,0x70); // 清除所有中断标志
204 1 }
205 /**************************************************
206 功能:串口初始化子程序
207 说明:波特率19.2K,使用内部波特率发生器
208 **************************************************/
209 void uart_init(void)
210 {
211 1 ES0 = 0; // 关UART0中断
212 1 REN0 = 1; // 允许接收
213 1 SM0 = 0; // 串口模式1,8bit可变波特率
214 1 SM1 = 1;
215 1 PCON |= 0x80; // SMOD = 1 ,PCON=1001000
216 1 ADCON |= 0x80; // 选择内部波特率发生器,ADCON=10000000;
217 1
218 1 S0RELL = 0xe6; // 波特率19.2K(十进制998=十六进制0x03e6)
219 1 S0RELH = 0x03;
220 1 TI0 = 0; // 清发送完成标志
221 1 S0BUF=0x99; // 送初值
222 1 }
223 /**************************************************
224 功能:向串口发送1 byte数据
225 **************************************************/
226 void uart_putchar(uint8_t x)
227 {
228 1
229 1 while (!TI0); // 等待发送完成
230 1 TI0=0; // 清发送完成标志
231 1 S0BUF=x; // 发送数据
232 1 }
233 /**************************************************
234 功能:I/O口初始化
235 **************************************************/
236 void io_init(void)
237 {
238 1 P0DIR = p0dir; // 设定I/O口输入输出,p0dir=11110000
239 1 P1DIR = p1dir; //p1dir=11111111
240 1
241 1 LED1=LED2=LED3=0; // 灯全亮
C51 COMPILER V9.00 MAIN 08/21/2012 11:13:53 PAGE 5
242 1 delay(1000); //延时0.7485s
243 1 LED1=LED2=LED3=1; // 灯全灭
244 1 }
245 /**************************************************
246 功能:主程序
247 **************************************************/
248 void main(void)
249 {
250 1 unsigned char tmp=0;
251 1 io_init(); // I/O口初始化
252 1 uart_init(); // 串口初始化
253 1 rf_init(); // RF初始化
254 1 EA=1; // 允许中断
255 1 RX_Mode(); //进入接收模式
256 1
257 1 while(1)
258 1 {
259 2
260 2
261 2 if(RX_DR) // 数据已收到
262 2 {
263 3 sta=0;
264 3
265 3 delay(100000);
266 3
267 3 uart_putchar(rx_buf[0]); // 显示所有ID值
268 3
269 3 uart_putchar(rx_buf[1]);
270 3 uart_putchar(rx_buf[2]);
271 3 uart_putchar(rx_buf[3]);
272 3 uart_putchar(rx_buf[4]);
273 3 uart_putchar(rx_buf[5]);
274 3 uart_putchar(rx_buf[6]);
275 3 delay(1000);
276 3
277 3
278 3 RX_DR=0;
279 3
280 3 rf_init(); // RF初始化
281 3 EA=1;
282 3 TX_Mode(); // 发射数据
283 3 while (!(TX_DS|MAX_RT)); // 等待发射结束
284 3 LED2=0;
285 3 delay(100000);
286 3 LED2=1;
287 3
288 3 delay(100);
289 3 rf_init(); // RF初始化
290 3 EA=1; // 允许中断
291 3 RX_Mode();
292 3 while(!RX_DR);
293 3
294 3 }
295 2 }
296 1 }
297
298
299
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 559 ----
C51 COMPILER V9.00 MAIN 08/21/2012 11:13:53 PAGE 6
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 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 + -