<object id="x67hi"><bdo id="x67hi"></bdo></object>
    <span id="x67hi"></span>

    <li id="x67hi"><acronym id="x67hi"><cite id="x67hi"></cite></acronym></li>
    <tbody id="x67hi"></tbody>
    <rp id="x67hi"></rp>

    1. <strong id="x67hi"><sub id="x67hi"><address id="x67hi"></address></sub></strong><progress id="x67hi"><big id="x67hi"></big></progress>
      <th id="x67hi"></th>
      專注電子技術學習與研究
      當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

      基于51單片機之串口中斷方式實驗

      作者:佚名   來源:CaKen工作室   點擊數:  更新時間:2014年08月28日   【字體:

      **************************  Copyright(C) CaKe  ****************************************

      ========================================================================================
      ==============**版權信息   : CaKen工作室                            ==============
      ==============**文件名     : main.c              ==============
      ==============**作者       : CaKen             ==============
      ==============**版本號     : V1.0              ==============
      ==============**時間       : 2014.08.27               ==============
      ==============**功能描述   : 串口中斷實驗測試            ==============
      ========================================================================================
      ****************************************************************************************
       
      #include
      #define uchar unsigned  char
      #define uint unsigned int
      uchar idata trdata[]={'C','a','K','e','n','_', 'Z','H','C','K','-','5','1',0xaa};
      sbit KEY = P3^2;
      ***************************************************************************************
      函數名:UART_Init();
      調  用:();
       
      備  注:
      ****************************************************************************************
      void UART_Init(void)
      {
         SCON = 0x50;     //串口工作方式為1 , 串行允許接收
         TMOD = 0x20;     //定時器1 工作在方式2
         TH1  = 0xfd;     //波特率 9600bps fosc="11".0592MHz
         TL1  = 0xfd;
         EA   = 1;        //開總中斷
         ES   = 1;        //開串口中斷
         TR1  = 1;        //允許定時器1工作
      }
       
      ***************************************************************************************
      函數名:延時函數
      調  用:();
      ****************************************************************************************
       
      void delay1ms(uint i)
      {
      uchar j;
        while(i--)
        {
         for(j=0;j<115;j++)   //1ms基準延時程序
         {;}
        }
      }
       
      ***************************************************************************************
      函數名:Uart_SendChar();
      調  用:();
      參  數:
      返回值:
      結  果:
      備  注:發送字符
      ****************************************************************************************
       
      void Uart_SendChar(unsigned char dat)
      {
         SBUF = dat; //待發送的數據寫入緩沖區
         while(!TI); //等待發送完成
         TI = 0;     //清零發送標志位
      }
       
      ***************************************************************************************
      函數名:Uart_SendString();
      調  用:();
      參  數:
      返回值:
      結  果:
      備  注:發送字符串
      ****************************************************************************************
       
      void Uart_SendString()
      { uchar i=0;
          while(trdata[i]!=0xaa)
        {
         SBUF=trdata[i];
              while(!TI);
              TI=0;
              i++;
           }
      }
       
      ***************************************************************************************
      函數名:
      調  用:();
      參  數:
      返回值:
      結  果:
      備  注:
      ****************************************************************************************
      void main(void)
      {
          UART_Init(); //初始化串口
          while(1)
           {
          if(KEY==0)
           {
          delay1ms(20);
          if(KEY==0)
          {
            Uart_SendString();
         while(!KEY);//等待按鍵釋放
          }
        }
           }
      }
       
      ***************************************************************************************
      函數名:串口中斷函數
      ****************************************************************************************
       
      void INT_UartRcv(void) interrupt 4
      {
          unsigned char Rcv = 0;
          if(RI)                    //查詢接收標志位(有數據發送過來時置為1)
            {
               RI  = 0;        //接收標志位清零
               Rcv = SBUF;          //存儲緩沖區的數據
               P0  = SBUF;
               Uart_SendChar(Rcv);  //讓從計算機上傳到單片機的數據 , 傳回的計算機顯示
       
            }
      }
       
      =======================================================================================
       -------------------      CaKen工作室  原創作品     --------------------
       -------------------            CaKen工作室  版權所有       --------------------
      ========================================================================================
      關閉窗口

      相關文章

      1区1区3区4区产品乱码不卡|印度人交乣女bbw|男人的天堂在线观看