久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4876|回復: 1
收起左側

STC15W4K56S2串口3 4收發問題討論

[復制鏈接]
ID:349045 發表于 2018-6-10 21:43 | 顯示全部樓層 |閱讀模式
本帖最后由 tembo09 于 2018-6-10 21:45 編輯

現在STC15W4K56S2串口3 串口4都能發數據,就是接收中斷不響應,求解,有例程借鑒下。謝謝

void Uart1234_Init(void)
{       
    P_SW1=0X00;          //選擇P30 P31為串口1
        P_SW2=0X00;          //選擇P10 P11為串口2,選擇P00 P01為串口3,選擇P02 P03為串口4
       
        //串口1配置        9600bps@11.0592MHz
        SCON = 0x50;                 //8位數據,可變波特率
        AUXR |= 0x40;                 //定時器1時鐘為Fosc,即1T
        AUXR &= 0xFE;                 //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                 //設定定時器1為16位自動重裝方式
        TL1 = 0xE0;                         //設定定時初值
        TH1 = 0xFE;                         //設定定時初值
        ET1 = 0;                         //禁止定時器1中斷
        TR1 = 1;                         //啟動定時器1
       
        //串口2配置        115200bps@11.0592MHz
        S2CON = 0x50;                 //串口2的8位數據,可變波特率       
    //串口3配置        115200bps@11.0592MHz
        S3CON |= 0x10;                 //串口3啟動串行接收器
        S3CON &= 0xBF;                 //串口3選擇定時器2為波特率發生器,8位數據,可變波特率
       
        AUXR |= 0x04;                 //定時器2時鐘為Fosc,即1T
        T2L = 0xE8;                     //設定定時初值0xE0
        T2H = 0xFF;          //設定定時初值0xFE
        AUXR |= 0x10;        //啟動定時器2
       
        //串口4配置        9600bps@11.0592MHz       
        S4CON = 0x10;                 //8位數據,可變波特率
        S4CON |= 0x40;                 //串口4選擇定時器4為波特率發生器
        T4T3M |= 0x20;                 //定時器4時鐘為Fosc,即1T
        T4L = 0xE0;                         //設定定時初值
        T4H = 0xFE;                         //設定定時初值
        T4T3M |= 0x80;                 //啟動定時器4

        ES = 1;              // 串口1中斷打開                              
          IE2 |= 0x01;         // 串口2中斷打開
        IE2 |= 0x08;         // 串口3中斷打開
    IE2 |= 0x10;         // 串口4中斷打開
}


void Uart4() interrupt 18        using 1   
{                       
    IE2 &= 0xEF;                                                           // 串口4中斷關閉  
        if(S4CON & S4RI)                                            //串行接收到停止位的中間時刻時,該位置1
        {
                S4CON &= ~S4RI;                                          //清除S4CON寄存器對應S4RI位(該位必須軟件清零)
                uart_count=0;
                rev_buff4[uart_count] = S4BUF;     //把串口4緩存SBUF寄存器數據依次存放到數組Rec_Buf4中
                uart_count++;               
            if(uart_count>buff_max)            //接收數大于定義接收數組最大個數時,覆蓋接收數組之前值
                {
                                uart_count = 0;
                }
        }
        if(S4CON & S4TI)             //在停止位開始發送時,該位置1
        {
                S4CON &= ~S4TI;          //清除S4CON寄存器對應S4TI位(該位必須軟件清零)
        }
         IE2 |= 0x10;                // 串口4中斷打開
}


回復

使用道具 舉報

