<nobr id="trllz"><thead id="trllz"></thead></nobr>

      <span id="trllz"></span>
        <progress id="trllz"></progress>

          <strike id="trllz"></strike>

              <em id="trllz"></em>

                專注電子技術學習與研究
                當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

                51串口通信程序(帶詳細注釋)

                作者:佚名   來源:本站原創   點擊數:  更新時間:2012年04月24日   【字體:

                #include<reg51.h>
                #include<string.h> //后面有一個比較函數
                #define uchar unsigned char
                #define uint unsigned int
                bit  UART_Flag=0;  //定義串口接收標志位

                uchar  str[50];   //定義一數組
                uchar length=0;  //數組長度從0開始
                void init() //初始化uart
                {
                 
                 
                   TMOD=0X20;  //定時器1定時器方式  工作模式2,可自動重載的8位計數器常把定時/計數器1以模式2作為串行口波特率發生器

                 SCON=0X50; //選擇工作模式1使能接收,允許發送,允許接收

                    EA=1; //開總中斷

                 ES=1;  //打開串口中斷
                 ET1=0;  //打開定時器中斷

                        PCON=0X80; //8位自動重載,波特率加倍

                 TH1=0XFF;  //用22.1184 mhz波特率

                 TL1=0XFF;
                  
                 TR1=1; //打開中時器

                    


                }
                void UART_Putch(uchar dat)  //輸出一個字符
                {
                 SBUF=dat; //把數據送給sbuf緩存器中

                 while(TI!=1);//發送標志位 TI如果發送了為1,沒發送為0,沒發送等待,到了退出循環

                 TI=0;  //到了,TI清為0

                }
                void init1() interrupt 4  //uart中斷 ,4為串口中斷
                {
                 
                  if(RI==1)  //收到數據
                  {
                     uchar m=SBUF; //m為計算機發送給串口的數據,例,open //總體思想是,計算機通知串口,我要發數據了
                  RI=0;   //收到清0
                 
                     if(m=='\r')   //判斷m這位數據有無\r
                       {
                       UART_Putch('\r');  //回車
                       UART_Putch('\n');  // 換行
                    str[length]='\0'; //數據最后位加0標志位表示發完了數據
                    UART_Flag=1;  // 傳 完 標 志 位
                        }
                   else if(m=='\n')
                  {
                 
                  }
                     else if(m=='\b')//b表退格 //下面幾句表刪鋤
                       {
                         UART_Putch('\b');

                    UART_Putch(' ');

                    UART_Putch('\b');

                    length=length-1; //刪鋤了后總長度減一
                       }
                 
                   
                     else
                     {
                     str[length++]=m; //比如m為open,先傳0后傳p,length加一
                  UART_Putch(m);    //輸出 比如open
                     }
                 
                 }
                }
                void check(char *str)  //計算機發一數據,我來檢查,
                {
                   if( strcmp("open",str)==0 ) //比較兩數是否相同,相同為0,不同為1 //要加string.h頭文件
                   {
                       UART_Putch('o'); //計算機中寫入open我回復ok
                    UART_Putch('k');
                       UART_Putch('\r'); //回車是跑到這一行的最前      UART_Putch('\n'); //換行是跳到下一行
                  }
                   else if( strcmp("close",str)==0 )
                   {
                       UART_Putch('o');
                    UART_Putch('k');
                       UART_Putch('\r');
                       UART_Putch('\n');
                 
                 
                   }
                   else    //否則出錯
                   {
                       UART_Putch('e');
                    UART_Putch('r');
                       UART_Putch('r');
                       UART_Putch('o');
                       UART_Putch('r');
                       UART_Putch('!');
                    UART_Putch('\r');
                    UART_Putch('\n');
                   }


                }
                void main()
                {
                  init();
                  while(1)
                  {
                    if(UART_Flag==1)  //接收標志位表示接收完成
                     {
                     check(str);//檢查
                     length=0; //長度清0
                     UART_Flag=0;//標志位清0
                  }
                 
                  }


                }

                關閉窗口

                相關文章

                中文一午夜乱理片无码

                    <nobr id="trllz"><thead id="trllz"></thead></nobr>

                    <span id="trllz"></span>
                      <progress id="trllz"></progress>

                        <strike id="trllz"></strike>

                            <em id="trllz"></em>