Arduino和C51之串口通信
概述
详细
一、串口通信
串口通信(Serial CommunicaTIons)的概念非常简单,串口按位(bit)发送和接收字节。串口用于ASCII码字符的传输,通信使用3根线完成,分别是地线、发送线、接收线.由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据,其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须要匹配。
二、51单片机串口通信
51单片机实现串口通信时会用到的寄存器:SCON、TMOD、PCON
SCON:特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志
SCON寄存器中位的定义:
设置SM0和SM1确定串行口工作方式:
TMOD:用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1
TMOD寄存器中位的定义:
定时/计数器的工作方式主要有以下四种:
PCON:电源管理寄存器
PCON寄存器中位的定义:
在串口通信时,我们主要使用SMOD位将波特率翻倍,当:
1. SMOD=0:串口方式1,2,3时,波特率正常。
2. SMOD=1:串口方式1,2,3时,波特率翻倍。
三、51单片机串口控制LED灯
- //UsartInit()对串口进行初始化
- void UsartInit() //设置串口
- {
- SCON=0X50; //设置为工作方式1
- TMOD=0X20; //设置计数器工作方式2
- PCON=0X80; //波特率加倍
- TH1=0XF4; //计数器初始值设置,波特率:4800
- TL1=0XF4;
- ES=1; //打开接收中断
- EA=1; //打开总中断
- TR1=1; //打开计数器
- }
这里TH1和TL1的初始值,使用了软件进行计算:
- void Usart() interrupt 4 //进入中断服务函数
- {
- char receiveData;
- receiveData=SBUF;//出去接收到的数据,此时SBUF存放接收数据
- RI = 0;//清除接收中断标志位
- if(receiveData=='1')
- {
- led=0; //接收1时,打开LED灯
- }
- if(receiveData=='0')
- {
- led=1; //接收0时,关闭LED灯
- }
- SBUF=receiveData;
- while(!TI); //等待发送数据完成
- TI=0; //清除发送完成标志位
- }
打开串口调试助手 -- 修改波特率、停止位、数据位等
接着,通过串口调试助手,你可以发送任意你想发送的东西给单片机,这里:
1. 输入1 ----- LED灯亮
2. 输入0 ----- LED灯灭
四、Arduino串口控制LED灯
设置波特率:Serial.begin(9600);
发送数据到串口:Serial.println(data);
从串口接收数据:Serial.read();
测试代码如下:
- char var;
- void setup()
- {
- pinMode(13, OUTPUT); //设置IO口13输出模式
- Serial.begin(9600); //设置波特率
- Serial.println("Hello!PC,I'm arduino!"); //发送数据到串口
- }
- void loop()
- {
- if (Serial.available())
- {
- var = Serial.read(); //从串口接收数据
- if (var == '1')
- {
- digitalWrite(13, HIGH);
- Serial.println("LED is on!");
- }
- if (var == '0')
- {
- digitalWrite(13, LOW);
- Serial.println("LED is off");
- }
- }
- }
打开右上角--->串口调试器 -- 修改波特率等
1. 发送1 ----- LED灯亮
2. 发送0 ----- LED灯灭
五、总结
本文通过串口点灯实验介绍了51单片机和Arduino串口的使用,后续文章会讲解传感器的使用,并使用串口打印传感器信息,感谢你的支持。
六、项目结构图
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
Arduino和C51之串口通信的更多相关文章
- Arduino学习笔记⑥ 硬件串口通信
1.前言 Ardunio与计算机通信最常用的方式就是串口通信.在Arduino控制器上,串口都是位于Rx和Tx两个引脚,Arduino的USB口通过一个转换芯片与这两个串口引脚连接.该转换芯片 ...
- 基于Arduino和python的串口通信和上位机控制
引言 经常的时候我们要实现两个代码之间的通信,比如说两个不同不同人写的代码要对接,例如将python指令控制Arduino控件的开关,此处使用串口通信是非常方便的,下面笔者将结合自己踩过的坑来讲述下自 ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- win10上使用php与python实现与arduino串口通信
注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...
- C++实现串口通信问题(与Arduino)
参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...
- 【C51】UART串口通信
我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑, 单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
- AIR串口通信
最近公司的项目中需要用到串口通信,项目是用基于AIR的,AIR本身是不支持串口通信的,本想用 c#或java另写一个负责串口通信的模块,又感觉很烦不想那么弄,就想到了ANE.可惜以前也没弄过 ANE, ...
- Arduino和C51开发光敏传感器
技术:51单片机.Arduino.光敏传感器.PCF8591.AD/DA转换 概述 本文介绍了如何接收传感器的模拟信号和如何使用PCF8591 AD/DA转换模块对光敏传感器的模拟信号进行转换.讲 ...
随机推荐
- BZOJ3916: [Baltic2014]friends
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3916 题解:随便hash.刚开始看错题WA了N发.(我连双hash都写了!) 代码: #inc ...
- android中解决“Dex Loader] Unable to execute dex: Multiple dex files define LXXX”错误
原因 1. 出现这种问题的主要原因:那就是你的libs下面引用了两个相同功能的包,可能这两个包的版本不一样而已,去掉一个吧,选择一个合适的版本. 2.build path里面包重复引用.
- 非常精简的Linux线程池实现(一)——使用互斥锁和条件变量
线程池的含义跟它的名字一样,就是一个由许多线程组成的池子. 有了线程池,在程序中使用多线程变得简单.我们不用再自己去操心线程的创建.撤销.管理问题,有什么要消耗大量CPU时间的任务通通直接扔到线程池里 ...
- 如何得知当前机器上安装的PowerShell是什么版本的?
$PSVersionTable.PSVersion 参考资料 ================ http://stackoverflow.com/questions/1825585/determi ...
- iOS开发-仿大众点评iPad侧边导航栏
昨天其实已经写了一篇侧边栏的文章,不过感觉还不是很清晰,这篇文章算是补充吧,iPad上看了大众点评的侧边栏,基本上百分之九十类似,具体效果可参考下图: 对比昨天主要做了两个修改,一个是图片和文字的显示 ...
- ASP.NET中Session的个人浅谈
看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...
- Android 第三方加固方案 对比 MD
常见的第三方加固方案官网介绍 由于安卓APP是基于Java的,所以极容易被破解,一个不经过加固的APP犹如裸奔一样,毫无防备.之前曾有新闻报道,一些专职的APP打包黑产就是专门从各种渠道找到apk,通 ...
- AI-终极算法-遗传算法
- The future of scripting in Unity
Recently we talked about Unity and WebGL . In that post we briefly spoke about how scripting works i ...
- sql存储过程加密和解密(MSSQL)
在网络上,看到有SQL Server 2000和SQL Server 2005 的存储过程加密和解密的方法,后来分析了其中的代码,发现它们的原理都是一样的.后来自己根据实际的应用环境,编写了两个存储过 ...