?? nrf2401.lst
字號:
C51 COMPILER V8.17 NRF2401 02/02/2009 22:22:01 PAGE 1
C51 COMPILER V8.17, COMPILATION OF MODULE NRF2401
OBJECT MODULE PLACED IN nRF2401.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE nRF2401.c OPTIMIZE(7,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //====================================================================================
2 //文 件 名: nRF2401.c
3 //功能描述: nRF2401的驅動程序
4 //維護記錄: 2006年10月20
5 //====================================================================================
6
7 #include "C8051F330.h"
8 //#include "intrins.h"
9
10 sbit PWR = P1^0;
11 sbit CE = P1^1;
12 sbit CS = P1^2;
13 sbit DR1 = P1^3;
14 sbit CLK1 = P1^4;
15 sbit DATA = P1^5;
16
17 code unsigned int InitData[15] = // nRF2401 控制字 15 Byte
18 {
19 // 0x01,
20 // 0x01,
21 // 0x01,
22 0x08, // 通道二接收數(shù)據(jù)寬度(bit)
23 0x08, // 通道一接收數(shù)據(jù)寬度(bit)
24 0x00, // 通道二地址(A24)
25 0x00, // 通道二地址(A23)
26 0x00, // 通道二地址(A22)
27 0x00, // 通道二地址(A21)
28 0x02, // 通道二地址(A20)
29 0x00, // 通道一地址(A14)
30 0x00, // 通道一地址(A13)
31 0x00, // 通道一地址(A12)
32 0x00, // 通道一地址(A11)
33 0x02, // 通道一地址(A10)
34 0xA3, // b7~b2:接收地址寬度,和發(fā)送端一致,不超過40bit;
35 // b1~b0:CRC模式選擇(01-8bit;11-16bit;00/10-no)
36 0x4f, // b15:接收通道選擇(0-通道1;1-通道1和2)
37 // b14:收發(fā)模式(0-Direct模式,1-ShockBurst模式)
38 // b13:波特率選擇(0-250Kbps;1-1Mbps)
39 // b12~b10:晶振選擇(000-4M;001-8M;010-12M;011-16M)
40 // b9~b8:發(fā)射功率(11-0db)
41 0x04 // b7~b1:發(fā)射頻率配置
42 // b0:收發(fā)控制(0-發(fā)送;1-接收)
43
44 };
45 unsigned int idata AddrBuffer[5]; // 地址寄存器
46 unsigned int idata AddrByteCnt; // 地址Byte數(shù)
47
48 void nRF2401_ON(); // nRF2401A上電
49 void nRF2401_OFF(); // nRF2401A掉電
50 void nRF2401_Initial(); // nRF2401A初始化
51 void nRF2401_WriteCommand(); // nRF2401A寫命令字
52 void nRF2401_WriteByte(unsigned int uiData); // 向nRF2401A寫入一個Byte
53 void nRF2401_WriteWord(unsigned int uiData); // 向nRF2401A寫入一個Word
54 void nRF2401_Mode(unsigned int uiMode); // 切換nRF2401A收/發(fā)模式
55 void nRF2401_SendByte(unsigned int TxData);
C51 COMPILER V8.17 NRF2401 02/02/2009 22:22:01 PAGE 2
56 // 將字節(jié)數(shù)據(jù)寫入nRF2401A
57 void nRF2401_SendWord(unsigned int TxData);
58 // 將字數(shù)據(jù)寫入nRF2401A
59 void nRF2401_SendBuffer_Byte(unsigned int TxData[],unsigned int DataByte);
60 // 將數(shù)組數(shù)據(jù)寫入nRF2401A
61 void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);
62 // 將數(shù)組數(shù)據(jù)寫入nRF2401A
63 unsigned int nRF2401_RxStatus(); // 判斷nRF2401A是否有數(shù)據(jù)接收
64 void nRF2401_ReceiveByte(unsigned int RxData[]);// 以Byte格式從nRF2401A讀數(shù)據(jù)
65 void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式從nRF2401A讀數(shù)據(jù)
66 void nRF2401_SetAddress(unsigned int Address[],unsigned int AddrByte);
67 // 設置目標nRF2401A的地址
68 void Delay_Us(unsigned int TimeCnt); // 延時(uS)
69
70 //=============================================================
71 // 語法格式: void nRF2401_Initial(void)
72 // 實現(xiàn)功能: nRF 初始化
73 // 參數(shù): 無
74 // 返回值: 無
75 //=============================================================
76 void nRF2401_Initial(void)
77 {
78 1 /* *P_SystemClock = 0x98; // 設置系統(tǒng)時鐘為49MHz
79 1 *P_IOB_Attrib |= (CS+DATA+PWR+CLK1+CE+DR1);
80 1 *P_IOB_Dir |= (CS+DATA+PWR+CLK1+CE);
81 1 *P_IOB_Dir&=~DR1;
82 1 *P_IOB_Buffer &=~(CS+DATA+CLK1+CE+DR1); // 初始化IO端口 */
83 1
84 1 nRF2401_ON();
85 1 Delay_Us(3000);
86 1 nRF2401_WriteCommand(); // 向nRF2401A寫命令字
87 1 Delay_Us(300);
88 1 }
89
90 //=============================================================
91 // 語法格式: void nRF2401_ON(void)
92 // 實現(xiàn)功能: nRF 上電
93 // 參數(shù): 無
94 // 返回值: 無
95 //=============================================================
96 void nRF2401_ON(void)
97 {
98 1 /**P_IOB_Buffer |= PWR;*/
99 1 PWR = 1;
100 1 }
101
102 //=============================================================
103 // 語法格式: void nRF2401_OFF(void)
104 // 實現(xiàn)功能: nRF 掉電
105 // 參數(shù): 無
106 // 返回值: 無
107 //=============================================================
108 void nRF2401_OFF(void)
109 {
110 1 PWR = 0; //*P_IOB_Buffer &= ~PWR;
111 1 }
112
113 //=============================================================
114 // 語法格式: void nRF2401_WriteCommand(void)
115 // 實現(xiàn)功能: nRF 寫命令字
116 // 參數(shù): 無
117 // 返回值: 無
C51 COMPILER V8.17 NRF2401 02/02/2009 22:22:01 PAGE 3
118 //=============================================================
119 void nRF2401_WriteCommand(void)
120 {
121 1 unsigned int i;
122 1 CE= 0; //*P_IOB_Buffer &= ~CE;
123 1 CS = 1; //*P_IOB_Buffer |= CS;
124 1 //Delay_Us(1);
125 1 for(i=0; i<15; i++)
126 1 {
127 2 nRF2401_WriteByte(InitData[i]);
128 2 }
129 1 CS = 0; //*P_IOB_Buffer &= ~CS;
130 1 CE = 1; //*P_IOB_Buffer |= CE;
131 1 }
132
133 //=============================================================
134 // 語法格式: void nRF2401_Mode(unsigned int uiMode)
135 // 實現(xiàn)功能: 設置nRF2401A的工作方式
136 // 參數(shù): uiMode:0--接收;1--發(fā)送
137 // 返回值: 無
138 //=============================================================
139 void nRF2401_Mode(unsigned int uiMode)
140 {
141 1 CE = 0; //*P_IOB_Buffer &= ~CE;
142 1 CS = 1; //*P_IOB_Buffer |= CS;
143 1 Delay_Us(1);
144 1 if(uiMode == 0)
145 1 nRF2401_WriteByte(InitData[14] | 0x01); // 接收
146 1 else
147 1 nRF2401_WriteByte(InitData[14] & 0xFE); // 發(fā)送
148 1 Delay_Us(1);
149 1 CS = 0; //*P_IOB_Buffer &= ~CS;
150 1 CE = 1; //*P_IOB_Buffer |= CE;
151 1 }
152
153 //=============================================================
154 // 語法格式: void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
155 // 實現(xiàn)功能: 設置目標nRF2401A的地址
156 // 參數(shù): unsigned int *Address:地址數(shù)組
157 // unsigned int AddrByte:數(shù)組的長度
158 // 返回值: 無
159 //=============================================================
160 void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
161 {
162 1 unsigned int i;
163 1 for(i=0; i<AddrByte; i++)
164 1 {
165 2 AddrBuffer[i] = Address[i];
166 2 }
167 1 AddrByteCnt = AddrByte;
168 1 }
169
170 //=============================================================
171 // 語法格式: void nRF2401_WriteByte(unsigned int uiData)
172 // 實現(xiàn)功能: 向nRF2401A寫入一個字節(jié)數(shù)據(jù)
173 // 參數(shù): unsigned int uiData: 待寫入數(shù)據(jù)
174 // 返回值: 無
175 //=============================================================
176 void nRF2401_WriteByte(unsigned int uiData)
177 {
178 1 unsigned int i;
179 1 for(i=0; i<8; i++)
C51 COMPILER V8.17 NRF2401 02/02/2009 22:22:01 PAGE 4
180 1 {
181 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
182 2 Delay_Us(1);
183 2 if(uiData&0x80)
184 2 DATA = 1; //*P_IOB_Buffer |= DATA;
185 2 else
186 2 DATA = 0; //*P_IOB_Buffer &= ~DATA;
187 2 Delay_Us(1);
188 2 CLK1 = 1; //*P_IOB_Buffer |= CLK1;
189 2 Delay_Us(1);
190 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
191 2 uiData = uiData<<1;
192 2 }
193 1 }
194
195 //=============================================================
196 // 語法格式: void nRF2401_WriteWord(unsigned int uiData)
197 // 實現(xiàn)功能: 向nRF2401A寫入一個字數(shù)據(jù)
198 // 參數(shù): unsigned int uiData: 待寫入數(shù)據(jù)
199 // 返回值: 無
200 //=============================================================
201 void nRF2401_WriteWord(unsigned int uiData)
202 {
203 1 unsigned int i;
204 1 for(i=0; i<16; i++)
205 1 {
206 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
207 2 if(uiData&0x8000)
208 2 DATA = 1; //*P_IOB_Buffer |= DATA;
209 2 else
210 2 DATA = 0; //*P_IOB_Buffer &= ~DATA;
211 2 Delay_Us(1);
212 2 CLK1 = 1; //*P_IOB_Buffer |= CLK1;
213 2 Delay_Us(1);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -