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

    EEPW首頁 > 嵌入式系統 > 設計應用 > 通信波特率115.2K的串行通信C語言示例

    通信波特率115.2K的串行通信C語言示例

    作者: 時間:2012-02-19 來源:網絡 收藏

    //115.2k程序,校驗方式為簡單雙向校驗,
    //而且是必要的,因為任何采用中斷、crc等的方法
    //均很難保證速度和避免錯誤.
    //總體速度5KB/秒

    本文引用地址:http://www.czjhyjcfj.com/article/172057.htm

    //單片機程序
    //使用22.1184晶振
    unsigned char time,b_break,b_break_3;
    //35.555ms
    void int_t0(void) interrupt 1 {
    TH0=0;
    if ((++b_break_3)>2) b_break=1;
    time++;
    }

    //

    unsigned char rec(void) {
    TH0=0;b_break_3=0;b_break=0;
    while (RI==0) {
    if (b_break) return(1); //等待pc發送100ms超時
    }
    RI=0;
    SBUF=SBUF;
    return(SBUF);
    }
    /*返回1表示失敗*/
    bit sen(unsigned char d) {
    SBUF=d;
    TH0=0;b_break_3=0;b_break=0;
    while (RI==0) {
    if (b_break) return(1); //等待pc送回相同字節數據,100ms超時
    }
    RI=0;
    if (SBUF!=d) return(1);
    return(0);
    }

    void main(void) {
    unsigned int i;
    unsigned char d;
    EA=1;
    SCON=0xd8;PCON=0x80;
    TMOD=0x21;
    TL1=TH1=0xff;TR1=1;
    TH0=0;ET0=TR0=1;
    while (1) {
    d=rec();
    if ((!b_break)(d==0x55)) {
    d=rec();
    if (!b_break) {
    if (d==0xaa) {
    //接收到pc送來的要求發送指令0xaa55
    for (i=0;i1000;i++) {
    if (sen(i)) {
    //發送錯誤
    break;
    }
    }
    } else if (dd==0xaa) {
    //接收到pc送來的要求接收指令0xaaaa
    for (i=0;i1000;i++) {
    d=rec();
    if (!b_break) {
    //正確接收處理
    } else {
    //接收錯誤處理
    break;
    }
    }
    }
    }
    }
    }
    }

    //電腦程序tc2.0
    #i nclude stdio.h
    #i nclude dos.h
    #i nclude process.h
    #i nclude string.h
    #i nclude conio.h
    #i nclude dir.h>


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 永川市| 绍兴市| 兰州市| 赞皇县| 富平县| 凤凰县| 行唐县| 陆川县| 比如县| 皮山县| 福海县| 威宁| 得荣县| 色达县| 洛宁县| 平和县| 思南县| 田阳县| 会宁县| 新乡市| 会宁县| 霍邱县| 清远市| 两当县| 新昌县| 天门市| 栾城县| 祁门县| 伊宁县| 广元市| 慈溪市| 灵寿县| 通渭县| 永定县| 邢台县| 将乐县| 额敏县| 白河县| 建平县| 苏尼特左旗| 西平县|