📄 nrf905_rx.lst
字号:
C51 COMPILER V7.50 NRF905_RX 08/24/2007 13:07:27 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE NRF905_RX
OBJECT MODULE PLACED IN nRF905_RX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE nRF905_RX.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //数传接收2007/8/1 AT89C2051 11.0592MHz
2 //Module nRF905_RX AT89C2051-24PU VCC=3V
3 //2007/8/23 PASSED!
4 #include <reg51.H>
5 #include <ABSACC.h>
6 #include <intrins.h>//_nop_()需要
7 #include <stdio.h>
8
9 typedef unsigned char uchar;
10 typedef unsigned int uint;
11 //配置口定义//
12 sbit TXEN = P1^7;
13 sbit TRX_CE = P1^6;
14 sbit PWR = P1^5;
15 //SPI口定义//
16 sbit MISO = P1^1;
17 sbit MOSI = P1^0;
18 sbit SCK = P3^7;
19 sbit CSN = P3^3;
20 //状态输出口//
21 sbit CD = P1^4;
22 sbit AM = P1^3;
23 sbit DR = P3^2;
24 sbit LED1 = P3^4;
25 sbit LED2 = P3^5;
26 //控制按钮
27 sbit AN1 = P3^0;
28 sbit AN2 = P3^1;
29 //--------------------------------------
30 void Init_MCU(void)
31 {
32 1 TMOD=0x20;
33 1 TH1=0xfd; //Baudrate=19200;f4->2400
34 1 TL1=0xfd;
35 1 PCON=0x80;
36 1 SCON=0x50;
37 1 TR1=1;
38 1 LED1=1;
39 1 LED2=1;
40 1 }
41 //-----------------------------------------------
42 void Send_PC(uchar mess)
43 {
44 1 SBUF=mess;
45 1 while(TI==0); TI=0;
46 1 }
47 //-------------------------------------------------
48 //RF寄存器配置//
49 unsigned char idata RFConf[11]=
50 {
51 0x00, //配置命令//
52 0x6C, //CH_NO,配置频段在433.2MHZ
53 0x0C, //输出功率为10db,不重发,节电为正常模式
54 0x44, //地址宽度设置,为4字节
55 0x04,0x04, //接收发送有效数据长度为4字节
C51 COMPILER V7.50 NRF905_RX 08/24/2007 13:07:27 PAGE 2
56 0xE7,0xE7,0xE7,0xE7, //接收地址
57 0xDE, //CRC充许,16位CRC校验,外部时钟信号使能,16M晶振
58 };
59
60 uchar TxRxBuffer[5];
61 bit lcdbit;
62 ///////////延时/////////////////
63 void Delay(uint x)
64 {
65 1 uint i;
66 1 for(i=0;i<x;i++){
67 2 _nop_();
68 2 }
69 1 }
70
71 ////////////用SPI口写数据至NRF905内//////////
72 void SpiWrite(uchar b)
73 {
74 1 uchar i=8;
75 1 while (i--)
76 1 {
77 2 Delay(10);
78 2 SCK=0;
79 2 MOSI=(bit)(b&0x80);
80 2 b<<=1 ;
81 2 Delay(10);
82 2 SCK=1;
83 2 Delay(10);
84 2 SCK=0;
85 2 }
86 1 SCK=0;
87 1 }
88 ///////////////from 905 read data////////////////
89 uchar SpiRead(void)
90 {
91 1 uchar i=8;
92 1 uchar ddata=0;
93 1 while (i--)
94 1 {
95 2 ddata<<=1 ;
96 2 SCK=0;
97 2 _nop_();_nop_();
98 2 ddata|=MISO;
99 2 SCK=1 ;
100 2 _nop_();_nop_();
101 2 }
102 1 SCK=0;
103 1 return ddata;
104 1 }
105 ///////////////接收数据包/////////////////
106 void RxPacket(void)
107 {
108 1 uchar i;
109 1 i=0;
110 1 while(DR)
111 1 {
112 2 TxRxBuffer[i] = SpiRead();
113 2 i++;
114 2 }
115 1 }
116
117 /*
C51 COMPILER V7.50 NRF905_RX 08/24/2007 13:07:27 PAGE 3
118 ;写发射数据命令:20H
119 ;读发射数据命令:21H
120 ;写发射地址命令:22H
121 ;读发射地址命令:23H
122 ;读接收数据命令:24H
123 */
124 //--------------------------------------
125 void DelayMs(uint n) //j=115@F=11.0592MHz
126 { uchar j; //j=125@F=12MHz
127 1 while(n--)
128 1 {for(j=0;j<115;j++);}
129 1 }
130 ////////////////等待接收数据包///////////////////
131 uchar temp;
132 void Wait_Rec_Packet(void)
133 {
134 1 TXEN=0;
135 1 TRX_CE=1;
136 1 while(1)
137 1 {
138 2 if(DR)
139 2 {
140 3 TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作
141 3 CSN=0;
142 3 SpiWrite(0x24);
143 3 RxPacket();
144 3 CSN=1;
145 3 //temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2];
146 3 //if(temp==0x06){
147 3 LED2=0;
148 3 DelayMs(200);
149 3 LED2=1; //如果接收的数据正确
150 3 //}
151 3 break;
152 3 }
153 2 }
154 1 }
155 ////////////初始化配置寄存器////////////////
156 void Ini_System(void)
157 {
158 1 uchar i;
159 1 LED1=0;
160 1 Delay(10000);
161 1 LED1=1;
162 1 lcdbit=1;
163 1 CSN=1;
164 1 SCK=0;
165 1 PWR=1;
166 1 TRX_CE=0;//SPI写入
167 1 TXEN=0;
168 1 _nop_();
169 1 CSN=0;
170 1 for(i=0;i<11;i++){
171 2 SpiWrite(RFConf[i]);
172 2 }
173 1 CSN=1;
174 1 PWR=1;
175 1 TRX_CE=1;//
176 1 TXEN=0;
177 1 Delay(1000);
178 1 }
179
C51 COMPILER V7.50 NRF905_RX 08/24/2007 13:07:27 PAGE 4
180 //-----------------------------------------------
181 void main(void)
182 {
183 1 uint i;
184 1 DelayMs(100);
185 1 LED1=0;
186 1 DelayMs(1000);
187 1 LED1=1;
188 1 Init_MCU();
189 1 Send_PC(0xAA);
190 1 Send_PC(0xBB);
191 1
192 1 Ini_System();
193 1 //PWR=0;
194 1
195 1 while(1)
196 1 {
197 2 Wait_Rec_Packet(); //等待接收完成
198 2 for(i=0;i<4;i++)
199 2 Send_PC(TxRxBuffer[i]);
200 2 }
201 1 }
202
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 317 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = 11 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -