想实现串口发送和接收数据的功能,但是只能实现发送数据,接收没有响应,配置应该也没有问题,想请教各位帮我看一下是哪里的问题,程序如下:
#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,就是没有收到数据,不知道是什么原因,麻烦大家帮忙看一下啊!!谢谢啦
|