c语言如何创建虚拟串口,模拟串口的C语言源程序代码

本程序是模拟串口硬件机制写的,使用时可设一定时中断,时间间隔为1/4波特率,每中断一次调用一次接收函数, 每中断4次调用一次发送函数,不过.对单片机来说时钟并须要快.要知道9600的波特率的每个BIT的时间间隔是104us.而单片机中断一次压栈出栈一次的时间是20us左右(标准的51核12M晶体)这样处理时间就要考虑清楚了.呵呵.以下程序是放在定时器中断程序函数内的

//接收部分

sbit JieShou_D=   ;//定义接收端口

uint8 DingShiJiShu,JieShou_h;//定时计数,接收缓冲器

uint16 JieShou_T;//接收临时寄存器

bit KaiShi,JieShou_b;//开始接收标准,接收完成标志

void JieShou(void)  //接收函数,每4次调用接收一位

{

if((KaiShi==0) && (JieShou_D==0))  //串行开始位到来

{

DingShiJiShu=0;     //开始定时计数

KaiShi=1;

JieShou_T=0xffff;   //接收临时寄存器置全1

}

else if((KaiShi==1) && (DingShiJiShu==1))  //第2次调用,串行数据采样时间到来

{

JieShou_T >>= 1;

if(JieShou_D) JieShou_T |=0x8000;

}

else if(JieShou_T & 0x807f ==0x803f)  //接收完成 JieShou_T=1xxx_xxxx_x011_1111

{

KaiShi=0;

DingShiJiShu=0;

JieShou_h = JieShou_T >> 7; //右移7位得到串行数据

JieShou_b=1;

}

if(KaiShi)

{

DingShiJiShu++;          //只在开始接收时定时计数+1

DingShiJiShu &=0x03;     //每4次调用接收一位

}

}

//发送部分

sbit FaSong_D=   ;//定义发送端口

uint16 FaSong_h;   //发送缓冲区

bit FaSong_b;    //发送完成标志

void KaiShiFaSong(uint8 fs) //设置发送数据,开始发送

{

FaSong_h = fs;

FaSong_h <<= 1;

FaSong_h |= 0x0200;  //FaSong_h=0000_001x_xxxx_xxx_0

FaSong_b=0;  //发送标志=0 表示正在发送中

}

void FaSong(void) //发送函数,每调用一次发一位

