?? uart0.lst
字號:
C51 COMPILER V7.06 UART0 12/08/2008 09:51:30 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe UART0.c DB OE
stmt level source
1 //-----------------------------------------------------------------------------
2 // WUART0.c
3 //-----------------------------------------------------------------------------
4 //
5 // 作者: daqian
6 // DATE: 2007年12月7號
7 //
8 // Target: C8051F02x
9 // Tool chain: KEIL C51
10 //
11 // 描述:
12 // 用UART0實(shí)現(xiàn)RS-232通信,運(yùn)行前將TX0和P0.0短接,將RXD和P0.1短接,當(dāng)接收到一個(gè)
13 // 數(shù)據(jù)后,再將接收到的數(shù)據(jù)送出。
14 //
15 //-----------------------------------------------------------------------------
16 // 包含文件
17 //-----------------------------------------------------------------------------
18
19 #include <c8051f020.h> // SFR聲明
20 #include <intrins.h>
21
22 //-----------------------------------------------------------------------------
23 // C8051F02X的16位SFR定義
24 //-----------------------------------------------------------------------------
25
26 sfr16 DP = 0x82; // 數(shù)據(jù)指針寄存器
27 sfr16 TMR3RL = 0x92; // Timer3 重加載寄存器
28 sfr16 TMR3 = 0x94; // Timer3 寄存器
29 sfr16 ADC0 = 0xbe; // ADC0 轉(zhuǎn)換結(jié)果寄存器
30 sfr16 ADC0GT = 0xc4; // ADC0 下限寄存器
31 sfr16 ADC0LT = 0xc6; // ADC0 上限寄存器
32 sfr16 RCAP2 = 0xca; // Timer2 捕捉寄存器
33 sfr16 T2 = 0xcc; // Timer2 寄存器
34 sfr16 RCAP4 = 0xe4; // Timer4 捕捉寄存器
35 sfr16 T4 = 0xf4; // Timer4 寄存器
36 sfr16 DAC0 = 0xd2; // DAC0 數(shù)據(jù)寄存器
37 sfr16 DAC1 = 0xd5; // DAC1 數(shù)據(jù)寄存器
38
39 //-----------------------------------------------------------------------------
40 // 全局常量
41 //-----------------------------------------------------------------------------
42
43 #define SYSCLK 22118400 // SYSCLK frequency in Hz
44 #define BAUDRATE 9600 // Baud rate of UART in bps
45 bit ReceiveBit; // 接受標(biāo)志位
46 unsigned char temp;
47
48 //-----------------------------------------------------------------------------
49 // 函數(shù)原型
50 //-----------------------------------------------------------------------------
51
52
53 sbit button = P0^5;
54 sbit b0=P1^0;
55 sbit light7=P2^7;
C51 COMPILER V7.06 UART0 12/08/2008 09:51:30 PAGE 2
56 sbit light6=P2^6;
57 sbit light5=P2^5;
58 sbit light4=P2^4;
59 sbit light3=P2^3;
60 sbit light2=P2^2;
61 sbit light1=P2^1;
62 sbit light0=P2^0;
63
64
65
66 void main (void);
67 void SYSCLK_Init (void);
68 void PORT_Init (void);
69 void UART0_Init (void);
70 void UART0_ISR (void);
71 void delay (unsigned int x);//unsigned int m
72
73 //-----------------------------------------------------------------------------
74 // 主程序
75 //-----------------------------------------------------------------------------
76
77 void main (void)
78 {
79 1 char bdata i;
80 1 WDTCN = 0xde; // 禁止看門狗定時(shí)器
81 1 WDTCN = 0xad;
82 1 ReceiveBit = 1;
83 1 SYSCLK_Init ();
84 1 PORT_Init ();
85 1 UART0_Init ();
86 1 EA = 1; // 允許全局變量
87 1 ES0 = 1;
88 1 // T1M=0; //系統(tǒng)時(shí)鐘12分頻,兼容51
89 1 temp = 0x22;
90 1 light7 = 0;
91 1 delay(100000);
92 1 light6 = 0;
93 1 delay(100000);
94 1 light5 = 0;
95 1 delay(100000);
96 1 light4 = 0;
97 1 delay(100000);
98 1 light3 = 0;
99 1 delay(100000);
100 1 light2 = 0;
101 1 delay(100000);
102 1 light1 = 0;
103 1 delay(100000);
104 1 light0 = 0;
105 1 delay(100000);
106 1
107 1 while(1)
108 1 { // 是否接收到一個(gè)數(shù)據(jù)
109 2 // if(button==0)
110 2 {
111 3 /* b0=1;
112 3 delay (6000000); // 延時(shí)
113 3 b0=0;
114 3 delay (6000000);*/
115 3 // if(ReceiveBit)
116 3 {
117 4 SBUF0 = temp; // 將接收到的數(shù)據(jù)送出
C51 COMPILER V7.06 UART0 12/08/2008 09:51:30 PAGE 3
118 4 while(TI0 == 0);// 發(fā)送標(biāo)志位是否產(chǎn)生
119 4 TI0 = 0;// 清發(fā)送標(biāo)志位
120 4 // ReceiveBit=0;
121 4 }
122 3 }
123 2
124 2 }
125 1 _nop_();
126 1
127 1 }
*** WARNING C280 IN LINE 79 OF UART0.C: 'i': unreferenced local variable
128
129
130 //-----------------------------------------------------------------------------
131 // 初始化程序
132 //-----------------------------------------------------------------------------
133
134 //-----------------------------------------------------------------------------
135 // 系統(tǒng)時(shí)鐘初始化
136 //-----------------------------------------------------------------------------
137 //
138 // 該程序初始化系統(tǒng)時(shí)鐘,使用11.0592MHz的晶振作為時(shí)鐘源
139 //
140 void SYSCLK_Init (void)
141 {
142 1 int i; // 延時(shí)計(jì)數(shù)器
143 1
144 1 OSCXCN = 0x67; // 啟動外部振蕩器使用
145 1 // 11.0592MHz 的晶體
146 1
147 1 for (i=0; i < 256; i++) ; // 等待振蕩器起振
148 1
149 1 while (!(OSCXCN & 0x80)) ; // 等待晶體振蕩器穩(wěn)定
150 1
151 1 OSCICN = 0x88; // 選擇外部振蕩器作為系統(tǒng)時(shí)鐘源并允許時(shí)鐘丟失檢測器
152 1
153 1
154 1 }
155
156 //-----------------------------------------------------------------------------
157 // IO口初始化
158 //-----------------------------------------------------------------------------
159 //
160 // 配置交叉開關(guān)和GPIO端口
161 //
162 void PORT_Init (void)
163 {
164 1 XBR0 = 0x04; // 允許UART0
165 1 XBR1 = 0x00;
166 1 XBR2 = 0x40; // 允許交叉開關(guān)和弱上拉
167 1 P0MDOUT |= 0x01; // 使能TX0作為推拉輸出
168 1 P1MDOUT |= 0x40; // 允許P1.6(LED)為推挽輸出
169 1 }
170
171 //-----------------------------------------------------------------------------
172 // UART0_Init(串口通信擴(kuò)展用)
173 //-----------------------------------------------------------------------------
174 //
175 // 配置UART0使用Timer1, 波特率為<baudrate>,楨格式為8-N-1.
176 //
177 void UART0_Init (void)
178 {
C51 COMPILER V7.06 UART0 12/08/2008 09:51:30 PAGE 4
179 1 SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
180 1 TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload
181 1 TH1 = 244; // set Timer1 reload value for baudrate:-(SYSCLK/BAUDRATE/16)
182 1 TL1 = TH1;
183 1 TR1 = 1; // start Timer1
184 1 // CKCON |= 0x10; // Timer1 uses SYSCLK as time base
185 1 PCON |= 0x80; // SMOD0 = 1
186 1 //TI0 = 1; // Indicate TX0 ready
187 1 }
188
189 //-----------------------------------------------------------------------------
190 // UART0_ISR(串口中斷0子程序)
191 //-----------------------------------------------------------------------------
192 //
193 void UART0_ISR (void) interrupt 4
194 {
195 1 if(RI0)// 是發(fā)送中斷還是接收中斷
196 1 {
197 2 RI0 = 0;// 清接收標(biāo)志位
198 2 temp = SBUF0; // 保存接收到的數(shù)據(jù)
199 2 ReceiveBit = 1; // 置接收標(biāo)志
200 2 delay(200);
201 2
202 2 }
203 1 }
204
205
206 void delay(unsigned int x)
207 {
208 1 int i;
209 1 for(i=0;i<=x;i++);
210 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 231 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -