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的使用。

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

    关注

    6034

    文章

    44528

    浏览量

    633606
  • 数据帧
    +关注

    关注

    0

    文章

    45

    浏览量

    6735
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

    串口中断丢失数据问题

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

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

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

    使用单片机串口发送数据的程序免费下载

    本文档的主要内容详细介绍的是使用单片机串口发送数据的程序免费下载。
    发表于 08-15 17:32 7次下载
    使用<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单片机进行串口通信的发送与接收

    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单片机串口功能就是和外界进行通讯,所谓的“外界”也就是与单片机进行交互的媒介,最常用的就是我们经常使用的计算机、平板或者其他设备(比如另一个
    发表于 11-14 19:51 74次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>串口中断</b>功能的设置

    51单片机串行口中断的使用(指针)

    51单片机串行口中断的使用(指针)初始化中断服务函数主函数这个程序的功能是通过上位发送数字12
    发表于 11-20 17:21 1次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>串行<b class='flag-5'>口中断</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>问题

    串口传输(51单片机版)

    串口传输在51单片机里是非常重要的一点,这常常是在中断、计数器后面学习,因为不可避免的需要用到中断51
    发表于 11-23 16:20 0次下载
    <b class='flag-5'>串口</b>传输(<b class='flag-5'>51</b><b class='flag-5'>单片机</b>版)