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