?? testcom.lst
字號:
C51 COMPILER V6.23a TESTCOM 04/26/2006 10:11:10 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE TESTCOM
OBJECT MODULE PLACED IN TESTCOM.OBJ
COMPILER INVOKED BY: E:\Keil C V6.23\C51\BIN\C51.EXE TESTCOM.C
stmt level source
1 #include <CPU.H>
2
3 // 類型定義
4 #define BYTE unsigned char
5 #define UINT unsigned int
6 #define BOOL unsigned int
7 #define ULNG unsigned long
8
9 ///////////////////
10 // 硬件引腳功能定義 //
11 ///////////////////
12 sbit bCSX = P1^4; // p1.4(PLCC44-P6)為程序運行指示,低電平亮;
13
14 ////////////
15 // 時鐘計數 //
16 ////////////
17 BYTE ucMsCount; // 用于1ms計時(受GPS脈沖控制)
18 UINT uiMsNow; // 當前毫秒數(受GPS脈沖控制)
19 bit b250MsPassed; // 已經過了250毫秒, LED-RUN
20 bit bOneSecPassed; // 已經過了1秒
21 BYTE ucSecCount; // 用于1s計時(受GPS脈沖控制)
22 bit bOneMinPassed; // 每分鐘,重新初始化一次串口,以提高可靠性
23
24 // 中斷服務初始化
25 void vInterruptInitialize()
26 {
27 1 // =====================================================
28 1 // IE:中斷允許寄存器;復位后:IE = 0x00;1允許,0-禁止;
29 1 // =====================================================
30 1 // D7 D6 D5 D4 D3 D2 D1 D0
31 1 // -----------------------------------------------------
32 1 // EA ET2 ES ET1 EX1 ET0 EX0
33 1 // -----------------------------------------------------
34 1 // EX0,EX1:外部中斷0、1的中斷允許位;
35 1 // ET0,ET1:定時器/計數器0、1(T/C0,T/C1)溢出中斷允許位;
36 1 // ES:串口中斷允許位;
37 1 // ET2:定時器/計數器2(T/C2)溢出中斷允許位;
38 1 // EA:CPU總的中斷允許;
39 1 // -----------------------------------------------------
40 1
41 1 // =================================================
42 1 // IP:中斷優先級寄存器;復位后:IP = 0x00;1→高,0→低;
43 1 // =================================================
44 1 // D7 D6 D5 D4 D3 D2 D1 D0
45 1 // -------------------------------------------------
46 1 // PT2 PS PT1 PX1 PT0 PX0
47 1 // -------------------------------------------------
48 1 // PX0,PX1:外部中斷0、1中斷優先級控制位;
49 1 // PT0,PT1:定時器/計數器0、1中斷優先級控制位;
50 1 // PS:串口中斷優先級控制位;
51 1 // PT2:定時器/計數器2(T/C2)中斷優先級控制位;
52 1 // -------------------------------------------------
53 1
54 1 // ======================================================
55 1 // TCON:定時器/計數器控制寄存器;復位后:TCON = 0x00
C51 COMPILER V6.23a TESTCOM 04/26/2006 10:11:10 PAGE 2
56 1 // ======================================================
57 1 // D7 D6 D5 D4 D3 D2 D1 D0
58 1 // --------------------------------------------------------
59 1 // TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
60 1 // --------------------------------------------------------
61 1 // TF1,TF0:定時器x溢出中斷標志,當定時器x溢出時由內部硬件至置位,
62 1 // 當CPU轉向中斷服務程序時,由內部硬件清除;
63 1 // TR1,TR0:定時器運行控制位,由軟件置位、清除來控制定時器開啟、關閉;
64 1 // IE1,IE0:外部觸發中斷請求標志;
65 1 // IT1,IT0:外部中斷觸發方式,1-下降沿觸發;0-低電平觸發;
66 1 // --------------------------------------------------------
67 1
68 1 EA = 0; // 中斷允許總控制
69 1
70 1 EX0 = 0; // 外部中斷0允許
71 1 EX1 = 0; // 外部中斷1允許
72 1 IT0 = 0; // 外部中斷0外下降沿有效
73 1 IT1 = 0; // 外部中斷1外下降沿有效
74 1 PS = 1; // 串口中斷優先級高
75 1 ES = 1; // 串口中斷使能
76 1 PX0 = 0; // 外部中斷0優先級低
77 1 PX1 = 0; // 外部中斷1優先級低
78 1 ET1 = 0; // 定時器1禁止中斷
79 1
80 1 // =================================================
81 1 // TMOD: 定時器工作方式控制寄存器,復位后TMOD = 0x00
82 1 // =================================================
83 1 // D7 D6 D5 D4 D3 D2 D1 D0
84 1 // -------------------+---------------------------
85 1 // GATE C//T M1 M0 | GATE C//T M1 M0
86 1 // -------------------+---------------------------
87 1 // ------ 定時器1 -----+--- 定時器0 ---------------
88 1 // M1、M0:工作方式設置;
89 1 // 00-13位計數器;
90 1 // 01-16位計數器;
91 1 // 10-可自動再裝入的8位計數器(從THx中自動裝到TLx中);
92 1 // 11-把定時器分為兩個8為的計數器或關閉定時器1;
93 1 // C//T:1-計數器功能,0-定時器功能;
94 1 // GATE:選通控制;1-同時/INTx為高電平且TRx為1時選通定時器x;
95 1 // 0-每當TRx為1時就選通定時器x;
96 1 // -----------------------------------------------------
97 1
98 1 // 定時器/計數器0初始化
99 1 TMOD = (TMOD & 0xF0) | 0x2; // T0工作于:10-可自動再裝入的8位計數器(從THx中自動裝到TLx中);
100 1 // 22.1184MHz / 12分頻 = 計數頻率為1.8432MHz,100個us的設置
101 1 // (2^8 - TL) / (1.8432 * 10^6) = 10^(-4) ==> TL ≈ 72
102 1 TH0 = TL0 = 72;
103 1 ET0 = 1; // 定時器0允許中斷
104 1 TR0 = 1; // T0使能
105 1
106 1 EA = 1; // 中斷允許總控制
107 1 }
108
109 // 串口初始化
110 #define cnBaudRate 19200 // 19200bps、8、N、1
111 #define cnFosc 22118400 // 當前晶振: 22.1184MHz
112
113 bit bComSendBufEmpty; // 串口的發送緩沖區空的標志: 用于啟動TI
114
115 void vSerialInitialize()
116 {
117 1 // =====================================================================
C51 COMPILER V6.23a TESTCOM 04/26/2006 10:11:10 PAGE 3
118 1 // SCON:串口控制寄存器;復位后:SCON = 0x00;
119 1 // =====================================================================
120 1 // D7 D6 D5 D4 D3 D2 D1 D0
121 1 // ---------------------------------------------------------------------
122 1 // SM0 SM1 SM2 REN TB8 RB8 TI RI
123 1 // ---------------------------------------------------------------------
124 1 // SM1.SM0串口工作方式控制:
125 1 // 00-同步移位寄存器fosc/12;移位寄存器工作方式;
126 1 // 01-異步收發,由定時器控制;8位數據位的UART工作方式;
127 1 // 10-異步收發,fosc/32或fosc/64;9位數據位的UART工作方式;
128 1 // 11-異步收發,由定時器控制;9位數據位的UART工作方式;
129 1 // 波特率:
130 1 // 00-同步fosc/12;
131 1 // 01.03-異步,
132 1 // 1. 16位定時器1的溢出中斷,2^SMOD * 定時器1的溢出率 / 32;例,要
133 1 // 取得110bps,定時器1的溢出率為32*110=3520,定時器1是加1定時器,
134 1 // 每12個振蕩周期加1,因此當fosc=12MHz時,定時器每隔284us中斷一次:
135 1 // fosc / (12 * 3520) = 12 * 10^6 / (12 * 2520) = 284us
136 1 // 考慮到溢出中斷后CPU響應中斷以及進行TH、TL的軟件重裝需要時間,
137 1 // 因此扣除8個us,則定時器1在裝入后定時276us發生一次中斷,可以計算
138 1 // 得到TH1=FEH、TL1=EBH。
139 1 // 常用波特率與其他參數的選取關系
140 1 // --------------------------------------------------------------
141 1 // 串口 波特率 fosc=6MHz fosc=12MHz fosc=11.0592Hz
142 1 // 工作方式 SMOD TMOD TH1 SMOD TMOD TH1 SMOD TMOD TH1
143 1 // --------------------------------------------------------------
144 1 // 方式0 1M x x x
145 1 // --------------------------------------------------------------
146 1 // 方式2 375k 1 x x
147 1 // 187.5k 1 x x 0 x x
148 1 // --------------------------------------------------------------
149 1 // 62.5k 1 20 FF
150 1 // 19.2k 1 20 FD
151 1 // 9.6k 0 20 FD
152 1 // 4.8k 1 20 F3 0 20 FA
153 1 // 方式1 2.4k 1 20 F3 0 20 F3 0 20 F4
154 1 // 或 1.2k 1 20 E6 0 20 E6 0 20 E8
155 1 // 方式3 600 1 20 CC 0 20 CC 0 20 D0
156 1 // 300 0 20 CC 0 20 98 0 20 A0
157 1 // 137.5 1 20 1D 0 20 1D 0 20 2E
158 1 // 110 0 20 72 0 10 FEEB 0 10 FEFF
159 1 // --------------------------------------------------------------
160 1 // 2. 自動重載方式的定時器2,TMOD=0010xxxx,則2^SMOD * fosc / (32 * 12 * (256 - TH1));
161 1 // 3. SMOD為PCON的最高位;
162 1 // 02-異步,fosc/32或fosc/64;
163 1 // SM2:多機通信控制為:1-收到第9位(RB8)為1,RI置1;0-接收到字符RI就置1;方式0時,SM2應為0;
164 1 // REN:串口接收允許位:1-允許;0-禁止;
165 1 // TB8:方式2和3時為發送的第9位數據,由軟件置位或清零;可以作為奇偶校驗位,或多機通信中表示地址或數據(1/
-0);
166 1 // RB8:方式2和3時為接收到的第9位數據,作為奇偶校驗位,或多機通信的地址或數據(1/0);方式1時,為接收到的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -