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