您的位置:首页 > 编程语言

基于AVR的串口与PC机通信代码(uart8位数据)

2015-01-25 16:29 323 查看
为了以后根据此代码继续改进功能,特意把代码放在此处,也和大家一起学习。

/************************************

AVR时钟:8.00MHz
*波特率9600(51)8位数据,1位停止,当波特率设置为19200时,UBRR=25,4800=103

*注:波特率设置9600最佳,别的数据不稳定,不同波特率对应的UBRR值参考手册

*PC机向开发板发送一个字符,开发板将其大写字母回写给PC机

***********************************/

#include<iom16v.h>

#include<macros.h>

void USART_Init( unsigned int baud )

{

/* 设置波特率,baud的值查数据手册*/

UBRRH = (unsigned char )(baud>>8);

UBRRL = (unsigned char )baud;

/* 接收器与发送器使能*/

UCSRB = (1<<RXEN)|(1<<TXEN);

/* 设置帧格式: 8 个数据位, 2个停止位*/

UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

}

void USART_Transmit( unsigned char data )

{

/* 等待发送缓冲器为空 */

while ( !( UCSRA & (1<<UDRE)) )

;

/* 将数据放入缓冲器,发送数据 */

UDR = data;

}

unsigned char USART_Receive( void )

{

/*等待接收数据*/

while ( !(UCSRA & (1<<RXC)) )

;

/* 从缓冲器中获取并返回数据*/

return UDR;

}

void main()

{

unsigned char cr;

DDRD=0X02;  //端口PD2(TXD)输出,端口PD1(RXD)输入上拉

PORTD=0XFF;

//CLR_PORTD(BUZZER);

USART_Init(51);  //波特率对应的UBRR值做形参初始化

while(1)

{

cr = USART_Receive();

cr-=32;

USART_Transmit(cr);

}

}
//大写字母和小写字母的ASCII码相差32,如果PC机发送的是非小写字母,开发板可能会发回乱码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: