<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        新唐M051 UART0使用程序

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年09月01日   【字體:

         

         
        #include "UART.h"
        /****************************************
        *函數名稱:UartInit
        *輸    入:unFosc   晶振頻率
                  unBaud  波特率
        *輸    出:無
        *功    能:串口初始化
        ******************************************/
        VOID UartInit(UINT32 unFosc,UINT32 unBaud)
        {
            P3_MFP &= ~(P31_TXD0 | P30_RXD0);  
            P3_MFP |= (TXD0 | RXD0);      //P3.0 使能為串口0接收
                  //P3.1 使能為串口0發送
            UART0_Clock_EN;         //串口0時鐘使能
            UARTClkSource_ex12MHZ;  //串口時鐘選擇為外部晶振
            CLKDIV &= ~(15<<8);  //串口時鐘分頻為0
            IPRSTC2 |= UART0_RST;   //復位串口0
            IPRSTC2 &= ~UART0_RST;  //復位結束
            UA0_FCR |= TX_RST;      //發送FIFO復位
            UA0_FCR |= RX_RST;      //接收FIFO復位
            UA0_LCR &= ~PBE;      //校驗位功能取消
         UA0_LCR &= ~WLS;
            UA0_LCR |= WL_8BIT;     //8位數據位
            UA0_LCR &= NSB_ONE;     //1位停止位 
            UA0_BAUD |= DIV_X_EN|DIV_X_ONE;   //設置波特率分頻    
            UA0_BAUD |= ((unFosc / unBaud) -2); //波特率設置  UART_CLK/(A+2) = 115200, UART_CLK=12MHz
         UA0_IER |= RDA_IEN;     //接收數據中斷使能 
         NVIC_ISER |= UART0_INT;     //使能串口0中斷
        }
        /****************************************
        *函數名稱:UartSend
        *輸    入:pBuf     發送數據緩沖區
                  unNumOfBytes  發送字節總數
        *輸    出:無
        *功    能:串口發送數據
        ******************************************/
        VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
        {
          UINT32 i; 
          for(i=0; i<unNumOfBytes; i++)
          {
                 UA0_THR = *(pBuf+i);
                 while ((UA0_FSR&TX_EMPTY) != 0x00); //檢查發送FIFO是否為空 
          }
        }
        /****************************************
        *函數名稱:UART0_IRQHandler
        *輸    入:無
        *輸    出:無
        *功    能:串口0中斷服務函數
        ******************************************/
        VOID UART0_IRQHandler(VOID)
        {
            UINT8 ucData;
         if(UA0_ISR & RDA_INT)     //檢查是否接收數據中斷
         {  
          while(UA0_ISR & RDA_IF)    //獲取所有接收到的數據
          {
           while (UA0_FSR & RX_EMPTY);  //檢查接收FIFO是否為空    
           ucData = UA0_RBR;    //讀取數據
           UartSend(&ucData,1);   //發送數據
           //以下測試接收數據用
            if(ucData == 0x11)  P2_DOUT &= ~0xff;
            if(ucData == 0xff)  P2_DOUT |= 0xff;
          }
         }
        }
        /****************************************
        *函數名稱:main
        *輸    入:無
        *輸    出:無
        *功    能:函數主體
        ******************************************/
        INT32 main(VOID)
        {
        // unsigned char i,j;
             PROTECT_REG
          (            //ISP下載時保護FLASH存儲器
           PWRCON |= XTL12M_EN;      //默認時鐘源為外部晶振
           while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz時鐘穩定 
           CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設置外部晶振為系統時鐘
           //以下測試接收數據
           //P2_PMD=0x5555;          //GPIO設置為輸出模式  
          )
          UartInit(12000000,9600);      //波特率設置為9600bps
          while(1)
          {
        /*   j=0;
                        //發送數據0~255
            for(i=0; i<256; i++)
            {
               UartSend(&j,1);
             j++;
             Delayms(50);   
            } */
          }
        }
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