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呢
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
mjw001
1楼-- · 2019-03-26 02:34
第一段只是多了一个循环啊?为什么会这样呢?
谢谢大家啊
tangbiao138
2楼-- · 2019-03-26 05:37
引用楼主 lipeng813 的帖子:

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


g++ 是什么意思?
wangshengarm
3楼-- · 2019-03-26 09:01
错了,其实是K++
这个是我在这写错的
K++也是一样
mujun_2525
4楼-- · 2019-03-26 09:34
 精彩回答 2  元偷偷看……

一周热门 更多>