#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