{

if(FaSong_h)  //发送未完成

{

if(FaSong_h & 0x0001)

FaSong_D=1;

else   FaSong_D=0;

FaSong_h >>= 1;

}

else

FaSong_b =1;  //发送完成标志=1 表示发送完成

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webjars管理静态资源

webjars用途简单解释 : 利用Servlet3协议规范中,包含在JAR文件/META-INF/resources/路径下的资源可以直接被web访问到这一原理&#xff0c;将前端静态资源打成jar包方便管理 静态资源打jar包 新建maven工程&#xff0c; 将需要打包的静态资源放入src/main/resources中 2. ma…

Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式...

当我导入Gradle项目初试Java spring的时候&#xff0c;遇到下面报错: Gradle complete project refresh failed Error:Could not determine java version from 9.0.1. 参考这篇 http://www.ddiinnxx.com/solving-not-determine-java-version-9-0-1-gradle-intellij-macosx/ 进行…

如何计算iPhone和Apple Watch上的步数

Khamosh PathakKhamosh PathakAccording to conventional wisdom, 10,000 steps a day equals a healthy life. No matter what your target is, though, you’ll need a reliable way to count your steps. The good news is you can do so on your iPhone or Apple Watch! 根…

在c语言中load,一道题理清Objective-C中的load和initialize

Objective-C中有两个方法比较特殊&#xff0c;他们会在Runtime时根据情况自动调用&#xff0c;下面我们简单分析一下调用时机以及使用场景~一般在iOS初中级面试时偶尔会被问到load和initialize方法&#xff0c;我出了一道题&#xff0c;估计会搞晕很多人。大家来看一下下面的程…

018.Zabbix维护时间和模板导入

一 维护时间 在某些正常业务维护期间&#xff0c;不需要进行告警&#xff0c;可添加维护时间。二 维护时间添加 2.1 维护 参数描述Name维护名称Maintenance type两种维护类型可选:With data collection - 依旧收集数据No data collection - 暂停收集数据Active since维护周期开…

本地服务器下的局域网安全吗_本地安全认证服务器

本地服务器下的局域网安全吗Today a reader had a very good question about lsass.exe is the Microsoft security management process for domain access and local security policies. Simply put it manages who logs on to your PC and/or Server. There are a few viru…

Query-digest-UI监控慢查询,以及此工具的改进版

本文主要描述基于pt-query-digest工具对慢查询日志进行监控的工具Query-digest-UI。(安装、使用、介绍以及benren提供的改进版。) 本文中描述的内容与其他网站上对Query-digest-UI的安装和使用稍有不同&#xff0c;因为本人对此工具稍做了调整。欢迎转载&#xff0c;请注明作者…

电热水器工作过程 c语言,热水器工作流程图

燃气热水器做为热水供应设备&#xff0c;被很多家庭所采用&#xff0c;然而&#xff0c;恒温作为燃气热水器的一个痛点&#xff0c;一次次被击中&#xff0c;那么到底为什么燃气热水器实现恒温这么难呢&#xff1f;我们将从原理讲起&#xff0c;带您认识真正的燃气热水器。燃气…

es6 模块化

test.js var vm"321321"; export { vm }; ------------------------------------------------------ export var name"李四"; a.vue import {vm} from /test console.log(vm); ------------------------------------------------------ console.log(name);…

linux上tail命令_如何在Linux上使用tail命令

linux上tail命令Fatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / ShutterstockThe Linux tail command displays data from the end of a file. It can even display updates that are added to a file in real-time. We show you how to use it. Linux tail…

初学者万年历c语言源代码,C语言万年历的源程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼for(j1;j<mon[i];j){cprintf("%3d ",j);/*if((firstj-1)%70)putchar(\n);*/}/*first(firstmon[i])%7;if(first0)first7;*/}}void month5_8(){for(i0;i<2;i){window(2i*w,3,29w*i,11);textbackground(5);clrscr();t…

用imageMagick的composite合并图片

composite命令可以非常方便的合并两张图片 因此用来进行图像加水印、批量增加边框等常用的变换 最简单的用法为&#xff1a; composite -gravity north src.jpg coverback.jpg des.jpg 其中src.jpg为前景图片 coverback.jpg为背景图片。 des.jpg为叠加后的结果 -gravity north …

白帽子讲web安全——认证与会话管理

在看白帽子讲web安全&#xff0c;刚好看到认证与会话管理&#xff1a;也就是我们在平常渗透测试中遇到最多的登录页面&#xff0c;也即是用户名和密码认证方式&#xff0c;这是最常见的认证方式。 了解两个概念&#xff1a;认证和授权 1&#xff09;&#xff1a;认证的目的是为…

iphone充电图_哪些iPhone具有无线充电功能?

iphone充电图Kevin Parrish凯文帕里什Wireless charging means you can re-energize your phone’s battery without a physical tether. It also prevents possible damage to your phone’s charging port. Unfortunately, not all phones support wireless charging, but we…

关联分析算法c语言实现,机器学习关联分析

AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台&#xff0c;为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成&#xff0c;及端-边-云模型按需部署能力&#xff0c;帮助用户快速创建和部署模型&#xff0c;管理全周…

windows平台下基于QT和OpenCV搭建图像处理平台

在之前的博客中&#xff0c;已经分别比较详细地阐述了“windows平台下基于VS和OpenCV”以及“Linux平台下基于QT和OpenCV"搭建图像处理框架&#xff0c;并且生成了相应的免费视频。这篇博客的主要内容&#xff0c;就是基于最新版本的相应工具&#xff0c;在windows平台下&…

android死锁解决方案,【线程死锁】Android多线程死锁产生的原因以及如何避免

一、死锁定义1、生活中的列子两人吃饭&#xff0c;但只有一双筷子&#xff0c;2人轮流吃(同时拥有2只筷子才能吃)&#xff0c;某个时候一人拿了左筷子&#xff0c;一人拿了右筷子&#xff0c;两人同时占用一个资源&#xff0c;等待另一个资源&#xff0c;这时候甲等乙吃完并释放…

前端开发 常用用的静态服务器

1 运用anywhere 安装 &#xff1a;npm install anywhere -g想要以某个路径作为静态文件服务器的根目录分享&#xff0c;只需要在该目录下执行&#xff1a;anywhere 就会默认8000打开网页&#xff0c; 若文件不是index.html 需要输入文件名 A: anywhere -p 8000 ## 指定静态服务…

前端面试题整理

1.HTML5的新特性。 主要讲讲新增哪些API:地理定位&#xff0c;拖放&#xff0c;web存储应用缓存&#xff0c;webworkers&#xff0c; sse 。 http://www.w3school.com.cn/html5/html_5_intro.asp 2.CSS3的新特性。 https://segmentfault.com/a/1190000010780991 3、使用严格模式…

android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定

&#xfeff;本教程是跟着 Data Binding Guide学习过程中得出的一些实践经验&#xff0c;同时修改了官方教程的一些错误&#xff0c;每一个知识点都有对应的源码&#xff0c;争取做到实践与理论相结合。Data Binding 解决了 Android UI 编程中的一个痛点&#xff0c;官方原生支…