永发信息网

求助,Keil使用串口中断后,程序不向下执行

答案:2  悬赏:80  手机版
解决时间 2021-01-27 11:29
  • 提问者网友:佞臣
  • 2021-01-26 18:49
大家帮忙看看这段程序,上位机发送串口中断命令后,单片机运行程序,执行到串口发送函数后,发送数据,然后就退不出小循环,一直在发送数据,程序不继续执行。
如果上位机不发送串口中断命令,则能够退出小循环,程序可以继续执行,到底哪里出错了?
while(1)//大循环
{
rep_cnt=0;
while(rep_cnt<5) //小循环次数控制
{
Data2Ascii(disp_str,wendu,1);
Data2Ascii(disp_str1,shidu,2);
while(Countor<=Time_Interface1)
{if(Status) return;}

rep_cnt++; ////一次结束!!加 1

//调用串口发送函数
send_string_com(disp_str,9);
send_string_com(disp_str1,9);
}

Countor=0;
SWITCH=bON;

}

串口发送函数如下:
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}

//向串口发送一个字符串,strlen 为该字符串长度
void send_string_com( unsigned char *strw, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(strw + k));
k++;
} while (k < strlen);
}

串口接收中断函数如下:
void serial() interrupt 4 using 3
{

if(RI)
{
RI=0;
mc=SBUF;
}
if(mc==0x01)
{
Status=ID_START;
}

}

调试中出现两种情况:1,如果上位机不给串口中断命令,则可以正常运行。2,如果去掉串口发送函数send_string_com(disp_str,9);
send_string_com(disp_str1,9);那么上位机给了串口中断命令,也可以正常运行。所以错误应该是出在串口上,但是不知道哪里出错了。
最佳答案
  • 五星知识达人网友:慢性怪人
  • 2021-01-26 20:08
很简单。。。。你的大while()循环改下就好了。。把那条rep_cnt=0;
放在大循环前面就行,不要放在里面。。。
全部回答
  • 1楼网友:woshuo
  • 2021-01-26 20:22
没用过keil的模拟仿真,觉得用keil的模拟仿真还不如和protues联调呢,前提是你用的是protues里面有的片子。 如果用的是51的话protues完全够了。里面也有eeprom,可以直接看每个单元存储的数据。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