📄 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实现RS-232通信,运行前将TX0和P0.0短接,将RXD和P0.1短接,当接收到一个
13 // 数据后,再将接收到的数据送出。
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; // 数据指针寄存器
27 sfr16 TMR3RL = 0x92; // Timer3 重加载寄存器
28 sfr16 TMR3 = 0x94; // Timer3 寄存器
29 sfr16 ADC0 = 0xbe; // ADC0 转换结果寄存器
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 数据寄存器
37 sfr16 DAC1 = 0xd5; // DAC1 数据寄存器
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; // 接受标志位
46 unsigned char temp;
47
48 //-----------------------------------------------------------------------------
49 // 函数原型
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; // 禁止看门狗定时器
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; //系统时钟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 { // 是否接收到一个数据
109 2 // if(button==0)
110 2 {
111 3 /* b0=1;
112 3 delay (6000000); // 延时
113 3 b0=0;
114 3 delay (6000000);*/
115 3 // if(ReceiveBit)
116 3 {
117 4 SBUF0 = temp; // 将接收到的数据送出
C51 COMPILER V7.06 UART0 12/08/2008 09:51:30 PAGE 3
118 4 while(TI0 == 0);// 发送标志位是否产生
119 4 TI0 = 0;// 清发送标志位
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 // 系统时钟初始化
136 //-----------------------------------------------------------------------------
137 //
138 // 该程序初始化系统时钟,使用11.0592MHz的晶振作为时钟源
139 //
140 void SYSCLK_Init (void)
141 {
142 1 int i; // 延时计数器
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)) ; // 等待晶体振荡器稳定
150 1
151 1 OSCICN = 0x88; // 选择外部振荡器作为系统时钟源并允许时钟丢失检测器
152 1
153 1
154 1 }
155
156 //-----------------------------------------------------------------------------
157 // IO口初始化
158 //-----------------------------------------------------------------------------
159 //
160 // 配置交叉开关和GPIO端口
161 //
162 void PORT_Init (void)
163 {
164 1 XBR0 = 0x04; // 允许UART0
165 1 XBR1 = 0x00;
166 1 XBR2 = 0x40; // 允许交叉开关和弱上拉
167 1 P0MDOUT |= 0x01; // 使能TX0作为推拉输出
168 1 P1MDOUT |= 0x40; // 允许P1.6(LED)为推挽输出
169 1 }
170
171 //-----------------------------------------------------------------------------
172 // UART0_Init(串口通信扩展用)
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)// 是发送中断还是接收中断
196 1 {
197 2 RI0 = 0;// 清接收标志位
198 2 temp = SBUF0; // 保存接收到的数据
199 2 ReceiveBit = 1; // 置接收标志
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -