📄 uart0.lst
字号:
C51 COMPILER V7.20 UART0 10/18/2005 11:08:10 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN UART0.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe UART0.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // 版权归新华龙电子公司所有
3 //-----------------------------------------------------------------------------
4 //
5 //文件名: UART0.c
6 //
7 //编写人: LC
8 //
9 //编写时间:2005/03/10
10 //
11 //目标器件: C8051F02x
12 //
13 //编译工具: Silicon Laboratories IDE
14 //
15 //程序说明: 此程序用UART0实现RS-232通信,运行前将TX0和P00 短接,RX0和
16 // P01短接,当接收到一个数据后,再将接收到的数据送出。
17
18 #include <c8051f020.h> /*SFR定义*/
19 #include <intrins.h>
20 //-----------------------------------------------------------------------------
21 // Global CONSTANTS
22 //-----------------------------------------------------------------------------
23
24 #define BAUDRATE 9600 /*UART0的波特率*/
25 #define SYSCLK 11059200 /*系统时钟*/
26 sbit BUZ = P3^5;
27 //-----------------------------------------------------------------------------
28 // Function PROTOTYPES
29 //-----------------------------------------------------------------------------
30
31 void SYSCLK_Init (void);
32 void PORT_Init (void);
33 void UART0_Init (void);
34
35 bit ReceiveBit; /*接收标志位*/
36 unsigned char temp;
37
38 /*延时子程序*/
39 void delay(unsigned int m)
40 {
41 1 unsigned int n;
42 1 n=0;
43 1 while(n < m)
44 1 {n++;}
45 1 return;
46 1 }
47 //-----------------------------------------------------------------------------
48 // MAIN Routine
49 //-----------------------------------------------------------------------------
50
51 void main(void)
52 {
53 1 unsigned char i;
54 1 WDTCN = 0xde; /*关看门狗*/
55 1 WDTCN = 0xad;
C51 COMPILER V7.20 UART0 10/18/2005 11:08:10 PAGE 2
56 1 ReceiveBit=0;
57 1 SYSCLK_Init (); /*初始化系统时钟*/
58 1 PORT_Init (); /*初始挂交叉开关和I/O口*/
59 1 UART0_Init (); /*初始化UART0*/
60 1 EA=1;
61 1 ES0=1;
62 1 while(1){
63 2 while (ReceiveBit==1) { /*是否接收到一个数据*/
64 3 ES0=0; /*关串口中断0*/
65 3 EA=0; /*关总中断*/
66 3 ReceiveBit=0; /*清接收标志位*/
67 3 delay(60000); /*延时*/
68 3 delay(60000);
69 3 delay(60000);
70 3 SBUF0=temp; /*将接收到数据送出*/
71 3 while(TI0==0); /*发送标志位是否产生*/
72 3 TI0=0; /*清发送标志位*/
73 3 BUZ=0; /*蜂鸣器响*/
74 3 for(i=0; i<3; i++) /*延时*/
75 3 {
76 4 delay(60000);
77 4 }
78 3 BUZ=1; /*蜂鸣器灭*/
79 3 ES0=1; /*开中断标志*/
80 3 EA=1;
81 3 }
82 2 _nop_();
83 2 }
84 1 }
85
86 //-----------------------------------------------------------------------------
87 // SYSCLK_Init
88 //-----------------------------------------------------------------------------
89 //
90 // This routine initializes the system clock to use an 22.1184MHz crystal
91 // as its clock source.
92 //
93 void SYSCLK_Init (void)
94 {
95 1 int i; /*延时计数器*/
96 1
97 1 OSCXCN = 0x67; /*打开外部晶体振荡器*/
98 1 for (i=0; i < 256; i++) ; /*延时*/
99 1
100 1 while (!(OSCXCN & 0x80)) ; /*查询外部晶体是否稳定起振*/
101 1
102 1 OSCICN = 0x88; /*用外部晶体作为系统时钟,并使能时钟丢失检测*/
103 1 }
104
105 //-----------------------------------------------------------------------------
106 // PORT_Init
107 //-----------------------------------------------------------------------------
108 //
109 // Configure the Crossbar and GPIO ports
110 //
111 void PORT_Init (void)
112 {
113 1 XBR0 = 0x04; /*使能UART0*/
114 1 XBR1 = 0x00;
115 1 XBR2 = 0x40; /*使能交叉开关和弱上拉*/
116 1 P0MDOUT |= 0x01; /*使能TX0作为推挽输出*/
117 1 P1MDOUT |= 0x40; /*时能P1.6 (LED)作为推挽输出*/
C51 COMPILER V7.20 UART0 10/18/2005 11:08:10 PAGE 3
118 1 P3MDOUT |= 0xdf;
119 1 }
120
121 //-----------------------------------------------------------------------------
122 // UART0_Init
123 //-----------------------------------------------------------------------------
124 //
125 // Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
126 //
127 void UART0_Init (void)
128 {
129 1 SCON0 = 0x50; /*SCON0:模式1,8位UART,时能RX*/
130 1 TMOD = 0x20; /*TMOD: 定时器工作再模式2, 8位重载*/
131 1 TH1 = -(SYSCLK/BAUDRATE/16); /*设置定时1用作波特率的重载值*/
132 1 TR1 = 1; /*开定时器1*/
133 1 CKCON |= 0x10; /*定时器1用系统时钟作为它的时基*/
134 1 PCON |= 0x80; /*SMOD00 = 1*/
135 1 }
136
137 /*串口中断0子程序*/
138 void UART0_ISR (void) interrupt 4
139 {
140 1 if(!TI0) //是发送中断还是接收中断
141 1 {
142 2 RI0 = 0; /*清接收标志位*/
143 2 temp =SBUF0; /*保存接收到的数据*/
144 2 ReceiveBit=1; /*置接收标志*/
145 2 }
146 1 TI0 = 0; /*清发送标志位*/
147 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 173 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -