📄 f.lst
字号:
C51 COMPILER V6.12 F 08/12/2008 19:52:33 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE F
OBJECT MODULE PLACED IN .\f.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\f.c DEBUG OBJECTEXTEND
stmt level source
1 //发送
2 /*************火箭发射点火系统***************************/
3 #include "reg52.h"
4 void mode1(void);
5 void mode2(void);
6 void mode3(void);
7 void mode4(void);
8 void mode5(void);
9 void Config905(void); //对PTR8000进行配置
10 unsigned int a[8],b[8];
11 unsigned int flag=0;
12 int i,t;
13 int flat=1;
14
15 sbit SCK = P2^5;
16 sbit MISO= P2^7;
17 sbit MOSI= P2^6;
18 sbit DR = P2^1; //数据就绪输出
19 sbit CSN = P2^4; //SPI使能
20 sbit PWR = P2^2; //Power Down 模式
21 sbit TX_EN= P2^3; //'1'发射模式 '0'接收模式
22 sbit TRX_CE=P2^0; //使能发射/接收模式
23
24 /**********************************/
25 //延时大约为1S左右
26 //以0.1S为单位计时
27 //即 定时时间 time=t*0.1 S
28 /*********************************/
29 void delay()
30 {
31 1 int i,j;
32 1 //for(k=0;k<t;k++)
33 1 for(i=0;i<500*5;i++)
34 1 for(j=0;j<100;j++);
35 1 }
36 /********************************/
37 //任意延时
38 /*******************************/
39 void Delay(int x)
40 {
41 1 unsigned int i;
42 1 for(i=0;i<x;i++);
43 1 }
44 /*******十进制数转二进制数*************************/
45 void fun2(int n)
46 {
47 1 unsigned int i,t=n;
48 1 for(i=0;i<8;i++)
49 1 {
50 2 a[i]=t%2;
51 2 t/=2;
52 2 }
53 1 }
54 /********************************/
55 //函数名:int fun22(int n)
C51 COMPILER V6.12 F 08/12/2008 19:52:33 PAGE 2
56 //功能:计算2的n 次方
57 /********************************/
58 int fun22(int n)
59 {
60 1 unsigned int i;
61 1 int f=1;
62 1 for(i=0;i<n;i++)
63 1 f*=2;
64 1 return f;
65 1 }
66 /**********将高位和低位进行交换*********************/
67 int fun21(void)
68 {
69 1 unsigned int i,t;
70 1 int s=0;
71 1 for(i=0;i<4;i++)
72 1 {
73 2 t=b[i]; //高低位进行交换
74 2 b[i]=b[7-i];
75 2 b[7-i]=t; // 在PTR800发送时先发高位,再发低位
76 2 }
77 1 for(i=0;i<8;i++)
78 1 s+=(b[i]*fun22(i)); //将二进制数转为十进制数
79 1 return s;
80 1 }
81
82 /*************************************/
83 void SpiWrite(int c) //SPI写 将单片机中数据写到ptr8000中
84 {
85 1 unsigned int i=8;
86 1 fun2(c); //将c转换为二进制数
87 1 for(i=0;i<8;i++)
88 1 {
89 2 Delay(10);
90 2 SCK=0;
91 2 MOSI=a[7-i]; //从高位到低位写
92 2 Delay(10);
93 2 SCK=1; ///sck给一个上升沿发送一位数据
94 2 Delay(10); //延时83us
95 2 SCK=0;
96 2 }
97 1 SCK=0;
98 1 }
99 /**************************************/
100 int SpiRead(void) //SPI读 从外部ptr8000中读入单片机
101 {
102 1 unsigned int i=8;
103 1 int ddata=0;
104 1 for(i=0;i<8;i++)
105 1 {
106 2
107 2 SCK=1 ;
108 2 if(MISO) b[i]=1;
109 2 else b[i]=0;
110 2
111 2 SCK=0;
112 2 Delay(20);
113 2 }
114 1 SCK=0;
115 1 Delay(20);
116 1 ddata=fun21(); //data十进制数
117 1 return ddata;
C51 COMPILER V6.12 F 08/12/2008 19:52:33 PAGE 3
118 1 }
119 /*******接收子程序********************************/
120 int PtrRead() //PTR8000读
121 {
122 1 int key;
123 1 Config905();
124 1
125 1 PWR=1;
126 1 TX_EN=0;
127 1 TRX_CE=1; //接收
128 1
129 1 while(!DR) ; //等待接收
130 1 //Delay(2000);
131 1 while(DR) //接收数据准备就绪
132 1 //if(DR)
133 1 {
134 2 PWR=1; //进入待机模式
135 2 TRX_CE=0;
136 2 TX_EN=0;
137 2 CSN=0; //片选
138 2 SpiWrite(0x24); //写读rx(接收)有效数据(配置)
139 2 {
140 3 key=SpiRead();
141 3 Delay(20);
142 3 }
143 2 CSN=1;
144 2 Delay(20);
145 2 return key;
146 2 }
147 1 //else flat=1;
148 1 }
149 /**********************************/
150 void Config905(void) //配置nRF905
151 { CSN=1;
152 1 SCK=0;
153 1 PWR=1;
154 1 TRX_CE=0;
155 1 TX_EN=0;
156 1 Delay(2);
157 1 CSN=0;
158 1 SpiWrite( 0x00); //配置命令//
159 1 SpiWrite( 0x4C); //CH_NO,配置频段在430MHZ 4c
160 1 SpiWrite( 0x0C); //输出功率为10db,不重发,节电为正常模式 0c
161 1 SpiWrite( 0x44); //地址宽度设置,为4字节
162 1 SpiWrite( 0x01);
163 1 SpiWrite( 0x01); //接收发送有效数据长度为1字节
164 1 SpiWrite( 0x19); //接收地址 4字节
165 1 SpiWrite( 0x85);
166 1 SpiWrite( 0x06);
167 1 SpiWrite( 0x27);
168 1 SpiWrite( 0x58); //16位CRC校验,CRC充许,16M晶振
169 1 CSN=1;
170 1 }
171 /***********************************/
172 void TxPacket(int ddata) //数据包发送
173 {
174 1 int x=ddata;
175 1 PWR=1; //待机和SPI编程模式
176 1 TRX_CE=0;
177 1 TX_EN=1;
178 1 CSN=0;
179 1 SpiWrite(0x22); //写发送地址,后面跟4字节地址//
C51 COMPILER V6.12 F 08/12/2008 19:52:33 PAGE 4
180 1 SpiWrite(0x19); //0x19
181 1 SpiWrite(0x85); //0x85
182 1 SpiWrite(0x06); //0x06
183 1 SpiWrite(0x27); //0x27
184 1 CSN=1;
185 1 Delay(20); //延时1/6ms
186 1 CSN=0;
187 1 SpiWrite(0x20); //写发送数据命令,后面跟一字节数据//
188 1 SpiWrite(x); //发送到数据
189 1 CSN=1;
190 1 Delay(20);
191 1 TRX_CE=1; //使能发射模式//
192 1 Delay(255); //等带发送完成//延时2ms
193 1 TRX_CE=0;
194 1 }
195 /*******主函数******************************/
196 //先发5个1,再接收1个2,
197 //
198 /*********************************************/
199 void main()
200 {int key,i=0;
201 1 P1=0xff;
202 1 Config905(); //P1口初始化
203 1 while(1)
204 1 {
205 2 if(P0==0x01)
206 2 {
207 3 for(i=0;i<1;i++) //while(flat) //
-一直循环查询
208 3 {
209 4 TxPacket(1); //发5个1出去
210 4 }
211 3 key=PtrRead();
212 3 if(key==2)
213 3 {
214 4 // for(i=0;1<3;i++)
215 4 // {
216 4 P1=~P1;
217 4 Delay(20000);
218 4 P1=0xff;
219 4 // key=0;
220 4 // }
221 4 }
222 3 // P1=0;
223 3 //模式1
224 3 //while(1)
225 3
226 3 /* */
227 3 }
228 2
229 2 }
230 1 }
231
232
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 696 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 40 14
C51 COMPILER V6.12 F 08/12/2008 19:52:33 PAGE 5
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 + -