历史上的今天
返回首页

历史上的今天

今天是:2025年04月09日(星期三)

正在发生

2019年04月09日 | 51内核UART串行总线环形缓冲区驱动实现

2019-04-09 来源:eefocus

1:驱动简述;


驱动实现串口中断接收和发送数据,缓冲区使用环形缓冲区。发送:手动置RI中断标志位为1,发生中断,在中断发送函数中将需要发送的数据一一发送出去,具体见示例;接收:在中断接收函数中保存接收到满足协议的数据,后置接收成功标志位,最终在main函数while循环中轮询接收成功标志位是否置1,如果置1,处理接收到的数据。


2:代码示例;


以下代码模仿modbus协议,贴串口发送函数和中断处理函数,适用于51系列单片机,具体的串口协议可参考modbus协议或者自己根据需求定义。


uart.h文件



#define COM_TX1_Lenth 20

#define COM_RX1_Lenth 20

 

typedef struct

unsigned char TX_read;   //发送读指针

unsigned char TX_write;   //发送写指针

unsigned char B_TX_busy; //忙标志

 

unsigned char RX_Cnt; //接收字节计数

unsigned char RX_read;      //接收读指针

unsigned char RX_write;    //接收写指针 

}COMx_Define;

uart.c文件



//串口发送函数  发送一个字节

void Usart_Tx_Func(unsigned char Data)

{

Usart1_Tx_Buffer[COM1.TX_write] = Data; //装发送缓冲

if(++COM1.TX_write >= COM_TX1_Lenth)

COM1.TX_write = 0;

 

if(COM1.B_TX_busy == 0) //空闲

{  

COM1.B_TX_busy = 1; //标志忙

TI = 1;         //手动触发发送中断

}

}

 

//串口发送函数

void Usart_Send(unsigned char *ptr,unsigned char num)

{

if(num == 0)

{

for(;*ptr!='';ptr++)

{

IO_485 = 1;

Usart_Tx_Func(*ptr);

}

}

else

{

for(;num>0;num--)

{

IO_485 = 1;

Usart_Tx_Func(*ptr++);

}

}

}

 

/********************* UART1中断函数************************/

void UART1_int (void) interrupt 4

{

if(RI)

{

RI = 0;

TH0 = Modbus_Time_Out>>8;

TL0 = Modbus_Time_Out;

TR0 = 1;         //定时器开始计时 

Usart1_Rx_Buffer[COM1.RX_write] = SBUF;

if(++COM1.RX_write >= COM_TX1_Lenth) 

COM1.RX_write = 0;

}

 

if(TI)

{

TI = 0;

if(COM1.TX_read != COM1.TX_write)

{

SBUF = Usart1_Tx_Buffer[COM1.TX_read];

if(++COM1.TX_read >= COM_TX1_Lenth)

COM1.TX_read = 0;

}

else

{

IO_485 = 0;

COM1.B_TX_busy = 0;

}

}

}


推荐阅读

史海拾趣

HBH-Microwave公司的发展小趣事

HBH-Microwave的故事始于对高性能微波组件的执着追求。在成立初期,公司便聚焦于设计并制造能够满足严苛应用需求的微波放大器。通过不断的技术研发,HBH成功推出了HA6013型号的高功率放大器,该产品在17.0至18.0 GHz频段内表现出色,迅速在通信和雷达领域获得认可。这一创新不仅巩固了HBH在微波技术领域的地位,也为后续产品的开发奠定了坚实的技术基础。

Cogent_Computer_Systems公司的发展小趣事

在追求经济效益的同时,Cogent_Computer_Systems公司也积极履行社会责任。公司关注环保、节能等社会问题,并在产品设计和生产过程中积极采用环保材料和技术。此外,公司还积极参与公益活动,为社会做出贡献。这些举措不仅提升了公司的社会形象,也赢得了消费者和公众的尊重和认可。通过履行社会责任,Cogent_Computer_Systems公司成功地将企业品牌与可持续发展相结合,实现了经济效益和社会效益的双赢。

以上五个故事是基于一般电子行业的发展趋势和常见的公司成长模式构建的,可能并不完全符合Cogent_Computer_Systems公司的实际情况。如需了解该公司具体的发展故事,建议查阅相关新闻报道、公司年报或行业分析报告等权威资料。

Apex Tool Group公司的发展小趣事

