📄 rx433.lst
字号:
C51 COMPILER V7.50 RX433 10/21/2008 13:22:32 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RX433
OBJECT MODULE PLACED IN rx433.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rx433.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************
2 无线接收的接收端程序:
3 将接收到的字符显示在串口。
4
5 ******************************************/
6
7 #include <Nordic\reg24e1.h>
8
9 struct RFConfig
10 {
11 unsigned char n;
12 unsigned char buf[15];
13 };
14
15 typedef struct RFConfig RFConfig;
16
17 #define UART_BUFFER_SIZE 4 //定义串口缓冲区大小 8 bytes
18
19 unsigned char UART_BUFFER[UART_BUFFER_SIZE+1];
20 unsigned char countt;
21
22 const RFConfig rxconf =
23 {
24 15,
25 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26 0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
27 };
28
29 /*
30 0x28 :通道2数据接收包的位数(此处为40bit即5个字节)
31
32 0x28 :通道1数据接收包的位数
33
34 0x00, 0x00, 0x00, 0x00, 0x00:CH2地址
35 发射地址在发射时再设置。
36 0x00, 0x12, 0x34, 0x56, 0x78:CH1地址(高于设定的地址宽度补0,即本行的第一个字节)
37
38 0x83=100000 11 前6位:四个字节(32位)地址宽度(CH1及CH2);
39 后2位:CRC使能且为16bit
40
41 0x6C=0 1 1 011 00 B7最高位:0表示一通道(1表示2通道)
42 B6 :1表示收发子系统处于ShockBurst模式(0表示直接模式)
43 B5 :1表示1Mbps(0为250kbps)
44 B4-B2 :011表示外部的晶振为16M
45 B1-B0 :00表示发射功率为-20dBm
46
47 0x04=0000010 0 B7-B1 :表示发射频率 和 CH1接收频率
48 B0 :0表示发射模式(1为接收模式)
49 */
50
51 //延时函数
52 void Delay100us(volatile unsigned char n)
53 {
54 1 unsigned char i;
55 1 while(n--)
C51 COMPILER V7.50 RX433 10/21/2008 13:22:32 PAGE 2
56 1 for(i=0;i<35;i++)
57 1 ;
58 1 }
59
60 //串口发送1Byte
61 void PutChar(char c)
62 {
63 1 while(!TI) //Wait until finished seri-port transmitting
64 1 ;
65 1 TI = 0; //Clear interrupt flag
66 1 SBUF = c; //sending a byte
67 1 }
68
69 //串口发送字符串
70 void PutString(const char *s,unsigned char strlen)
71 {
72 1 unsigned char k;
73 1 //EIE &= 0xF0;
74 1 for(k=1;k<=strlen;k++)
75 1 {
76 2 PutChar(*(s+k));
77 2 }
78 1 //EIE |= 0x0F;
79 1 }
80
81
82 unsigned char SpiReadWrite(unsigned char b)
83 {
84 1 EXIF &= ~0x20; // Clear SPI interrupt (EXIP.5=0)
85 1 SPI_DATA = b; // Move byte to send to SPI data register
86 1 while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting (测试EXIF.5的状态)
87 1 ;
88 1 return SPI_DATA;
89 1 }
90
91
92 void Receiver(void)
93 {
94 1 CE = 1; //进入接收模式
95 1
96 1
97 1 while(DR1 == 0) //DR1=0表示数据未准备好,等待
98 1 ;
99 1 T1 = ~T1;
100 1 CE = 0;
101 1 //countt = 0;
102 1
103 1 UART_BUFFER[0] = SpiReadWrite(0);
104 1
105 1 for(countt = 1;countt <= UART_BUFFER[0];countt++)
106 1 UART_BUFFER[countt] = SpiReadWrite(0);
107 1
108 1 }
109
110 //nRF24E1串口初始化
111 void UART_Init(void)
112 {
113 1 TH1 = 0xE6; // 9600@16MHz (when T1M=1 and SMOD=1)
114 1 CKCON |= 0x30; // T1M=1 (/4 timer clock)
115 1 PCON = 0x80; // SMOD=1 (double baud rate)
116 1 SCON = 0x52; // Serial mode1, enable receiver
117 1 TMOD = 0x20; // Timer1 8bit auto reload
C51 COMPILER V7.50 RX433 10/21/2008 13:22:32 PAGE 3
118 1 TR1 = 1; // Start timer1
119 1 P0_ALT |= 0x06;
120 1 P0_DIR = 0x02; // P0.1 (RxD) is input
121 1 }
122
123 //nRF24E1无线接收模块初始化
124 void Init(void)
125 {
126 1 unsigned char j;
127 1 PWR_UP=1;
128 1 Delay100us(30); // Wait > 3ms
129 1
130 1 SPICLK = 0; // Max SPI clock (XTAL/8)
131 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
132 1
133 1 CE = 0; // Configure Radio:
134 1 CS = 1;
135 1 Delay100us(0);
136 1 for(j=0;j<rxconf.n;j++)
137 1 {
138 2 SpiReadWrite(rxconf.buf[j]);
139 2 }
140 1 CS = 0;
141 1
142 1 }
143
144 void main(void)
145 {
146 1 UART_Init();
147 1 Init();
148 1
149 1
150 1 //CE=1; //进入接收模式
151 1 while(1)
152 1 {
153 2 Receiver();
154 2 PutString(UART_BUFFER,UART_BUFFER[0]);
155 2
156 2 }
157 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 210 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -