📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 11/17/2006 16:38:05 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
line level source
1 #include <Nordic\reg24e1.h>
2 #include <stdlib.h>
3 //include "ISD51.H"
4
5
6 sbit LEDR = P0^4;
7 sbit LEDG = P0^5;
8 sbit KEYR = P0^3;
9 sbit KEYT = P0^6;
10
11 #define int8u unsigned char
12 #define int16u unsigned int
13 #define FRESELE 0x28
14 #define ADDR_INDEX 8 // Index to default address bytes in RxTxConf.buf
15 #define ADDR_COUNT 4 // Number of address bytes
16
17
18
19
20 struct UARTBUF
21 {
22 int8u Buf[20];
23 int8u Counter;
24 int8u NewData;
25 }Rx;
26
27 int8u RFConfig[15] ={
28 0x08, //接收频道二有效数据长度
29
30 0x08, //接收频道一有效数据长度
31
32 0x00,0x00,0x00,0x00,0x00, //接收频道二地址
33
34 0x00,0xcd,0xef,0x12,0xaa, //接收频道一地址
35
36 0x83, //32位地址,16位CRC,使能CRC
37 //bit7~2:ADDR_W,最大40位
38
39 //bit1:CRC_L
40 //Logic 0: 8 bit CRC
41 //Logic 1: 16 bit CRC
42
43
44 //BIT0:CRC_EN
45 //Logic 0: On-chip CRC generation/checking disabled
46 //Logic 1: On-chip CRC generation/checking enabled
47
48
49 0x4f, //ShockBurst模式,250 kbps,16M晶振,0dBm最大功率
50
51 //Bit 15:RX2_EN
52 //Logic 0: One channel receive
53 //Logic 1: Two channels receive
54
55 //Bit 14:
C51 COMPILER V7.08 MAIN 11/17/2006 16:38:05 PAGE 2
56 //Communication Mode:
57 //Logic 0: nRF2401 operates in direct mode.
58 //Logic 1: nRF2401 operates in ShockBurst. mode
59
60 //Bit 13:
61 //RF Data Rate:
62 //Logic 0: 250 kbps
63 //Logic 1: 1 Mbps
64
65 //Bit 12-10:Selects the nRF2401 crystal frequency to be used:
66 // D12 D11 D10 Crystal Frequency [MHz]
67 // 0 0 0 4
68 // 0 0 1 8
69 // 0 1 0 12
70 // 0 1 1 16
71 // 1 0 0 20
72
73 //Bit 9-8:RF_PWR: Sets nRF2401 RF output power in transmit mode:
74 // D9 D8 P [dBm]
75 // 0 0 -20
76 // 0 1 -10
77 // 1 0 -5
78 // 1 1 0
79
80
81
82 0x08 //2400+4*1=2404MHZ=2.404G,发送模式
83
84 //Bit 7 – 1:RF_CH#: Sets the frequency channel the nRF2401 operates on.
85 //Channelrf = 2400MHZ + RF_CH# * 1.0MHZ
86
87 //Bit 0:Set active mode:
88 //Logic 0: transmit mode
89 //Logic 1: receive mode
90 };
91
92 int8u rfAddress[4] = { 0xcd, 0xef, 0x12, 0xaa };//地址
93
94 int8u timer[2]; //超时计数器
95 int8u t0lrel, t0hrel; //定时器初值
96 int8u TxBuf[8]; //发送绶冲区
97
98
99
100
101
102 void ADCINIT(void)
103 {
104 1 ADCSTATIC&=0X1C;
105 1 ADCSTATIC|=0X03;
106 1 ADCCON=0X32;
107 1 }
108
109 /*****************************************************************************************
110 //函数名:void Delay100us(int8u n)
111 //输入:时间
112 //输出:无
113 //功能描述:廷时
114 /*****************************************************************************************/
115 void Delay100us(int8u n)
116 {
117 1 int8u i;
C51 COMPILER V7.08 MAIN 11/17/2006 16:38:05 PAGE 3
118 1 while(n--)
119 1 for(i=0;i<35;i++);
120 1 }
121
122 /*****************************************************************************************
123 //函数名:delay(unsigned int s)
124 //输入:时间
125 //输出:无
126 //功能描述:普通廷时
127 /*****************************************************************************************/
128 delay(unsigned int s)
129 {
130 1 unsigned int i;
131 1 for(i=0; i<s; i++);
132 1 for(i=0; i<s; i++);
133 1 for(i=0; i<s; i++);
134 1 }
135 /*****************************************************************************************
136 //函数名:int8u SpiReadWrite(int8u b)
137 //输入:发送的数据
138 //输出:收到的数据
139 //功能描述:SPI发送接收一个字节
140 /*****************************************************************************************/
141 int8u SpiReadWrite(int8u b)
142 {
143 1 EXIF &= ~0x20; // Clear SPI interrupt
144 1 SPI_DATA = b; // Move byte to send to SPI data register
145 1 while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
146 1 return SPI_DATA;
147 1 }
148
149 /*****************************************************************************************
150 //函数名:TimerInit()
151 //输入:无
152 //输出:无
153 //功能描述:定时器0初始化
154 /*****************************************************************************************/
155 void TimerInit(void)
156 {
157 1 timer[0] = timer[1] = 0;
158 1
159 1 TR0 = 0;
160 1 TMOD &= ~0x03;
161 1 TMOD |= 0x01; // mode 1
162 1 CKCON |= 0x08; // T0M = 1 (/4 timer clock)
163 1 t0lrel = 0x60; // 1KHz tick...
164 1 t0hrel = 0xF0; // ... = 65536-16e6/(4*1e3) = F060h
165 1 TF0 = 0; // Clear any pending Timer0 interrupts
166 1 TR0 = 1; // Start Timer0
167 1 ET0 = 1; // Enable Timer0 interrupt
168 1 }
169
170 /*****************************************************************************************
171 //函数名:ResetTimer(int8u n)
172 //输入:要复位的计时器
173 //输出:无
174 //功能描述:复位计时器
175 /*****************************************************************************************/
176 void ResetTimer(int8u n)
177 {
178 1 ET0 = 0; // Disable Timer0 interrupt
179 1 timer[n & 0x01] = 0; // Clear timer[n]
C51 COMPILER V7.08 MAIN 11/17/2006 16:38:05 PAGE 4
180 1 ET0 = 1; // Enable Timer0 interrupt
181 1 }
182 /*****************************************************************************************
183 //函数名:ReadTimer()
184 //输入:要读的计时器
185 //输出:读出值
186 //功能描述:读计时器
187 /*****************************************************************************************/
188 unsigned ReadTimer(int8u n)
189 {
190 1 unsigned tmp;
191 1 ET0 = 0; // Disable Timer0 interrupt
192 1 tmp = timer[n]; // Clear timer[n]
193 1 ET0 = 1; // Enable Timer0 interrupt
194 1 return tmp;
195 1 }
196
197 /*****************************************************************************************
198 //函数名:SciInit()
199 //输入:无
200 //输出:无
201 //功能描述:串口初始化
202 /*****************************************************************************************/
203 void SciInit(void)
204 {
205 1 TH1 = 0xcc; // 4800@16MHz (when T1M=1 and SMOD=1)
206 1 CKCON |= 0x10; // T1M=1 (/4 timer clock)
207 1 PCON = 0x80; // SMOD=1 (double baud rate)
208 1 SCON = 0x52; // Serial mode1, enable receiver
209 1 TMOD = 0x20; // Timer1 8bit auto reload
210 1 TR1 = 1; // Start timer1
211 1 P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
212 1 P0_DIR &= 0x0F; //led p0.4 p0.5 output
213 1 P0_DIR |= 0x48; // P0.3 is input p0.6 input
214 1 ES = 0;
215 1 EA=1;
216 1 }
217
218
219 /*****************************************************************************************
220 //函数名:SetTxMode()
221 //输入:无
222 //输出:无
223 //功能描述:转为发送模式
224 /*****************************************************************************************/
225 void SetRxMode(void)
226 {
227 1 int8u ch;
228 1 CS = 1;
229 1 Delay100us(0);
230 1 ch = FRESELE << 1;
231 1 SpiReadWrite(ch | 0x01);
232 1 CS = 0;
233 1 }
234 /*****************************************************************************************
235 //函数名:SetRxMode()
236 //输入:无
237 //输出:无
238 //功能描述:转为接收模式
239 /*****************************************************************************************/
240 void SetTxMode(void)
241 {
C51 COMPILER V7.08 MAIN 11/17/2006 16:38:05 PAGE 5
242 1 int8u ch;
243 1 CS = 1;
244 1 Delay100us(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -