📄 rf24e1.lst
字号:
C51 COMPILER V8.02 RF24E1 10/05/2006 10:18:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE RF24E1
OBJECT MODULE PLACED IN .\output\RF24E1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RF24E1.c OMF2 BROWSE MODDP2 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 //程序编译时,必须设置好XRAM的起始地址和大小,否则有可能程序不可运行!!!
12 //2006-6-26
13 //=========================================================
14 #include <BATTERY.H>
15 #include <stdlib.h>
16 extern unsigned char idata inCnt;
17 extern unsigned char idata outCnt;
18 extern unsigned char xdata inBuf[135];//120+1+8+4
19 extern unsigned char xdata outBuf[256]; //发送缓冲区
20 extern unsigned char idata cTxdDptr;
21 unsigned char idata Loc;
22 unsigned char idata Rxtimeout;
23
24 unsigned char idata adcResult_list[4][2];//接收节点四个通道采样值
25 unsigned char xdata Group1_Table[120];//节点地址列表,放在内部sram里面
26 unsigned char idata ptnode; //最多120个节点,包括2组,每组60点,对应120节电池
27 unsigned char idata cRxdTime;//串口接收延时
28 unsigned char xdata Node_V[480];
29 unsigned char xdata Node_T[480];//配置120个节点的信息缓存
30 //| 节点1 | 节点1 |......| 节点10 |-----------Node_V
31 //|ch1 L|ch1 H|ch2 L|ch2 H|......|ch1 L|ch1 H |
32 //| 节点1 | 节点1 |......| 节点10 |-----------Node_T
33 //|ch1 L|ch1 H|ch2 L|ch2 H|......|ch1 L|ch1 H |
34 unsigned int idata NodeBufCnt=0;//用于往里存放
35 unsigned int idata NdBfoutV=0;//&Node_V[0];//用于串出计数
36 unsigned int idata NdBfoutT=0;//&Node_T[0];
37 //unsigned char xdata *PtAddr=(unsigned char xdata *)(0x0fe8);//指向本机无线地址和节点地址的存放位置。
38 unsigned char idata Group1_Num=0;//节点数量
39 //unsigned int idata LocalADC[2];//本地adc采样值,电压,电流
40 union
41 {
42 unsigned char adcByte[4];
43 struct
44 {
45 unsigned int local_V;
46 unsigned int local_A;
47 }adc_value;
48 }idata LOCAL_ADC;
49 unsigned char idata ReqTimeout;
50 unsigned char idata CallTime=0; //呼叫次数
51
52 //unsigned int xdata ADC_LIST[2][16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
53 // 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
54 unsigned char idata ADC_Cnt=0;
55 unsigned int idata ADC_SUM[2]={0,0};
C51 COMPILER V8.02 RF24E1 10/05/2006 10:18:20 PAGE 2
56
57 //bit t_500ms;
58 bit NodeResistered=0;
59 bit rFaddrResistered=0;
60 extern bit bRxd;
61 bit enrF=0;//启动巡检
62 sbit led=P0^6;
63 sbit dog=P0^5;
64 sbit Led_Tx=P0^3; //LED点灯发送
65 sbit Led_Rx=P0^4; //LED点灯接收
66 sbit CS_R=P0^0; //eeprom 的偏选脚,
67 sbit e2rom_cs=P0^0; //外部e2rom的偏选
68
69 //===========crc==================
70 //unsigned int code crc_ta[16]=
71 //{ /* CRC余式表 */
72 // 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
73 // 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
74 //};
75 union
76 {
77 unsigned int iWord;
78 struct
79 {
80 unsigned char cHigh;
81 unsigned char cLow;
82 }iData;
83 }idata CheckSumTemp;
84
85 unsigned char idata count;
86
87
88
89 bit RxdCheckSum( void );
90 void TxdCheckSum( void);
91 void CheckSum( unsigned char xdata*p );
92
93 /*unsigned char code RxTxConfig[] = {
94 RF_DATA_LENGTH * 8, RF_DATA_LENGTH * 8, //信道2和1的数据长(单位为位)
95 0x00, 0x00, 0x00, 0x00, 0x00, //信道2的地址(如没有5字节长,则较低的位为有效位,下同)
96 0xaa, 0xbb, 0x12, 0x34, 0x83, //信道1的地址
97 //地址的位数(B0100_00xx),
98 //CRC位数(16位Bxxxx_xx1x,8位Bxxxx_xx0x,CRC允许(Bxxxx_xxx0,0禁止,1允许)
99 B1000_0001,//--------------------------------------------------------------------------------------------
-----------------
100
101 //位7,RX2_EN,为0只有信道1接收,为1允许2个信道同时接收
102 //位6,CM,通讯方式,0:direct mode,1:ShockBurst mode,24e1只能为1
103 //位5,RF DATA RATE,0:250Kbps,1:1Mbps,250Kbps时可提高接收灵敏度10dbm,1Mbps时要求16M晶体
104 //位4,3,2,晶体频率,为该值+1再*4,如为2,则为12M晶体,3 ,16M
105 //位1,0:发射功率:00:-20, 01:-10 10:-5 11:0dbm
106 B0100_1111,//--------------------------------------------------------------------------------------------
-----------------
107 //B0110_1111,1信道接收,shockBurst方式 ,1Mbps,16Mhz,0 DBm
108 //B1111_111x,表示频率, 实际频率为2400+(B1111_111x >> 1)
109 //位0,RX_EN,为0发送,为1接收
110 B0000_0100, //2402Mhz,接收方式 (最后一位 RX_EN 为1表接收方式)
111 }; //这里设定为发射模式
112 */
113 struct RFConfig
114 {
115 unsigned char n;
C51 COMPILER V8.02 RF24E1 10/05/2006 10:18:20 PAGE 3
116 unsigned char buf[15];
117 };
118
119 typedef struct RFConfig RFConfig;
120
121 #define ADDR_INDEX 8 // Index to address bytes in RFConfig.buf
122 #define ADDR_COUNT 4 // Number of address bytes
123
124 RFConfig idata tconf = //定义在xram是因为buf[15]中的地址段可能要动态修改。
125 {
126 15,
127 RF_DATA_LENGTH*8, RF_DATA_LENGTH*8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x04
129 };
130
131 RFConfig idata rconf = //定义在xram是因为buf[15]中的地址段可能要动态修改。
132 {
133 15,
134 RF_DATA_LENGTH*8, RF_DATA_LENGTH*8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135 0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x05
136 };
137
138 //================================================================
139 //函数功能:100us软件延时程序
140 //filename:Delay100us()
141 //input:
142 //output:none
143 //================================================================
144 void Delay100us(unsigned char n)
145 {
146 1 unsigned char i;
147 1 while(n--)
148 1 for(i=0;i<35;i++)
149 1 ;
150 1 }
151 //================================================================
152 //函数功能:毫秒软件延时程序
153 //filename:Delay100us()
154 //input:
155 //output:none
156 //================================================================
157
158 void Delayms(unsigned char n)
159 {
160 1 unsigned char j;
161 1 while(n--)
162 1 for(j=0;j<10;j++)
163 1 Delay100us(10);
164 1
165 1 }
166 //================================================================
167 //函数功能:片内SPI接口操作
168 //filename:fSpiRdWr()
169 //input:char 读操作,输入参数0
170 //output:none
171 //================================================================
172 uchar SpiReadWrite(uchar dat){
173 1 EXIF &= ~0x20; // Clear SPI interrupt
174 1 SPI_DATA = dat; // Move byte to send to SPI data register
175 1 while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
176 1 return SPI_DATA;
177 1 }
C51 COMPILER V8.02 RF24E1 10/05/2006 10:18:20 PAGE 4
178 //================================================================
179 //函数功能:将无线子系统设置为接收模式
180 //on the spec.page26:
181 //If nFRF2401 subsystem is to be configured for 2 channel RX in ShockBuust
182 //a total of 120 bits must be shifted in during the first configuration after VDD is
183 //applied.Once the wanted protocol,modus and RF channed are set ,only one bit(RXEN) is
184 //shifted in to switch between RX and TX.So this function can do that like it.
185 //On the spec.page28
186 //After VDD is turned on shockburst configureation is done once and remains set whilst VDD is
187 //present.during operation only the first byte for frequecy channel and Rx/Tx switch need
188 //to be changed!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -