amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 3555|回复: 3

使用USART进行RS232实验时注意问题

[复制链接]
发表于 2005-4-18 14:24:27 | 显示全部楼层 |阅读模式
USART的波特率与系统时钟和UBRR值相关,一般使用采用4M系统时钟为好。



首先仅编写一个简单通用的9600,8位数据,1位停止位,无校验的发送程序进行测试,USART的初始化请使用ICCAVR中或CVAVR中的程序生成向导,下面是它生成的初始化代码:



//UART0 initialize  ICCAVR生成 4M系统时钟

// desired baud rate: 9600

// actual: baud rate:9615 (0.2%)

// char size: 8 bit

// parity: Disabled

void uart0_init(void)

{

UCSRB = 0x00; //disable while setting baud rate

UCSRA = 0x00;

UCSRC = BIT(URSEL) | 0x06;

UBRRL = 0x19; //set baud rate lo

UBRRH = 0x00; //set baud rate hi

UCSRB = 0x08;

}



// USART initialization CVAVR生成 4M系统时钟

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

// USART Receiver: Off

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud rate: 9600

UCSRA=0x00;

UCSRB=0x08;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x19;





    更换系统的时钟时不仅仅是在程序改变UBRR的值,还要注意你AVR的系统时钟类型配置的溶丝位是否正确配置了,尤其是对于内部RC和外部晶体的转换!

   

    使用4M作为系统时钟时,波特率2400,4800,9600和19200都可以使用,尽管分频后有误差,但在范围内,14.4误差较大,不易使用。这也是“AVR-51”板选择4M的原因。

   

    4M系统时钟用于USART时的分频误差和UBRR值(十进制):

    2400 --> 0.2%    103

    4800 --> 0.2%     51

    9600 --> 0.2%     25

    14.4k --> 2.1%    16

    19.2k --> 0.2%    12



    如果通信要求高,可使用板上外部晶体提供11.0592的系统时钟,它可以提供理论上没有误差的2400、4800、9600、14.4k、19.2k、28.8k、38.4k、57.6k、76.8k、115.2k、230.4k波特率。使用其它的系统时钟频率时,请查看器件手册中提供的表,上面给出了各种常规系统时钟下的UBRR的值和误差情况。



    使用简单的发送程序先验证和掌握如何正确的调整波特率,然后再进入你的实用通信程序的调试,此时就是你的程序问题了。
发表于 2005-4-19 00:01:04 | 显示全部楼层
越来越多人关心通讯问题了,呵呵



老师这文章及时阿
发表于 2005-4-19 13:48:52 | 显示全部楼层
最近在整理m16,datasheet中的各個寄存器的資料,要學好avr單片機, 各寄存器的了解一定要清楚!(感覺avr的寄存器比其它的mcu都要多,名稱也不好記) 在使用自動生成的同時, 自己也要再看一片,好好理解一片.
发表于 2010-3-4 21:35:53 | 显示全部楼层
ji
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-21 07:18

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表