📄 my_nrf905.lst
字号:
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MY_NRF905
OBJECT MODULE PLACED IN my_nRF905.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE my_nRF905.C BROWSE DEBUG OBJECTEXTEND
line level source
1 //此程序没有加接收反回指令
2 //
3 #include <reg52.h>
4 #include <intrins.h>
5 #include <my_nRF905.h>
6
7 /************timer0定时中断***********/
8 void timer0(void) interrupt 1 using 0
9 {
10 1 TH0=timer0h;
11 1 TL0=timer0l;
12 1 delay_flag = 1;
13 1 TF0 = 0;
14 1 }
15
16 /********每单位时间延时50 us *******/
17 void delay(unsigned char n)
18 {
19 1 while(n>0)
20 1 {
21 2 TR0=ON; //启动T0定时
22 2 ET0=1;
23 2 TH0=timer0h; //T0定时15MS
24 2 TL0=timer0l;
25 2 delay_flag=False;
26 2 while(!delay_flag);
27 2 TR0=OFF; //启动T0定时
28 2 ET0=0;
29 2 n--;
30 2 }
31 1 }
32 /**********延时650子程序************/
33 void delay650(void)
34 {
35 1 unsigned char delay_num; //延时650us要运行的次数
36 1 delay_num = 180;
37 1 while(delay_num)
38 1 {
39 2 delay_num--;
40 2 _nop_();
41 2 }
42 1 }
43
44 /**********SPI发送一个字节*********/
45 void SpiWrite(unsigned char val)
46 {
47 1 unsigned char i, j;
48 1 for (i = 8; i > 0; i --)
49 1 {
50 2 j = val & 0x80;
51 2 if(j == 0x80)
52 2 {
53 3 MOSI = 1;
54 3 }
55 2 else
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 2
56 2 {
57 3 MOSI = 0;
58 3 }
59 2 SCK = ON;//上升沿打入数据
60 2 val <<= 1;
61 2 _nop_();
62 2 SCK = 0;//下降沿读入数据(首次为假动作)
63 2 _nop_();
64 2 }
65 1 }
66 /**********SPI读取一个字节*********/
67 unsigned char SpiRead(void)
68 {
69 1 unsigned char i,val = 0;
70 1 for (i = 8; i > 0; i--)
71 1 {
72 2 val <<= 1;
73 2 if(MISO)
74 2 {
75 3 val |= 0x01;
76 3 }
77 2
78 2 SCK = 1; //上升沿打入数据
79 2 _nop_();
80 2 SCK = 0; //下降沿读入数据(首次为假动作)
81 2 _nop_();
82 2 }
83 1 return val;
84 1 }
85
86 /****** Spi 写RF发送的数据*************/
87 void SpiWrite_some(unsigned char *m1,unsigned char m2)
88 {
89 1 unsigned char b;
90 1 SCK=0;
91 1 CSN=0;
92 1 SpiWrite(WTP);
93 1 SpiWrite(m2);
94 1 SpiWrite(0xFA);
95 1 SpiWrite(0XAF);
96 1 while(m2)
97 1 {
98 2 b=*m1;
99 2 SpiWrite(b);
100 2 m1++;
101 2 m2--;
102 2 }
103 1 CSN=1;
104 1 }
105
106 /*************配置nRF905函数 **********/
107 void Config905(void) using 0//配置nRF905
108 {
109 1 CSN = OFF; // Spi enable for write a spi command
110 1 SpiWrite(WC); // Write config command
111 1 for(count_p=0;count_p<10;count_p++)
112 1 {
113 2 SpiWrite(configbuf[count_p]);
114 2 }
115 1 CSN = ON; // Disable Spi
116 1 }
117 /*****RF写发送地址**********/
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 3
118 void Spi_tx_addr(void)
119 {
120 1 CSN=0;
121 1 SpiWrite(WTA);
122 1 SpiWrite(0x29); //0x28
123 1 SpiWrite(0x88); //0x55
124 1 SpiWrite(0x0c); //0x5a
125 1 SpiWrite(0x0c); //0xa5
126 1 CSN=1;
127 1 }
128
129 /************RF发送子程序*****************/
130 void RF_send (void)
131 {
132 1 TX_EN = ON;
133 1 TRX_CE = ON;
134 1 delay650();
135 1 delay650();
136 1 delay650();
137 1 delay650();
138 1 delay650();
139 1 while(!DR);
140 1 TRX_CE =0;
141 1 }
142
143 /********mRF905的初始化***********/
144 void InitnRF905(void)
145 {
146 1 CSN = ON;
147 1 SCK = OFF;
148 1 PWR_UP = ON;
149 1 TRX_CE = OFF;
150 1 TX_EN = OFF;
151 1 DR = OFF;
152 1 AM = OFF;
153 1 for(count_p=0;count_p<10;count_p++)
154 1 {
155 2 configbuf[count_p]=config_tab[count_p];
156 2 }
157 1 configbuf[0]=FreqBill[frequency];
158 1 if(frequency>=8)
159 1 {
160 2 configbuf[1]++;
161 2 }
162 1 }
163 /*****************/
164 void Sysinit(void)
165 {
166 1 P1=0xff;
167 1 P2=0xff;
168 1 P3=0xff;
169 1
170 1 IP=0x10; //打开INT0及Serial优先级,INT0的优先级大于Serial的优先级。
171 1 TMOD=0x21; //T0.T1工作于方式1 ,T1工作于方式2
172 1
173 1 TH1=250; //T1波特率 9600--22M
174 1 TL1=250;
175 1 TR1=ON; //启动T1定时
176 1 PCON=0x00; //波特率选择
177 1 SCON=0x50; //设置串口工作模式1,并打开允许接收.并收发中断,RI,TI = 0;
178 1
179 1 EA=1; //打开总中断使能
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 4
180 1 ES = 1; //关闭串口中断使能
181 1 EX0=0; //关闭INT0计数器的使能
182 1 EX1=0; //关闭INT1计数器的使能
183 1
184 1 TI = 0; //无发送中断标志
185 1 RI = 0; //无接收中断标志
186 1 IT0=1; //设置INT0的电平触发方式,负边沿触发
187 1 IT1=0; //设置INT0的电平触发方式,电平触发
188 1 }
189 /*********INT0中断子程序*************
190 表示RF中的数据接收完毕***********/
191 void intr0_int(void) interrupt 0 using 1
192 {
193 1 if(!write_flag)
194 1 {
195 2 write_flag=True;
196 2 TRX_CE=OFF;
197 2 TX_EN =OFF;
198 2
199 2 delay650();
200 2
201 2 if(!RFrec_flag)
202 2 {
203 3 CSN=0;
204 3 SpiWrite(RRP);
205 3 RFrec0_num = SpiRead();
206 3 for(count_p=0;count_p<RFrec0_num + 2;count_p++)
207 3 {
208 4 rxpack0_buf[count_p]=SpiRead();
209 4 }
210 3 CSN=1;
211 3 RFrec0_flag = 1;
212 3 }
213 2 else
214 2 {
215 3 CSN=0;
216 3 SpiWrite(RRP);
217 3 RFrec1_num = SpiRead();
218 3 for(count_p=0;count_p<RFrec1_num + 2;count_p++)
219 3 {
220 4 rxpack1_buf[count_p]=SpiRead();
221 4 }
222 3 CSN=1;
223 3 RFrec1_flag = 1;
224 3 }
225 2 }
226 1 }
227 /*********INT1中断子程序*************
228 RF中的数据地址正确**********/
229 void intr1_int(void) interrupt 2 using 3
230 {
231 1 AMflag=False;
232 1 if(!write_flag)
233 1 {
234 2 AMflag=True;
235 2 }
236 1 }
237
238 /**********串口接收中断*************/
239 void serial_int() interrupt 4 using 3
240 {
241 1 if(RI)
C51 COMPILER V7.50 MY_NRF905 11/14/2005 16:14:24 PAGE 5
242 1 {
243 2 RI=0;
244 2 rec_ok = 0;
245 2 if(!rec_flag1)
246 2 {
247 3 recv0_data = SBUF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -