📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 11/11/2005 16:59:44 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND TABS(8)
line level source
1 #include <reg9e5.h>
2
3 #define INT8U unsigned char
4 #define INT16U unsigned int
5
6
7
8 #define WRC 0x00 //W_RF_CONFIG
9 #define RRC 0x10 //R_RF_CONFIG
10 #define WTP 0x20 //W_TX_PAYLOAD
11 #define RTP 0x21 //R_TX_PAYLOAD
12 #define WTA 0x22 //W_TX_ADDRESS
13 #define RTA 0x23 //R_TX_ADDRESS
14 #define RRP 0x24 //R_RX_PAYLOAD
15 #define RAD 0x40 //R_ADC_DATA
16 #define WAC 0x44 //W_ADC_CONFIG
17 #define RAC 0x46 //R_ADC_CONFIG
18 #define WTU 0x50 //W_TEST_UNLOCK (use with data A5)
19 #define WTR 0x52 //W_TEST_REGISTER
20 #define RTR 0x53 //R_TEST_REGISTER
21 #define CC 0x80 //CHANNEL_CONFIG
22 #define SAV 0xC0 //START_ADC_CONV
23 #define HFREQ 1 // 0=433MHz, 1=868/915MHz 19/08/2004 set 915mhz
24 #define POWER 3 // 0=min power...3 = max power
25
26 #define TurnBY() TRX_CE = 0;TXEN = 0
27
28
29 sbit LEDG =P0^6;
30 sbit LEDR =P0^5;
31
32
33 INT8U Nrf9e5Config[10] = {
34 0x28, //频道设置
35
36 0x0e, //自动重发关,发送节电模式关,输出功率10dB,915MHZ
37
38 0x44, //收发地址都为4字节
39
40 0x0a, //接收数据长度,10字节
41
42 0x0a, //发送数据长度,10字节
43
44 0xe7,
45 0xe7,
46 0xe7,
47 0xe7, //地址
48
49 0xdf //CRC开,16位校验,16M晶振,外部时钟使能500KHZ输出
50 };
51
52
53
54 INT8U timer[2];
55 INT8U T0LREL, T0HREL;
C51 COMPILER V7.08 MAIN 11/11/2005 16:59:44 PAGE 2
56
57
58 INT8U Txbuf[9]={"@P2good*"};
59
60
61
62 /*****************************************************************************************
63 //函数名:void Delay100us(INT8U n)
64 //输入:时间
65 //输出:无
66 //功能描述:廷时100us
67 /*****************************************************************************************/
68 void Delay100us(INT8U n)
69 {
70 1 INT8U i;
71 1 while(n--)
72 1 for(i=0;i<35;i++);
73 1 }
74
75 /*****************************************************************************************
76 //函数名:void delay(INT16U s)
77 //输入:时间
78 //输出:无
79 //功能描述:普通廷时
80 /*****************************************************************************************/
81 void delay(INT16U s)
82 {
83 1 INT16U i;
84 1 for(i=0; i<s; i++);
85 1 for(i=0; i<s; i++);
86 1 }
87
88 /*****************************************************************************************
89 //函数名:INT8U SpiReadWrite(INT8U b)
90 //输入:发送的数据
91 //输出:收到的数据
92 //功能描述:SPI发送接收一个字节
93 /*****************************************************************************************/
94 INT8U SpiReadWrite(INT8U b)
95 {
96 1 EXIF &= ~0x20; // Clear SPI interrupt
97 1 SPI_DATA = b; // Move byte to send to SPI data register
98 1 while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
99 1 return SPI_DATA;
100 1 }
101
102
103
104 /*****************************************************************************************
105 //函数名:InitTimer(void)
106 //输入:无
107 //输出:无
108 //功能描述:定时器0初始化
109 /*****************************************************************************************/
110 void InitTimer(void)
111 {
112 1 timer[0] = timer[1] = 0;
113 1
114 1 TR0 = 0;
115 1 TMOD &= ~0x03;
116 1 TMOD |= 0x01; // mode 1
117 1 CKCON |= 0x00; // T0M = 1 (/4 timer clock)
C51 COMPILER V7.08 MAIN 11/11/2005 16:59:44 PAGE 3
118 1 T0LREL = 0x60; // 1KHz tick...
119 1 T0HREL = 0xF0; // ... = 65536-16e6/(4*1e3) = F060h
120 1
121 1 TF0 = 0; // Clear any pending Timer0 interrupts
122 1 TR0 = 1; // Start Timer0
123 1 ET0 = 1; // Enable Timer0 interrupt
124 1 }
125
126
127
128 /*****************************************************************************************
129 //函数名:ResetTimer(INT8U n)
130 //输入:要复位的计时器
131 //输出:无
132 //功能描述:复位计时器
133 /*****************************************************************************************
134 void ResetTimer(INT8U n)
135 {
136 ET0 = 0; // Disable Timer0 interrupt
137 timer[n & 0x01] = 0; // Clear timer[n]
138 ET0 = 1; // Enable Timer0 interrupt
139 }
140
141
142
143 /*****************************************************************************************
144 //函数名:INT16U GetTimer(INT8U n)
145 //输入:要读的计时器
146 //输出:读出值
147 //功能描述:读计时器
148 /*****************************************************************************************
149 INT16U GetTimer(INT8U n)
150 {
151 INT16U tmp;
152 ET0 = 0; // Disable Timer0 interrupt
153 tmp = timer[n]; // read timer[n]
154 ET0 = 1; // Enable Timer0 interrupt
155 return tmp;
156 }
157 */
158
159
160
161 /*****************************************************************************************
162 //函数名:void InitCpu(void)
163 //输入:无
164 //输出:无
165 //功能描述:Cpu初始化
166 /*****************************************************************************************/
167 void InitCpu(void)
168 {
169 1 INT8U cklf;
170 1
171 1 SPICLK = 0; // Max SPI clock
172 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
173 1
174 1 // Switch to 16MHz clock:
175 1 RACSN = 0;
176 1 SpiReadWrite(RRC | 0x09);
177 1 cklf = SpiReadWrite(0) | 0x04;
178 1 RACSN = 1;
179 1 RACSN = 0;
C51 COMPILER V7.08 MAIN 11/11/2005 16:59:44 PAGE 4
180 1 SpiReadWrite(WRC | 0x09);
181 1 SpiReadWrite(cklf);
182 1 RACSN = 1;
183 1
184 1 P0_DIR=P0_DIR&0x1F; //led p0.6 p0.5 P0.7 output
185 1 LEDR=0;
186 1 LEDG=0;
187 1 P0_DIR |= 0x18; // P0.4 /3 is input
188 1
189 1 InitTimer();
190 1 EA = 1;
191 1 }
192
193 /*****************************************************************************************
194 //函数名:void Init9E5(void)
195 //输入:无
196 //输出:无
197 //功能描述:Nrf9e5初始化,这里我们配置成32位地址。
198 /*****************************************************************************************/
199 void Init9E5(void)
200 {
201 1 INT8U i;
202 1
203 1 TRX_CE=0;
204 1 TXEN=0; //配置模式
205 1
206 1 RACSN = 0;
207 1 SpiReadWrite(WRC);
208 1 for(i=0; i<10; i++)
209 1 {
210 2 SpiReadWrite(Nrf9e5Config[i]);
211 2 }
212 1
213 1 RACSN = 1;
214 1 }
215
216 /*****************************************************************************************
217 //函数名:void TransmitBytes(INT8U *pBuf)
218 //输入:发送的数据
219 //输出:无
220 //功能描述:发送发送缓冲区的数据
221 /*****************************************************************************************/
222 void TransmitBytes(INT8U *pBuf)
223 {
224 1 INT8U i;
225 1
226 1 RACSN = 0;
227 1 SpiReadWrite(WTP);
228 1 i = 3;
229 1 while(pBuf[i] != '\0')
230 1 {
231 2 SpiReadWrite(pBuf[i]);
232 2 i++;
233 2 }
234 1 RACSN = 1;
235 1
236 1 TXEN = 1;
237 1 TRX_CE = 1;
238 1 Delay100us(1);
239 1 TRX_CE = 0;
240 1 }
241
C51 COMPILER V7.08 MAIN 11/11/2005 16:59:44 PAGE 5
242
243
244
245
246 /******************************************************************************************
247 *******************************************************************************************
248 ************************************中断服务程序*******************************************
249 *******************************************************************************************
250 ******************************************************************************************/
251 void Timer0ISR (void) interrupt 1
252 {
253 1 EA = 0;
254 1 TH0 = T0HREL; // Reload Timer0 high byte
255 1 TL0 = T0LREL; // Reload Timer0 low byte
256 1 timer[0]++; // Increment timer[0]
257 1 timer[1]++;
258 1 EA =1;
259 1 }
260
261
262
263
264 /******************************************************************************************
265 *******************************************************************************************
266 ******************************************主程序********************************************
267 *******************************************************************************************
268 ******************************************************************************************/
269 main()
270 {
271 1
272 1 InitCpu();
273 1 delay(5000);
274 1
275 1 Init9E5();
276 1
277 1 LEDR = 1;
278 1 LEDG = 1;
279 1
280 1 while(1)
281 1 {
282 2 TransmitBytes(Txbuf);
283 2 LEDR = 0;
284 2 delay(20000);
285 2 LEDR = 1;
286 2 delay(50000);
287 2 delay(50000);
288 2 delay(50000);
289 2 }
290 1
291 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 294 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 3
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 + -