大家好,小弟最近在做PIC串口传输的内容。目前是实现了发出的功能,但通过“串口猎人”发送数据时却发现单片机无法接收(通过LED状态)来判断的。
目前有两个疑问:1.我的程序是哪里错了:dizzy:;2.即便我把串口传输通道拔掉,仍然会默认进入我定义的ISR(没有数据传输过去的话应该不可能触发中断的啊)
具体程序如下,希望大虾们路过帮我看下:
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define FCY 4000000
#define BAUDRATE 38400
#define BRGVAL (((FCY+2*BAUDRATE)/BAUDRATE/4)-1)
#define LED_GREEN_PORT _RF5
#define LED_GREEN_TRIS _TRISF5
int a=0;
unsigned char command;
//UART1接收中断服务程序
void _ISR _U1RXInterrupt(void)
{
IEC0bits.U1RXIE = 0; //UART1接收器中断关闭
IFS0bits.U1RXIF = 0; //中断标志清零
//缓冲器溢出
if(U1STAbits.OERR == 1)
{
U1STAbits.OERR = 0;
}
//接收数据
if(U1STAbits.URXDA == 1)
{
command = U1RXREG;
a++;
if(a==2)
LED_GREEN_PORT = 1;
}
IEC0bits.U1RXIE = 1; //UART1接收器中断允许
}
int main()
{
LED_GREEN_PORT = 0; //LED初始化为输出低电平(灯灭)。
LED_GREEN_TRIS = 0; //设置LED灯端口为输出状态。
CLKDIVbits.RCDIV = 0;//2分频,分频后频率为4M
//Configure UART1 input and output.
RPINR18bits.U1RXR = 6; //Assign U1RX to pin RP6;
RPOR9bits.RP18R = 3; //Assign U1TX to pin RP18;
//Configure UART1.
U1BRG = BRGVAL; //configure UART1 Baud Rate.
U1MODEbits.USIDL = 1; //模块空闲模式下不工作
U1MODEbits.UEN = 0; //使能U1TX,U1RX,禁用CTS、RTS引脚
U1MODEbits.BRGH = 1; //高速模式
U1MODEbits.PDSEL = 0; //8位数据位,无奇偶校验
U1MODEbits.STSEL = 0; //1停止位
U1MODEbits.ABAUD = 0; //禁用自动波特率
U1STAbits.URXISEL = 1; //缓冲器收到数据马上中断
IFS0bits.U1RXIF = 0; //中断标志清零
IEC0bits.U1RXIE = 1; //UART1接收器中断允许
IPC2bits.U1RXIP = 7; //UART1接收中断优先级为7
U1MODEbits.UARTEN = 1; //使能串口
U1STAbits.UTXEN = 1; //使能发送
while(1);
return 0;
}
|