📄 ptr8000.lst
字号:
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE PTR8000
OBJECT MODULE PLACED IN PTR8000.OBJ
COMPILER INVOKED BY: E:\Keil2008\C51\BIN\C51.EXE PTR8000.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <sst89x5x4.h>
2 #include <ABSACC.h>
3 #include <intrins.h>
4 #include <stdio.h>
5 #define uint unsigned int
6 #define uchar unsigned char
7
8 ////////////SPI指令
9 #define WC 0x00
10 #define RC 0x10
11 #define WTP 0x20
12 #define RTP 0x21
13 #define WTA 0x22
14 #define RTA 0x23
15 #define RRP 0x24
16
17 #define TxRxBuf_Len 32
18 unsigned char RxBuf[TxRxBuf_Len];
19 unsigned char TxBuf[TxRxBuf_Len]=
20 {
21
22 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
23 0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
24 0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
25 0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
26 };
27 //配置口定义//
28 sbit TX_EN=P1^0;
29 sbit TRX_CE=P3^2;
30 sbit PWR=P1^1;
31 sbit MISO=P1^6;
32 sbit MOSI=P1^5;
33 sbit SCK=P1^7;
34 sbit CSN=P1^4;
35 /////////////////////////////////////////////////////
36 sbit AM=P1^3;
37 sbit DR=P3^3;
38 sbit CD=P1^2;
39 ///////////////////////////////////////////////////////
40 //sbit DQ=P3^5 ;
41
42 //RF寄存器配置//
43 unsigned char idata RFConf[11]=
44 {
45 0x00, //配置命令//
46 0x4c, //CH_NO,配置频段在433MHZ 0100 1100
47 0x0C, //输出功率为10db,不重发,节电为正常模式 0000 1100
48 0x44, //地址宽度设置,为4字节 0100 0100
49 0x20,0x20, //接收发送有效数据长度为32字节
50 0xCC,0xCC,0xCC,0xCC, //接收地址
51 0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振 0101 1000
52 };
53 bit lcdbit;
54 code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
55
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 2
56 ///////////延时/////////////////
57 static void Delay(uchar n)
58 {
59 1 uint i;
60 1 while(n--)
61 1 for(i=0;i<80;i++);
62 1 }
63
64 void Spi_Init(void)
65 {
66 1 SPCR = 0x50; //SPI使能,主机模式,高位在先,4分频=11.0592/4
67 1
68 1 }
69
70 unsigned char SpiRead_Write(unsigned char DATA)
71 {
72 1 unsigned char b;
73 1 unsigned char temp;
74 1 Spi_Init();
75 1 SPDR = DATA; //写入要发送数据发送的同时也得到数据
76 1 do
77 1 {temp = SPSR&0x80;}
78 1
79 1 while(temp!=0x80);
80 1 SPSR = 0x00;
81 1 b = SPDR; //把得到数据保存
82 1 return b;
83 1 }
84
85
86 ///////////////
87 unsigned char SpiRead(void)
88 {
89 1 unsigned char temp;
90 1 SPDR = 0x00;
91 1 do {
92 2 temp = SPSR&0x80;
93 2 }
94 1 while(temp!=0x80);
95 1 // SPSR = 0x00;
96 1 return SPDR;
97 1 /* unsigned char i;
98 1 for (i=0;i<8;i++)
99 1 {
100 1 DATA_BUF=DATA_BUF<<1;
101 1 SCK=1;
102 1 if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
103 1 {
104 1 DATA_BUF|=BYTE_BIT0;
105 1 }
106 1 else
107 1 {
108 1 DATA_BUF&=~BYTE_BIT0;
109 1 }
110 1 SCK=0;
111 1 }
112 1 return DATA_BUF; */ //模拟SPI
113 1 }
114
115 void SpiWrite(unsigned char send)
116 {
117 1 unsigned char temp;
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 3
118 1 SPDR = send;
119 1 do {
120 2 temp = SPSR&0x80;
121 2 }
122 1 while(temp!=0x80);
123 1 // SPSR = 0x00;
124 1 /* unsigned char i;
125 1 DATA_BUF=send;
126 1 for (i=0;i<8;i++)
127 1 {
128 1 if (DATA7) //总是发送最高位
129 1 {
130 1 MOSI=1;
131 1 }
132 1 else
133 1 {
134 1 MOSI=0;
135 1 }
136 1 SCK=1;
137 1 DATA_BUF=DATA_BUF<<1;
138 1 SCK=0;
139 1 } */ //模拟SPI
140 1 }
141 ////////////////初始化nRF905///////////////////
142 void nRF905Init(void)
143 {
144 1 CSN=1; // Spi disable
145 1 SCK=0; // Spi clock line init low
146 1 DR=0; // Init DR for input
147 1 AM=0; // Init AM for input
148 1 CD=0; // Init CD for input
149 1 PWR=1; // nRF905 power on
150 1 TRX_CE=0; // Set nRF905 in standby mode
151 1 TX_EN=0; // set radio in Rx mode
152 1 }
153 ////////初始化寄存器
154 void Config905(void)
155 {
156 1 uchar i;
157 1 CSN=0; // Spi enable for write a spi command
158 1 //SpiWrite(WC); // Write config command写放配置命令
159 1 for (i=0;i<11;i++) // Write configration words 写放配置字
160 1 {
161 2 SpiWrite(RFConf[i]);
162 2 }
163 1 CSN=1; // Disable Spi
164 1 }
165 /////////////初始化
166 void Uart_Init(void)
167 {
168 1 TMOD = 0x20; //timer1 working mode 1
169 1 TL1 = 0xfd; //f7=9600 for 16mhz Fosc,and ...
170 1 TH1 = 0xfd; //...fd=19200 for 11.0592mhz Fosc
171 1 SCON = 0xd8; //uart mode 3,ren==1
172 1 PCON = 0x80; //smod=1
173 1 TR1 = 1; //start timer1
174 1 }
175
176
177 //////////////////////////////////发送数据//////////////////////////////////
178 void TxPacket(void)
179 {
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 4
180 1 uchar i;
181 1 //Config905();
182 1 CSN=0;
183 1 SpiWrite(WTP); // Write payload command
184 1 for (i=0;i<32;i++)
185 1 {
186 2 SpiWrite(TxBuf[i]); // Write 32 bytes Tx data
187 2 } // Spi enable for write a spi command
188 1 CSN=1;
189 1 Delay(1); // Spi disable
190 1 CSN=0; // Spi enable for write a spi command
191 1 SpiWrite(WTA); // Write address command
192 1 for (i=0;i<4;i++) // Write 4 bytes address
193 1 {
194 2 SpiWrite(TxAddress[i]);
195 2 }
196 1 CSN=1; // Spi disable
197 1 TRX_CE=1; // Set TRX_CE high,start Tx data transmission
198 1 Delay(1); // while (DR!=1);
199 1 TRX_CE=0; // Set TRX_CE low
200 1 }
201 ////////////////////////////////////////////////////
202 void SetTxMode(void)
203 {
204 1 TRX_CE=0;
205 1 TX_EN=1;
206 1 Delay(1); // delay for mode change(>=650us)
207 1 }
208 unsigned char CheckCD(void) //Pin->检查是否已存在 同频率载波
209 {
210 1 if (CD==1)
211 1 {
212 2 return 1;
213 2 }
214 1 else
215 1 {
216 2 return 0;
217 2 }
218 1 }
219 void TX(void)
220 {
221 1 SetTxMode(); // Set nRF905 in Tx mode
222 1 TxPacket(); // Send data by nRF905
223 1 CheckCD(); // 返回CD的当前电平
224 1
225 1 // SetRF_PA_PWR(unsigned char i); //设置发射功率
226 1 }
227
228 ////////////////////////////////////////////////////////////////////////////////////////
229
230
231 //////////////////////////////////接收数据//////////////////////////////////
232 void SetRxMode(void)
233 {
234 1 TX_EN=0;
235 1 TRX_CE=1;
236 1 Delay(1); // delay for mode change(>=650us)
237 1 }
238
239 unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready
240 {
241 1 if (DR=1&&TRX_CE==1&&TX_EN==0)
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 5
242 1 {
243 2 // Delay(50) ;
244 2 return 1;
245 2 }
246 1 else
247 1 {
248 2 return 0;
249 2 }
250 1 }
251 void RxPacket(void) //读数据
252 {
253 1 uchar i;
254 1 Delay(1);
255 1 TRX_CE=0; // Set nRF905 in standby mode
256 1 Delay(100);
257 1 CSN=0; // Spi enable for write a spi command
258 1 Delay(1);
259 1 SpiWrite(RRP);
260 1 // Delay(10000);
261 1 // Delay(10000); // Read payload command
262 1 for (i = 0 ;i < 32 ;i++)
263 1 {
264 2 // Delay(10000);
265 2 RxBuf[i]=SpiRead(); // Read data and save to buffer
266 2 // Delay(10000);
267 2
268 2 }
269 1 CSN=1;
270 1 Delay(10);
271 1 // Delay(10);
272 1 TRX_CE=1;
273 1 }
274 ////////////////
275 void RX(void)
276 {
277 1 SetRxMode(); // Set nRF905 in Rx mode
278 1 //Delay(10000);
279 1 while (CheckDR()==0);
280 1 //Delay(10000);
281 1 Delay(10);
282 1 RxPacket();
283 1 //Delay(10000); // Recive data by nRF905
284 1 Delay(10);
285 1 }
286
287 void R_S_Byte(uchar R_Byte)
288 {
289 1 SBUF = R_Byte;
290 1 while( TI == 0 ); //查询法
291 1 TI = 0;
292 1
293 1 }
294
295
296 void main(void)
297 {
298 1 Uart_Init();
299 1 nRF905Init();
300 1 Config905();
301 1 while(1)
302 1 {
303 2 TX();
C51 COMPILER V8.05a PTR8000 04/15/2008 22:00:51 PAGE 6
304 2 }
305 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 351 ----
CONSTANT SIZE = 8 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 ----
IDATA SIZE = 11 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -