📄 nrf24l01.lst
字号:
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/23/08 17:20:23 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE NRF24L01
OBJECT MODULE PLACED IN NRF24L01.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE NRF24L01.C DB OE SMALL ROM(LARGE)
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include "nRF24L01.h"
4 #include "i2c.h"
5
6 sbit CE=P1^7;
7 sbit CSN=P1^4;
8 sbit SCK=P1^5;
9 sbit MOSI=P3^1;
10 sbit MISO=P3^0;
11 sbit IRQ=P3^2;
12 sbit green=P1^6;
13 sbit red=P3^4;
14
15 unsigned char bdata sta;
16 sbit RX_DR = sta^6;
17 sbit TX_DS = sta^5;
18 sbit MAX_RT = sta^4;
19
20 unsigned char sn;
21 char t_buff[1]={0};
22 char r_buff[1]={0};
23 bit flag=0;
24
25 unsigned char config_t[1]={0x0e};
26 unsigned char en_aa[1]={0x01};
27 unsigned char en_rxaddr[1]={0x01};
28 unsigned char setup_retr[1]={0x1a};//auto re_transmit delay is 586us;auto retransmit count is 10;
29 unsigned char rf_ch[1]={40};
30 unsigned char rf_setup[1]={0x0f};
31
32 void init_io(void)
33 {
34 1 CE=0;
35 1 CSN=1;
36 1 SCK=0;
37 1 }
38
39 void init_int0(void)
40 {
41 1 EA=1;
42 1 EX0=1;
43 1 IT0=0;
44 1 }
45
46 void delay_ms(unsigned int x)
47 {
48 1 unsigned int i,j;
49 1 for(i=0;i<x;i++)
50 1 {
51 2 j=108;
52 2 ;
53 2 while(j--);
54 2 }
55 1 }
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/23/08 17:20:23 PAGE 2
56
57 unsigned char SPI_R(unsigned char cn,unsigned char n,char *p)
58 {
59 1 unsigned char i,j;
60 1
61 1 CSN=0;
62 1 for(i=0;i<8;i++)
63 1 {
64 2 MOSI = (cn & 0x80); // output 'byte', MSB to MOSI
65 2 cn = (cn << 1);
66 2 sn = (sn<<1); // shift next bit into MSB..
67 2 SCK = 1; // Set SCK high..
68 2 sn |= MISO; // capture current MISO bit
69 2 SCK = 0; // ..then set SCK low again
70 2 }
71 1 for(j=0;j<n;j++)
72 1 {
73 2 for(i=0;i<8;i++)
74 2 {
75 3 *p =(*p<<1);
76 3 SCK=1;
77 3 *p |= MISO;
78 3 SCK=0;
79 3 }
80 2 p++;
81 2 }
82 1 CSN=1;
83 1 return(sn);
84 1 }
85
86 unsigned char SPI_W(unsigned char cn,unsigned char n,char *p)
87 {
88 1 unsigned char i,j;
89 1 CSN=0;
90 1 for(i=0;i<8;i++)
91 1 {
92 2 MOSI = (cn & 0x80); // output 'byte', MSB to MOSI
93 2 cn = (cn << 1);
94 2 sn = (sn<<1); // shift next bit into MSB..
95 2 SCK = 1; // Set SCK high..
96 2 sn |= MISO; // capture current MISO bit
97 2 SCK = 0; // ..then set SCK low again
98 2 }
99 1 for(j=0;j<n;j++)/*先写低字节的,再写高字节的*/
100 1 {
101 2 for(i=0;i<8;i++)
102 2 {
103 3 MOSI= *p&0x80;
104 3 *p<<=1;
105 3 SCK=1;
106 3 _nop_();
107 3 SCK=0;
108 3 _nop_();
109 3 }
110 2 p++;
111 2 }
112 1 CSN=1;
113 1 return(sn);
114 1 }
115
116 void ISR_int0(void) interrupt 0 using 1
117 {
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/23/08 17:20:23 PAGE 3
118 1 CE=0;
119 1 sta=SPI_R(NOP,0,r_buff);
120 1 if(TX_DS)
121 1 {
122 2 green=0;
123 2 red=1;
124 2 }
125 1 if(MAX_RT)
126 1 {
127 2 red=0;
128 2 green=1;
129 2 }
130 1 SPI_W(WRITE_REG + STATUS,1,&sta);//clear RX_DS or TX_DS or MAX_RT interrupt flag
131 1 flag=1;
132 1 }
133
134 void main(void)
135 {
136 1 int temp,temp1;
137 1 unsigned char SLAdd_R,SLAdd_W;
138 1 unsigned char re_buff[2]={0x01,0x60};
139 1 unsigned char pi_buff[1]={0x00};
140 1 unsigned char r_buff[2];
141 1
142 1 SLAdd_R=0x95;
143 1 SLAdd_W=0X94;
144 1
145 1 init_io();
146 1 init_int0();
147 1
148 1 SPI_W(WRITE_REG + CONFIG,1,config_t);
149 1 SPI_W(WRITE_REG + EN_AA,1,en_aa);
150 1 SPI_W(WRITE_REG + EN_RXADDR,1,en_rxaddr);
151 1 SPI_W(WRITE_REG + SETUP_RETR,1,setup_retr);
152 1 SPI_W(WRITE_REG + RF_CH,1,rf_ch);
153 1 SPI_W(WRITE_REG + RF_SETUP,1,rf_setup);
154 1
155 1 sendnbyte(&SLAdd_W,2,re_buff);
156 1 stop();
157 1 sendnbyte(&SLAdd_W,1,pi_buff);
158 1 delay_ms(240);
159 1 recnbyte(&SLAdd_R,2,r_buff);
160 1
161 1 loop:
162 1 {
163 2 SPI_W(WR_TX_PLOAD,2,r_buff);
164 2 CE=1;
165 2 while(1)
166 2 {
167 3 sendnbyte(&SLAdd_W,2,re_buff);
168 3 stop();
169 3 sendnbyte(&SLAdd_W,1,pi_buff);
170 3 delay_ms(240);
171 3 recnbyte(&SLAdd_R,2,r_buff);
172 3 if(flag)
173 3 {
174 4 flag=0;
175 4 red=1;
176 4 green=1;
177 4 goto loop;
178 4 }
179 3 }
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/23/08 17:20:23 PAGE 4
180 2 }
181 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 949 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 36
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -