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


新闻标题:MCU如何自定义引脚做UART串口
文章网址:http://myzitong.com/article/jecgsc.html