• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機與PC通信總結

    51單片機與PC通信總結

    作者: 時間:2014-01-14 來源:網絡 收藏

    的串口,是個全雙工的串口,發送數據的同時,還可以接收數據。
    當串行發送完畢后,將在標志位 TI 置 1,同樣,當收到了數據后,也會在 RI 置 1。
    無論 RI 或 TI 出現了 1,只要串口中斷處于開放狀態,單片機都會進入串口中斷處理程序。
    在中斷程序中,要區分出來究竟是發送引起的中斷,還是接收引起的中斷,然后分別進行處理。

    常用的方法有:
    接收數據時,使用“中斷方式”,清除 RI 后,用一個變量通知主函數,收到新數據。
    發送數據時,也用“中斷方式”,清除 TI 后,用另一個變量通知主函數,數據發送完畢。
    這樣一來,收、發兩者基本一致,編寫程序也很規范、易懂。
    更重要的是,主函數中,不用在那兒死等發送完畢,可以有更多的時間查看其它的標志。
    與單片機串口通信的程序,要求如下:
    1、如果在電腦上發送以$開始的字符串,則將整個字符串原樣返回(字符串長度不是固定的)。
    2、如果接收到1,則將P00置高電平,接收到0,P10置低電平。(用來控制一個LED)
    單片機是STC89C52RC/晶振11.0592/波特率要求是9600或4800。

    注意:調試軟件我選擇“串口獵人”,串口獵人中選擇“字符格式發送” 。當然STC-ISP也是可以的
    ********************************************************/
    #include reg52.h>

    sbit LED=P0^0;
    unsigned char UART_buff;
    bit New_rec = 0, Send_ed = 1, Money = 0;

    void main ()
    {
    SCON = 0x50; //串口方式1, 10位UART(一個起始位“0”八個數據位一個停止位“1”), 允許接收.
    TMOD = 0x20; //T1方式2
    TH1 = 0xFD; //裝入自動重加載的處置,9600bps@11.0592MHz
    TL1 = 0xFD; //裝入初值
    TR1 = 1; //啟動定時器T1
    ES = 1; //開串口中斷,但不開定時器中斷,不允許定時器中斷
    EA = 1;

    while(Money == 0); //等著交費,呵呵,等著接收$.

    while(1)
    {
    if ((New_rec == 1) (Send_ed == 1))
    { //如果收到新數據及發送完畢
    SBUF = UART_buff; //那就發送.
    New_rec = 0;
    Send_ed = 0;
    }
    }
    }
    //----------------------------------------------
    void ser_int (void) interrupt 4
    {
    if(RI == 1) //如果收到.
    {
    RI = 0; //清除標志.
    New_rec = 1;
    UART_buff = SBUF; //接收.
    if(UART_buff == '1') LED = 1;
    if(UART_buff == '0') LED = 0;
    if(UART_buff == '$') Money = 1;
    }
    else //如果送畢.
    {
    TI = 0; //清除標志.
    Send_ed = 1;
    }
    }

    51單片機相關文章:51單片機教程


    單片機相關文章:單片機教程


    單片機相關文章:單片機視頻教程


    單片機相關文章:單片機工作原理


    數字通信相關文章:數字通信原理


    通信相關文章:通信原理




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 建德市| 伊宁县| 黄梅县| 奎屯市| 武冈市| 塔城市| 托克逊县| 堆龙德庆县| 万安县| 宁国市| 新宾| 平顶山市| 遵义县| 嘉峪关市| 尼勒克县| 阿拉尔市| 托克托县| 上林县| 清新县| 达孜县| 余姚市| 上林县| 通江县| 隆昌县| 聂荣县| 广元市| 荥经县| 伊春市| 呼伦贝尔市| 济宁市| 龙游县| 浪卡子县| 宁德市| 高陵县| 万年县| 南江县| 揭阳市| 中卫市| 鹰潭市| 乐安县| 侯马市|