千家信息网

MCU如何自定义引脚做UART串口

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍了MCU如何自定义引脚做UART串口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。当(单片机)芯片自带的UART端口不
千家信息网最后更新 2024年09月22日MCU如何自定义引脚做UART串口

这篇文章主要介绍了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          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串口"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0