永发信息网

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

答案:2  悬赏:80  手机版
解决时间 2021-01-27 11:29
大家帮忙看看这段程序,上位机发送串口中断命令后,单片机运行程序,执行到串口发送函数后,发送数据,然后就退不出小循环,一直在发送数据,程序不继续执行。
如果上位机不发送串口中断命令,则能够退出小循环,程序可以继续执行,到底哪里出错了?
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);那么上位机给了串口中断命令,也可以正常运行。所以错误应该是出在串口上,但是不知道哪里出错了。
最佳答案
很简单。。。。你的大while()循环改下就好了。。把那条rep_cnt=0;
放在大循环前面就行,不要放在里面。。。
全部回答
没用过keil的模拟仿真,觉得用keil的模拟仿真还不如和protues联调呢,前提是你用的是protues里面有的片子。 如果用的是51的话protues完全够了。里面也有eeprom,可以直接看每个单元存储的数据。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
兵谋的意思是什么啊?知道的请说下!
谁有《河伯的新娘》求分享
论记的意思是什么啊?知道的请说下!
求聿日的一篇文,男主角是水靖,女主角是一个
下列对四分体的叙述正确的是A. 一个四分体含
大众帕萨特2.0怎么在车里拿后备箱里的东西
都市新感觉全国第1180号分店在什么地方啊,我
火车票改签一次之后还能再改签吗
微软640xl手机屏幕上方出现斜紋波浪线什么事
游船的意思是什么啊?知道的请说下!
申请网易免费的企业邮箱 我在新网注册的域名
深圳三联大酒店怎么去啊,我要去那办事
古代后宫才人的女儿叫才人什么
蝉蛹冷冻三天后变黑了,该如何食用?安全吗?
怕恐的意思是什么啊?知道的请说下!
推荐资讯
对该患者首先应检查A.血压B.粪隐血C.血常规D.
PGP怎么才能卸载干净
庄周梦的意思是什么啊?知道的请说下!
郭墅镇府对百姓不负责任
蓓蕾幼教第六幼儿园地址在什么地方,我要处理
脖子变黑是什么原因请问怎么办
英国在18世纪后半期成为世界上最大的殖民国家
忌疾的意思是什么啊?知道的请说下!
手机淘宝如何卖二手物品?
这个月的财务报表没有申报,如果到下个月还没
事业单位面试考试需要准备哪几个方面的知识?
计算机一级考试咨询为什么报名报的是office然
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?