新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC12C5A16S2雙串口的使用

        STC12C5A16S2雙串口的使用

        作者: 時間:2016-11-18 來源:網絡 收藏
        stc雙串口的使用:

        MCU:STC15C5A16S2

        本文引用地址:http://www.104case.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; //設置定時器1,自動重裝數
        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;
        }


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

        /********************以上為串口1收發程序***********************/
        /********************以下為串口2收發程序***********************/
        void UartInit2()
        {
        S2CON=0X50; //8位可變波特率,無奇偶校驗
        BRT=RELOAD_COUNT;//波特率發生器裝載
        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();
        //接收電腦發來的數組
        while(Num>0);
        //把接收到的數組發給從機

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

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



        關鍵詞: STC12C5A16S2雙串

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 聊城市| 随州市| 启东市| 自治县| 平果县| 宝清县| 明光市| 遵化市| 平塘县| 皋兰县| 巴楚县| 榆树市| 锡林郭勒盟| 陵川县| 克东县| 锡林浩特市| 谷城县| 涡阳县| 上饶市| 孙吴县| 通化县| 民和| 塘沽区| 平凉市| 南澳县| 桃江县| 潮州市| 民和| 恩施市| 沿河| 扬中市| 楚雄市| 车致| 洪雅县| 当涂县| 兴宁市| 揭东县| 彩票| 南宫市| 偏关县| 晋江市|