基于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机发送的是非小写字母,开发板可能会发回乱码。
/************************************
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机发送的是非小写字母,开发板可能会发回乱码。
相关文章推荐
- [置顶] ARM开发(5)基于STM32的UART串口通信实验
- 串口通信校验方式(even,odd,space,mark)UART数据波形分析
- 基于FPGA Uart串口通信实验
- 基于HAL库处理UART中断并接收串口传入的数据
- SYD8801 UART使用说明【uart轮发数据代码实现】【 uart中断发数据代码实现】【RFSleep函数对串口的影响】【中断中调用串口打印函数有可能会造成死机】
- MSP430F149和PC机串口通信问题
- 初探基于CDMA网络的移动数据通信系统
- 基于jsTree的无限级树JSON数据的转换代码
- 基于API函数的串口通信编程(转载)
- 在CB6下基于api函数编写串口通信程序简介
- 从数据到代码——基于T4的代码生成方式
- 串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)
- 基于Mscomm控件的串口通信编程
- 基于双缓冲队列的串口通信模块的研究与实现
- dm355的串口问题,uart1发不了数据
- 一个串口接收数据的代码
- 串口数据通信程序实现(SerialPort类方法)
- 基于api函数编写串口通信
- 基于Vxworks实时操作系统的串口通信程序设计与实现
- VC写串口通信遇到只能接收发送数据交替执行的情况