原创 nRF401无线收发串口中断服务程序

2006-12-30 01:54 5532 10 11 分类: MCU/ 嵌入式
nRF401无线收发串口中断服务程序
mood25.gif HotPower 发表于 2004-9-4 20:51 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖举报该贴


/*------------------------------------
    nRF401无线收发串口中断服务程序

   HotPower@126.com  2004.7.18
------------------------------------*/
void sioproc() interrupt SIO_VECTOR// using 1
{
unsigned char i;
unsigned int crc;
  if (RI) {//接收中断
    RI = 0;
    if (!nRFTXEN && SioBuffers.RXCount) {//每次接收20个数据
      i = SBUF;
      SioBuffers.RXCount --;
      SioBuffers.RXBuffers[19 - SioBuffers.RXCount] = i;
      switch(SioBuffers.RXCount) {
        case 19:
               if (i != 0x55) SioBuffers.RXCount = 20;
                 break;
        case 18:
               if (i != 0xaa) SioBuffers.RXCount = 20;
                 break;
        case 0:
               crc = 0;
               for (i = 1; i <= 8; i ++) {
                 crc = crc16r(GetRXBuffWord(i + i), crc);
               }
               if (crc != GetRXBuffWord(18))
                 SioBuffers.RXCount = 20;
                else {
                 nRFTXEN = 1;//发送
                 for (i = 0; i < 20; i ++) {
                   SioBuffers.TXBuffers = SioBuffers.RXBuffers;
                 }
                 SioBuffers.TXMAXCount = TX_MAXCount;
                 SioBuffers.TXCount = TX_Count + 32;
                 TI = 1;//接收结束立即转为发送
               }
               break;
      }
    }
  }
  if (TI) {//发送中断
    TI = 0;
    if (nRFTXEN && SioBuffers.TXCount) {
      SioBuffers.TXCount --;
      if (SioBuffers.TXCount > 19) {
        SBUF = 0x00;
      }
      else {
        SBUF = SioBuffers.TXBuffers[19 - SioBuffers.TXCount];
      }
        if (SioBuffers.TXCount == 0) {
        if (SioBuffers.TXMAXCount) {
          SioBuffers.TXMAXCount --;
          SioBuffers.TXCount = TX_Count;
        }
        else {
          nRFTXEN = 0;//发送结束立即转为接收
          SioBuffers.RXCount = 20;
        }
      }
    }
  }
}
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1479663 2012-2-3 09:44

支持大叔

用户882386 2009-10-7 13:11

看看

用户1008998 2007-11-29 16:07

看过;

用户741296 2007-11-9 08:44

是啊!

有同感!

用户15552 2007-8-20 15:29

菜农老师,我是AVR新人,能不能问你个问题?

用了一片AT90CAN128的片子?但为什么它的第二串口不能工作?

 

相关推荐阅读
雁塔菜农 2012-04-05 17:51
2012年度新唐Cortex-M0助学开发套件有约束条件赠送申报贴
2012年度新唐Cortex-M0助学套件从4月起每月有约束条件发放16套。 申报人必须是21ic或 EDNC 会员 并具备1月的会龄。 申报时必须注明“遵守约束条件,缴纳250元订金,上...
雁塔菜农 2012-04-05 17:04
2012年度Cortex-M0助学园地推广框图
...
雁塔菜农 2012-04-01 17:59
2012年度Cortex-M0助学园地奖励计划细则
抢楼请点击:菜地公告:即日起创建《菜农Cortex-M0助学园地》(盖楼入口) 每月10号和25号的下午2:50进行2次抢楼,规则同去年12月的疯狂抢楼活动。 奖品由21IC、北航、广州迪圣...
雁塔菜农 2012-02-03 08:19
菜农谋略:搞定牛人宋俊德,对女牛人孙昌旭说:“记住,俺是雁塔菜农~~~ ”
http://www.baidu.com/s?wd=%B2%CB%C5%A9%D0%A6%CC%B8%A1%B6%D0%C2%C0%CB%C3%FB%C8%CB%D0%A7%D3%A6%A1%B7...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条