📄 nrf24l01.lst
字号:
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/22/08 15:54:43 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 "display.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
14 unsigned char bdata sta;
15 sbit RX_DR = sta^6;
16 sbit TX_DS = sta^5;
17 sbit MAX_RT = sta^4;
18
19 unsigned char sn;
20 char r_buff[2];
21 float TA=0.0;
22 bit flag=0;
23
24 unsigned char config_r[1]={0x0F};
25 unsigned char en_aa[1]={0x01};
26 unsigned char en_rxaddr[1]={0x01};
27 unsigned char rf_ch[1]={40};
28 unsigned char rf_setup[1]={0x0f};
29 unsigned char rx_pw_p0[1]={2};//there is 1 byte in RX payload in data pipe 0;
30
31 void init_io(void)
32 {
33 1 CE=0;
34 1 CSN=1;
35 1 SCK=0;
36 1 }
37
38 void init_int0(void)
39 {
40 1 EA=1;
41 1 EX0=1;
42 1 IT0=0;
43 1 }
44
45 unsigned char SPI_R(unsigned char cn,unsigned char n,char *p)
46 {
47 1 unsigned char i,j;
48 1
49 1 CSN=0;
50 1 for(i=0;i<8;i++)
51 1 {
52 2 MOSI = (cn & 0x80); // output 'byte', MSB to MOSI
53 2 cn = (cn << 1);
54 2 sn = (sn<<1); // shift next bit into MSB..
55 2 SCK = 1; // Set SCK high..
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/22/08 15:54:43 PAGE 2
56 2 sn |= MISO; // capture current MISO bit
57 2 SCK = 0; // ..then set SCK low again
58 2 }
59 1 for(j=0;j<n;j++)
60 1 {
61 2 for(i=0;i<8;i++)
62 2 {
63 3 *p =(*p<<1);
64 3 SCK=1;
65 3 *p |= MISO;
66 3 SCK=0;
67 3 }
68 2 p++;
69 2 }
70 1 CSN=1;
71 1 return(sn);
72 1 }
73
74 unsigned char SPI_W(unsigned char cn,unsigned char n,char *p)
75 {
76 1 unsigned char i,j;
77 1 CSN=0;
78 1 for(i=0;i<8;i++)
79 1 {
80 2 MOSI = (cn & 0x80); // output 'byte', MSB to MOSI
81 2 cn = (cn << 1);
82 2 sn = (sn<<1); // shift next bit into MSB..
83 2 SCK = 1; // Set SCK high..
84 2 sn |= MISO; // capture current MISO bit
85 2 SCK = 0; // ..then set SCK low again
86 2 }
87 1 for(j=0;j<n;j++)/*先写低字节的,再写高字节的*/
88 1 {
89 2 for(i=0;i<8;i++)
90 2 {
91 3 MOSI= *p&0x80;
92 3 *p<<=1;
93 3 SCK=1;
94 3 _nop_();
95 3 SCK=0;
96 3 _nop_();
97 3 }
98 2 p++;
99 2 }
100 1 CSN=1;
101 1 return(sn);
102 1 }
103
104 void ISR_int0(void) interrupt 0 using 1
105 {
106 1 green=0;
107 1 CE=0;
108 1 sta=SPI_R(NOP,0,r_buff);
109 1 if(RX_DR)
110 1 {
111 2 flag=1;
112 2 }
113 1 SPI_W(WRITE_REG + STATUS,1,&sta);//clear RX_DS or TX_DS or MAX_RT interrupt flag
114 1 }
115
116 void RX(void)
117 {
C51 COMPILER V3.20, SN-50203013 NRF24L01 04/22/08 15:54:43 PAGE 3
118 1 CE=0;
119 1 SPI_W(WRITE_REG + CONFIG,1,config_r);
120 1 SPI_W(WRITE_REG + EN_AA,1,en_aa);
121 1 SPI_W(WRITE_REG + EN_RXADDR,1,en_rxaddr);
122 1 SPI_W(WRITE_REG + RF_CH,1,rf_ch);
123 1 SPI_W(WRITE_REG + RF_SETUP,1,rf_setup);
124 1 SPI_W(WRITE_REG + RX_PW_P0,1,rx_pw_p0);
125 1 CE=1;
126 1 }
127
128 void main(void)
129 {
130 1 int temp,temp1;
131 1
132 1 init_io();
133 1 init_int0();
134 1 RX();
135 1 while(1)
136 1 {
137 2 if(flag)
138 2 {
139 3 flag=0;
140 3 SPI_R(RD_RX_PLOAD,2,r_buff);
141 3 green=1;
142 3 CE=1;/*把数据取出来后立即进入接收状态*/
143 3 temp=(int)r_buff[0]<<4;
144 3 temp1=(int)r_buff[1]>>4;
145 3 TA=(float)temp+(float)temp1;
146 3 TA=TA/16;
147 3 display(TA,1);//display only when received payload
148 3 }
149 2 }
150 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 952 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 56
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -