本帖最后由 areshan 于 2011-5-23 18:50 编辑
一个简单的串口我今天一天都没有搞定,不知道哪里没有设置好,用的默认2M晶振,设置的是2400的波特率,希望大家能帮我看看,着急!
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
void uart_init(void)
{
USARTE0.CTRLA=0x10; //开接收完成中断
USARTE0.CTRLB=0x18; //使能接收和发送
USARTE0.CTRLC=0x03; //异步,无奇偶校验,1位停止位,8位数据位
USARTE0.BAUDCTRLA=0x33; //2400的波特率
PORTE.DIR|=PIN3_bm; //tx方向输出
PORTE.DIR&=~PIN2_bm; //rx方向输入
}
void main(void)
{
uart_init();
for( ; ; )
{
while(!(USARTE0.STATUS&0x20))
asm("nop");
USARTE0.DATA=0x33;
}
}
主函数里就是等待发送寄存器空后,在发送0X33,但是在仿真的时候,才开始能够能到2、3次发送寄存器空,后面等好久都没有等到!
发送寄存器不为空,说明数据没有发送出去,为什么发送数据不是固定的时间呢,为什么要等好久,远远超过安装2400波特率计算出来的发送速度!
群里有用AVR的studio,和AVR的dragon仿真的吗?到底是怎么回事呢? |