打印

PIC18F串口接收问题

[复制链接]
1667|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayiayihsq|  楼主 | 2016-11-5 08:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ayiayihsq 于 2016-11-5 09:06 编辑

新手调试,请教各位一个问题:
我在调试串口接收发送程序时由PC串口助手改善字符例如ABCD给MCU,然后由MCU返回给串口接收值
在第一次上电时,串口助手接收到由MCU发送过来的五个字符:A、换行、C、D、回车
不掉电第二次发送串口助手显示接收由MCU发送过来的字符:A、换行、A、B、C、D、回车
如果继续发送其它字符,则前两个字符不变,例如发送XXXX,接收:A、换行、X、X、X、X回车
为什么前两位的字符不正确,需要第二次发送后才接到到完整数据,且数据存在定义的数组的第3位开始

程序如下,
void usart_init()  //串口初始化
{
    SPEN1 = 1;    // 串口使能
    TRISC7 = 1;    // 异步串行接收数据输入
    TRISC6 = 0;// 异步和同步主模式,TRISC<6> 零(= 0)
        
    // TXSTA1:发送状态和控制寄存器
    SYNC1 = 0;    // 异步模式
    TX91 = 0;     // 选择8 位发送
    TXEN1 = 1;     // 禁止发送
    BRGH1 = 1;     // 高速
    TXEN1 = 1; // 使能发送

    // RCSTA1:接收状态和控制寄存器
    RX91 = 0; // 选择8 位接收
    CREN1 = 1; // 使能接收器
    FERR1=0;//
    OERR1=0;//无超速错误
        RCREG1=0;  //接收缓冲寄存器清0        

    // BAUDCON1:波特率控制寄存器
    BAUDCON1=0x30;//0b 0011 0000 接收发送极性相反
    //BRG16 =0 ; // 8位波特率发生器——SPBRGHx 和SPBRGx
    //TXCKP=1;
    SPBRG1 = 25;//波特率:9600
   
}

void IRQ_init() 中断初始化
{

    GIE=1;//允许所有未被屏蔽的中断
    PEIE=1;//允许所有未被屏蔽的外设中断
    IPEN=0;//禁止中断优先级

        //INT2外部中断设置
        INTEDG2=1;//上升沿触发外部中断2
    INT2IE=1;//使能外部中断INT2
        
        // //TMR1中断设置
        // TMR1IE=1;//使能定时器1中断
        // TMR1IP=0;//定时器1优先级设置低
         
        // 外设中断允许寄存器1
     RC1IE = 1; // 允许EUSART 接收中断   
        
}

void interrupt ISR(void)//中断程序
{
   unsigned temp,temp1,temp2,temp3;
   char utemp;

    if(OERR1==1)//判断有无超速错误
      {
       CREN1=0;
       CREN1=1;
      }
        if(RC1IF&&RC1IE)    // 串口1接收数据中断处理程序
    {
      RcregBuf=RCREG;
      if(RcregBuf==0x0D)   //如果接收到回车符,重新存放
         {
         i=0;            
         Rcflag=1;
         }
      if(i>=60 ) //如果接收数据数超出数组长度,重新存放
         {
            i=0;            
           Rcflag=1;
         }  
      i++;
      RC1IF=0;
     }


沙发
ayiayihsq|  楼主 | 2016-11-7 16:57 | 只看该作者
找到问题了,接收程序的问题,if和i++判断有错

使用特权

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

本版积分规则

1

主题

10

帖子

1

粉丝