📄 rf24e1.lst
字号:
C51 COMPILER V7.08 RF24E1 08/17/2006 14:22:14 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE RF24E1
OBJECT MODULE PLACED IN .\output\RF24E1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RF24E1.c OMF2 BROWSE DEBUG OBJECT(.\output\RF24E1.obj)
line level source
1 //========================================================
2 //深圳奥特迅电力设备有限公司
3 //电池监控系统用无线传输模块
4 //文件名:RF24E1.C
5 //描述:无线收发模块处理,无线子系统的初始化配置;spi操作;
6 // 无线收发操作;子系统工作在shockburst接收模式下
7 // 收到无线数据,LED指示
8 // 喂狗操作
9 //By:Andylee 2006-6-13
10 //anssett@163.com
11 //=========================================================
12 #include <BATTERY.H>
13 void SendCh(char);
14 unsigned int OneSCnt;
15 bit OneSecondGain=1;
16 sbit P04=P0^4; //备用
17 sbit led=P0^3;
18 sbit Clr_Dog=P0^5; //喂狗用
19 sbit Led_Show=P0^6; //LED点灯
20 unsigned char code RxTxConfig[] = {
21 RF_DATA_LENGTH * 8, RF_DATA_LENGTH * 8, //信道2和1的数据长(单位为位)
22 0x00, 0x00, 0x00, 0x00, 0x00, //信道2的地址(如没有5字节长,则较低的位为有效位,下同)
23 0xaa, 0xbb, 0x12, 0x34, 0x83, //信道1的地址
24 //地址的位数(B0100_00xx),
25 //CRC位数(16位Bxxxx_xx1x,8位Bxxxx_xx0x,CRC允许(Bxxxx_xxx0,0禁止,1允许)
26 B1000_0001,//--------------------------------------------------------------------------------------------
-----------------
27
28 //位7,RX2_EN,为0只有信道1接收,为1允许2个信道同时接收
29 //位6,CM,通讯方式,0:direct mode,1:ShockBurst mode,24e1只能为1
30 //位5,RF DATA RATE,0:250Kbps,1:1Mbps,250Kbps时可提高接收灵敏度10dbm,1Mbps时要求16M晶体
31 //位4,3,2,晶体频率,为该值+1再*4,如为2,则为12M晶体,3 ,16M
32 //位1,0:发射功率:00:-20, 01:-10 10:-5 11:0dbm
33 B0100_1111,//--------------------------------------------------------------------------------------------
-----------------
34 //B0110_1111,1信道接收,shockBurst方式 ,1Mbps,16Mhz,0 DBm
35 //B1111_111x,表示频率, 实际频率为2400+(B1111_111x >> 1)
36 //位0,RX_EN,为0发送,为1接收
37 B0000_0101, //2402Mhz,接收方式 (最后一位 RX_EN 为1表接收方式)
38 };
39 unsigned int xdata RxMsg_list[4];
40 struct RFConfig
41 {
42 unsigned char n;
43 unsigned char buf[15];
44 };
45
46 typedef struct RFConfig RFConfig;
47
48 #define ADDR_INDEX 8 // Index to address bytes in RFConfig.buf
49 #define ADDR_COUNT 4 // Number of address bytes
50
51 const RFConfig tconf =
52 {
53 15,
C51 COMPILER V7.08 RF24E1 08/17/2006 14:22:14 PAGE 2
54 RF_DATA_LENGTH * 8, RF_DATA_LENGTH * 8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55 0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x04
56 };
57
58 const RFConfig rconf =
59 {
60 15,
61 RF_DATA_LENGTH * 8, RF_DATA_LENGTH * 8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x05
63 };
64
65 //================================================================
66 //函数功能:100us软件延时程序
67 //filename:Delay100us()
68 //input:
69 //output:none
70 //================================================================
71 void Delay100us(unsigned char n)
72 {
73 1 unsigned char i;
74 1 while(n--)
75 1 for(i=0;i<35;i++)
76 1 ;
77 1 }
78 //================================================================
79 //函数功能:毫秒软件延时程序
80 //filename:Delay100us()
81 //input:
82 //output:none
83 //================================================================
84
85 void Delayms(volatile unsigned char n)
86 {
87 1 unsigned char j;
88 1 while(n--)
89 1 for(j=0;j<10;j++)
90 1 Delay100us(10);
91 1
92 1 }
93 //================================================================
94 //函数功能:片内SPI接口操作
95 //filename:fSpiRdWr()
96 //input:char 读操作,输入参数0
97 //output:none
98 //================================================================
99 uchar SpiReadWrite(uchar dat){
100 1 EXIF &= ~0x20; // Clear SPI interrupt
101 1 SPI_DATA = dat; // Move byte to send to SPI data register
102 1 while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
103 1 return SPI_DATA;
104 1 }
105
106 //================================================================
107 //函数功能:将无线子系统初始化
108 //filename:SetRxMode()
109 //input:none
110 //output:none
111 //================================================================
112 void fRfInit(void){
113 1 uchar b;
114 1 PWR_UP = 1; // Turn on Radio
115 1 Delay100us(30); // Wait > 3ms
C51 COMPILER V7.08 RF24E1 08/17/2006 14:22:14 PAGE 3
116 1 SPICLK = 0; // Max SPI clock (XTAL/8)
117 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
118 1 CS = 1; // RF SPI CS = 1,进行配置
119 1 Delay100us(0);
120 1 for(b=0;b<rconf.n;b++)
121 1 {
122 2 SpiReadWrite(rconf.buf[b]);
123 2 }
124 1 CS = 0; //退出配置状态
125 1 Delay100us(0);
126 1 CE = 1; //启动接收
127 1 }
128 /*****************************************************************************************
129 //函数名:RxPacket()
130 //输入:none
131 //输出:无
132 //功能描述:接收一组数据包
133 /*****************************************************************************************/
134 unsigned char RxPack(void)
135 {
136 1 unsigned char b,jj=0;
137 1 CE = 1;
138 1 while(DR1 == 0);
139 1 while(DR1)
140 1 {
141 2 b = SpiReadWrite(0);
142 2 RxMsg_list[jj]=(unsigned int)b<<8;
143 2 b=SpiReadWrite(0);
144 2 RxMsg_list[jj++] +=b;
145 2 }
146 1 CE = 0;
147 1 return jj;
148 1 }
149 //================================================================
150 //函数功能:端口初始化
151 //filename:IO_Init()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -