您的位置 首页 开关

51单片机串口通讯与串口中止常见问题解决方案

51单片机串口通讯与串口中断常见问题解决方案-上面的一个是一个测试字符个数的实例,用仿真就可以看到结果。结果是1。也就是说字符’’是不会被计入的。那么我们就可以通过此函数来分辩是否是字符和字符串。当然如果字符串是一个字符的话,那么就是我们上面的那个情况了,会直接被当做一个数看待。

一、深化了解字符串的问题

char str11[]=”a”;

P1=strlen(str11);

上面的一个是一个测验字符个数的实例,用仿真就能够看到成果。成果是1。也便是说字符’’是不会被计入的。那么咱们就能够经过此函数来分辩是否是字符和字符串。当然假如字符串是一个字符的话,那么便是咱们上面的那个状况了,会直接被作为一个数看待。

注:上位机发过来的数据全部是字符串格局的。

二、串口中止问题

先看下面的程序。

void UART_SendByte(unsigned char dat)

{

SBUF=dat;

while(!TI) ;//等候发送结束

TI=0;

}

这个程序便是一个简略的串口发送字符的程序,为了能够完成主动发送和接纳,咱们剖析一下它。咱们要一起完成接纳,有接纳那么就要有串口中止,经过串口中止到达接纳数据的意图。但是当ES=1,程序并不会像咱们想的那样运转,当履行完SBUF=dat后,程序开端等候,大概是5个时钟周期后,程序并没有直接运转TI=0这句,而是,由于缓冲区中的字符而直接跳转到串口中止函数中,乃至呈现死循环这样的状况。

为了避开这种状况,咱们引入了下面的程序:

void UART_SendByte(unsigned char dat)

{

SBUF=dat;

ES=0;

while(!TI) ;

TI=0;

ES=1;

}

或许写做一个中止处理函数,空的函数也能够:

void Com_INT() interrupt 4//串口中止
{
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/346268.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部