为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

曼彻斯特编码接收

2017-09-27 5页 doc 16KB 27阅读

用户头像

is_740226

暂无简介

举报
曼彻斯特编码接收曼彻斯特编码接收 曼彻斯特编码的接收 rxi() { // this routine gets called every time TMR0 overflows if(T0IF) //定时器中断程序 { TMR0 = PERIOD; // 装计时器初值 T0IF = 0; // 清定时器溢出标志 XTMR++; // 外部的系统时钟计时器加1 RFcount++; // 脉冲宽度计数器加1 return; } if(RAIF) //端口电平变化中断程序 { if (RFFull) // 如果接收位...
曼彻斯特编码接收
曼彻斯特编码接收 曼彻斯特编码的接收 rxi() { // this routine gets called every time TMR0 overflows if(T0IF) //定时器中断程序 { TMR0 = PERIOD; // 装计时器初值 T0IF = 0; // 清定时器溢出标志 XTMR++; // 外部的系统时钟计时器加1 RFcount++; // 脉冲宽度计数器加1 return; } 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 cases RFcount = 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 counter RFstate= TRFDATAUP; PORTA = PORTA;//启动端口电平中断 } } else { // still low RFcount=0; PORTA = PORTA;//启动端口电平中断 } break; case TRFreset: default: RFstate = TRFSYNC; // reset state machine in all other cases RFcount = 0; Bptr = 0; BitCount = 0; PORTA = PORTA;//启动端口电平中断 break; } // switch } //电平中断 } // rxi void InitReceiver() { IOCA = 2; T0IF = 0; T0IE = 1; // TMR0 overflow interrupt RAIE = 1; //使能端口电平变化中断 GIE = 1; // enable interrupts RFstate = TRFreset; // reset state machine in all other cases RFFull = 0; // start with buffer empty XTMR = 0; // start extended timer TMR0 = PERIOD; // 装计时器初值 PORTA = PORTA;//启动端口电平中断 }
/
本文档为【曼彻斯特编码接收】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索