新聞中心

        STC15F2K60S2串口2程序

        作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
        下面是串口2的程序,昨天一直沒調(diào)出來的原因是由于串口發(fā)送完中斷標(biāo)志位,置位和清零上出了問題。其中為什么要把它,照著資料手冊(cè)上那種方式寫才行,這我現(xiàn)在也沒大清楚,我想可能這需要反匯編才看的出來,由于競(jìng)賽時(shí)間緊,只有暫且放下進(jìn)一步的分析,下面是程序代碼。
        #include "reg51.h"
        sfr P4 = 0xc0;
        sfr P5 = 0xc8;
        sfr AUXR = 0x8e ;
        sfr S2CON = 0x9a ;
        sfr S2BUF = 0x9b ;
        sfr T2H = 0xd6 ;
        sfr T2L = 0xd7 ;
        sfr IE2 = 0xaf ;
        sfr IP2 = 0xb5 ;
        #define S2RI 0x01 // S2CON.0
        #define S2TI 0x02 // S2CON.1
        unsigned char temp ;
        bit flag1 = 0 , flag2 = 0 , busy = 0 ;
        unsigned char xdata Uart1TxBuffer [20] = "杜興杰你必須加油個(gè)"; //
        void SendData ( unsigned char date ) ; //數(shù)據(jù)發(fā)送函數(shù)定義
        void Uart2Init(void) //9600bps@11.0592MHz
        {
        S2CON = 0x50; //8位數(shù)據(jù),可變波特率
        AUXR |= 0x04; //定時(shí)器2時(shí)鐘為Fosc,即1T
        T2L = 0xE0; //設(shè)定定時(shí)初值
        T2H = 0xFE; //設(shè)定定時(shí)初值
        AUXR |= 0x14; //啟動(dòng)定時(shí)器2 4 注意這里
        EA = 1 ;
        IE2 = 0x01 ; //開啟串口中斷ES2
        IP2 |= 0x00 ; //串口2優(yōu)先級(jí)0
        }
        void main( void )
        {
        char i ;
        P0 = 0 ;
        Uart2Init() ;
        SendData (C) ;
        SendData (C) ;
        for ( i = 0 ; i < 20 ; i++ )
        {
        SendData (Uart1TxBuffer[i]) ;
        }
        for ( i = 0 ; i < 20 ; i++ )
        {
        SendData (Uart1TxBuffer[i]) ;
        }
        SendData (C) ;
        SendData (C) ;
        while(1)
        {
        if( flag2 == 1 )
        {
        SendData ( temp );
        flag2 = 0 ;
        }
        }
        }
        void Uart2( void ) interrupt 8
        {
        if( S2CON & S2RI )
        {
        S2CON &= ~ S2RI ;
        temp = S2BUF ;
        flag2 = 1 ;
        }
        if( S2CON & S2TI )
        {
        S2CON &= ~ S2TI ;
        busy = 0 ;
        }
        }
        void SendData ( unsigned char date )
        {
        while ( busy ) ; //
        busy = 1 ;
        S2BUF = date ;
        // while ( !( S2CON & 0x02 ) ) ;
        // S2CON &= ~ S2TI ;
        }
        下一步是把串口1和串口2 加在一起,還有就是加入循環(huán)隊(duì)列實(shí)現(xiàn)流控等



        關(guān)鍵詞: STC15F2K60S2串口

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 德州市| 枞阳县| 沙坪坝区| 土默特右旗| 鄂州市| 连城县| 册亨县| 类乌齐县| 宁国市| 芜湖县| 顺昌县| 团风县| 平舆县| 金门县| 巨鹿县| 桓仁| 错那县| 遂平县| 阿城市| 贡觉县| 邹城市| 洞头县| 班玛县| 高安市| 武定县| 固镇县| 加查县| 南陵县| 遂溪县| 永济市| 岳西县| 灌阳县| 兴仁县| 久治县| 昌吉市| 拉萨市| 筠连县| 儋州市| 康马县| 襄城县| 沭阳县|