• <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語言示例

    作者: 時間:2010-09-28 來源:網絡 收藏

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

    本文引用地址:http://www.czjhyjcfj.com/article/173198.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 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 留坝县| 密山市| 定安县| 巨鹿县| 黄陵县| 永川市| 石泉县| 井陉县| 保德县| 浑源县| 临洮县| 琼结县| 三原县| 定州市| 遵义县| 新安县| 普兰县| 东山县| 武威市| 许昌县| 弥渡县| 盐城市| 延津县| 鹤庆县| 杭锦旗| 白城市| 宁安市| 陈巴尔虎旗| 孝昌县| 惠水县| 项城市| 东乌珠穆沁旗| 揭阳市| 法库县| 福安市| 双流县| 平定县| 齐河县| 贡嘎县| 喀什市| 北京市|