ID:349045 發表于 2018-6-10 21:44 | 顯示全部樓層
void Uart1234_Init(void)
{       
    P_SW1=0X00;          //選擇P30 P31為串口1
        P_SW2=0X00;          //選擇P10 P11為串口2,選擇P00 P01為串口3,選擇P02 P03為串口4
       
        //串口1配置        9600bps@11.0592MHz
        SCON = 0x50;                 //8位數據,可變波特率
        AUXR |= 0x40;                 //定時器1時鐘為Fosc,即1T
        AUXR &= 0xFE;                 //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                 //設定定時器1為16位自動重裝方式
        TL1 = 0xE0;                         //設定定時初值
        TH1 = 0xFE;                         //設定定時初值
        ET1 = 0;                         //禁止定時器1中斷
        TR1 = 1;                         //啟動定時器1
       
        //串口2配置        115200bps@11.0592MHz
        S2CON = 0x50;                 //串口2的8位數據,可變波特率       
    //串口3配置        115200bps@11.0592MHz
        S3CON |= 0x10;                 //串口3啟動串行接收器
        S3CON &= 0xBF;                 //串口3選擇定時器2為波特率發生器,8位數據,可變波特率
       
        AUXR |= 0x04;                 //定時器2時鐘為Fosc,即1T
        T2L = 0xE8;                     //設定定時初值0xE0
        T2H = 0xFF;          //設定定時初值0xFE
        AUXR |= 0x10;        //啟動定時器2
       
        //串口4配置        9600bps@11.0592MHz       
        S4CON = 0x10;                 //8位數據,可變波特率
        S4CON |= 0x40;                 //串口4選擇定時器4為波特率發生器
        T4T3M |= 0x20;                 //定時器4時鐘為Fosc,即1T
        T4L = 0xE0;                         //設定定時初值
        T4H = 0xFE;                         //設定定時初值
        T4T3M |= 0x80;                 //啟動定時器4

        ES = 1;              // 串口1中斷打開                              
          IE2 |= 0x01;         // 串口2中斷打開
        IE2 |= 0x08;         // 串口3中斷打開
    IE2 |= 0x10;         // 串口4中斷打開
}


void Uart4() interrupt 18        using 1   
{                       
    IE2 &= 0xEF;                                                           // 串口4中斷關閉  
        if(S4CON & S4RI)                                            //串行接收到停止位的中間時刻時,該位置1
        {
                S4CON &= ~S4RI;                                          //清除S4CON寄存器對應S4RI位(該位必須軟件清零)
                uart_count=0;
                rev_buff4[uart_count] = S4BUF;     //把串口4緩存SBUF寄存器數據依次存放到數組Rec_Buf4中
                uart_count++;               
            if(uart_count>buff_max)            //接收數大于定義接收數組最大個數時,覆蓋接收數組之前值
                {
                                uart_count = 0;
                }
        }
        if(S4CON & S4TI)             //在停止位開始發送時,該位置1
        {
                S4CON &= ~S4TI;          //清除S4CON寄存器對應S4TI位(該位必須軟件清零)
        }
         IE2 |= 0x10;                // 串口4中斷打開
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月天天丁香婷婷在线中 | 国产毛片视频 | 久久www免费视频 | 国产三区四区 | av网站免费看 | 国产精品国产 | 国产精品亚洲精品久久 | 亚洲69p | 中文字幕在线观看一区二区 | 成人性视频免费网站 | 久久精品黄色 | 国产精品自拍视频网站 | 国产精品视频一二三区 | 国产成人精品久久 | 成人激情视频免费在线观看 | 日韩国产一区二区三区 | 国产日韩一区二区三区 | 日韩一及片 | 久草热线 | 久久久久久久久久一区 | 在线视频日韩精品 | 免费精品久久久久久中文字幕 | 国产精品高潮呻吟久久av黑人 | 欧美一级片在线看 | 久久久久香蕉视频 | 成人做爰www免费看视频网站 | 亚洲第一在线视频 | 中文字幕日韩欧美一区二区三区 | 久久这里有精品 | 国产精品不卡视频 | 国产精品亚洲一区二区三区在线 | 欧产日产国产精品国产 | jav成人av免费播放 | 岛国av在线免费观看 | 久久久久一区二区三区四区 | 在线国产一区 | www国产成人免费观看视频,深夜成人网 | 久久免费观看视频 | 欧美不卡网站 | 日韩精品1区2区3区 成人黄页在线观看 | 久久精品久久久久久 |