📄 uart.c
字号:
#include <reg51.h>
#include <string.h>
#include "uart.h"
#include "myfun.h"
/*******************************************************
+-----------------------------------------+
|振南电子 原创程序模块 STC51串口操作 |
+-----------------------------------------+
此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
严禁随意用于商业目的,违者必究,后果自负
振南电子
->产品网站 http://www.znmcu.cn/
->产品论坛 http://bbs.znmcu.cn/
->产品网店 http://shop.znmcu.cn/
->产品咨询 QQ:987582714 MSN:yzn07@126.com
WW:yzn07
********************************************************/
/**************************************************************************
- 功能描述:51单片机的串口初始化
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:无
- 返回说明:无
- 注:振南的很多产品均采用串口来进行操作,所以正确的初始化串口十分重要
**************************************************************************/
void UART_Init()
{
PCON|=0x80; //PCON的最高位SMOD=1时波特率加倍
TMOD=0x20; //时器1为方式2 初值自动装入 产生波特率
TH1=0xfd; //定时器初始为0XFd,晶振为22.1184MHz,本函数实际产生的波特率为38400bps
TL1=0xfd; //同上
SCON=0x50; //串口设置为方式1,REN=1,允许接收
TR1=1; //启动定时器1
ES=1; //使能串口接收中断,
EA=1; //打开所有中断
}
/**************************************************************************
- 功能描述:51单片机的串口中断处理函数
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用(在此中断函数中常用来处理从串口收到的数据)
- 参数说明:无
- 返回说明:无
- 注:振南的很多产品,都是配合“超级终端”来进行演示的,在“超级终端”中
敲入的命令就是从计算机的串口发出,由单片机从串口接收,接收到的串口
数据就在此中断函数中进行处理,完成命令接收及处理、命令解析等工作。
**************************************************************************/
void sio_int() interrupt 4 using 3 //串口中断函数
{
ES=0;
//串口中断处理
/*
if(RI)
{
if(SBUF!=0x08) //如果接收到的是退格(ASCII码为0x08)
cmd_buf[counter++]=SBUF;
else
counter--;
RI=0;
}
if(SBUF==0x0d)
{
cmd_buf[counter-1]=0;
counter=0;
flag=1;
}
*/
ES=1;
}
/**************************************************************************
- 功能描述:51单片机的串口发送字节的函数
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:mydata:要发送的一个字节
- 返回说明:无
- 注:发送一个字节,是串口发送的基础操作
**************************************************************************/
void UART_Send_Byte(unsigned char mydata)
{
ES=0;
TI=0;
SBUF=mydata;
while(!TI);
TI=0;
ES=1;
}
/**************************************************************************
- 功能描述:51单片机的串口发送0d 0a ,即回车换行
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:无
- 返回说明:无
- 注:此函数就是发送0d 0a这两个字节,在“超级终端”上会有回车换行的效果
**************************************************************************/
void UART_Send_Enter()
{
UART_Send_Byte(0x0d);
UART_Send_Byte(0x0a);
}
/**************************************************************************
- 功能描述:51单片机的串口发送字符串
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:s:指向字符串的指针
- 返回说明:无
- 注:如果在字符串中有'\n',则会发送一个回车换行
**************************************************************************/
void UART_Send_Str(char *s)
{
int len=strlen(s)-1;
int i;
for(i=0;i<len;i++)
UART_Send_Byte(s[i]);
if(s[i]=='\n')
{
UART_Send_Enter();
}
else
{
UART_Send_Byte(s[i]);
}
}
/**************************************************************************
- 功能描述:51单片机的串口发送数值
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:dat:要发送的数值
- 返回说明:无
- 注:函数中会将数值转为相应的字符串,发送出去。比如 4567 转为 "4567"
**************************************************************************/
void UART_Put_Num(unsigned long dat)
{
char temp[20];
u32tostr(dat,temp);
UART_Send_Str(temp);
}
/**************************************************************************
- 功能描述:51单片机的串口发送调试信息
- 隶属模块:STC51串口操作
- 函数属性:外部,使用户使用
- 参数说明:inf:指向提示信息字符串的指针
dat:一个数值,前面的提示信息就是在说明这个数值的意义
- 返回说明:无
- 注:此函数在振南的工程中会经常看到,是方便调试用的
**************************************************************************/
void UART_Put_Inf(char *inf,unsigned long dat)
{
UART_Send_Str(inf);
UART_Put_Num(dat);
UART_Send_Str("\n");
}
/*
void binary(unsigned char dat)
{
unsigned char i;
unsigned char a[17];
for(i=0;i<8;i++)
{
a[i]=((dat<<i)&0x80)?'o':' ';
}
a[i]=0;
for(i=0;i<strlen(a);i++)
{
UART_Send_Byte(a[i]);
UART_Send_Byte(' ');
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -