这篇文章主要介绍了MCU如何自定义引脚做UART串口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
当(单片机)芯片自带的UART端口不够用时,我们可以考虑利用其它引脚作为UART.
串口RS232的数据协议有两种,我们以PC与8位/32位单片机间比较常用的异步模式为例子讲解.
单片机的TXD引脚先发一个低电平0给对方,然后发送5–8个位作为数据,最后发送1个位奇偶校验和1个位高电平1作为停止位.
以下例子为波特率9600bps,1个开始位,8个数据位,1个停止位 [10位数据,无奇偶校验位:9600-8-N-1]
波特率:每秒钟发送的字节位,如果baudrate=9600,也就是说,每发送1位耗时1000/9600=104uSec
/**************************************
利用51芯片定时器中断模拟串口信息发送
优点:可以自定义串口引脚,可以实现多个串口
格式: 9600-8-N-1
功能:模拟串口Send
*****************************************/
#include <REG52.H>
char g_nSendInx=0;
char g_nBuff=0;
char g_nFlag=0;
#define MY_TXD P1_0 //模拟TXD引脚
void Timer0Init(void)//104微秒@11.0592MHz
{
//1000ms/9600=104.166us
//使用这种方案,由于精确性问题,长时间传输会偶然出现几个误码
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x02; //设置定时器模式
TL0 = 0xA0; //设置定时初值
TH0 = 0xA0; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
/******************************
自定义串口发送单字符
******************************/
void MyUart_Send(char ch){
g_nFlag=0;
g_nBuff=ch;
TR0=1;
while(g_nFlag==0);
}
/******************************
自定义串口发送字符串
******************************/
void MyUart_String(char* str){
int i=0;
while(*(str+i)){
i++;
g_nFlag=0;
g_nBuff=*(str+i);
TR0=1;
while(g_nFlag==0);
}
}
/*
定时器0中断服务
*/
void Timer0_ISP() interrupt 1{
g_nSendInx++;//发送模拟第几位
if(g_nSendInx==1)
{
MY_TXD=0;//起始位拉低
}else if(g_nSendInx==10) //格式: 9600-8-N-1,完整10个字节
{
MY_TXD=1;//停止位拉高
TR0=0;
g_nSendInx=0;
g_nFlag=1;///发送完成标志位
}else{
MY_TXD=g_nBuff&0x01;////sbuffer_data
g_nBuff>>=1;
}
}
/**********************************
用Timer0定时中断模拟串口信号
**********************************/
void main (void) {
Timer0Init();///定时器初始化,周期为 1000ms/9600=104us
MyUart_String("===Welcome,My Uart===\r\n ");
MyUart_Send(0x61);
MyUart_Send(0x62);
MyUart_Send(0x63);
while (1);
}
感谢你能够认真阅读完这篇文章,希望小编分享的“MCU如何自定义引脚做UART串口”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3585008/blog/1624684