本帖最后由 lydzzhx 于 2017-1-11 15:21 编辑
一个月前写的PIC18串口接收程序 更换MCU后无法接收串口数据了
手头有两块PIC18 一个月前写的串口的收发程序 调试正常 后来重新打板更换MCU后 居然不能接收串口数据了 串口发送正常 用串口精灵可以收到PIC发出的字符串
仔细检查了新PCB没有线路问题在RX引脚用示波器能观察到串口精灵发出的串口波形 TX能正常发出字符串 怀疑更换MCU的时候热风枪高温损坏MCU (两块MCU都坏 并能发出TX的可能性大吗)
单步调试发现PIR 刚开始的时候高位中断 读一次后为零 然后持续为零 麻烦高手帮忙分析一下 在线等新的MCU 和新的解答
波特率 9600 处理器PIC184522K
//***********************************************************
//功能:主程序
//文件名:PIC18F45K22.C
//作 者:QQ:46439147
//日 期:2008年11月10日
//版 本:Ver.1
//***********************************************************
void main(void)
{ int n;
P18F_init();// p18f初始化
RS_init(); //串口初始化
RCONbits.IPEN=1;//开启中断的高低优先级
INTCON=0XC0;//开总中断外围模块中断
Delay(100);
while(1)
{
TRISEbits.TRISE1 = 0; //设置LED
RS_RX1(10);//接收10个字符串
}
}
//***********************************************************
//功能:串口1(RC7)接受数据子程序
//函数名:RS_RX1(unsigned char rn)
//作 者:QQ:46439147
//日 期:2016年12月14日
//版 本:Ver.1
//***********************************************************
void RS_RX1(unsigned char rn)
{
unsigned char rx;
ANSELC=0X00;//关闭PC口的模拟输入
TRISCbits.TRISC7 = 1; //设置D0口为输入
RCSTA1bits.SPEN=1;//使能串口1
TXSTA1bits.SYNC=0;//串口1异步模式
PIE1bits.RC1IE==1;//允许串口中断
PIR1bits.RC1IF==0;//串口标志位清零
RCSTA1bits.CREN=1; //允许串口接受数据
for(rx=0;rx<rn;rx++)
{
LED1==0;
while(!PIR1bits.RC1IF);//接收缓冲区满
PIR1bits.RC1IF=0; //清除中断标志信号
RendBuf1[rx]=RCREG1;
LED1==1; //用LED观察是否收到数据
Delay(100);
LED1==0;
}
RCSTA1bits.CREN=0; //禁止串口接受数据
}
//***********************************************************
//功能:RS_232初始化程序
//文件名:RS_232.C
//作 者:QQ:46439147
//日 期:2009年09月14日
//版 本:Ver.1
//***********************************************************
void RS_init(void)
{
//*******************1号串口(PC6)初始化C口****************************************
RCSTA1bits.SPEN=1;//使能串口1
TXSTA1bits.SYNC=0;//串口1异步模式
SPBRG1=0x81;//设置串口1波特率20M晶体9600(0x81/129) 19200(0x40/64)115200(0x0A/10)
TXSTA1bits.BRGH=1;//串口1高速模式
RCSTA1bits.CREN=1;//串口1接收使能
TXSTA1bits.TXEN=1;//串口1发射使能
}
|