📄 mcu_uart.lst
字号:
C51 COMPILER V8.15 MCU_UART 01/20/2009 12:59:36 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE MCU_UART
OBJECT MODULE PLACED IN .\debug\MCU_UART.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MCU_UART.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\debug\MCU_UART.lst) OBJE
-CT(.\debug\MCU_UART.obj)
line level source
1 #include "reg52.h"
2 #include "uart.h"
3
4 extern u8_t xdata mydata[1024];
5
6 extern u8_t xdata ComRxdBuf[COM_RXD_BUFF_SIZE]; //串口的接收缓冲区
7 extern u8_t xdata ComTxdBuf[COM_TXD_BUFF_SIZE]; //串口的发送缓冲区
8
9 u16_t idata ComTxdRead; //串口接收读指针
10 u16_t idata ComRxdRead; //串口发送读指针
11 u16_t idata ComRxdWrite; //串口接收写指针
12 u16_t idata ComTxdWrite; //串口发送写指针
13 bit ComTxdBufempty; //发送结束
14
15 /******************************************************************************
16 **UART_Init
17 **Value:
18 **Return Value:
19 **Parameters::T1 产生波特率 9600 8/N/1
20 ******************************************************************************/
21
22 void UART_Init()
23 {
24 1 SCON = 0x50; /*SCON0:模式1,8位UART,时能RX*/
25 1 TMOD |= 0x20; /*TMOD: 定时器工作再模式2, 8位重载*/
26 1 TH1 = 0xfa; /*设置定时1用作波特率的重载值*/
27 1 TL1 = 0xfa;
28 1 TR1 = 1; /*开定时器1*/
29 1 PCON |= 0x00; /*SMOD00 = 1*/
30 1 EA=1;
31 1 ES=1;
32 1 ComTxdBufempty=1;
33 1 }
34
35 /******************************************************************************
36 **serial(void) interrupt 4
37 **Value:
38 **Return Value:
39 **Parameters:
40 ******************************************************************************/
41
42 void serial(void) interrupt 4
43 {
44 1 u8_t temp;
45 1
46 1 if(TI)
47 1 {
48 2 TI=0;
49 2 if(ComTxdRead!=ComTxdWrite)
50 2 {
51 3 SBUF=ComTxdBuf[ComTxdRead];
52 3 ComTxdRead++;
53 3 if(ComTxdRead==COM_TXD_BUFF_SIZE)
54 3 {
C51 COMPILER V8.15 MCU_UART 01/20/2009 12:59:36 PAGE 2
55 4 ComTxdRead=0;
56 4 ComTxdBufempty=0;
57 4 }
58 3 }
59 2 else
60 2 {
61 3 ComTxdBufempty=1;
62 3 }
63 2 }
64 1
65 1
66 1 if (RI)
67 1 {
68 2 RI=0;
69 2 temp=SBUF;
70 2 ComRxdBuf[ComRxdWrite]=temp;
71 2
72 2 ComRxdWrite++;
73 2 if(ComRxdWrite==COM_TXD_BUFF_SIZE)
74 2 {
75 3 ComRxdWrite=0;
76 3 }
77 2
78 2 }
79 1
80 1
81 1 }
82
83 /**********************************************************************
84 **函数原型: void Printf_Char(u8_t ascii)
85 **参数说明: ascii: 发送到串口的ASCII
86 **返 回 值: 无
87 **说 明: 往串口发送一个字符
88 ************************************************************************/
89
90 void Printf_Char(u8_t ascii)
91 {
92 1 EA=0;
93 1 ComTxdBuf[ComTxdWrite]=ascii;
94 1 ComTxdWrite++;
95 1 if(ComTxdWrite==COM_TXD_BUFF_SIZE)
96 1 {
97 2 ComTxdWrite=0;
98 2 }
99 1
100 1 if(ComTxdBufempty)
101 1 {
102 2 ComTxdBufempty=0;
103 2 TI=1;
104 2 }
105 1
106 1
107 1 EA=1;
108 1 }
109
110 /**********************************************************************
111 **函数原型: void Printf_String(u8_t code *string)
112 **参数说明: string: 字符串的起始地址
113 **返 回 值: 无
114 **说 明: 向串口发送字符串,碰到0x00结束
115 ************************************************************************/
116 void Printf_String(u8_t *string)
C51 COMPILER V8.15 MCU_UART 01/20/2009 12:59:36 PAGE 3
117 {
118 1 while(*string!=0)
119 1 {
120 2 Printf_Char(*string);
121 2 string++;
122 2 }
123 1 }
124
125 /**********************************************************************
126 **函数原型: u8_t Get_Char()
127 **参数说明: 无
128 **返 回 值: 无
129 **说 明: 从串口接收一个字符
130 ************************************************************************/
131 unsigned char Get_Char()
132 {unsigned char temp;
133 1 temp = ComRxdBuf[ComRxdRead];
134 1 ComRxdRead++;
135 1 if(ComRxdRead == COM_RXD_BUFF_SIZE){ComRxdRead=0;}
136 1 return(temp);
137 1 }
138
139
140 /**********************************************************************
141 **函数原型: void Copy_Send_Data( )
142 **入口参数: 无
143 **出口参数: u16_t ii
144 **返 回 值: 返回0或返回从串口接收到数据的长度
145 **功能说明: 检查重发缓冲区是否为空,将串口输入的数据发到发送缓冲区
146 ***********************************************************************/
147 u16_t Copy_Send_Data()
148 {
149 1 u16_t ii;
150 1
151 1 for(ii=0;ii<1024;ii++)
152 1 {
153 2 if(ComRxdRead!=ComRxdWrite)
154 2 {
155 3 mydata[ii]=Get_Char();
156 3
157 3 }
158 2
159 2 else{ break; };
160 2 }
161 1 return(ii);
162 1 }
163
164 /*just end*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 326 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 8 ----
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 + -