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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STC12C5A16S2雙串口的使用

          STC12C5A16S2雙串口的使用

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          stc雙串口的使用:

          MCU:STC15C5A16S2

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

          時鐘:11.0592

          S2SMOD=1,BRTX12=1;

          串口波特率:9600

          #include
          #define uint8 unsigned char
          #define uint16 unsigned int

          #define Fclk 11059200UL /*使用22.1184M晶體*/
          #define BitRate 9600UL /*波特率定義為9600*/
          #define RELOAD_COUNT 0Xb8

          volatile uint8 Buf[4]={0x00,0x00,0x00,0x00};//
          volatile uint8 BufBack[4]={0x00,0x00,0x00,0x00};
          uint8 Num=4;


          void UartInit()
          {
          SCON=0X50;//8位可變波特率,無奇偶校驗
          TMOD=0X21; //設(shè)置定時器1,自動重裝數(shù)
          TH1=256-Fclk/(BitRate*12*16); //計算定時器重裝值
          TL1=256-Fclk/(BitRate*12*16);
          PCON|=0X80; //波特率加倍
          TR1=1; //開定時器1
          REN=1; //允許接收
          ES=1; //允許串口1中斷
          EA=1; //開總中斷
          }
          void UartSendByte(unsigned char i)
          {
          ES=0;
          TI=0;
          SBUF=i;
          while(TI==0);
          TI=0;
          ES=1;
          }


          /********************************************************************
          函數(shù)功能:串口中斷處理。
          入口參數(shù):無。
          返 回:無。
          備 注:無。
          ********************************************************************/
          void UartISR(void) interrupt 4
          {
          if(RI) //收到數(shù)據(jù)
          {
          if(Num>0)
          {
          Buf[4-Num]=SBUF;
          Num--;
          }
          RI=0; //清中斷請求
          }
          }

          /********************以上為串口1收發(fā)程序***********************/
          /********************以下為串口2收發(fā)程序***********************/
          void UartInit2()
          {
          S2CON=0X50; //8位可變波特率,無奇偶校驗
          BRT=RELOAD_COUNT;//波特率發(fā)生器裝載
          AUXR=0X1c;

          IE2=0X01; //允許串口2中斷
          EA=1;
          }


          void UartSendByte2(unsigned char i)
          {
          uint8 temp=0;
          IE2=0X00;
          S2CON=S2CON&0XFD;
          S2BUF=i;
          do{
          temp=S2CON;
          temp=temp&0x02;
          }while(temp==0);
          S2CON=S2CON&0XFD;
          IE2=0X01;
          }

          void UartISR2(void) interrupt 8
          {
          unsigned char k=0;
          k=S2CON;
          k=k&0X01;
          if(k==1)
          {
          S2CON=S2CON&0XFE;
          if(Num>0)
          {
          BufBack[4-Num]=S2BUF;//
          Num--;
          }
          }
          else
          {
          S2CON=S2CON&0XFD;
          }
          }


          void main()
          {
          UartInit();
          UartInit2();
          //接收電腦發(fā)來的數(shù)組
          while(Num>0);
          //把接收到的數(shù)組發(fā)給從機(jī)

          UartSendByte2(Buf[0]);
          UartSendByte2(Buf[1]);
          UartSendByte2(Buf[2]);
          UartSendByte2(Buf[3]);

          //接收從機(jī)回來的數(shù)據(jù)
          Num=4;
          while(Num>0);
          //把從機(jī)回來的數(shù)據(jù)發(fā)回給電腦
          UartSendByte(BufBack[0]);
          UartSendByte(BufBack[1]);
          UartSendByte(BufBack[2]);
          UartSendByte(BufBack[3]);
          while(1);
          }



          關(guān)鍵詞: STC12C5A16S2雙串

          評論


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

          關(guān)閉