软件串口接收子程序

2024-06-23 09:44
文章标签 软件 串口 接收 子程序

本文主要是介绍软件串口接收子程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码;

stduart.c

/*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用延时法实现半双工软件串口文件:sfuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月13日*/
#include "sfduart.h"// 循环中延时调整系数
#define SFD_LOOP_VAR  12// 软件串口初始化
void sfdUART_init(void)
{PINDIR(sfdUART_TXDIO, PIN_OUTPUT);PINSET(sfdUART_TXDIO);PINDIR(sfdUART_RXDIO, PIN_INPUT);PINSET(sfdUART_RXDIO);
}// 读取一个字节
char sfdUART_getbyte(void)
{unsigned char i, tmp;// 起始位while(PININ(sfdUART_RXDIO));// 延时 1.5 比特位_delay_us(1500000UL / sfdBAUDRATE);// 读取8位数据for(i = tmp = 0; i < 8; i++){tmp = tmp >> 1;if(PININ(sfdUART_RXDIO))tmp |= 0x80;// 循环中,延时函数需要调整时间,去掉循环语句本身占用时间_delay_us(1000000UL / sfdBAUDRATE -  SFD_LOOP_VAR);}// 1个停止位_delay_us(1000000UL / sfdBAUDRATE);return tmp;
}// 发送一个字节
void sfdUART_sendbyte(char dat)
{unsigned char i;// 起始位PINCLR(sfdUART_TXDIO);_delay_us(1000000UL / sfdBAUDRATE);// 8位数据位for(i = 0; i < 8; i++){if(dat & 0x01)PINSET(sfdUART_TXDIO);elsePINCLR(sfdUART_TXDIO);dat = dat /2;// 延时时间需要根据循环中指令数量进行调整// 去掉指令占用时间,这个时间与指令数和时钟频率有关_delay_us(1000000UL / sfdBAUDRATE - SFD_LOOP_VAR);}// 停止位PINSET(sfdUART_TXDIO);_delay_us(1000000UL / sfdBAUDRATE);}

main.c

/*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用延时法实现半双工软件串口文件:main.c说明:软件串口的使用方法作者:邵子扬时间:2012年12月13日*/
#include "cfg.h"
#include "macromcu.h"
#include "sfduart.h"#include <avr/io.h>// 计算波特率
#define UBRRREG (F_CPU / ( 8 * sfdBAUDRATE ) - 1)const char msg[]="Input here> ";// 初始化
void init()
{int tmp;// 初始化软件串口sfdUART_init();// 初始化硬件串口// 使用硬件串口进行对比UBRRH = UBRRREG / 256;UBRRL = UBRRREG % 256;UCSRA = ( 1 << U2X );UCSRB = ( 1 << TXEN );UCSRC = ( 1 << UCSZ1) | ( 1 << UCSZ0 );// 显示提示消息tmp = 0;while(msg[tmp]){sfdUART_sendbyte(msg[tmp]);tmp++;}
}int main(void)
{char tmp;init();   // 初始化for(;;){tmp = sfdUART_getbyte();  // 等待串口输入数据UDR = tmp;                // 发送到硬件串口sfdUART_sendbyte(tmp);    // 通过软件串口返回数据// 可以对比两个串口的数据// 以及波形}return 0;
}

仿真效果图

这篇关于软件串口接收子程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件