0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机的串口中断发送数据帧

电子工程师 作者:工程师a 2018-06-03 09:23 次阅读

很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu

首先定义一个数据帧的结构体,该结构体可以做为一个全局变量,所有的发送都要经过这个结构体:

//结构体

struct{

charbusy_falg;//忙标志,若在发送数据时置位1,即在开始发送置位1,发送结束置位0

intindex;//索引,指向需要发送数组的位置

intlength;//整个数据帧的长度

char*buf;//指向需要发送的数据帧,建议为全局变量,否则一旦开始发送,必须等到发送结束,即判断busy_falg为0

}send_buf;

发送数据的函数,这里有个缺点,就是还是要使用while来检测串口是否忙碌,不过这样比占用系统时间来发送要好的多了:

//发送一帧

voidSendBuf(char*buf,intlength)

{

while(busy_falg);//查询发送是否忙,否则循环等待

send_buf.length=length;

send_buf.index=0;

send_buf.buf=buf;

send_buf.busy_falg=1;

SBUF=send_buf.buf[0];//写入SBUF,开始发送,后面就自动进入中断发送

}

串口中断发送函数,注意设置空闲标志位,避免多任务时多个发送帧调用了同一个结构体:

voidSerialInt()interrupt4//串口中断

{

if(RI==1)//串口接收

{

RI=0;

}

elseif(TI==1)//串口发送

{

TI=0;

send_buf.index++;

if(send_buf.index==send_buf.length)

{

send_buf.busy_falg=0;//发送结束

return;

}

SBUF=send_buf.buf[send_buf.index];//继续发送下一个

}

}


串口中断发送就是这样简单,注意busy_falg和index的使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5998

    文章

    43963

    浏览量

    620691
  • 数据帧
    +关注

    关注

    0

    文章

    33

    浏览量

    6645
收藏 人收藏

    评论

    相关推荐

    51单片机串口通信的发送与接收

    数据后,也会在 RI 置 1。无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。在中断程序中,要
    发表于 11-01 18:00

    51单片机什么情况下会产生串口中断

    首先,你要用软件允许中断,即C语言中EA = 1; 允许总中断ES = 1;//允许串口中断汇编中可用 SETB EA ;允许总中断SETB ES ;允许
    发表于 11-01 18:09

    请教大神, 51单片机串口中断问题

    我用状态串口中断,我发送一串字符串给单片机,发现每次只能正确接收前3个字节的数据,后面的都出现错误,这是为什么呢
    发表于 05-23 14:09

    请问51单片机串口中断是怎么触发的?

    51单片机中断串口中断怎么触发的感觉很模糊啊,发送数据或接收到
    发表于 04-09 06:35

    单片机串口调试的相关资料分享

    51单片机串口收发(转)转载 原作者写的很不错,也是我遇到的问题。51单片机串口,是个全双工的
    发表于 01-19 06:09

    51单片机串口中断使用总结

    51单片机串口中断使用总结,有程序,可以参考。
    发表于 03-28 10:00 13次下载

    第6章单片机定时器串口中断(20150709213857)

    第6章单片机定时器串口中断(20150709213857)
    发表于 12-15 22:28 6次下载

    串口中断丢失数据问题

    关于51单片机串口中断发送与接收出现数据丢失问题串口中断的接收器具有双缓冲结构,即在从接收寄存
    发表于 02-17 00:13 3100次阅读

    单片机学习教程之外部中断和定时器及串口中断的资料和程序说明

    本文档的主要内容详细介绍的是单片机学习教程之外部中断和定时器及串口中断的资料和程序说明。CPU收到中断请求,停下正在处理的工作A,去处理事件B,处理完后继续回到
    发表于 04-18 17:27 5次下载
    <b class='flag-5'>单片机</b>学习教程之外部<b class='flag-5'>中断</b>和定时器及<b class='flag-5'>串口中断</b>的资料和程序说明

    51单片机进行串口通信的发送与接收的实例程序免费下载

    51单片机串口,是个全双工的串口发送数据的同时,还可以接收
    发表于 08-20 17:31 13次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行<b class='flag-5'>串口</b>通信的<b class='flag-5'>发送</b>与接收的实例程序免费下载

    如何使用51单片机进行串口通信的发送与接收

    51单片机串口,是个全双工的串口发送数据的同时,还可以接收
    发表于 07-08 17:41 18次下载
    如何使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行<b class='flag-5'>串口</b>通信的<b class='flag-5'>发送</b>与接收

    使用51单片机中断方式实现串口数据发送与接收的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机中断方式实现串口数据发送与接收的程序免费下载。
    发表于 07-04 17:41 5次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>中断</b>方式实现<b class='flag-5'>串口</b><b class='flag-5'>数据</b><b class='flag-5'>发送</b>与接收的程序免费下载

    使用51单片机进行接收和发送串口通信资料免费下载

    原料:keil、仿真软件、虚拟串口工具(群文件里的tools)vspdctl.dll记得覆盖说明:串口中断允许位ES=1时,单片机一接收到数据或者
    发表于 07-03 17:42 0次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行接收和<b class='flag-5'>发送</b>的<b class='flag-5'>串口</b>通信资料免费下载

    串口中断接收和发送的C51程序免费下载

    这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51
    发表于 04-25 18:27 4次下载
    <b class='flag-5'>串口中断</b>接收和<b class='flag-5'>发送</b>的C<b class='flag-5'>51</b>程序免费下载

    51单片机中断问题

    51单片机中断使用注意事项1.例如:同时使用外部中断0和串口中断的时候,如果没有用到串口中断,一
    发表于 11-22 12:21 0次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>中断</b>问题