PIC通信,为什么这两段程序执行结果不一样?

2019-03-25 19:51发布

第一段:
#include<pic.h>              //包含单片机内部资源预定义
__CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
unsigned          char                rece[4];//定义一个数组存储接收数据
unsigned          char           k;//定义通用寄存器

void main()
{
        TRISC=0xff;
        TXSTA=0x24;
        RCSTA=0x90;
        SPBRG=25;
        GIE=1;
        PEIE=1;
        RCIE=1;
  while(1)                    //等待中断
   {;}
  }

void interrupt usart(void)
  {
   if(RCIE&&RCIF)            //判断是否为串口接收中断
     {
      for(k=0;k<4;k++)
                {
                        while(1)                       
                        {
                                if(RCIF==1)        break;
                        }                                        //等待接收数据
                        rece[k]=RCREG;                //读取接收数据,同时清掉RCIF
                }

                for(k=0;k<4;g++)
                {
                        TXREG=rece[k];               
                        while(1)                       
                        {
                                if(TXIF==1)        break;
                        }                       
                }
          }
   }



第二段:



#include<pic.h>              //包含单片机内部资源预定义
__CONFIG(0x1832);        
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
unsigned          char                rece[4];//定义一个数组存储接收数据
unsigned          char           k;//定义通用寄存器

void main()
{
        TRISC=0xff;
        TXSTA=0x24;
        RCSTA=0x90;
        SPBRG=25;
        GIE=1;
        PEIE=1;
        RCIE=1;
  while(1)                    //等待中断
   {;}
  }

void interrupt usart(void)
  {
   if(RCIE&&RCIF)            //判断是否为串口接收中断
     {
      for(k=0;k<4;k++)
                {
                        while(1)                       
                        {
                                if(RCIF==1)        break;
                        }                                        //等待接收数据
                        rece[k]=RCREG;                //读取接收数据,同时清掉RCIF
                        TXREG=rece[k];               
                        while(1)                       
                        {
                                if(TXIF==1)        break;
                        }       
                }               
          }
   }



比如发送7e aa aa aa
第二段收到的同时就返回,可以实现
但是第一段为什么只返回7e aa aa,少一个aa呢
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。