技术: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. Windbg简明教程(转)

    Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试.Windbg不仅可以调试应用程序,还可以进行Kernel Debug(新版本 ...

  2. Maximum Submatrix & Largest Rectangle

    相关题型 问题一(最大和子矩阵) : 有一个 m x n 的矩阵,矩阵的元素可正可负.请找出该矩阵的一个子矩阵(方块),使得其所有元素之和在所有子矩阵中最大.(问题来源:http://acm.pku. ...

  3. CSS-div高度100%设置问题

    div常用的属性width和height,有的时候如果我们需要让div的高度是整个屏幕的高度,设置height:100%发现并没有什么作用,并不是这样设置不对,而是w3c规范中关于百分比的设置是相对于 ...

  4. css之图片羽化处理

    需求: 对图片做css羽化处理 实现: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  5. TRIZ系列-创新原理-13-反过来做原理

    反过来做原理表述例如以下: 1)不直接接实施问题指出的动作,而是实施一个相反的动作;(比方用冷却取代加热等):2) 使物体或外部环境移动的部分精巧.或者使精巧的部分移动:3) 把物体上下颠倒.反过来做 ...

  6. Android -- tools

    工具属性 Android 有一个专用的XML命名空间,用于使工具可以记录XML文件里的信息,并且在打包程序的进行把信息剥离到不会带来运行时期和下载大小的负面影响的程度. 这个命名空间的 URI 是 h ...

  7. JAVA-SpringMVC基于注解模式第一个应用

    项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app x ...

  8. mongodb的用法

    关于新版(2.***)的c#用法,网上基本没有.昨天折腾半天,去构造server,发现现在新版本不需要了,文档是这样的,大概意思,无需像原来那样获取server,直接从client获取db就行了. h ...

  9. 如何拷贝一个wchar_t类型的字符串

    Do this, wchar_t clone[260]; wcscpy(clone,szPath); Or, if you want to allocate memory yourself, wcha ...

  10. Python标准库:内置函数type(object)

    type(object) type(name, bases, dict) 本函数是返回对象的类型对象.仅仅有一个參数object时,直接返回对象的类型对象.假设仅仅是想推断一个对象是否属于某一个类的对 ...