专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

AVR单片机串口通信程序

作者:佚名   来源:本站原创   点击数:  更新时间:2012年10月24日   【字体:

  单片机的串口在很多时候都是一个有用的通信接口,比如要修改单片机内部的一些变量,就可以直接使用串口通信,将参数发送到单片机,就省去了重新编译下载的麻烦。

    AVR单片机的串口通信功能可谓强大啊,下面就简单说下我在学习时的一些经验。

    实验板是AVR-ATMEGA128A单片机,晶振8MHz。

 

  1、初始化:设置波特率前,要关闭 USART0 的所有使用,包括使能和中断。

  2、设置 UCSR0A: UCSR0A 能写的有 Bit0,Bit1,Bit6,其他 5 位为状态位.我们一般使用的有 Bit1-U2X0,当这一位为 1 时,波特率的分频因子从 16 降到 8,能够有效的将异步通信模式的传输速率加倍,但是这一位仅对异步操作有影响,使用同步操作时应将此位清零。

  3、设置 UCSR0C: Bit6-UMSEL0:USART0 的模式选择0为异步模式,1为同步模式。

    Bit5:4-UPM01:0:奇偶校验模式,00 禁止,01,保留,10 偶校验,11奇校验。

    Bit3-USBS0:停止位的选择 0-停止位为1bit,1 停止位为 2bits

    Bit2:1-UCSZ01:0:字符长度 当 UCSZ02 为0时:00 表示 5 位,01 表示 6 位,10 表示7 位,11表示 8 位。当 UCSZ02 为 1 时,11 表示 9 位(UCSZ02 为 UCSR0B 里的一位寄存器)。

  4、设置 UBRR: UBRR 的设置和这些参数有关:U2X0,CPU 频率,波特率

  5、然后就是设置 UCSR0B:Bit7-RXCIE0 为接收结束中断使能,Bit6-TXCIE0 为发送结束中断使 ,Bit4-RXEN0 为接收使能,Bit3-TXEN0 为发送使能。一般情况下,接收使用中断方式,所以使用接收结束中断使能。

 

 

下面是源代码:

 

/*
 * usart.c
 *
 * Created: 2011/7/2 15:48:36
 *  Author: YIN
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
volatile unsigned char temp;
void init()
{
 UCSR0B=0x00;
 UBRR0H=0x00;
 UBRR0L=51;
 UCSR0A=0x00;
 UCSR0C=0x06;
 UCSR0B=0x98;
 sei();
 DDRF=0xff;
 PORTF=0xff;
 DDRD=0xf0;
 DDRA=0xff;
 
}
void delay()
{
 unsigned int i;
 i=100;
 while(i--);
}

int main(void)
{
 init();
    while (1);            //等待中断
}

SIGNAL(SIG_UART0_RECV)    //将上位机发送的数据发送回上位机显示
{
 temp=UDR0;
 PORTA=~temp;
 UDR0=temp;
}

 

 

部分内容摘自网络,希望对大家有帮助!

关闭窗口

相关文章