📄 +
字号:
C51 COMPILER V7.06 NRF2401 04/17/2007 19:36:47 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE NRF2401
OBJECT MODULE PLACED IN nRF2401.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE nRF2401.c OPTIMIZE(0,SPEED) BROWSE INCDIR(D:\BAO\试验基地\试验\source for 8
-9LV51\) DEBUG OBJECTEXTEND
stmt level source
1 /**********************************************************************************/
2 /**********************************************************************************/
3 // The nRF2401 2.4GHz Multi Channel Software
4 //
5 // This software and any related documentation is provided "as is" without any
6 // warranty of any kind, either express or implied, including, without
7 // limitation, the implied warranties or merchantability, fitness for a
8 // particular purpose, and noninfringment. The entire risk arising out of use
9 // of this software remains with you.
10 // write time is 2006.12.20====debug time is 2006.12.20--21
11 // copyright is 苏州天铱电子 www.tianyi-dz.com
12 // cpu= At89S52,keilC51 compiler
13 // tel:13862423497 15962169748
14 //QQ:472230383
15 /**********************************************************************************/
16 /**********************************************************************************/
17 #include "reg52.h" //晶振可以用11.0592MHZ,如果用串口的话
18 //提示:在调试程序的时候晶振用12MHZ
19 #include "stdio.h"
20 #include "string.h"
21 #include "math.h"
22 #include "intrins.h"
23 /**********************************************************************************/
24 #define uchar unsigned char
25 #define uint unsigned int
26
27 #define Fclk 3686400
28 #define BitRate 19200
29 #define BRR (Fclk/(16*Bitrate))-1
30
31 #define timerdiv 1
32 #define timerval 256-(Fclk/timerdiv)/100000 // timeout each 10us
33 /**********************************************************************************/
34 uchar InitData[15];
35 uchar TXData[14];
36 uchar RXData[10];
37
38 uchar Temp;
39 uchar BitCnt;
40 uchar ByteCnt;
41 uchar Data1= 0xff;
42
43 bdata uchar tempi;
44 /**********************************************************************************/
45 sbit CLK1 =P1^7;
46 sbit CS =P1^5;
47 sbit Data =P3^2;
48 sbit CE =P1^1;
49 //sbit Clk2 =P1^5;
50 //sbit Dout2 =P1^6;
51
52 //sbit DR2 =P3^2;
53 sbit DR1 =P1^6;
54 sbit PWR_UP =P1^0;
C51 COMPILER V7.06 NRF2401 04/17/2007 19:36:47 PAGE 2
55
56 sbit LED1 =P0^0;
57 sbit LED2 =P0^2;
58 sbit LED3 =P0^4;
59 sbit LED4 =P0^6;
60
61 /*sbit CLK1 =P2^0;
62 sbit CS =P2^2;
63 sbit Data =P2^3;
64 sbit CE =P2^4;
65 sbit Clk2 =P2^5;
66 sbit Dout2 =P2^6;
67
68 sbit DR2 =P3^2;
69 sbit DR1 =P3^3;
70 sbit PWR_UP =P3^5;
71
72 sbit LED1 =P0^4;
73 sbit LED2 =P0^5;
74 sbit LED3 =P0^6;
75 sbit LED4 =P0^7;
76 */
77 sbit bflag =tempi^7;
78 /**********************************************************************************/
79 void init_io();
80 void nRF2401_ON();
81 void BuildInitWord();
82 void InitnRF2401();
83 void DoSPIClock();
84 void CE_High();
85 void RXEN_HIGH();
86 void TXEN_LOW();
87 void delay_n(uchar n);
88 void BuildShockWord(Data1);
89 void ShockBurst();
90 void CheckButtons();
91 void ReceiveShock();
92 void Inituart();
93 /*****************************************MAIN START ******************************/
94 void main(void)
95 {
96 1 init_io();
97 1 nRF2401_ON();
98 1 delay_n(100);///jia////////
99 1 BuildInitWord();
100 1 InitnRF2401();
101 1 Inituart();
102 1 CE_High();
103 1 RXEN_HIGH();
104 1 delay_n(100); //delay for LED light
105 1
106 1 P0=0xff; //close all LED
107 1 TXEN_LOW(); // set TX mode
108 1 BuildShockWord(Data1);
109 1 ShockBurst();
110 1 delay_n(10); // delay for mode change
111 1 RXEN_HIGH();
112 1 while(1)
113 1 {
114 2 CheckButtons(); //check if the button is pressed
115 2 DR1=1;
116 2 if(DR1==1) // Check if DR1 is high (any received from nRF2401)
C51 COMPILER V7.06 NRF2401 04/17/2007 19:36:47 PAGE 3
117 2 ReceiveShock();
118 2 }
119 1 }
120 /*************************************Rmain END *******************************/
121 /*************************************init_io START ******************************/
122 void init_io()
123 {
124 1 P0=0Xff;
125 1 P1=0x00;
126 1 P2=0xff;
127 1 P3=0xff;
128 1 P0=0xff;
129 1 /*
130 1 P0=0Xff;
131 1 P1=0xff;
132 1 P2=0x00;
133 1 P3=0xff;
134 1 P0=0x0f;
135 1 */
136 1 }
137 /*************************************init_io END *******************************/
138 void Inituart(void)
139 {
140 1 TMOD = 0x20; //timer1 working mode 1
141 1 TL1 = 0xfd; //f7=9600 for 16mhz Fosc,and ...
142 1 TH1 = 0xfd; //...fd=19200 for 11.0592mhz Fosc
143 1 SCON = 0xd8; //uart mode 3,ren==1
144 1 PCON = 0x80; //smod=0
145 1 TR1 = 1; //start timer1
146 1
147 1 /* SCON=0x50; //模式1
148 1 TMOD=0x21; //定时模式2
149 1 IE=0x90;
150 1
151 1 //=====9600=======设置串口通讯寄存器
152 1 PCON=0x00; //波特率9600BPS,晶振11.0592MHZ
153 1 TH1=0xFD; //
154 1 TL1=0xFD; //计数器初值
155 1 TR1 = 1; //start timer1*/
156 1 }
157 /*************************************BuildSPIWord START****************************/
158 void BuildInitWord()
159 {
160 1 InitData[0]=0x50; //RX receiver 2, Datalength 80bit(10 byte)
161 1 InitData[1]=0x50; //RX receiver 1, Datalength 80bit(10 byte)
162 1 InitData[2]=0x00;
163 1 InitData[3]=0xcc;
164 1 InitData[4]=0xcc;
165 1 InitData[5]=0xcc;
166 1 InitData[6]=0xcc;
167 1 InitData[7]=0xcc;
168 1 InitData[8]=0xcc; //RX receiver 1 address High byte
169 1 InitData[9]=0xcc; //RX receiver 1 address High byte
170 1 InitData[10]=0xcc; //RX receiver 1 address Low byte
171 1 InitData[11]=0xcc; //RX receiver 1 address Low byte
172 1 //InitData[12]=0x82; //this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC disable(Bit0) for ES c
-hip
173 1 InitData[12]=0x83; //this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC enable(Bit0) for final
-chip
174 1 InitData[13]=0x4f; //One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 250K, crystal(Bit4-Bit2), RF P
-ower(Bit1-Bit0)
175 1 //InitData[13]=0x6f; //One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 1M, crystal(Bit4-Bit2), RF Po
C51 COMPILER V7.06 NRF2401 04/17/2007 19:36:47 PAGE 4
-wer(Bit1-Bit0)
176 1 InitData[14]=0x05; //Channel Number(Bit7-Bit1), RX/TX mode(Bit0)
177 1 }
178 /*************************************BuildSPIWord END******************************/
179 void TxData (uchar x)
180 {
181 1 SBUF=x;
182 1 while(TI==0);
183 1 TI=0;
184 1
185 1 }
186 /*************************************InitnRF2401 START******************************/
187 void InitnRF2401()
188 {
189 1 CE=0; //Disable CE
190 1 CS=1; //Enable CS--confige mode
191 1 for (ByteCnt=0;ByteCnt<15;ByteCnt++)
192 1 {
193 2 tempi=InitData[ByteCnt];
194 2 for (BitCnt=0;BitCnt<8;BitCnt++)
195 2 {
196 3 if (bflag==1) //Check if first bit is HIGH
197 3 Data=1; //Set Data high
198 3 else
199 3 Data=0; //Set Data low
200 3 tempi=tempi<<1; //Left Shift to get next bit
201 3 DoSPIClock(); //Call "DoClock" to generate a clock pulse
202 3 }
203 2 }
204 1 CS=0; //Disable CS--standby mode
205 1 Data=0; //Set Data low
206 1 }
207 /*************************************InitnRF2401 END *******************************/
208 /*************************************DoSPIClock START******************************/
209 void DoSPIClock()
210 {
211 1 CLK1=1;
212 1 _nop_();
213 1 _nop_();
214 1 CLK1=0;
215 1 }
216
217 /*************************************DoSPIClock END *******************************/
218 /*************************************CE_High START ******************************/
219 void CE_High()
220 {
221 1 CE=1;
222 1 }
223 /*************************************CE_High END *******************************/
224 /*************************************TXEN_LOW START ******************************
225 void CE_Low()
226 {
227 CE=0;
228 }
229 *************************************CE_Low END ********************************/
230 /*************************************nRF2401_ON START******************************/
231 void nRF2401_ON()
232 {
233 1 PWR_UP=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -