📄 reader.lst
字号:
C51 COMPILER V8.02 READER 08/12/2008 00:06:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE READER
OBJECT MODULE PLACED IN reader.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE reader.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------------------
2 阅读器的防碰撞的初步程序
3 ---------------------------------------------------------*/
4 #include<stdio.h>
5 #include<c8051f020.h>
6
7 #define BYTE_BIT0 0X01
8 #define BYTE_BIT1 0X02
9 #define BYTE_BIT2 0X04
10 #define BYTE_BIT3 0X08
11 #define BYTE_BIT4 0X10
12 #define BYTE_BIT5 0X20
13 #define BYTE_BIT6 0X40
14 #define BYTE_BIT7 0X80
15
16 sbit CLK1 =P0^2;
17 sbit DATA=P0^3;
18
19 #define LED_ON 0xE3
20 #define LED_OFF 0X1c
21 #define PWR_UP1 0X10
22 #define PWR_UP0 0XEF
23 #define CS0 0XF7 //P4.3 1111 0111
24 #define CS1 0X08 //P4.3 0000 1000
25 #define CE1 0X04 //P4.2 0000 0100
26 #define CE0 0XFB //P4.2 1111 1011
27 #define DR1 0X02 //P4.1 0000 0010
28 #define DR0 0XFD //P4.1 1111 1101
29
30 #define TEST_2 0x8E //MSB D143~D136
31 #define TEST_1 0x08 // D135~D128
32 #define TEST_0 0x1C // D127~D120
33 #define DATA2_W 0x10 //0x10=2 字节 //频道2 发送/接收数据长度(单位:Bit)
34 #define DATA1_W 0x80 //0x80=16字节 //频道1 发送/接收数据长度(单位:Bit)
35 #define ADDR2_4 0x00
36 #define ADDR2_3 0x1c
37 #define ADDR2_2 0xcc
38 #define ADDR2_1 0xcc
39 #define ADDR2_0 0xcc
40 //频道1 接收地址 (当前模块地址) <- 只使用到频道1
41 #define ADDR1_4 0x00
42 #define ADDR1_3 0xcc
43 #define ADDR1_2 0xcc
44 #define ADDR1_1 0xcc
45 #define ADDR1_0 0xcc
46
47 #define ADDR_W 0x10 //0x10=2字节 //发送/接收地址宽度(单位:Bit)
48 #define CRC_L 0x1 //CRC模式 0:8位 1:16位
49 #define CRC_EN 0x1 //CRC校验 0:禁用 1:启用
50 #define RX2_EN 0x0 //双频道功能 0:禁用 1:启用
51 #define CM 0x1 //0:Direct mode 1:ShockBurst mode
52 #define RFDR_SB 0x0 //传输速率 0:250kbps 1:1Mbps (250kbps比1Mbps传输距离更远)
53 #define XO_F 0x3 //16M //nRF2401晶振频率
54 #define RF_PWR 0x3 //信号发射功率
55 #define RF_CH 0x2 //Channel RF 频率设置
C51 COMPILER V8.02 READER 08/12/2008 00:06:09 PAGE 2
56 //Channel = 2400MHz + RF_CH * 1.0MHz
57 #define RXEN 0x0 //0:Tx 1:Rx 阅读器最先处于发送状态;
58 //<将设置信息组合成每个字节的数据信息,此区域无需修改>
59 #define RFConfig_Bit0 TEST_2
60 #define RFConfig_Bit1 TEST_1
61 #define RFConfig_Bit2 TEST_0
62 #define RFConfig_Bit3 DATA2_W
63 #define RFConfig_Bit4 DATA1_W
64 #define RFConfig_Bit5 ADDR2_4
65 #define RFConfig_Bit6 ADDR2_3
66 #define RFConfig_Bit7 ADDR2_2
67 #define RFConfig_Bit8 ADDR2_1
68 #define RFConfig_Bit9 ADDR2_0
69 #define RFConfig_Bit10 ADDR1_4
70 #define RFConfig_Bit11 ADDR1_3
71 #define RFConfig_Bit12 ADDR1_2
72 #define RFConfig_Bit13 ADDR1_1
73 #define RFConfig_Bit14 ADDR1_0
74 #define RFConfig_Bit15 (ADDR_W<<2 | CRC_L<<1 | CRC_EN)
75 #define RFConfig_Bit16 (RX2_EN<<7 | CM<<6 | RFDR_SB<<5| XO_F<<2 |RF_PWR)
76 #define RFConfig_Bit17 (RF_CH<<1 | RXEN)
77 //通过宏定义将18字节的寄存器参数按照各个功能分解,以便于参数的调整
78 unsigned char code nRF2401_Conf[18] ={
79 RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
80 RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9,
81 RFConfig_Bit10, RFConfig_Bit11, RFConfig_Bit12, RFConfig_Bit13, RFConfig_Bit14,
82 RFConfig_Bit15, RFConfig_Bit16, RFConfig_Bit17
83 };
84 bdata unsigned char DATA_BUF; //用于ByteRead 和 ByteWrite函数
85 unsigned char Manchesterbuf[16];
86 #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0) //判断数据的最高位是否为1
87 #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0) //判断数据的最低位是否为1
88 #define SYSCLK 11059200 //系统时钟
89 #define BAUDRATE 9600 //系统波特率
90
91 void Delay100(void)
92 {
93 1 unsigned int i;
94 1 for(i=0;i<100;i++);
95 1 }
96 void Delay(void)
97 {
98 1 unsigned int i;
99 1 for(i=0;i<10;i++);
100 1 }
101
102
103 //系统设置
104 void SYSCLK_Init(void)
105 {
106 1 int i;
107 1 OSCXCN=0x67; //设置系统时钟
108 1 for(i=0;i<256;i++);
109 1 while(!(OSCXCN&0x80)); //等待外部时钟稳定
110 1 OSCICN=0x88;
111 1 XBR0=0X04; //设置串口引脚
112 1 XBR2=0X40; //交叉IO口使能
113 1 P6=P6&LED_ON; //LED灯亮
114 1 Delay100();
115 1 Delay100();
116 1 P6=P6|LED_OFF; //LED灯灭
117 1 }
C51 COMPILER V8.02 READER 08/12/2008 00:06:09 PAGE 3
118 //串口初始化函数
119 void UART0_Init(void)
120 {
121 1 SCON0=0X50; //方式1,8位UART,允许接收
122 1 TMOD=0X20; //定时器1,模式2,8位重装载
123 1 TH1=-(SYSCLK/BAUDRATE/16); //根据波特率设置定时器1的重载值;
124 1 TR1=1; //启动定时器1;
125 1 CKCON|=0X10; //定时器1使用SYSCLK为时基;
126 1 PCON|=0X80; //SMOD00=1;
127 1 }
128
129 //写每一位的数据。
130 void ByteWrite(unsigned char send)
131 {
132 1 unsigned char i;
133 1 DATA_BUF=send;
134 1 for (i=0;i<8;i++)
135 1 {
136 2 CLK1=0;
137 2 if (DATA7) //总是发送最高位
138 2 {
139 3 DATA=1;
140 3 }
141 2 else
142 2 {
143 3 DATA=0;
144 3 }
145 2 Delay();
146 2
147 2 CLK1=1; // CLK1=1; 0000 0001 P4^0;
148 2 Delay();
149 2 CLK1=0;
150 2 DATA_BUF=DATA_BUF<<1;
151 2 }
152 1 }
153 // <2401配置寄存器的写入方式>
154 void Config2401(void)
155 {
156 1 unsigned int i;
157 1 unsigned char variablel;
158 1 P4=P4&CS0;
159 1 P4=P4&CE0;
160 1 CLK1=0;
161 1 DATA=0;
162 1
163 1 P4=P4|PWR_UP1;
164 1 for(i=0;i<10;i++)
165 1 Delay100();
166 1 //从上电到进入配置模式需要3ms的延时
167 1 P4=P4|CS1;//使RF2401进入配置方式
168 1 Delay100();
169 1
170 1 for(i=3;i<18;i++)
171 1 {
172 2 variablel=nRF2401_Conf[i];
173 2 ByteWrite(variablel);
174 2 }
175 1 Delay100();
176 1 P4=P4&CS0; //CS置低使配置有效
177 1 Delay100();
178 1
179 1 }
C51 COMPILER V8.02 READER 08/12/2008 00:06:09 PAGE 4
180
181 //读每一位的数据;
182 unsigned char ByteRead(void)
183 {
184 1 unsigned char i;
185 1 for (i=0;i<8;i++)
186 1 {
187 2 DATA_BUF=DATA_BUF<<1;
188 2 CLK1=1; //P4=P4|0X01; // CLK1=1; 0000 0001
189 2 DATA=1; //设置为输入状态
190 2 if (DATA) //读取最高位,保存至最末尾,通过左移位完成整个字节
191 2 {
192 3 DATA_BUF|=BYTE_BIT0;
193 3 }
194 2 else
195 2 {
196 3 DATA_BUF&=~BYTE_BIT0;
197 3 }
198 2 CLK1=0;
199 2 Delay100();
200 2 }
201 1 return DATA_BUF;
202 1 }
203
204 //将读出的数据存储在RxBuf;
205 void nrf2401_Rxpack(unsigned char *RxBuf,unsigned int *x)
206 {
207 1 unsigned int i;
208 1 *x=0;
209 1 for(i=0;i<DATA1_W/8;i++)
210 1 {
211 2 *RxBuf=ByteRead();
212 2 RxBuf++;
213 2 *x=*x+1;
214 2 }
215 1 }
216
217 void SetTxMode(void)
218 {
219 1 //设置为配置模式
220 1 unsigned int i;
221 1 P4=P4&CS0;
222 1 P4=P4&CE0;
223 1 CLK1=0;
224 1 DATA=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -