📄 fasong.lst
字号:
C51 COMPILER V7.06 FASONG 09/12/2009 14:21:20 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE FASONG
OBJECT MODULE PLACED IN Fasong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Fasong.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <ABSACC.h>
3 #include <intrins.h>
4 #include <stdio.h>
5 //--------------------------------------------------------------------------------------------------------
---------
6 #define uint unsigned int
7 #define uchar unsigned char
8 //--------------------------------------------------------------------------------------------------------
---------
9 #define BYTE_BIT0 0x01
10 #define BYTE_BIT7 0x80
11 //--------------------------------------------------------------------------------------------------------
---------
12 bdata unsigned char DATA_BUF;
13 #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
14 #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
15 sbit flag =DATA_BUF^7;
16 sbit flag1 =DATA_BUF^0;
17 //---------------------------------------------------发送数据缓冲区---------------------------------------
-----------
18 #define TxRxBuf_Len 4
19 unsigned char TxRxBuf[TxRxBuf_Len]={0x29,0x30,0x31,0x32,};
20 code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
21 char tf;
22 //----------------------------------------NRF905工作模式控制端口------------------------------------------
-------------
23 sbit TXEN=P1^4;
24 sbit TRX_CE=P3^2;
25 sbit PWR=P1^3;
26 //----------------------------------------LED显示端口---------------------------------------------------
27 sbit LED=P3^5;
28 //----------------------------------------NRF905 数据交换端口---------------------------------------------
-------
29 sbit MISO=P1^6;
30 sbit MOSI=P1^1;
31 sbit SCK=P1^5;
32 sbit CSN=P1^0;
33 //----------------------------------------nrf905状态端口--------------------------------------------------
--------
34 sbit AM=P1^7;
35 sbit DR=P3^3;
36 sbit CD=P1^2;
37 //--------------------------------------------------------------------------------------------------------
--------
38 //----------------------------------------按键端口-------------------------------------------------------
39 sbit KEY=P3^4;
40 //----------------------------------------nrf905控制指令-------------------------------------------
41 #define WC 0x00
42 #define RC 0x10
43 #define WTP 0x20
44 #define RTP 0x21
45 #define WTA 0x22
46 #define RTA 0x23
47 #define RRP 0x24
C51 COMPILER V7.06 FASONG 09/12/2009 14:21:20 PAGE 2
48 //------------------------------------------------NRF905寄存器配置----------------------------------------
---------
49 unsigned char idata RFConf[11]=
50 {
51 0x00, //配置命令//
52 0x4c, //CH_NO,配置频段在430MHZ
53 0x0c, //输出功率为10db,不重发,节电为正常模式
54 0x44, //地址宽度设置,为4字节
55 0x04,0x04, //接收发送有效数据长度为4字节
56 0xCC,0xCC,0xCC,0xCC, //接收地址
57 0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
58 };
59 //================================================延时====================================================
-=======
60 void nrf905_Delay(int n)
61 {
62 1 uint i;
63 1 while(n--)
64 1 for(i=0;i<80;i++);
65 1 }
66 //=================================================SPI读函数==============================================
-=========
67 unsigned char SpiRead(void)
68 {
69 1 unsigned char j;
70 1 for (j=0;j<8;j++)
71 1 {
72 2 DATA_BUF=DATA_BUF<<1;
73 2 SCK=1;
74 2 if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
75 2 {
76 3 DATA_BUF|=BYTE_BIT0;
77 3 }
78 2 else
79 2 {
80 3 DATA_BUF&=~BYTE_BIT0;
81 3 }
82 2 SCK=0;
83 2 }
84 1 return DATA_BUF;
85 1 }
86 //===========================================SPI写函数====================================================
-===========
87 void SpiWrite(unsigned char send)
88 {
89 1 unsigned char i;
90 1 DATA_BUF=send;
91 1 for (i=0;i<8;i++)
92 1 {
93 2 if (DATA7) //总是发送最高位
94 2 {
95 3 MOSI=1;
96 3 }
97 2 else
98 2 {
99 3 MOSI=0;
100 3 }
101 2 SCK=1;
102 2 DATA_BUF=DATA_BUF<<1;
103 2 SCK=0;
104 2 }
105 1 }
C51 COMPILER V7.06 FASONG 09/12/2009 14:21:20 PAGE 3
106 //------------------------------------------------------初始化nRF905--------------------------------------
--------
107 void nRF905Init(void)
108 {
109 1 CSN=1; // Spi disable
110 1 SCK=0; // Spi clock line init low
111 1 DR=1; // Init DR for input
112 1 AM=1; // Init AM for input
113 1 CD=1; // Init CD for input
114 1 PWR=1; // nRF905 power on
115 1 TRX_CE=0; // Set nRF905 in standby mode
116 1 TXEN=0; // set radio in Rx mode
117 1 }
118 //-----------------------------------------------------初始化寄存器---------------------------------------
---------
119 void Config905(void)
120 {
121 1 uchar i;
122 1 CSN=0; // Spi enable for write a spi command
123 1 //SpiWrite(WC); // Write config command写放配置命令
124 1 for (i=0;i<11;i++) // Write configration words 写放配置字
125 1 {
126 2 SpiWrite(RFConf[i]);
127 2 }
128 1 CSN=1; // Disable Spi
129 1 }
130 //-----------------------------------------------------发送数据打包---------------------------------------
-------------
131 void TxPacket(uchar *TxRxBuf)
132 {
133 1 uchar i;
134 1 //Config905();
135 1 CSN=0;
136 1 SpiWrite(WTP); // Write payload command
137 1 for (i=0;i<4;i++)
138 1 {
139 2 SpiWrite(TxRxBuf[i]); // Write 32 bytes Tx data
140 2 }
141 1 CSN=1;
142 1 nrf905_Delay(1); // Spi disable
143 1 CSN=0; // Spi enable for write a spi command
144 1 SpiWrite(WTA); // Write address command
145 1 for (i=0;i<4;i++) // 写入与对方地址一样的地址
146 1 {
147 2 SpiWrite(TxAddress[i]);
148 2 }
149 1 CSN=1; // Spi disable
150 1 TRX_CE=1; // Set TRX_CE high,start Tx data transmission
151 1 nrf905_Delay(1); // while (DR!=1);
152 1 TRX_CE=0; // Set TRX_CE low
153 1 }
154 //----------------------------------------------设置发送初始状态------------------------------------------
----
155 void SetTxMode(void)
156 {
157 1 TRX_CE=0;
158 1 TXEN=1;
159 1 nrf905_Delay(1); // nrf905_Delay for mode change(>=650us)
160 1 }
161 //-----------------------------------------------设置接收初始化-------------------------------------------
---------
162 void SetRxMode(void)
C51 COMPILER V7.06 FASONG 09/12/2009 14:21:20 PAGE 4
163 {
164 1 TXEN=0;
165 1 TRX_CE=1;
166 1 nrf905_Delay(1); // nrf905_Delay for mode change(>=650us)
167 1 }
168 //-------------------------------------------------判断数据接收状态---------------------------------------
---------------
169 unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready
170 {
171 1 DR=1;
172 1 //通过对端口写1,可以使端口为输入状态,这51的 特性。不熟悉者可以参阅51相关书籍作证(将DR端口设置为输入状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -