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

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

    关注

    6001

    文章

    43978

    浏览量

    620871
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79550
  • USART
    +关注

    关注

    1

    文章

    186

    浏览量

    30423
收藏 人收藏

    评论

    相关推荐

    基于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单片机控制TCS3200颜色传感器的程序

    谁能提供一个ATMEGA128单片机控制TCS3200颜色传感器的程序
    发表于 01-16 06:36

    请问ATMEGA128单片机控制电机正反转必须用pwm输出引脚吗

    ATMEGA128单片机控制电机正反转必须用pwm输出引脚吗
    发表于 01-30 06:36

    如何使用atmega128单片机实现简易密码锁的仿真?

    如何使用atmega128单片机实现简易密码锁的仿真?
    发表于 11-02 07:45

    如何利用atmega128单片机实现玩具电子琴的设计?

    如何利用atmega128单片机实现玩具电子琴的设计?
    发表于 01-24 07:25

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

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

    ATmega128几个常用程序例子

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

    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次下载

    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软硬件设计原理

    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>情况)