📄 cc1100_f310_t00.lst
字号:
C51 COMPILER V8.08 CC1100_F310_T00 06/13/2008 15:24:04 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE CC1100_F310_T00
OBJECT MODULE PLACED IN .\object\CC1100_F310_T00.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 源代码\CC1100_F310_T00.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND CODE N
-OCOND PRINT(.\list\CC1100_F310_T00.lst) TABS(8) OBJECT(.\object\CC1100_F310_T00.obj)
line level source
1 /******************************************************************************
2 文件名: CC1100F310_main.c
3 说 明: 本文件为“CC1100-F310”数传模块V1.0版的主函数。
4 模块工作与透明串口(半双工)。
5 无线速率=500kbps
6 UART的波特率=38400。
7 作 者: 赵华森
8 开 始: 2008.4.12
9 修 改: V1.0 初次开发实验调试。
10 ******************************************************************************/
11
12 #include "CC1100_func.h" //访问CC1100的函数
13 #include "CC1100_z.h" //CC1100寄存器定义,一些常数定义。
14 #include "CC1100_MCU_z.h" //MCU操作CC1100的SPI口的硬件相关的函数。
15 #include "CC1100_SMARTRF.h" //SmartRF Stdio软件计算的CC1100寄存器配置值。
16 #include "globe_val.h" //全局变量定义。
17
18 /******************************************************************************/
19
20 #define FRX_idle 0
21 #define FRX_ready 1
22 #define FRX_wait 2
23 #define FRX_end 3
24
25 #define FTX_start 4
26 #define FTX_wait 5
27
28 #define URX_GAP 20 //帧间隔复位值(ms)
29 /******************************************************************************/
30 void Start_FRX( void );
31 void switch_URX_buf( void );
32 void switch_UTX_buf( void );
33
34 /**************************************************************************************
35 主函数
36 (1):CC1100平时处于RX模式(或WOR)。
37 (2):串口(8N1,9600)收到数据后:启动TX模式,分包发送。
38 (3):RX收到一包后:启动串口,送出收到数据。
39 **************************************************************************************/
40 void main()
41 {
42 1 //CC1100复位《CC1100_MCU_z.c》。
43 1 CC1100_Reset();
44 1 //芯片切换到IDEL状态《CC1100_func.c》。
45 1 turn_IDLE();
46 1
47 1 //配置CC1100寄存器《CC1100_SMARTRF.c》。
48 1 CC1100_Config();
49 1 //SLEEP或XOFF时不保留这些寄存器,故唤醒后必须恢复。《CC1100_func.c》
50 1 Recover_TEST();
51 1 //根据本应用补充变更配置CC1100《CC1100_func.c》
52 1 CC1100_function();
53 1 //工作单元清零,启动定时器T2运行,开中断等。
54 1 SYS_Flag = 0; //清零所有标志位。
C51 COMPILER V8.08 CC1100_F310_T00 06/13/2008 15:24:04 PAGE 2
55 1 URX_time = 0; //帧间隔复位值
56 1 FRX_time = 0;
57 1 URX_i = 0;
58 1 FRX_len = 0;
59 1 switch_URX_buf();
60 1 switch_UTX_buf();
61 1
62 1 Start_FRX();
63 1
64 1 TMR2CN = 0x04; //T2运行。
65 1 EA = 1; //开中断。
66 1
67 1 while ( 1 )
68 1 {//《主循环·开始》
69 2 if ( S_1ms )
70 2 {//《1ms定时器到时·开始》
71 3 S_1ms = 0;
72 3 Deal_with_LED(); //《CC1100_MCU_z.C》
73 3
74 3 if ( URX_time && (!(--URX_time)) )
75 3 {//URX结束。
76 4 S_FTX = 0;
77 4 if ( URX_i )
78 4 {//无线发射最后分组。
79 5 FTX_len = URX_i; //URX收到的字节数
80 5 URX_i = 0;
81 5 switch_URX_buf();
82 5 RF_case = FTX_start; //启动无线发射任务
83 5 }
84 4 }
85 3 if ( FRX_time && (!(--FRX_time)) )
86 3 {//FRX结束
87 4 S_FRX = 0;
88 4 }
89 3 }//《1ms定时到时·结束》
90 2
91 2 switch ( RF_case ) //GDO0=0x06, GDO2=0x07。
92 2 {//《任务调度·开始》
93 3 //无线发射任务
94 3 case FTX_start:
95 3 {//无线发射1个分组。
96 4 turn_IDLE();
97 4 Write_URX_buf_33(); //发射1个分组+字节数。
98 4 turn_FTX();
99 4 RF_case = FTX_wait;
100 4 break;
101 4 }
102 3 case FTX_wait:
103 3 {//等待发射完。
104 4 if ( !CC1100_GDO0 )
105 4 {//1个分组发完。
106 5 clear_TXFIFO();
107 5 Start_FRX(); //切换到FRX
108 5 }
109 4 break;
110 4 }
111 3 //无线接收任务
112 3 case FRX_idle:
113 3 {//FRX等待同步字
114 4 if ( CC1100_GDO0 )
115 4 {//FRX收到同步字
116 5 RF_case = FRX_wait;
C51 COMPILER V8.08 CC1100_F310_T00 06/13/2008 15:24:04 PAGE 3
117 5 }
118 4 break;
119 4 }
120 3 case FRX_wait:
121 3 {//等待FRX收完
122 4 if ( !CC1100_GDO0 )
123 4 {//FRX收完
124 5 RF_case = FRX_end;
125 5 }
126 4 break;
127 4 }
128 3 case FRX_end:
129 3 {//收到1个分组
130 4 if ( CC1100_GDO2 )
131 4 {//收到1个分组
132 5 if ( !S_FRX )
133 5 {
134 6 S_FRX = 1; //FRX灯亮。
135 6 switch_UTX_buf();
136 6 }
137 5 FRX_time = 10;
138 5 read_UTX_buf_33(); //读取1个分组+字节数。
139 5 //《永久频率偏差补偿》
140 5 while ( S_TI0 ); //等待UTX完
141 5 S_TI0 = 1;
142 5 switch_UTX_buf(); //切换UTX缓冲区,启动UTX。
143 5 TI0 = 1; //启动UTX
144 5 }
145 4 clear_RXFIFO(); //清除溢出错误。
146 4 Start_FRX(); //启动FRX。
147 4 break;
148 4 }
149 3 default:break;
150 3 }//《任务调度·结束》
151 2 }//《主循环·结束》
152 1 }//main()
153
154 /***************************************************************
155 函数名: void Start_FRX( void )
156 功能说明: 启动无线接收。
157 ***************************************************************/
158 void Start_FRX( void )
159 {
160 1 turn_FRX();
161 1 RF_case = FRX_idle;
162 1 }
163
164 /***************************************************************
165 函数名: void switch_URX_buf( void )
166 功能说明: 切换URX缓冲区。
167 ***************************************************************/
168 void switch_URX_buf( void )
169 {
170 1 if ( !S_URX )
171 1 {//URX:1号缓冲区,FTX:0号缓冲区
172 2 URX_ptr = &UART_buf_1;
173 2 FTX_ptr = &UART_buf_0;
174 2 }
175 1 else
176 1 {//URX:0号缓冲区,FTX:1号缓冲区
177 2 URX_ptr = &UART_buf_0;
178 2 FTX_ptr = &UART_buf_1;
C51 COMPILER V8.08 CC1100_F310_T00 06/13/2008 15:24:04 PAGE 4
179 2 }
180 1 S_URX = !S_URX;
181 1 }
182
183 /***************************************************************
184 函数名: void switch_UTX_buf( void )
185 功能说明: 切换URX缓冲区。
186 ***************************************************************/
187 void switch_UTX_buf( void )
188 {
189 1 UTX_i = FRX_len & 0x3F; //FRX收到的字节数
190 1 if ( !S_UTX )
191 1 {//UTX:1号缓冲区,FRX:0号缓冲区
192 2 UTX_ptr = &UART_buf_1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -