新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51學習之串口收發

        51學習之串口收發

        作者: 時間:2016-11-23 來源:網絡 收藏
        自己寫了個接收程序,流程是上位機發給單片機,如果收到的是1,就點亮一個LED,同時把收到的再發到串口。編譯不通過,原因是我把中斷函數、接收函數等前加了個void,一直不明白加與不加有何區別。明天上網查下。去掉,有報警,但是編譯能通過,下進去,果然沒有預期的結果。也不知道到底是啥毛病,明天再找吧!
        明天調好這個,再做做收發,就先做自收發吧!


        調通了網上原程序。這個也通了。可實現上述功能,不過程序做的是點亮后,延時會熄滅。

        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit Led = P0^0;
        Delay()
        { int i,j;
        for(i=0;i<5000;i++)
        {
        for(j=0;j<30;j++);
        }
        }


        Uart_int()
        { SCON=0x50;
        TMOD=0x20;
        TH1 =0xfd;
        TL1 =0xfd;
        IE =0x90;
        TR1 =1;
        }
        UART_interrupt() interrupt 4
        { char m;
        ES = 0;
        if(TI)
        {
        TI=0;
        }
        else
        {
        RI=0;
        m=SBUF;

        if(m==0x31)
        {
        Led=0;
        Delay();
        Led=1;
        }
        SBUF=m;
        }
        ES = 1;
        }


        其實,開始我自己做的程序也行。錯就錯在關于m判斷上。我以前寫的是if(m==1),而從串口發31或1.而在C中,它只能判定16進制和10進制,所以我的ASCII 收成10進制是49,收成16進制是31,怎么也不會等于1.而把if(m==1)改成if(m==0x31)一試OK了。


        關鍵詞: 51串口收

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通道| 图们市| 溆浦县| 巩留县| 九寨沟县| 望江县| 南江县| 汽车| 白山市| 大荔县| 中牟县| 大方县| 永宁县| 韩城市| 天镇县| 房山区| 余干县| 水富县| 山东省| 漳州市| 邯郸县| 本溪| 来凤县| 定南县| 淄博市| 上杭县| 揭阳市| 灵川县| 济阳县| 泸西县| 呼图壁县| 景宁| 宣威市| 徐水县| 海阳市| 综艺| 池州市| 大冶市| 泾源县| 宣恩县| 从江县|