首页 AVR_单片机_串口通信_串行通讯_详细例程介绍

AVR_单片机_串口通信_串行通讯_详细例程介绍

举报
开通vip

AVR_单片机_串口通信_串行通讯_详细例程介绍 AVR 系列单片机的串行通讯实例 Atmega128有两个串口:USART0与 USART1 以 USART0为例 串口的初始化包括: 传输模式的选择:同步还是异步,默认为异步模式,可通过选择 USART控制和状态 寄存器 UCSR0C中的 UMSEL 位来选择,UMSEL为 0,是异步模式. 波特率的设置:通信的双方都必须有相同的波特率,波特率可以通过设置波特率 发生寄存器 UBRR0来确定,UBRR0为两字节 16位的寄存器,可分为 UBRR0H 和 UBRR0L.同时起作用的...

AVR_单片机_串口通信_串行通讯_详细例程介绍
AVR 系列单片机的串行通讯实例 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 1、 初始化: 设置波特率前,要关闭 USART0的所有使用,包括使能和中断: UCSR0B=0B00000000; //关闭 USART0 2、设置 UCSR0A: UCSR0A能写的有 Bit0,Bit1,Bit6,其他 5位为状态位.我们一般使用的有 Bit1-U2X0,当这一位为 1时,波特率的分频因子从 16降到 8,能够有效的将异 步通信模式的传输速率加倍,但是这一位仅对异步操作有影响,使用同步操 作时应将此位清零. UCSR0A=0B00000000; //不使用倍速发送 3、设置 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 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示 5位,01表示 6位,10 表示 7位,11表示 8位.当 UCSZ02 为 1 时,11表示 9位.(UCSZ02 为 UCSR0B 里的一位寄存器) eg: UCSR0C=0B00000110 //异步模式,禁止奇偶校验,停止位为 1位,数据位为 8位 4、设置 UBRR: UBRR的设置和这些参数有关:U2X0,CPU频率,波特率 当 U2X0 为 0时,即异步正常模式下,UBRR的计算公式: 1、U2X=0 时的公式计算 UBRR0L= (F_CPU/BAUDRATE/16-1)%256; UBRR0H= (F_CPU/BAUDRATE/16-1)/256; 2、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%; 5、然后就是设置 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包含延时函数. 转自 http://blog.csdn.net/gnuhpc/archive/2009/07/24/4378251.aspx 例程如下: /******************************************************************* ********/ /*串口 0 测试程 序 */ /*目标器件: ATmega128 */ /*晶振:RC 8MHZ */ /*编译环境:ICCAVR 6.31A */ /*E-Mail:number007cool@163.com */ /******************************************************************* ********/ /*********************************包含头文件 ********************************/ #include #include /***********************************宏定义 **********************************/ #define fosc 8000000 //晶振 8MHZ #define baud 2400 //波特率 /******************************************************************* ********* 函数功能:uart0 初始化程序 入口参数: 出口参数: ******************************************************************** ********/ void uart0_init(void) { UCSR0B = 0x00; //关闭 UART00 UCSR0A = 0x00; //不使用倍速 发送(异步) UCSR0C =(1<
本文档为【AVR_单片机_串口通信_串行通讯_详细例程介绍】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_099261
暂无简介~
格式:pdf
大小:94KB
软件:PDF阅读器
页数:6
分类:工学
上传时间:2011-08-16
浏览量:52