真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MCU如何自定義引腳做UART串口

這篇文章主要介紹了MCU如何自定義引腳做UART串口,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司堅(jiān)實(shí)的技術(shù)研發(fā)基礎(chǔ)贏得了行業(yè)內(nèi)的良好口碑,公司成立十載來,為近千家企業(yè)提供過網(wǎng)站建設(shè)、軟件開發(fā)、搜索引擎優(yōu)化技術(shù)、互聯(lián)網(wǎng)大數(shù)據(jù)整合營(yíng)銷服務(wù),多年的技術(shù)服務(wù)成功經(jīng)驗(yàn)、眾多的客戶使我們能懂得更多,做得更好。"讓您的網(wǎng)站跑起來"是我們一直追求的目標(biāo)!

    當(dāng)(單片機(jī))芯片自帶的UART端口不夠用時(shí),我們可以考慮利用其它引腳作為UART.

    串口RS232的數(shù)據(jù)協(xié)議有兩種,我們以PC與8位/32位單片機(jī)間比較常用的異步模式為例子講解. 
單片機(jī)的TXD引腳先發(fā)一個(gè)低電平0給對(duì)方,然后發(fā)送5–8個(gè)位作為數(shù)據(jù),最后發(fā)送1個(gè)位奇偶校驗(yàn)和1個(gè)位高電平1作為停止位. 
以下例子為波特率9600bps,1個(gè)開始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位 [10位數(shù)據(jù),無奇偶校驗(yàn)位:9600-8-N-1] 
波特率:每秒鐘發(fā)送的字節(jié)位,如果baudrate=9600,也就是說,每發(fā)送1位耗時(shí)1000/9600=104uSec

/**************************************
   利用51芯片定時(shí)器中斷模擬串口信息發(fā)送
   優(yōu)點(diǎn):可以自定義串口引腳,可以實(shí)現(xiàn)多個(gè)串口
   格式: 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
 //使用這種方案,由于精確性問題,長(zhǎng)時(shí)間傳輸會(huì)偶然出現(xiàn)幾個(gè)誤碼
    TMOD &= 0xF0;       //設(shè)置定時(shí)器模式
    TMOD |= 0x02;       //設(shè)置定時(shí)器模式
    TL0 = 0xA0;     //設(shè)置定時(shí)初值
    TH0 = 0xA0;     //設(shè)置定時(shí)重載值
    TF0 = 0;        //清除TF0標(biāo)志
    TR0 = 1;        //定時(shí)器0開始計(jì)時(shí)

    ET0=1;
    EA=1;
}

/******************************
  自定義串口發(fā)送單字符  
******************************/
void MyUart_Send(char ch){
  g_nFlag=0;
  g_nBuff=ch;
  TR0=1;
  while(g_nFlag==0);
}


/******************************
  自定義串口發(fā)送字符串
******************************/
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);
  }
}


/*
   定時(shí)器0中斷服務(wù)
*/
void Timer0_ISP() interrupt 1{

  g_nSendInx++;//發(fā)送模擬第幾位

  if(g_nSendInx==1)
  {
     MY_TXD=0;//起始位拉低

  }else if(g_nSendInx==10)  //格式: 9600-8-N-1,完整10個(gè)字節(jié)
  {
     MY_TXD=1;//停止位拉高
     TR0=0;
     g_nSendInx=0;
     g_nFlag=1;///發(fā)送完成標(biāo)志位
  }else{

    MY_TXD=g_nBuff&0x01;////sbuffer_data
    g_nBuff>>=1;
  }


}

/**********************************
  用Timer0定時(shí)中斷模擬串口信號(hào)
**********************************/
void main (void) {

   Timer0Init();///定時(shí)器初始化,周期為 1000ms/9600=104us

   MyUart_String("===Welcome,My Uart===\r\n ");
   MyUart_Send(0x61);
   MyUart_Send(0x62);
   MyUart_Send(0x63);

  while (1);

 }

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MCU如何自定義引腳做UART串口”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!


分享標(biāo)題:MCU如何自定義引腳做UART串口
文章轉(zhuǎn)載:http://weahome.cn/article/jecgsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部