Atmega128有两个串口:USART0与USART1 
以USART0为例 
串口的初始化包括: 
传输模式的选择:同步还是异步,默认为异步模式,可通过选择USART控制和状态寄存器UCSR0C中的UMSEL位来选择,UMSEL为0,是异步模式. 
波特率的设置:通信的双方都必须有相同的波特率,波特率可以通过设置波特率发生寄存器UBRR0来确定,UBRR0为两字节16位的寄存器,可分为 UBRR0H和UBRR0L.同时起作用的还有UCSR0A中的波特率加倍位UX2,当UX2为1时设置的波特率加倍. 
传输帧格式的设置:默认是8位数据位,一位停止位 
发送接受的使能与中断:通过设置UCSR0B来根据需要选择接收或发送的使能和是否使用中断,对使用中断的USART操作,初始化前要关闭中断 
USART0的控制和状态寄存器有:UCSR0A,UCSR0B,UCSR0C,波特率寄存器有UBRR0,即UBRR0H和UBRR0L,数据寄存器为UDR0

初始化: 
设置波特率前,要关闭USART0的所有使用,包括使能和中断: 
UCSR0B=0B00000000; //关闭USART0 
设置UCSR0A: 
UCSR0A能写的有Bit0,Bit1,Bit6,其他5位为状态位.我们一般使用的有Bit1-U2X0,当这一位为1时,波特率的分频因子从16降到8,能够有效的将异步通信模式的传输速率加倍,但是这一位仅对异步操作有影响,使用同步操作时应将此位清零. 
UCSR0A=0B00000000; //不使用倍速发送 
设置UCSR0C: 
Bit6-UMSEL0:USART0的模式选择,0为异步模式,1为同步模式 
Bit5:4-UPM01:0:奇偶校验模式,00禁止,01,保留,10偶校验,11,奇校验 
Bit3-USBS0:停止位的选择,0停止位为1bit,1停止位为2-bits 
Bit2:1-UCSZ01:0:字符长度,当UCSZ02为0时,00表示5位,01表示6位,10表示7位,11表示8位.当UCSZ02为1时,11表示9位.(UCSZ02为UCSR0B里的一位寄存器) 
UCSR0C=0B00000110 //异步模式,禁止奇偶校验,停止位为1位,数据位为8位 
设置UBRR: 
UBRR的设置和这些参数有关:U2X0,CPU频率,波特率 
当U2X0为0时,即异步正常模式下,UBRR的计算公式: 
//U2X=0时的公式计算 
UBRR0L= (F_CPU/BAUDRATE/16-1)%256; 
UBRR0H= (F_CPU/BAUDRATE/16-1)/256; 
//U2X=1时的公式计算 
//UBRRL= (F_CPU/BAUDRATE/8-1)%256; 
//UBRRH= (F_CPU/BAUDRATE/8-1)/256; 
//也可根据数据手册的[波特率设置的例子]查得 
//UBRRL = 0x2F; //set baud rate lo 
//UBRRH = 0x00; //set baud rate hi 
设置一般会有误差,误差计算方法为:Error[%]=(BaudRate_ture/BaudRate-1)*100%; 
然后就是设置UCSR0B: 
Bit7-RXCIE0为接收结束中断使能,Bit6-TXCIE0为发送结束中断使能,Bit4-RXEN0为接收使能,Bit3-TXEN0为发送使能.一般情况下,接收使用中断方式,所以使用接收结束中断使能. 
UCSR0B=0B10011000 //发送接收使能,接收结束使能 
还一种写法是UCSR0B|=(1<< RXEN0)|(1<< TXEN0)|(RXCIE0); 
如果更熟练,可以直接以10进制活16进制来设置这些寄存器: 
UCSR0B=0x98;或者UCSR0B=152;

串口的初始化函数:

void uart_init(void) //串口0初始化 

UCSR0B=0x00; //disable while setting baud rate 
UCSR0A=0B00000000; //Bit1为1则倍速发送 U2X=0 
UCSR0C=0x06; //B00000110 //奇偶模式无,八位数据位,一位停止位 
UBRR0L=103; //B00011001波特率:9600 Bps 
UBRR0H=0x00; //误差率:0.156% 
UCSR0B=0x98; 
}

初始化之后就是对USART0进行读写了. 
UCSR0A的Bit5-UDRE0标志指出发送缓冲器UDR0是否准备好接收新数据,UDRE0为1说明缓冲器为空,可以接收新数据,UDRE0标志也可用来产生寄存器空中断.复位后的UDRE0置位,表明发送器已经就绪: 
当UDRE0为1时!(UCSR0A&(1<< UDRE0))为0 
void putchar(uchar c) //串口0发送字符 

