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
#include
#include
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;
}
上一篇:AVR单片机-数码管1
下一篇:超声波测距模块+AVR单片机控制程序
推荐阅读最新更新时间:2024-03-16 14:24
设计资源 培训 开发板 精华推荐
- 电源小课堂—AC/DC电源设计的选型
- 【新年乐分享】EEWORLD优秀主题/回复第18期来啦~~
- 有奖直播:安世半导体先进 SiC MOSFET 助力提升 EV-Charger 和 OBC 应用能效
- 直播|基于英特尔® Agilex™ FPGA F-Tile的以太网硬核IP详解及如何使用oneAPI对FPGA编程
- 有奖直播已结束【如何利用 TI MSPM0 汽车微控制器提高检测和控制性能】
- 【TI有奖直播】新一代低功耗蓝牙微控制器CC2640R2,开发和应用案例解析
- 25美分实现25种功能的TI MSP430铁电超值微控制器方案即将直播!快来报名围观!
- 激情竞赛日--看谁最给力!
- 下载Mentor白皮书,迎接电路板与晶片日益复杂的设计挑战,还有好礼相送哟!
- TE 最新趋势报告|《温度监测对发电机市场有何影响》