打印
[PIC®/AVR®/dsPIC®产品]

关于PIC18F96J60的串口接收问题

[复制链接]
1695|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwquire|  楼主 | 2013-9-30 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现串口发送和接收数据的功能,但是只能实现发送数据,接收没有响应,配置应该也没有问题,想请教各位帮我看一下是哪里的问题,程序如下:
#include <p18f97j60.h>            /*头文件*/
#include <string.h>
//RS232 I/O pins  MAX232接口
#define RS232_RX_TRIS  (TRISCbits.TRISC7)
#define RS232_RX_IO   (PORTCbits.RC7)
#define RS232_TX_TRIS  (TRISCbits.TRISC6)
#define RS232_TX_IO   (LATCbits.LATC6)
   
void UART_Init()  //串口初始化
{
   unsigned int i;
   RS232_RX_TRIS = 1;
   RS232_TX_TRIS = 0;
   RS232_RX_IO = 0;
   RS232_TX_IO=1;
   TXSTA1bits.BRGH=1;
   BAUDCON1bits.BRG16=1;      //高速16位波特率发生模式
   i =((41666667/9600)/4)-1;
   SPBRGH1=i/256;
   SPBRG1=i%256;              //9600
    TXSTA1bits.SYNC=0;
    RCSTA1bits.SPEN=1;
    PIE1bits.RC1IE=1;          //使能接收中断
    RCSTA1bits.CREN=1;         //使能接收
    IPR1bits.RC1IP=1;
    RCONbits.IPEN=1;
    TXSTA1bits.TXEN=1;         //使能发送
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;
  
}

void UART_SendByte(unsigned char val)
{
  //TXSTABits.TX9=1;       //发送9位模式
  TXSTA1bits.TXEN=1;        //发送使能
  //TXSTABits.TX9D=0;      //写入第九位数据
  TXREG1=val;               //装入要发送的数据
  //delay(50);
  do{ Delay10us(1);}while(TXSTA1bits.TRMT==0);//等待发送完毕
}

/*******************************************************************************************/
/***********************************************************************/
/*串口接收中断函数                                                     */
/***********************************************************************/
// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}
//----------------------------------------------------------------------------
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
  unsigned char i;
  if(PIR1bits.RCIF==1)         //查询标志位,以确定中断源
  {
    i=RCREG;                   //读取一次,以清楚中断标志位
    UART_SendByte(i);    //串口调试用语句
   }
}
void main()
{
   OSCTUNE = 0x40; //晶振设置
   ADCON1 = 0xff;   // 把所有的I/O口都定义成数字口
   UART_Init();
   while(1)
    {
     UART_SendByte(0x55);
      DelayMs(1000);
     }
}
串口调试助手可以接收到55的数据,但是发送给单片机数据没有反应,PIR1bits.RCIF显示为0,就是没有收到数据,不知道是什么原因,麻烦大家帮忙看一下啊!!谢谢啦
沙发
huangxz| | 2013-9-30 20:37 | 只看该作者
是不是IO设置为模拟口了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

0

粉丝