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

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

3天内不再提示

基于ATmega128单片机的USART接口程序的开发

牵手一起梦 来源:电子工程网 作者:佚名 2020-10-04 17:49 次阅读

一般教科书上提供的UART收发的程序往往是一段采用轮循(Polling)方式完成收发的简单代码。但对于高速的AVR来讲,采用这种方式大大降低了 MUC的效率。在使用AVR时,应根据芯片本身的特点(片内大容量数据存储器RAM,更适合采用高级语言编写系统程序),编写高效可靠的UART收发接口(低层)程序。下面是一个典型的ATmega128的软件USART的接口程序。

基于ATmega128单片机的USART接口程序的开发

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART0 Receiver: On

// USART0 Transmitter: On

// USART0 Mode: Asynchronous

// USART0 Baud rate: 9600

UCSR0A=0x00;

UCSR0B=0xD8;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x67;

// Global enable interrupts

#asm(“sei”)

while (1)

{

// Place your code here

};

}

这段由CVAVR程序生成器产生的UART接口代码是一个非常好的、高效可靠,并且值得认真学习和体会的。其特点如下:

1. 它采用两个8字节的接收和发送缓冲器来提高MCU的效率,如当主程序调用Putchar()发送数据时,如果UART口不空闲,就将数据放入发送缓冲器中,MCU不必等待,可以继续执行其它的工作。而UART的硬件发送完一个数据后,产生中断,由中断服务程序负责将发送缓冲器中数据依次送出。

2.数据缓冲器结构是一个线性的循环队列,由读、写和队列计数器3个指针控制,用于判断队列是否空、溢出,以及当前数据在队列中的位置。

3. 用编译控制命令#pragma savereg-和#pragma savereg+,使得由CVAVR在生成的中断服务程序中不进行中断保护(CVAVR生成中断保护会将比较多的寄存器压入堆栈中),而在中断中嵌入汇编,只将5个在本中断中必须要保护的寄存器压栈。这样提高了UART中断处理的速度,也意味着提高了MCU的效率。

4.由于在接口程序Putchar()、Getchar()和中断服务程序中都要对数据缓冲器的读、写和队列计数器3个指针判断和操作,为了防止冲突,在Putchar()、Getchar()中对3个指针操作时临时将中断关闭,提高了程序的可靠性。

建议读者能逐字逐句地仔细分析该段代码,真正理解和领会每一句语句(包括编译控制命令的作用)的作用,从中体会和学习如何编写效率高,可靠性好,结构优良的系统代码。这段程序使用的方法和技巧,对编写SPI、I2C的串行通信接口程序都是非常好的借鉴。

作为现在的单片机嵌入式系统工程师,不仅要深入全面的掌握芯片和各种器件的性能,具备丰富的硬件设计能力;同时也必须提高软件的设计能力。要学习和掌握有关数据结构、操作系统、软件工程、网络协议等方面的知识,具有设计编写大的复杂系统程序的能力。

责任编辑:gt

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

    关注

    6031

    文章

    44511

    浏览量

    632617
  • 程序
    +关注

    关注

    116

    文章

    3770

    浏览量

    80826
  • USART
    +关注

    关注

    1

    文章

    195

    浏览量

    30786
