新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 曼徹斯特編碼的接收C51程序

        曼徹斯特編碼的接收C51程序

        作者: 時間:2012-08-06 來源:網絡 收藏
        曼碼接收程序,常用在中,給大家分享:rxi(){// this routine gets called every time TMR0 overflowsif(T0IF)  //定時器中斷程序{TMR0 = PERIOD;             // 裝計時器初值T0IF = 0;     // 清定時器溢出標志XTMR++;                     // 外部的系統時鐘計時器加1RFcount++;     // 脈沖寬度計數器加1return;}if(RAIF)  //端口電平變化中斷程序{if (RFFull)                 // 如果接收位滿就退出return;RFBit = RFIn;               // 取樣信號接收的值RAIF = 0;switch (RFstate)            // 當前狀態{case TRFDATAUP:switch (RFcount){ case 4:case 5:  case 6:case 7:PORTA = PORTA;//啟動端口電平中斷break;case 8:case 9:case 10:case 11:case 12:B[Bptr] = 1;              // rotate if ( RFBit==0)  //如是有效的下跳變則該位的數據值為1,上跳變為0{ B[Bptr]+=1;          // shift in bit}if ( ( ++BitCount  7) == 0)Bptr++;                 // advance one byte if (BitCount == NBIT){RFstate = TRFreset;     // finished receiving RFFull = 1;} RFcount=0; //重新記時PORTA = PORTA;//啟動端口電平中斷break;default:  //超時或不足則退出接收RFstate = TRFSYNC;        // reset state machine in all other casesRFcount = 0;Bptr = 0;BitCount = 0;PORTA = PORTA;//啟動端口電平中斷}break;case TRFSYNC:if ( RFBit){ // rising edge detected  +---+                +---..//                       |   |  -Theader->   |   //                           +----------------+if ( ( RFcount  SHORT_HEAD) || ( RFcount >= LONG_HEAD)){RFstate = TRFreset;PORTA = PORTA;//啟動端口電平中斷break;                  // too short/long, no header}else{RFcount =0;             // restart counterRFstate= TRFDATAUP;PORTA = PORTA;//啟動端口電平中斷}}else{ // still lowRFcount=0;PORTA = PORTA;//啟動端口電平中斷}break;case TRFreset:default:RFstate = TRFSYNC;        // reset state machine in all other casesRFcount = 0;Bptr = 0;BitCount = 0;PORTA = PORTA;//啟動端口電平中斷break;} // switch} //電平中斷   } // rxi void InitReceiver(){IOCA = 2;T0IF = 0;T0IE = 1;                   // TMR0 overflow interruptRAIE = 1;     //使能端口電平變化中斷GIE = 1;                    // enable interruptsRFstate = TRFreset;         // reset state machine in all other casesRFFull = 0;                 // start with buffer emptyXTMR = 0;                   // start extended timerTMR0 = PERIOD;             // 裝計時器初值PORTA = PORTA;//啟動端口電平中斷}


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 克拉玛依市| 平远县| 社旗县| 普陀区| 新和县| 浮山县| 东山县| 扎鲁特旗| 汉阴县| 左云县| 台江县| 林甸县| 鹤壁市| 黄骅市| 无为县| 原阳县| 普宁市| 珠海市| 阳春市| 桑植县| 临清市| 平舆县| 合川市| 耒阳市| 北流市| 麻城市| 乾安县| 永登县| 贺州市| 繁峙县| 岚皋县| 沁阳市| 互助| 蒙城县| 台北市| 萍乡市| 沙坪坝区| 启东市| 临朐县| 榆中县| 温泉县|