atmega16应用之串口通信(HC05)

2023-10-08 15:10

本文主要是介绍atmega16应用之串口通信(HC05),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

串口通信

https://baike.baidu.com/item/串口通信/3775296?fr=aladdin
由于我比较懒,所以大家自己去看串口通信的原理啦

串口通信的寄存器配置

如果大家学过微机原理这门课,就知道单片机使用离不开三种寄存器,状态寄存器,是读取状态用的,控制寄存器,是配置参数控制功能,数据寄存器,是存储数据用的,只要我们正确的配置寄存器,就能使用自己想要的功能

USART I/O数据寄存器-UDR

在这里插入图片描述
大家只要知道结束数据和发送的数据都是存储在UDR这个寄存器里就够了,文字太多懒得看

USART控制和状态寄存器A- UCSRA

在这里插入图片描述
在这里插入图片描述
一般来说,我们自己完的单片机就一对一通信,功能不复杂,因此只需要配置和读取的是RXC、TXC还有异步通信模式下的U2X

USART控制和状态寄存器B- UCSRB

在这里插入图片描述
在这里插入图片描述
这个寄存器使用的东西非常多,首先 RXCIE和TXCIE写中断服务函数使用的,在接受和发送完一个字符后,需要执行某些操作时,必须要置位,才能使用中断服务函数。 RXEN和TXEN是打开串口通信的接受和发送数据的功能,否则是无法发送或结束到数据的。一般来说,配置这几个就够了

USART控制和状态寄存器C- UCSRC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
常用的使用是配置 UMSEL (选择同步或异步)、UPM1:0: (奇偶校验)、USBS(停止位)、 UCSZ1:0: 字符长度 ,其他的基本不用管

USART波特率寄存器-UBRRL 和UBRRH

在这里插入图片描述

在这里插入图片描述
大家自己查资料计算比特率的计算公式了,我比较懒

HC05的使用

HC05怎么用,别人已经写的 很好了,就不写了,我是用HC05与手机通信,所以比特率是9600,用的是手机串口调试软件
https://blog.csdn.net/u011318735/article/details/17429879

代码

//串口IO初始化函数
void Serial_PortInit(void)
{int BAUD;DDRD &= 0XFE;DDRD |= 0X02;UCSRA |= (1 << U2X);                        //倍速模式UCSRB |= ((1 << RXEN )|(1 << TXEN));        //发送接受使能UCSRB |= ( (1<< RXCIE)| (1<< TXCIE));       //发送接受结束中断使能UCSRB &= ~(1 << UCSZ2);UCSRC |= ((1 << UCSZ1)|(1 << UCSZ0));       //8位数据位UCSRC &= ~(1 << UMSEL);                     //异步UCSRC &= ~((1 << UPM1)|(1 << UPM0));        //无奇偶校验位UCSRC &= ~(1 << USBS);                      //1位停止位BAUD  = 12;                                 //波特率9600UBRRL = (unsigned char)BAUD;UBRRH = (unsigned char)(BAUD>>8);SREG|=BIT(7);			//开全局中断
}

//串口发送函数
void USART_Send(unsigned char Data)
{while(!(UCSRA&(BIT(UDRE))));        //数据寄存器UDR是否为空?UDR=Data;                            //UDR赋值while(!(UCSRA&(BIT(TXC))));            //数据是否已经发送完毕?UCSRA|=BIT(TXC);                    //清除发送完毕标志位
}
/*发送字符串*/
void UART_Send_String(unsigned char* str, unsigned char length)
{//unsigned char i=0;while(length--){USART_Send(*str);*str++;}}
//串口接收完毕中断函数
interrupt[USART_RXC] void USART_Received_Ir()
{UCSRB &= ~BIT(RXCIE);       //接收完毕中断不使能RX_buffer=UDR;              //读取UDR的数据if(Rx_Flag)                 //将命令存入数组RX_cmd[R_i++] = RX_buffer;if(RX_buffer == '#'){R_i = 0;Rx_Flag=1;}//if(RX_buffer == 'o')//lcd_puts("hello");//lcd_putchar(UDR);UCSRB |= BIT(RXCIE);        //接收完毕中断使能
}

在这里插入图片描述

大家不懂的在问我吧

这篇关于atmega16应用之串口通信(HC05)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166168

相关文章

线程池ThreadPoolExecutor应用过程

《线程池ThreadPoolExecutor应用过程》:本文主要介绍如何使用ThreadPoolExecutor创建线程池,包括其构造方法、常用方法、参数校验以及如何选择合适的拒绝策略,文章还讨论... 目录ThreadPoolExecutor构造说明及常用方法为什么强制要求使用ThreadPoolExec

mysql_mcp_server部署及应用实践案例

《mysql_mcp_server部署及应用实践案例》文章介绍了在CentOS7.5环境下部署MySQL_mcp_server的步骤,包括服务安装、配置和启动,还提供了一个基于Dify工作流的应用案例... 目录mysql_mcp_server部署及应用案例1. 服务安装1.1. 下载源码1.2. 创建独立

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2