技术:51单片机、Arduino、串口通信
 

概述

本文主要讲解串口通信技术的使用方法,并通过串口点灯实验介绍了51单片机和Arduino串口的使用,为初学者学习串口知识提供帮助

详细

一、串口通信

串口通信(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之串口通信的更多相关文章

  1. Arduino学习笔记⑥ 硬件串口通信

    1.前言     Ardunio与计算机通信最常用的方式就是串口通信.在Arduino控制器上,串口都是位于Rx和Tx两个引脚,Arduino的USB口通过一个转换芯片与这两个串口引脚连接.该转换芯片 ...

  2. 基于Arduino和python的串口通信和上位机控制

    引言 经常的时候我们要实现两个代码之间的通信,比如说两个不同不同人写的代码要对接,例如将python指令控制Arduino控件的开关,此处使用串口通信是非常方便的,下面笔者将结合自己踩过的坑来讲述下自 ...

  3. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  4. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

  5. C++实现串口通信问题(与Arduino)

    参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...

  6. 【C51】UART串口通信

    我们常需要单片机和其他模块进行通信,数据传输,常用的方式就是串口通信技术. 常用来 单片机<-->电脑,  单片机<-->单片机之间通信. 串行通信 versus 并行通信 并 ...

  7. STC12C5A60S2 双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

  8. AIR串口通信

    最近公司的项目中需要用到串口通信,项目是用基于AIR的,AIR本身是不支持串口通信的,本想用 c#或java另写一个负责串口通信的模块,又感觉很烦不想那么弄,就想到了ANE.可惜以前也没弄过 ANE, ...

  9. Arduino和C51开发光敏传感器

    技术:51单片机.Arduino.光敏传感器.PCF8591.AD/DA转换   概述 本文介绍了如何接收传感器的模拟信号和如何使用PCF8591 AD/DA转换模块对光敏传感器的模拟信号进行转换.讲 ...

随机推荐

  1. STM32学习笔记之EXTI(外部中断)

    參考资料:STM32数据手冊.网络资料 =========================================切割线==================================== ...

  2. 数据库实例: STOREBOOK > 数据文件/退回字段/重做日志组|管理员

    ylbtech-Oracle:数据库实例: STOREBOOK  > 数据文件/退回字段/重做日志组|管理员 数据文件/退回字段/重做日志组|管理员 1. 数据库实例: STOREBOOK  & ...

  3. 升级Https前的可行性验证(一)

    升级Https之前的可行性验证 注意:自签证书和Nginx的安装都基于ContOS 6 一.如何申请OpenSSL自签证书 1.安装OpenSSL (一)OpenSSL 工具下载 下载地址 (二)Op ...

  4. Tensorflow 模型持久化saver及加载图结构

    主要内容: 1. 直接保存,加载模型; (可以指定加载,保存的var_list) 2. 加载,保存指定变量的模型 3. slim加载模型使用 4. 加载模型图结构和参数等 tensorflow 恢复部 ...

  5. Android -- DecorView

    DecorView 开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局.页面都是依附在窗口之上的,而Decor ...

  6. 4.3 使用 SQL 语句操作数据框

    下载并安装 “sqldf” 包 library(sqldf) newData <- sqldf("select * from mtcars where carb=1 order by ...

  7. (纪录片)数学的故事 The Story of Maths (2008)

    简介: 导演: Robin Dashwood编剧: Marcus du Sautoy主演: Marcus du Sautoy类型: 纪录片官方网站: www.bbc.co.uk/programmes/ ...

  8. C语言代码复习笔记:第二章

    输出星星 #include <stdio.h> void printStart( int num ) { ) { printf("*"); }; } int main( ...

  9. ios 开发 ping

    在win 或 mac系统的终端下都有方便的ping命令来检测网络的连通性! 在iOS上可以使用苹果封装好的工具来开发ping连接测试 SimplePing 下载 1. 主要接口 //初始化一个地址 - ...

  10. 通过javac导出Jar包

    我的目录结构d:/test/          ../ src          ../build src下面放java源文件build下面放编译好的classes 下面是我的操作,我在test目录下 ...