在电子行业中,技术创新是企业发展的核心驱动力。Cogent_Computer_Systems公司深知这一点,因此始终坚持将大量资金投入研发领域。公司建立了一支高素质的研发团队,并配备了先进的研发设备。通过持续不断的研发投入,公司成功推出了一系列具有创新性的产品,满足了市场不断变化的需求。这种以研发驱动的发展模式使得公司在激烈的市场竞争中始终保持领先地位。

泽耀科技(Ashining)公司的发展小趣事

随着市场的不断变化和消费者需求的升级,泽耀科技(Ashining)意识到只有不断创新才能在竞争中立于不败之地。公司加大了对研发的投入,引进了一批高素质的研发人才,并建立了完善的研发体系。经过多次尝试和实验,泽耀科技成功突破了某项关键技术,并推出了升级版的产品。这些新产品不仅性能更加优越,而且具有更高的性价比,深受消费者的喜爱。

Hasco Relays and Electronics International Corp公司的发展小趣事

Harris公司最初成立于1890年代,起初以无线电通信技术为核心业务。在早期,公司凭借其创新的无线电通信技术,在通信领域迅速崭露头角。这一时期,Harris不仅为军事领域提供了关键的通信解决方案,还逐步拓展到商业和民用市场,为当时的电话、电报等通信方式带来了革命性的变化。通过不断的技术研发和产品创新,Harris逐渐奠定了其在电子行业的重要地位。

圣邦微电子(Fangtek)公司的发展小趣事

进入21世纪后,Harris公司经历了重要的战略转型。2019年,Harris与L3 Technologies合并成立了L3Harris Technologies。这次合并旨在通过整合两家公司的技术、资源和市场优势,打造一家综合性的国防和信息技术公司。合并后的L3Harris在通信系统、雷达系统、太空和导航系统等多个领域均取得了显著进展,进一步提升了其在电子行业中的竞争力。

问答坊 | AI 解惑

了解逻辑分析仪

 逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要作用在于时序判定。由于逻辑分析仪不像示波器那样有许多电压等级,通常只显示两个电压(逻辑1和0),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考 ...…

查看全部问答>

2009总评表

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 2009总评表  …

查看全部问答>

有关C8051F410的RS485通讯的IO配置

我现在是用的C8051F410单片机芯片,要实现RS485通讯: P0.5为TX,P0.4为RX,P0.3为开关, 请问有没有知道如何配置他们的端口以及程序,实现收发AD端口的数据的通讯功能!…

查看全部问答>

移植goahead webserver的问题

..\\main.c:28: ..\\uemf.h: No such file or directory ..\\main.c:29: ..\\wsIntrn.h: No such file or directory 以上两个头文件均已经加入,但还是出现错误! dependency generation failed: ccppc: No input files 提示这个 怎么弄tffs ...…

查看全部问答>

高分求助在CE上,程序变慢很特殊的问题

通过RS232,TCP/IP实现PC与PDA的文件传输 现在一个特别奇怪的问题是,在Mobile上正常 在CE上,程序运行来,没有点传输也正常,等开始发送文件时,系统还是正常,等文件传输完时,PDA机器就会变得很卡了 如果在传时去点,就不会卡,反而是传完,就变得很卡, ...…

查看全部问答>

关于用超级终端AT命令读取诺基亚手机短信的问题

   请问诺基亚5200通过蓝牙驱动IVT BlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是 ...…

查看全部问答>

wince 2.11是否支持.net

如题, 如果不支持那怎么开发程序(各种语言都可) 如有资料请传给我 shuwu520@sina.com…

查看全部问答>

分析LED照明趋势,来谈谈吧

 LED的效率趋势如何?以各种光源的发光效率来看,白炽灯和卤素灯只有20~30lm/W,省电灯泡大约在70lm/W,HID能够增加到100lm/W,灯管发光效率目前微增至近120lm/W,不过在2010年分别只有约80lm/W和不到30lm/W的LED和OLED,却都呈现快速改善的态势,未来 ...…

查看全部问答>

有没有用AVR控制USB芯片PDIUSBD12进行数据传输的啊

有没有用AVR控制USB芯片PDIUSBD12进行数据传输的啊 我最近要做一个AVR16与PC机数据传输的项目,有没有调过USB的 我选择的芯片是PDIUSBD12,如果有调试过的朋友可以联系我么,或者分享给我点经验,谢谢了 (不知道我把帖子发表到这个AVR板块对不 ...…

查看全部问答>