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