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