while(!(UCSR0A&(1<< UDRE0))); //while(!(UCSR0A&32)); 在此如何理解? 
UDR0=c; 
}

串口0发送字符串: 
void putstr(uchar *s) //串口0发送字符串 

while(*s) 

putchar(*s); 
s++; 

}

RXC0为UCSR0A里的Bit7位,为USART0接收结束的状态位,接收缓冲器中有未读出的数据时RXC0置位,否则清零.

串口0接收字符: 
uchar getchar(void) //串口0接收字符 

while(!(UCSR0A&(1<< RXC0))); 
return UDR0; 
}

在使用串口的程序中一般包含这些文件: 
#include  
#include  
#include  
#include  
avr/io.h里有各种寄存器的定义,avr/signal.h,avr/interrupt.h里有中断的定义,avr/delay.h包含延时函数.

本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/21/2828332.html,如需转载请自行联系原作者

【嵌入式技术】Atmega128串口详解相关推荐

  1. 浅析嵌入式系统之uboot详解(5.1)—时钟分频

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  2. 浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  3. 嵌入式Linux应用开发详解

    嵌入式Linux应用开发详解 这边主要是推荐一些嵌入式开发应用作用到的一些书籍和自己从中学到的一些体会,写下来一方面是供自己参考,另一方面也是一种只是的传播,我学习我快乐哈哈 有需要书籍电子版的也可以 ...

  4. 技术揭秘之详解回收站删除文件恢复

    |=------------------------------------------------------------------------=| |=--------------=[技术揭秘之 ...

  5. java me基础教程 pdf_Java ME手机应用开发技术与案例详解 PDF

    资源名称:Java ME手机应用开发技术与案例详解 PDF Java ME手机应用开发技术与案例详解基于Java ME,系统描述了Java ME手机应用开发的各个方面.全书按照Java ME程序的开发 ...

  6. 前端技术之_CSS详解第五天

    前端技术之_CSS详解第五天 一.行高和字号 1.1 行高 CSS中,所有的行,都有行高.盒模型的padding,绝对不是直接作用在文字上的,而是作用在"行"上的. <!DO ...

  7. 前端技术之_CSS详解第三天

    前端技术之_CSS详解第三天 二.权重问题深入 2.1 同一个标签,携带了多个类名,有冲突: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  8. <Zhuuu_ZZ>大数据技术之Flume详解

    大数据技术之Flume详解 一 Flume配置 Flume安装地址 环境配置 验证 二 Flume基础架构 1.定义 2.Flume组成架构 3.Flume组件 Agent Source Channe ...

  9. 浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  10. Flink常见的关键技术与特性详解

    转载:http://bigdata.51cto.com/art/201702/531036.htm Flink常见的关键技术与特性详解 Flink项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其 ...

最新文章

  1. 如何做好SOC的一点点体会
  2. pytorch几种损失函数CrossEntropyLoss、NLLLoss、BCELoss、BCEWithLogitsLoss、focal_loss、heatmap_loss
  3. 《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
  4. vue --- 按钮的防重复点击事件
  5. Vim as Python IDE on windows
  6. 小米4刷CM13系统
  7. Java_MD5的使用
  8. 计算机基础(九):C语言基础知识小结
  9. iOS中使用SFHFKeychainUtils保存用户密码
  10. 树莓派3 串口 / 模拟串口
  11. 苹果电脑一直密码错误_您可能一直都在犯的安全和密码错误
  12. 迷你西游最新服务器是哪个,迷你西游公测新开服务器“万佛朝宗”公告
  13. 哲学家进餐问题(java模拟死锁及解决方案)
  14. NMOS PMOS
  15. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛(A E F )
  16. 前端的小激动:Nodejs写简单接口教程
  17. QQ概念版试用体会(转)
  18. 因为我们正试图把许多的期待留给春
  19. Linux网络服务之——DHCP篇
  20. twoStack19.9.9

热门文章

  1. Java多线程及锁相关面试题
  2. HDU 5733 求四面体 内心 外心 内接圆圆心 外接圆圆心
  3. 嵌入式记录2——Kame四足巡线机器人
  4. 【8】同步vscode配置和插件【导入导出】、再也不用担心换电脑重新安装插件了
  5. IP协议号与传输层端口
  6. sqlserver2008清理数据库日志文件
  7. Ubuntu 20.4 安装 Notepad++
  8. RSA加密工具类库C#,可加密二进制数组(用来加密文件)
  9. 基于SpringBoot的宠物医院管理系统
  10. Vivado ML 2021.1 安装包下载