单片机交流
登录
直播中
杨福林
7年用户
1489经验值
私信
关注
[问答]
如何利用AVR编写一个简单的串口通信的程序?
开启该帖子的消息推送
AVR
如何利用AVR编写一个简单的串口
通信
的程序?
回帖
(1)
罗标雄
2021-11-2 11:31:40
本例子是学习AVR的串口通信时候编写的一个简单的串口通信的程序,运行的时候先向串口发送一个数据0x12,然后等待接收,当PC机发送一个数据到单片机,单片机就对这个数据进行加1处理,然后发回到PC机显示。以下是串口通信时候的界面和串口通信的源程序。
本文引用地址:
http://www.eepw.com.cn/article/201611/316047.htm
/***********************************************/
/************AVR USART串口调试****************/
/************ClimberWin 2008.6.29**************/
/*CPU:ATMEGA32L 4MHZ 外部晶振(熔断位需要先配置好外部晶振)*/
/*说明:AVR串口是通过UDR发送出去的,类似于51单片机的SBUF*/
/*程序功能:能够通过串行数据发送给PC机0x12数据,接收上位机数据并且+1后发送回上位机*/
#include //AVR I/O口定义头文件
#include // 延时头文件调用
#include interrupt.h> // 中断头文件调用
#define uchar unsigned char
//引脚定义
#define AVR_RXD 0 //PD0 RXD
#define AVR_TXD 1 //PD1 TXD
//常量定义
#define BAUDRATE 9600 //波特率定义
uchar UART_MID; //定义一个缓存区数据临时存储地址
/*******************串口接收中断服务程序*************************/
SIGNAL(SIG_USART_RECV) //串口中断服务程序
{
UART_MID=UDR; // 从缓冲器中读取数据到UART_MID,临时存放
UDR=UART_MID+1; //+1后发送回去数据
}
/****************************************************************/
void init_USART(void)//USART 初始化
{
//USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
UCSRC = (1/异步,8位数据,无奇偶校验,一个停止位,无倍速
// UBRR=(F_CPU/BAUDRATE/16-1)
UBRRL= (F_CPU/BAUDRATE/16-1)%256;
UBRRH= (F_CPU/BAUDRATE/16-1)/256;
UCSRA = 0x00; //工作在异步正常模式下 U2X=0
UCSRB = (1/使能接收中断,使能接收,使能发送
}
int main(void)
{
DDRD =(1<
PORTD =0xFF;
init_USART(); //初始化串口
UDR=0X12; //向串口发送数据
sei(); //中断使能(avr/interrupt.h 中调用)
while (1)
{
//等待接收,接收后跳转到中断程序
}
}
本例子是学习AVR的串口通信时候编写的一个简单的串口通信的程序,运行的时候先向串口发送一个数据0x12,然后等待接收,当PC机发送一个数据到单片机,单片机就对这个数据进行加1处理,然后发回到PC机显示。以下是串口通信时候的界面和串口通信的源程序。
本文引用地址:
http://www.eepw.com.cn/article/201611/316047.htm
/***********************************************/
/************AVR USART串口调试****************/
/************ClimberWin 2008.6.29**************/
/*CPU:ATMEGA32L 4MHZ 外部晶振(熔断位需要先配置好外部晶振)*/
/*说明:AVR串口是通过UDR发送出去的,类似于51单片机的SBUF*/
/*程序功能:能够通过串行数据发送给PC机0x12数据,接收上位机数据并且+1后发送回上位机*/
#include //AVR I/O口定义头文件
#include // 延时头文件调用
#include interrupt.h> // 中断头文件调用
#define uchar unsigned char
//引脚定义
#define AVR_RXD 0 //PD0 RXD
#define AVR_TXD 1 //PD1 TXD
//常量定义
#define BAUDRATE 9600 //波特率定义
uchar UART_MID; //定义一个缓存区数据临时存储地址
/*******************串口接收中断服务程序*************************/
SIGNAL(SIG_USART_RECV) //串口中断服务程序
{
UART_MID=UDR; // 从缓冲器中读取数据到UART_MID,临时存放
UDR=UART_MID+1; //+1后发送回去数据
}
/****************************************************************/
void init_USART(void)//USART 初始化
{
//USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
UCSRC = (1/异步,8位数据,无奇偶校验,一个停止位,无倍速
// UBRR=(F_CPU/BAUDRATE/16-1)
UBRRL= (F_CPU/BAUDRATE/16-1)%256;
UBRRH= (F_CPU/BAUDRATE/16-1)/256;
UCSRA = 0x00; //工作在异步正常模式下 U2X=0
UCSRB = (1/使能接收中断,使能接收,使能发送
}
int main(void)
{
DDRD =(1<
PORTD =0xFF;
init_USART(); //初始化串口
UDR=0X12; //向串口发送数据
sei(); //中断使能(avr/interrupt.h 中调用)
while (1)
{
//等待接收,接收后跳转到中断程序
}
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
AVR
如何
编写
AVR
的
程序
?
2020-06-03
1401
如何
利用
stm32cubeMX配置实现
简单
的
串口
通信
?
2021-12-08
758
关于
AVR
与PC
串口
通信
问题
2014-07-08
2857
编写
串口
通信
程序
的基本步骤是怎样的?
2022-02-17
876
如何
利用
stm32去
编写
一
种
串口
发送
程序
呢
2021-12-09
1286
请教51和
AVR
单片机之间的多机
通信
问题
2016-03-03
6165
请问
AVR
atmage168怎么下载到单片机
2019-07-25
1003
AVR
单片机
串口
通信
2012-11-12
2939
l基于labview 单片机
串口
通信
下位机
程序
编写
2012-05-26
12338
有人会用matlab 做
一个
简单
GUI界面的
串口
通信
吗?
2014-04-22
2944
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分