收藏 人收藏

    评论

    相关推荐

    基于ATMEGA128单片机的程控滤波器

    基于ATMEGA128单片机的程控滤波器
    发表于 08-06 10:46

    ATmega128单片机入门与提高》光盘.rar

    大量的实用程序,并在最后一章给出了许多综合实例;实例程序全部用C语言编写,且已全部在ICCAVR 6.31A开发环境上编译通过。《Atmega128
    发表于 08-16 10:36

    基于ATMEGA128单片机的程控滤波器

    基于ATMEGA128单片机的程控滤波器
    发表于 08-17 23:50

    ATmega128单片机怎么学

    我是学习计算机科学与技术的,现在想做游历机器人。刚接触ATmega128单片机,该怎么学?自己以前也没学过单片机啊,连51都不懂。该怎么学?恳求大师指点
    发表于 10-13 15:26

    采用ATMEGA128单片机结合CPLD 实现了对VGA显示

    采用ATMEGA128 单片机结合CPLD 实现了对VGA 显示器和激光打印机的控制作者:时永乐 王培勇 转贴自:微计算机信息摘要:用 ATMEGA128 单片机结合CPLD 实现了对
    发表于 02-08 09:52 107次下载

    ATmega128开发应用中应注意的问题

    ATmega128开发应用中应注意的问题 ATmega128是AVR系列中功能最强的单片机,具有如下主要特点:   (1)先进的RISC精简指令集结构:
    发表于 10-26 09:06 3021次阅读

    ATmega128几个常用程序例子

    ATmega128单片机经典例题 对初学者很有帮助的哦
    发表于 11-03 18:14 63次下载

    AVR单片机Atmega128在FPGA配置中的运用

    在嵌入式系统设计中,掌握MCU对FPGA的配置,对系统的设计是十分必要的。根据EPFIOKIO的配置时序和AVR单片机Atmega128接口特点,详细介绍了Atmega128对EPF
    发表于 10-11 15:35 18次下载

    基于Atmega128单片机SD卡读写程序(免费分享)

    avr Atmega128单片机SD卡读写程序
    发表于 12-29 20:55 21次下载

    基于ATmega128单片机的汽车太阳能充电控制器_秦俊

    基于ATmega128单片机的汽车太阳能充电控制器_秦俊
    发表于 03-19 11:33 6次下载

    ATmega128单片机的内部资源、工作原理和硬件电路设计的资料免费下载

    在本系统中,本小节主要讲 ATmega128 单片机的内部资源、工作原理和硬件电路设计等。2.5.1 ATmega128 芯片介绍 ATmega128 为基于AVR RISC 结构的8
    发表于 09-21 15:50 103次下载
    <b class='flag-5'>ATmega128</b><b class='flag-5'>单片机</b>的内部资源、工作原理和硬件电路设计的资料免费下载

    AVR单片机Atmega128在FPGA配置的应用和对EPF10K10软硬件设计原理

    在嵌入式系统设计中,掌握MCU对FPGA的配置,对系统的设计是十分必要的。根据EPF10K10的配置时序和AVR单片机Atmega128接口特点,详细介绍了Atmega128对EPF
    发表于 10-26 15:34 9次下载
    AVR<b class='flag-5'>单片机</b><b class='flag-5'>Atmega128</b>在FPGA配置的应用和对EPF10K10软硬件设计原理

    使用ATmega128单片机设计数码管秒表的程序和工程文件免费下载

    本文档的主要内容详细介绍的是使用ATmega128单片机设计数码管秒表的程序和工程文件免费下载。
    发表于 07-31 08:00 4次下载
    使用<b class='flag-5'>ATmega128</b><b class='flag-5'>单片机</b>设计数码管秒表的<b class='flag-5'>程序</b>和工程文件免费下载

    DAC1230与单片机Atmega128接口技术

    DAC1230与单片机Atmega128接口技术(开关电源技术课程设计报告)-文档为DAC1230与单片机Atmega128
    发表于 09-17 15:45 5次下载
    DAC1230与<b class='flag-5'>单片机</b><b class='flag-5'>Atmega128</b>的<b class='flag-5'>接口</b>技术

    ATmega128单片机](熔丝修改后无法烧录程序情况)

    @ATmega128单片机,AVR,ATmega128单片机](熔丝修改后无法烧录程序情况)本人是AVR
    发表于 11-15 09:36 26次下载
    <b class='flag-5'>ATmega128</b><b class='flag-5'>单片机</b>](熔丝修改后无法烧录<b class='flag-5'>程序</b>情况)