英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4712|回复: 1
打印 上一主题 下一主题

[求助]PIC24串口红外通信问题???急!!

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-18 11:55:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我在用串口2做红外通信时写的程序,不知为何连接收中断都进不去??

请高手帮我看看,那个地方有问题???

谢谢!!

void URTCF(void)       //配置串口2,将串口2用于红外发送和接收
{
...
// IrDA Configure
  RPINR19bits.U2CTSR=18;      //Assign U2CTS To Pin RPI18
  RPINR19bits.U2RXR=39;       //Assign U2RX To Pin RPI39

  RPOR12bits.RP24R=5;         //Assign U2TX To Pin RP24
  RPOR9bits.RP18R=6;          //Assign U2RTS(BLCK2) to Pin RP18
...
}

void Uart2Init(void)   //串口2初始化
{
  FRxDHW=1;            //设置红外相应引脚的方向
  FTxDHW=0;
  FHWZB=0;
  U2MODE=0x3082;        //use Rx and Tx only, BRGH=0, parity check = 0x01, stop bits = 1
  U2BRG=0xCF;           //baud rate = 1200bps

  IPC7bits.U2RXIP=7;  //receiver interrupt priority = 7
  IPC7bits.U2TXIP=7;  //send interrupt priority = 7
  U2STAbits.URXISEL=0;  //receive interrupt mode
  U2STAbits.UTXISEL0=0;
  U2STAbits.UTXISEL1=0;  //send interrupt mode

  U2STAbits.UTXINV=0;    // enable IrDA code send convert bit
  IEC1bits.U2TXIE=0;        //receive interrupt enable
  IEC1bits.U2RXIE=1;

  U2MODEbits.UARTEN=1;   //enable UART

  _U2TXIF=0;
  _U2RXIF=0;
  U2STAbits.UTXEN=1;
  flag=1;
  RevcCount=0;
  SendCount=0;
  RNum=0;
}


void __attribute__((interrupt,no_auto_psv)) _U2TXInterrupt(void)     //发送中断
{
_U2TXIF=0;
  if(SendCount<TNum)
   {
     U2TXREG=RevcBuff[SendCount];
     SendCount++;
   }
  else
    {
      CTL=0;
      RevcCount=0;
      RNum=0;
      TNum=0;
      SendCount=0;
      U2STAbits.UTXEN=0;
      IEC1bits.U2RXIE=1;
    }
flag=1;
}
void __attribute__((interrupt,no_auto_psv)) _U2RXInterrupt(void)     //接收中断
{
  _U2RXIF=0;
  RevcBuff[RevcCount]=U2RXREG;
  data2=RevcBuff[RevcCount];
  if(RevcBuff[0]==0xFE && RevcCount<7)
   {
     RevcCount=0;
     RevcBuff[0]=0xFF;
   }
  if(RevcCount==9)
     RNum=RevcBuff[RevcCount]+11;
  else if(RevcCount==7)
    {
      if(RevcBuff[RevcCount]!=0x68)
        {
           RevcCount=0;
           RNum=0;
           RevcBuff[0]=0xFF;
        }
    }
  
  if(RevcCount==RNum && RevcCount>9 && RevcBuff[RevcCount]==0x16)
    {
      flag=0;
      IEC1bits.U2TXIE=1;        //Send interrupt enable
      IEC1bits.U2RXIE=0;
    }
else if(RevcBuff[0]==0x68)
         RevcCount++;
  
}

2#
发表于 2012-8-18 14:33:43 | 只看该作者
中断进不去,还是查查配置吧。你的晶振是4M的吧?串口的奇偶校验这个也确认下

http://www.microchip.com/stellen ... mp;appnote=cn528001



这里有官方的协议栈,可以参考看看!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-28 11:12 , Processed in 0.056641 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表