PIC 18F46K22 仿真串口通讯不进入接收中断

#include <htc.h>

  static unsigned char Sendnum=3;//要发送的数据长度

  static unsigned char Senddat[10];//要发送的数据
  static unsigned char Recdat[10];//接收到的数据
  static unsigned char Recnum=0;//接收到的数据长度
  static unsigned char Startword[10]={0X01,0X02,0X03};
  static bit Recflag=0;
  static unsigned char  time=0;

  void init()
  {
     SPBRG=25;
     BRGH1=0;
     BRG16=0;//9600
     TRISC6=1;
     TRISC7=1;//置1IO方向
     SYNC1=0;//异步模式
     SPEN1=1;//使能IO自动 转换
     RC1IE=1;//打开接收中断
     CREN1=1;//使能接收中断
     GIE=1;
     PEIE=1;//打开总中断
     }
 

   void interrupt isr()//用中断配置发送程序,
      {
          if( TX1IF)
              {  if(Startword[Recnum]!='\0'||Recnum<Sendnum)
           
                       {    TXREG1=Startword[Recnum];    
                         Recnum++;
                           } 
                 else
                     { Recnum=0;

                      TX1IE=0;
                       }     
                   }
        
    }
 
    
void main()
{       init();
        TXEN1=1;
        TX1IE=1;//发送验证  发送 01 02 03。仿真正常
        while(1)
          { if(RC1IF)//若接收中断标志位置1,就会发送 01 02 03  。现在问题是不管外部输入什么,这个位就是不置1.进入不了接收中断
               {    TXEN1=1;
                    TX1IE=1;}
            }
  }

    程序仿真会直接输出  01 02 03      ,然后不管输入什么,RC1IF就是不会被置1.   将主函数if  语句条件改为(GIE&&PEIE&&CREN1&&RC1IE),就会循环输出  01 02 03  。证明接收中断条件设置正确。既然条件正确为啥原来的程序接收中断标志位不管输入啥都不置1.换句话就是进入不了接收中断。这里没有写接收中断函数。因为标志位不起作用。根本进不去都 。自学小白。求大神指点

分析程序是否真的没有问题,如果不是程序问题,尝试分析一下硬件方面是否有异常

 

刚发现了一个新的问题。这个程序会在2分44秒重复发送01 02 03.    有清楚什么原困的吗?

  总结一下,有两个问题。一个是无论给PIC发送什么,接收中断都不置1

                                          一个是程序会每隔2分44秒发送一次  01 02 03

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y