色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          C8051F330串口UART0示例程序

          作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏

          //****************************************************************************
          // 功能:C8051F330串口UART0示例程序
          //****************************************************************************
          //使用F330,串口為P0.4(TX0),P0.5(RX0);
          //-----------------------------------------------------------------------------
          // UART0.c
          //-----------------------------------------------------------------------------

          本文引用地址:http://cafeforensic.com/article/201611/320381.htm

          //-----------------------------------------------------------------------------
          // 所包含的頭文件
          //------------------------------------------------------------------------
          #include
          //#include

          //-----------------------------------------------------------------------------
          // 常量定義
          //-----------------------------------------------------------------------------
          // 系統(tǒng)工作頻率
          #define SYSCLK 24500000
          // 串口工作波特率
          #define BAUDRATE 9600

          //-----------------------------------------------------------------------------
          // 功能函數(shù)
          //-----------------------------------------------------------------------------
          void SYSCLK_Init(void);
          void PORT_Init(void);
          void UART0_Init(void);
          void Uart0_Transmit(unsigned char tmp);
          void sendstr(unsigned char*tmp);
          unsigned char temp ;
          void delay_1ms()
          {
          unsigned int j ;
          for(j=3060;j>0;j--);
          }
          void delay_ms(unsigned int i)
          {
          for(;i>0;i--)delay_1ms();
          }
          //-----------------------------------------------------------------------------
          // 主程序
          //-----------------------------------------------------------------------------

          void main(void)
          {
          PCA0MD&=~0x40 ;
          // 禁止看門狗
          PORT_Init();
          // 初始化端口I/O
          SYSCLK_Init();
          // 初始化系統(tǒng)時(shí)鐘
          UART0_Init();
          // 串口初始化
          EA=1 ;
          ES0=1 ;
          while(1)
          {
          delay_ms(1000);
          sendstr("Welcome to Julys Hut!");
          //Uart0_Transmit(0x00);
          }
          }

          //-----------------------------------------------------------------------------
          // 端口初始化
          //-----------------------------------------------------------------------------
          //
          // 配置交叉開關(guān)和通用IO
          //
          // P0.4 - UART TX0
          // P0.5 - UART RX0

          void PORT_Init(void)
          {
          P0MDOUT|=0x10 ;
          // 使能 UTX 為推挽輸出
          XBR0=0x01 ;
          // 使能 UART0 占用 P0.4(TXD) 和 P0.5(RXD)
          XBR1=0x40 ;
          //使能交叉開關(guān)
          }

          //-----------------------------------------------------------------------------
          // 系統(tǒng)時(shí)鐘初始化
          //-----------------------------------------------------------------------------
          void SYSCLK_Init(void)
          {
          OSCICN|=0x03 ;
          // 配置內(nèi)部振蕩器的的最大頻率
          RSTSRC=0x04 ;
          // 使能始終丟失檢測(cè)寄存器
          }

          //-----------------------------------------------------------------------------
          // 串口UART0初始化
          //-----------------------------------------------------------------------------
          void UART0_Init(void)
          {
          SCON0=0x10 ;
          if(SYSCLK/BAUDRATE/2/256<1)
          {
          TH1=-(SYSCLK/BAUDRATE/2);
          CKCON&=~0x0B ;
          CKCON|=0x08 ;
          }
          else if(SYSCLK/BAUDRATE/2/256<4)
          {
          TH1=-(SYSCLK/BAUDRATE/2/4);
          CKCON&=~0x0B ;
          CKCON|=0x09 ;
          }
          else if(SYSCLK/BAUDRATE/2/256<12)
          {
          TH1=-(SYSCLK/BAUDRATE/2/12);
          CKCON&=~0x0B ;
          }
          else
          {
          TH1=-(SYSCLK/BAUDRATE/2/48);
          CKCON&=~0x0B ;
          CKCON|=0x02 ;
          }

          TL1=TH1 ;
          TMOD&=~0xf0 ;
          TMOD|=0x20 ;
          TR1=1 ;
          // TI0 = 1;
          }
          //-----------------------------------------------------------
          // 串口UART0中斷
          //-----------------------------------------------------------
          //中斷向量0x0023
          void UATR0_ISR(void)interrupt 4
          {
          //Rx、Tx共用中斷
          //接收中斷
          if(!TI0)
          {
          RI0=0 ;
          temp=SBUF0 ;
          Uart0_Transmit(temp);
          }
          //發(fā)送中斷
          else TI0=0 ;
          }
          //-----------------------------------------------------------
          // 串口UART0發(fā)送
          //-----------------------------------------------------------
          void Uart0_Transmit(unsigned char tmp)
          {
          ES0=0 ;
          //關(guān)UART0中斷
          EA=0 ;
          //關(guān)全局中斷
          SBUF0=tmp ;
          while(TI0==0);
          //TI0=0 ;
          ES0=1 ;
          //開UART0中斷
          EA=1 ;
          //開全局中斷

          }
          //-----------------------------------------------------------
          // 發(fā)送字符串
          //-----------------------------------------------------------
          void sendstr(unsigned char*tmp)
          {
          while(*tmp)
          {
          Uart0_Transmit(*tmp++);
          }
          }



          關(guān)鍵詞: C8051F330串口UART

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