📄 uart.lst
字号:
C51 COMPILER V8.05a UART 11/03/2010 20:36:59 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <string.h>
3 #include "uart.h"
4 #include "myfun.h"
5
6 /*******************************************************
7
8 +-----------------------------------------+
9 |振南电子 原创程序模块 STC51串口操作 |
10 +-----------------------------------------+
11
12 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
13 严禁随意用于商业目的,违者必究,后果自负
14 振南电子
15 ->产品网站 http://www.znmcu.cn/
16 ->产品论坛 http://bbs.znmcu.cn/
17 ->产品网店 http://shop.znmcu.cn/
18 ->产品咨询 QQ:987582714 MSN:yzn07@126.com
19 WW:yzn07
20 ********************************************************/
21
22 /**************************************************************************
23 - 功能描述:51单片机的串口初始化
24 - 隶属模块:STC51串口操作
25 - 函数属性:外部,使用户使用
26 - 参数说明:无
27 - 返回说明:无
28 - 注:振南的很多产品均采用串口来进行操作,所以正确的初始化串口十分重要
29 **************************************************************************/
30
31 void UART_Init()
32 {
33 1 PCON|=0x80; //PCON的最高位SMOD=1时波特率加倍
34 1 TMOD=0x20; //时器1为方式2 初值自动装入 产生波特率
35 1 TH1=0xfd; //定时器初始为0XFd,晶振为22.1184MHz,本函数实际产生的波特率为38400bps
36 1 TL1=0xfd; //同上
37 1 SCON=0x50; //串口设置为方式1,REN=1,允许接收
38 1 TR1=1; //启动定时器1
39 1 ES=1; //使能串口接收中断,
40 1 EA=1; //打开所有中断
41 1 }
42
43 /**************************************************************************
44 - 功能描述:51单片机的串口中断处理函数
45 - 隶属模块:STC51串口操作
46 - 函数属性:外部,使用户使用(在此中断函数中常用来处理从串口收到的数据)
47 - 参数说明:无
48 - 返回说明:无
49 - 注:振南的很多产品,都是配合“超级终端”来进行演示的,在“超级终端”中
50 敲入的命令就是从计算机的串口发出,由单片机从串口接收,接收到的串口
51 数据就在此中断函数中进行处理,完成命令接收及处理、命令解析等工作。
52 **************************************************************************/
53
54 void sio_int() interrupt 4 using 3 //串口中断函数
55 {
C51 COMPILER V8.05a UART 11/03/2010 20:36:59 PAGE 2
56 1 ES=0;
57 1 //串口中断处理
58 1 /*
59 1 if(RI)
60 1 {
61 1 if(SBUF!=0x08) //如果接收到的是退格(ASCII码为0x08)
62 1 cmd_buf[counter++]=SBUF;
63 1 else
64 1 counter--;
65 1 RI=0;
66 1 }
67 1 if(SBUF==0x0d)
68 1 {
69 1 cmd_buf[counter-1]=0;
70 1 counter=0;
71 1 flag=1;
72 1 }
73 1 */
74 1 ES=1;
75 1 }
76
77 /**************************************************************************
78 - 功能描述:51单片机的串口发送字节的函数
79 - 隶属模块:STC51串口操作
80 - 函数属性:外部,使用户使用
81 - 参数说明:mydata:要发送的一个字节
82 - 返回说明:无
83 - 注:发送一个字节,是串口发送的基础操作
84 **************************************************************************/
85
86 void UART_Send_Byte(unsigned char mydata)
87 {
88 1 ES=0;
89 1 TI=0;
90 1 SBUF=mydata;
91 1 while(!TI);
92 1 TI=0;
93 1 ES=1;
94 1 }
95
96 /**************************************************************************
97 - 功能描述:51单片机的串口发送0d 0a ,即回车换行
98 - 隶属模块:STC51串口操作
99 - 函数属性:外部,使用户使用
100 - 参数说明:无
101 - 返回说明:无
102 - 注:此函数就是发送0d 0a这两个字节,在“超级终端”上会有回车换行的效果
103 **************************************************************************/
104
105 void UART_Send_Enter()
106 {
107 1 UART_Send_Byte(0x0d);
108 1 UART_Send_Byte(0x0a);
109 1 }
110
111 /**************************************************************************
112 - 功能描述:51单片机的串口发送字符串
113 - 隶属模块:STC51串口操作
114 - 函数属性:外部,使用户使用
115 - 参数说明:s:指向字符串的指针
116 - 返回说明:无
117 - 注:如果在字符串中有'\n',则会发送一个回车换行
C51 COMPILER V8.05a UART 11/03/2010 20:36:59 PAGE 3
118 **************************************************************************/
119
120 void UART_Send_Str(char *s)
121 {
122 1 int len=strlen(s)-1;
123 1 int i;
124 1 for(i=0;i<len;i++)
125 1 UART_Send_Byte(s[i]);
126 1 if(s[i]=='\n')
127 1 {
128 2 UART_Send_Enter();
129 2 }
130 1 else
131 1 {
132 2 UART_Send_Byte(s[i]);
133 2 }
134 1 }
135
136 /**************************************************************************
137 - 功能描述:51单片机的串口发送数值
138 - 隶属模块:STC51串口操作
139 - 函数属性:外部,使用户使用
140 - 参数说明:dat:要发送的数值
141 - 返回说明:无
142 - 注:函数中会将数值转为相应的字符串,发送出去。比如 4567 转为 "4567"
143 **************************************************************************/
144
145 void UART_Put_Num(unsigned long dat)
146 {
147 1 char temp[20];
148 1 u32tostr(dat,temp);
149 1 UART_Send_Str(temp);
150 1 }
151
152 /**************************************************************************
153 - 功能描述:51单片机的串口发送调试信息
154 - 隶属模块:STC51串口操作
155 - 函数属性:外部,使用户使用
156 - 参数说明:inf:指向提示信息字符串的指针
157 dat:一个数值,前面的提示信息就是在说明这个数值的意义
158 - 返回说明:无
159 - 注:此函数在振南的工程中会经常看到,是方便调试用的
160 **************************************************************************/
161
162 void UART_Put_Inf(char *inf,unsigned long dat)
163 {
164 1 UART_Send_Str(inf);
165 1 UART_Put_Num(dat);
166 1 UART_Send_Str("\n");
167 1 }
168
169 /*
170 void binary(unsigned char dat)
171 {
172 unsigned char i;
173 unsigned char a[17];
174 for(i=0;i<8;i++)
175 {
176 a[i]=((dat<<i)&0x80)?'o':' ';
177 }
178 a[i]=0;
179 for(i=0;i<strlen(a);i++)
C51 COMPILER V8.05a UART 11/03/2010 20:36:59 PAGE 4
180 {
181 UART_Send_Byte(a[i]);
182 UART_Send_Byte(' ');
183 }
184 }
185 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 187 ----
CONSTANT SIZE = 2 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 29
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -