历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2020年02月03日 | 基于51单片机的串口中断发送数据帧

2020-02-03 来源:elecfans

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


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

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

//结构体  

struct {  

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

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

int length;//整个数据帧的长度  

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

} send_buf;  

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

//发送一帧  

void SendBuf(char *buf,int length)  

{  

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,开始发送,后面就自动进入中断发送  

}  


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

void SerialInt() interrupt 4     //串口中断  

{    

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

{    

RI = 0;    

}    

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

推荐阅读

史海拾趣

Cembre SPA公司的发展小趣事

为了满足全球客户的需求,Cembre SPA制定了国际化战略,开始在全球范围内拓展业务。公司设立了多个海外分支机构,与当地的合作伙伴建立了紧密的合作关系。通过全球化的销售网络和本地化的服务支持,Cembre SPA的产品逐渐打入了国际市场,赢得了全球客户的信赖。

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

面对全球制造业的数字化转型趋势,金宇半导体于2015年启动了智能制造项目。公司投入巨资引进先进的自动化生产线和智能管理系统,实现了从原材料采购、生产制造到产品测试的全程数字化管理。这一举措不仅大大提高了生产效率和产品质量,还降低了运营成本,增强了企业的竞争力。同时,金宇半导体还积极探索工业互联网、大数据等新技术在半导体制造领域的应用,为企业的未来发展注入了新的动力。

Advanced Electronic Packaging公司的发展小趣事

面对电子行业的快速发展和不断变化的市场需求,Advanced Electronic Packaging公司始终保持敏锐的洞察力和强烈的创新意识。公司不断加大研发投入,推动封装技术的持续创新。从最初的单一材料封装,到后来的多功能复合封装,再到如今的智能化封装技术,公司的每一次创新都引领着电子封装行业的发展潮流。这些创新成果不仅提升了产品的附加值,还推动了整个电子产业的升级换代。

Andersen Laboratories Inc公司的发展小趣事

为了满足客户对高效物流配送的需求,AnalogicTech建立了完善的物流配送体系。公司通过与快递公司或邮政EMS合作,实现了全国范围内的快速配送,并确保产品的及时送达。此外,AnalogicTech还为客户提供增值税专用发票和一系列优惠政策,进一步提升了客户满意度。

Gespac Inc公司的发展小趣事

为了更好地服务全球客户,AnalogicTech积极实施全球化运营策略。公司在亚洲和大中华地区建立了广泛的晶圆制造和后端合作伙伴网络,包括香港地区、上海和台湾地区的台北。此外,AnalogicTech还迁入香港科技园,将深圳地区纳入业务版图,提高在中国大陆的销售情况,特别是珠江三角洲地区。

ApexTool Group公司的发展小趣事

随着全球电子市场的不断扩大,Apex Tool Group积极实施全球化战略,拓展市场版图。公司在全球范围内建立了多个生产基地和分销网络,以便更好地服务全球客户。同时,Apex Tool Group还积极与全球知名的电子企业开展合作,共同推动电动工具技术的创新和发展。这些举措使得Apex Tool Group在全球电子行业中的地位日益稳固。

问答坊 | AI 解惑

单片机原理接口及应用

单片机基础知识及接口应用…

查看全部问答>

电流模式变换器的建模、分析和补偿

电流模式变换器的建模、分析和补偿…

查看全部问答>

再发贴:windows ce 5.0 系统 网页浏览器问题(难!急!)

我有一款PDA ,用的是Windows CE 5.0的系统,系统自带的IE浏览器不好用,我想换一款,请问那一款能用?发给我试试!谢谢!     Mozilla minimo ,NetFront,Ucweb,Opera,Deepfish等都不行,好象支持Windows CE系统的软件很少,大部分都是 ...…

查看全部问答>

wince 驱动位置

我的开发板是2410 板上有4个按忸 其中一个被定义成 重启 这个定义在那呢? 我想自己开发按忸的驱动 该怎么做呢 (50)分 求一些驱动开发 资料   (50)分 分不是问题 求高人帮助 …

查看全部问答>

关于预取指的问题,请教版主

版主:你好    我现在主用STM32芯片发现一个问题,请教一下!    我写了一段程序测试时间,    使能Prefetch buffer测试时间是11.5us    不使能Prefetch buffer测试时间是14.5us    相 ...…

查看全部问答>

新手求解

我在PC机上调试UCOS,按照要求 第一步:CopyC:\\SOFTWARE\\uCOS-II目录下的EX1_x86L文件夹。作为我们的工程模板 第二步:修改工程模板的名字为:HelloEEWorld 第三部:按照咱们前面的《使用 BC31 工具编译 UCOS‐\II 的源码过程 》修改配置 ...…

查看全部问答>

【MSP430共享】由SA51和MSP430F1121组成的驱动控制系统

现在的电子设备往往要求体积小 、 重量轻 、 效率 高, 通常在苛刻的环境条件下 , 尤其在军工产品中,  设计 者非常希望使 用单 片或双 片系统 以尽可能地减少器件数量。S A 5 1 和 MS P 4 3 0 F 1 1 2 1 以其 自身的高集 成度和强 大功能成 ...…

查看全部问答>

【低功耗】Xilinx的FPGA低功耗相关文章下载(六)

这是我的一些Xilinx的FPGA的论文,传上来给大家分享一下!大家多多支持啊! 我会分批上传,方便大家选择性的交流与下载!…

查看全部问答>

如何用mentor设计单片机的最小系统?

求好心人帮助  谢谢了啊 着急 在线等…

查看全部问答>

弱电控制强电,求解

通过系统A,控制系统B。 系统A为由单片机,模拟电路组成,系统B为400V直流电。 设计要求:系统A控制系统B的通断速率要达到24KHz。个位大牛有何想法不,说来看看。…

查看全部问答>