?? uart0.lst
字號:
C51 COMPILER V7.05 UART0 08/18/2007 20:00:10 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN uart0.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe uart0.c DB OE
stmt level source
*** WARNING C500 IN LINE 1 OF UART0.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1
2 //----------------------------------------------------------------
3 // C8051F020實驗核心模塊測試程序
4 // uart0通信實驗
5 //
6 // 實現(xiàn)功能:通過交叉開關,將UART0配置到P00,P01引腳上,實現(xiàn):
7 // 1.通過計算機向模塊發(fā)送命令控制底板上的LED燈
8 // 2.串口通信協(xié)議是基于字符的,可使用超級終端進行調(diào)試。支持BACKSPACE
9 // 鍵,但是不支持其它功能鍵和方向鍵。
10 //
11 // 實驗條件:
12 // 1.底板上JP1的1,2,4,6設置為ON狀態(tài)
13 //
14 //
15 // 說明:
16 // 本模塊中配套的測試程序都是以消息驅(qū)動的.
17 //---------------------------------------------------------------
18 // 修改記錄
19 // 版本 時間 人員 內(nèi)容
20 // 1.0 2007/4/30 scj 建立文件,實現(xiàn)基本功能
21 // 1.1 2007/6/4 scj 根據(jù)V122底板修改
22 //
23 //---------------------------------------------------------------
24 // 串口命令:
25 // 1.setled=2,on: 點亮LED2
26 // 2.setled=2,off:關閉LED2
27 //---------------------------------------------------------------
28
29 #include "F020.h"
30 #include <string.h>
31 #include <ctype.h>
32
33
34 //--------------------------------------------
35 // 數(shù)據(jù)類型定義
36 //--------------------------------------------
37
38 // 基本數(shù)據(jù)類型
39 typedef unsigned char BYTE; // 8位無符號數(shù)
40 typedef unsigned int WORD; // 16位無符號數(shù)
41 typedef unsigned long DWORD; // 32位無符號數(shù)
42
43 // 結構體
44 typedef struct
45 {
46 BYTE base; // DIDA次數(shù)
47 BYTE second; // 秒
48 BYTE minute; // 分
49
50 }S_TIME;
51
52
53 //--------------------------------------------
54 // 引腳定義
C51 COMPILER V7.05 UART0 08/18/2007 20:00:10 PAGE 2
55 //--------------------------------------------
56 #define P_LED2 P31
57
58
59 //--------------------------------------------
60 // 宏定義
61 //--------------------------------------------
62
63 // 系統(tǒng)消息定義
64 #define SECD_SIGNAL 0x01
65 #define MINU_SIGNAL 0x02
66 #define UART0RECV_SIGNAL 0x04
67
68
69 // 常量定義
70
71 //定時器0定時,使用SYSCLK/12作為時鐘源
72 //定時計算方法,TH0:TL0= 65536-t*SYSCLK/12
73 //定時25ms,TH0:TL0=0x4C 00
74 #define TMR0H 0x4C
75 #define TMR0L 0x00
76
77 #define TICKS_PER_SEC 40
78
79 #define RECVBUF_LEN 20
80
81 //--------------------------------------------
82 // 函數(shù)聲明
83 //--------------------------------------------
84 void CommandProc(char *pRecvString);
85 void SendString(char *pSendString);
86
87 //--------------------------------------------
88 // 全局變量定義
89 // 全局變量以g_開頭
90 // 位變量: g_b
91 // 無符號字節(jié)變量: g_c
92 // 無符號雙字節(jié)變量: g_w
93 // 無符號4字節(jié)變量: g_dw
94 // 有符號數(shù)在類型前加s,比如char型位g_sc
95 // 結構體為g_s后為大寫
96 //--------------------------------------------
97 data BYTE g_cMainSignal; // 主消息變量
98
99 data S_TIME g_sTime; // 主時鐘
100
101 data BYTE g_cRecvPointer; // 接收指針
102 data BYTE g_cRecvLength; // 接收數(shù)據(jù)長度
103 idata BYTE g_cRecvBuffer[RECVBUF_LEN]; // 接收緩沖區(qū)
104
105 //-----------------------------------------------
106 // 初始化函數(shù)
107 //
108 //-----------------------------------------------
109 void Timer_Init()
110 {
111 1
112 1 PCON = 0;
113 1
114 1 //.......................................
115 1 // 設置定時器的時鐘信號
116 1 // - T4M T2M T1M T0M - - -
C51 COMPILER V7.05 UART0 08/18/2007 20:00:10 PAGE 3
117 1 // 0 1 0 1 0 0 0 0
118 1 // 1:使用SYSCLK;0:使用SYSCLK/12
119 1 // 定時器0,1,2,4均使用SYSCLK
120 1 //.......................................
121 1 CKCON = 0x70;
122 1
123 1
124 1 //......................................
125 1 // 定時0工作在16位定時器模式
126 1 // 定時器1工作在8位重載模式
127 1 //......................................
128 1
129 1 TMOD = 0x21;
130 1
131 1 //....................................
132 1 // T0作為系統(tǒng)節(jié)拍時鐘
133 1 // 定時計算方法= 65536-t*SYSCLK
134 1 //.....................................
135 1 TH0 = TMR0H;
136 1 TL0 = TMR0L;
137 1
138 1 //.......................................
139 1 // T1作為串口0時鐘
140 1 // 串口0波特率=SYSCLK/32*(256-TMR1LOAD)
141 1 // T1波特率=9600
142 1 //.......................................
143 1
144 1 TH1 = 0xB8;
145 1 TL1 = 0xB8;
146 1
147 1 TCON = 0x00;
148 1
149 1
150 1 //..................................................
151 1 // T2 and T3 not used
152 1 //..................................................
153 1 RCAP2H = 0x00; // Timer 2 Capture Register High Byte
154 1 RCAP2L = 0x00; // Timer 2 Capture Register Low Byte
155 1 TH2 = 0x00; // Timer 2 High Byte
156 1 TL2 = 0x00; // Timer 2 Low Byte
157 1 T2CON = 0x00; // Timer 2 Control Register
158 1
159 1 TMR3RLL = 0x00; // Timer 3 Reload Register Low Byte
160 1 TMR3RLH = 0x00; // Timer 3 Reload Register High Byte
161 1 TMR3H = 0x00; // Timer 3 High Byte
162 1 TMR3L = 0x00; // Timer 3 Low Byte
163 1 TMR3CN = 0x00; // Timer 3 Control Register
164 1
165 1 //.....................................................
166 1 // T4 作為串口1波特率發(fā)生器
167 1 // T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
168 1 // T4波特率=9600
169 1 //.....................................................
170 1 RCAP4H = 0xFF; // Timer 4 Capture Register High Byte
171 1 RCAP4L = 0xDC; // Timer 4 Capture Register Low Byte
172 1 TH4 = 0xFF; // Timer 4 High Byte
173 1 TL4 = 0xDC; // Timer 4 Low Byte
174 1 T4CON = 0x30; // Timer 4 Control Register
175 1
176 1
177 1 }
178
C51 COMPILER V7.05 UART0 08/18/2007 20:00:10 PAGE 4
179 //...........................................................
180 // 功能:UART0初始化
181 // 輸入?yún)?shù):無
182 // 輸出參數(shù):無
183 // 注意:1.應該首先使用交叉開關為UART0分配相應的引腳
184 // 2.初始化定時器1作為波特率發(fā)生器
185 //..........................................................
186 void UART0_Init()
187 {
188 1
189 1 SCON0 = 0x50; // 8位波特率異步通信模式
190 1
191 1 REN0 = 1; // 使能UART0接收
192 1 TR1 = 1; // 啟動定時器1
193 1 }
194
195 //......................................................
196 // 功能:配置交叉開關和端口方向
197 // 輸入?yún)?shù):無
198 // 輸出參數(shù):無
199 // 注意:該函數(shù)使能交叉開關
200 // TX0,RX0被分配到P00,P01
201 //.....................................................
202
203 void Port_IO_Init()
204 {
205 1 // P0.0 - TX0 (UART0), Open-Drain, Digital
206 1 // P0.1 - RX0 (UART0), Open-Drain, Digital
207 1 // P0.2 - SCK (SPI0), Open-Drain, Digital
208 1 // P0.3 - MISO (SPI0), Open-Drain, Digital
209 1 // P0.4 - MOSI (SPI0), Open-Drain, Digital
210 1 // P0.5 - NSS (SPI0), Open-Drain, Digital
211 1 // P0.6 - SDA (SMBus), Open-Drain, Digital
212 1 // P0.7 - SCL (SMBus), Open-Drain, Digital
213 1
214 1 // P1.0 - Skipped, Open-Drain, Analog
215 1 // P1.1 - Skipped, Open-Drain, Analog
216 1 // P1.2 - Skipped, Open-Drain, Analog
217 1 // P1.3 - Skipped, Open-Drain, Analog
218 1 // P1.4 - Skipped, Open-Drain, Analog
219 1 // P1.5 - Skipped, Open-Drain, Analog
220 1 // P1.6 - Skipped, Open-Drain, Analog
221 1 // P1.7 - Skipped, Open-Drain, Analog
222 1
223 1 // P2.0 - TX1 (UART1), Open-Drain, Digital
224 1 // P2.1 - RX1 (UART1), Open-Drain, Digital
225 1 // P2.2 - INT0 (Tmr0), Open-Drain, Digital
226 1 // P2.3 - INT1 (Tmr1), Open-Drain, Digital
227 1 // P2.4 - Unassigned, Open-Drain, Digital
228 1 // P2.5 - Unassigned, Open-Drain, Digital
229 1 // P2.6 - Unassigned, Open-Drain, Digital
230 1 // P2.7 - Unassigned, Open-Drain, Digital
231 1
232 1 // P3.0 - Unassigned, Open-Drain, Digital
233 1 // P3.1 - Unassigned, Push-Pull, Digital
234 1 // P3.2 - Unassigned, Open-Drain, Digital
235 1 // P3.3 - Unassigned, Open-Drain, Digital
236 1 // P3.4 - Unassigned, Open-Drain, Digital
237 1 // P3.5 - Unassigned, Open-Drain, Digital
238 1 // P3.6 - Unassigned, Open-Drain, Digital
239 1 // P3.7 - Unassigned, Open-Drain, Digital
240 1
C51 COMPILER V7.05 UART0 08/18/2007 20:00:10 PAGE 5
241 1 P1MDIN = 0x00;
242 1 P3MDOUT = 0x02;
243 1 XBR0 = 0x07;
244 1 XBR1 = 0x14;
245 1 XBR2 = 0x44;
246 1
247 1
248 1
249 1 }
250
251 void Oscillator_Init()
252 {
253 1 int i = 0;
254 1 OSCXCN = 0x67;
255 1 for (i = 0; i < 3000; i++); // Wait 1ms for initialization
256 1 while ((OSCXCN & 0x80) == 0);
257 1 OSCICN = 0x08;
258 1 }
259
260 void Interrupts_Init()
261 {
262 1 //..................................
263 1 // 初始化中斷
264 1 // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
265 1 //..................................
266 1 IE = 0;
267 1
268 1 ET0 = 1; // 打開定時器0中斷
269 1
270 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -