嵌入式技术学习——c51——串口

一、串口介绍。

串口是一个 通讯接口。成本低,容易使用,通信线路简单,可实现两个设备的相互通信

单片机的串口可以实现单片机于单片机,单片机与电脑,单片机与其他模块相互通信。

51单片机内部自带UART,通用异步手法器,实现单片机的串口通信。

二、硬件电路

1、简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

TXD和RXD要交叉连接,

当电平标准不一致时,需要加电平转换芯片。

通信必须需要txd和rxd和gnd三根线

三、电平标准

电平标准时数据1和数据0的表达式,时传输线缆中人为规定的电平与数据的对应关系,串口常用的标准三种:

TTL电平:-+5表述1,0V表示0                                     

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

TTL和RS232z最多可以输出十多米

RS485可以达到1000米

四、通信接口

(1)c51的单片机串口

名称:UART           引脚定义:TXD RXD          通信方式:全双工、异步        特点:点对点通信

(2)串行通信模式

        全双工:通信双方可以在同一时刻互相传输数据。

         半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

         单工:通信只能一方发送给另一方。

(3)传输数据方式

        异步:通信双方各各自约定通信速率

       同步:通信双方靠一根时钟线来约定通信速率

(4)其他

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,让住户相互交流)

 波特率:串口通信的速率,单位时间内发送的比特率(bits\s)

 检验位:用于数据验证(奇校验与偶校验)

 停止位:用于数据帧间隔

 时序图

五、51单片机的UART

c51中只有1个UART

其有4种工作模式:

(1)模式0:同步移位寄存器

(2)模式1:8位UART,波特率可变(常用)

(3)模式2:9位UART, 波特率固定

(4)模式3:9位UART,波特率可变

六、串口模式图

SBUF:串口数据缓存寄存器。物理上时两个独立的寄存器,但占用的是相同的地址。写操作时,写入的是发送寄存器,读操作时,独处的时接收寄存器。

        在总线上接受数据和发送数据,靠定时器计数,T1的溢出率经过二分频或16分频控制收放的速率,通过SBUF写入发送数据。将数据放在SBUF,单片机自动读写数据,发送之后会申请TI这个发送中断,接收数据会生成RI接受中断。

七。寄存器

还有定时器,中断的寄存器看前面的文章。

七、课堂练习

发送数字,数码管输出相应的数字。

       uart.c

#include "reg51.h"
#include "utils.h"
#include "ledNum.h"
void uartInit(void)
{SCON |= 0x01<<6;  //选择uart 工作方式1 8位的uart SCON |= 0x01<<4;  //开启接收PCON |= 0x01<<7;  //波特率设置翻倍TH1  = 243;TL1  = 243;TMOD |= 0x01<<5;TCON |= 0x01<<6;  //开启定时器 //串口中断相关 IE |= 0x01<<7 | 0x01 << 4; // 开启总中断 和 串口中断
}void sendOneByte(unsigned char ch)
{SBUF=ch;	while (SCON&(0x01<<1) == 0);SCON &= ~(0x01<<1); //软件清零 
}void sendStr(const  char *s)
{int i = 0;while (s[i]){sendOneByte(s[i]);++i;delay(30000);}
}void uartHandler(void) interrupt 4
{if (SCON&0x01)//接收中断 {P2 = ~P2;displayNum(1,SBUF);SCON &= ~0x01<<0;}
}

                  uart.h

#ifndef _UART_H_
#define _UART_H_
void uartInit(void);
void sendOneByte(unsigned char ch);
#endif 

延迟 utils.c

void delay(unsigned int n )
{while(n)--n;
}

延迟   utils.h

#ifndef _UTILS_H_
#define _UTILS_H_void delay(int n);
#endif

       ledNum.c

#include <reg51.h>void displayNum(unsigned int dig,int n)
{unsigned char num[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71, 0x00};//位的选择 P1 = 0x01 << (dig-1); //1 2 3 4 //显示数据 --段的选择P0 = num[n];
}void display(int num)
{//1234 unsigned int k = 0;unsigned int i = 1;while(num){k = num % 10; //displayNum(i,k);num = num/10; //123i++;//	delay(500);}
}

main.c

#include "reg51.h"
#include "uart.h"
#include "utils.h"
#include <stdio.h>void main(void)
{uartInit();while (1){		sendOneByte(SBUF);delay(10000);}}

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

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

相关文章

一句话的哲学 (上集)

一&#xff0c;成全别人&#xff0c;委屈自己&#xff0c;轻软和不好意思就是杀死自己的最好的方式。 养一群吸血鬼&#xff0c;成全了别人&#xff0c;委屈了自己&#xff0c;最后呢&#xff0c;还被别人当成了傻瓜。 二 背后议论你的狗什么品种都有人活在世上&#xff0c;总会…

Flutter图像编辑器应用:创造生动美丽的照片体验

介绍 引言 想象一下&#xff0c;在一个阳光明媚的下午&#xff0c;与家人或朋友漫步在风景如画的街道上。拿出手机&#xff0c;迫不及待地捕捉这一刻的美好&#xff0c;按下快门&#xff0c;留下了一张充满回忆的照片。 然而&#xff0c;回到家后发现照片的亮度有些偏暗&…

【完结】无代码网页爬虫软件——八爪鱼采集器入门基础教程

《八爪鱼采集器入门基础教程》大纲如下&#xff1a; 课程所提软件&#xff0c;八爪鱼采集器下载&#xff1a; 1.软件分享[耶]八爪鱼&#xff0c;爬取了几百条网站上的公开数据&#xff0c;不用学代码真的很方便。[得意]2.发现了一个很棒的软件&#xff0c;?不用学python也可…

周跳的探测及修复

前言&#xff1a; 本章节代码均在Gitee中开源&#xff1a; 导航工程: 导航工程及其有关的所有项目 - Gitee.comhttps://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E5%91%A8%E8%B7%B3%E6%8E%A2%E6%B5%…

工作学习记录

代码块含义大体解析&#xff1a; 1. QSqlDatabase mCurDatabase; QString driverName mCurDatabase.driverName(); 返回连接的驱动名。 如QSQLITE 2.sqlite数据库中查询是否存在表tableName select * from sqlite_master where type table and nametableName 3. QSqlQ…

关于到ORCL数据库实例的连接,哪个语句是正确的?

您的hq.us.example.com主机的tnsnames.ora中有以下条目。 ORCL (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST hq.us.example.com)(PORT 1521)) ) CONNECT_DATA (SERVICE_NAME ORCL.us.example.com) ) 你发出以下命令: Sqlplus H…

软件测试--性能测试

1.性能 时间&#xff1a;响应时间 资源&#xff1a;资源的消耗情况 2.性能测试 使用自动化工具&#xff0c;模拟不同场景&#xff0c;对软件各项性能指标进行测试和评估的过程 3.为什么做性能测试 1.评估系统能能力 2.寻找性能瓶颈&#xff0c;优化性能 4.什么时候做性…

深入解析Spring Boot的常用注解和组件(下)

在上一篇文章中&#xff0c;我们介绍了Spring Boot的常用注解及其应用场景。本文将继续探讨Spring Boot的常用组件及其在实际开发中的应用。## 2. Spring Boot的常用组件### 2.1 Spring Boot StarterSpring Boot Starter是Spring Boot项目的一部分&#xff0c;它提供了一组方便…

什么是Vue开发技术

概述 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它设计得非常灵活&#xff0c;可以轻松地被集成到任何项目中。 vue是视图的发音&#xff0c;其目的是帮助开发者易于上手&#xff0c;提供强大的功能构建复杂的应用程序 示例 以下是vue基本的语法概述 声明式渲…

探索C嘎嘎的奇妙世界:第一关---命名空间

1:命名空间 C就是延续C语言的一些不足进行改进和优化,也是一门值得我们深入探索和钻研的编程语言。它就像一个充满宝藏的宝库&#xff0c;等待着我们去发掘其中的奥秘和惊喜.那么就让我们来打开C的大门,进行探索吧!!! 首先,C要在C语言优化的第一个问题:命名冲突, 那么C语言是具…

探索未来工作新伙伴:机器人流程自动化(RPA)揭秘

想象一下&#xff0c;如果你的日常工作中那些繁琐、重复的任务&#xff0c;比如数据录入、文件整理、邮件发送等&#xff0c;都能自动完成&#xff0c;你将拥有更多时间专注于真正需要创造力和智慧的工作&#xff0c;是不是听起来就像拥有了一个私人助理&#xff1f;这并不是遥…

VUE3版本新特性

VUE3版本新特性 VUE3和VUE2的区别路由的使用vite安装项目新特性使用 1.VUE3和VUE2的区别 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece 于 2022 年 2 月 7 日星期一成为新的默认版本! Vue3性能更高,初次渲染快55%, 更新渲染快133% 。…

推荐 3 款小巧的文件压缩、投屏和快速启动软件,请收藏,避免找不到

Maya Maya是一款由博主25H开发的体积小巧、简单易用的快速启动工具。它的操作逻辑和界面设计几乎复刻了Rolan早期版本&#xff0c;功能上与Rolan几乎别无二致。Maya支持多文件拖拽添加启动、快捷键呼出、自动多列显示等功能。此外&#xff0c;Maya还具备lnk文件解析功能。 May…

多目标粒子群算法(MOPSO):原理讲解与代码实现 Matlab代码免费获取

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 粒子群算法 多目标粒子群算法 一、外部档案…

059、Python 函数练习:用函数实现求两个数的最大公约数和最小公倍数

普及&#xff1a;写程序有两个终极原则&#xff1a;高内聚&#xff0c;低耦合。 所谓高内聚指的是一个模块或类内部各个元素&#xff08;方法、属性等&#xff09;彼此关联紧密&#xff0c;共同完成一个特定的任务或目标。具有高内聚的模块或类内的元素之间联系紧密&#xff0…

JDBC和数据库连接池

JDBC配置文档 数据库文档链接ssl配置文档PostgresInitializing the Driver | pgJDBCInitializing the Driver | pgJDBCMySQLMySQL :: MySQL Connector/J Developer GuideMySQL :: MySQL Connector/J Developer Guide :: 6.3 Configuration Properties java数据库连接池配置文档…

Android11 以Window的视角来看FallbackHome的启动

在WMS中&#xff0c;使用WindowState代表着一个Window并维护着一个Window的"层级树"&#xff0c;每个Window需要按照"层级"的规则进行排列。对于FallbackHome&#xff0c;其Window是挂载在home task上&#xff0c;而home task挂载在DefaultTaskDisplayArea…

python之日志(三)--将捕获的异常写入日志中

1.日志级别 import logging #日志模块 #默认下只会从第3级开始打印 logging.debug(DEBUG级别) #1级 logging.info(INFO级别) #2级 logging.warning(WARNING级别) #3级 logging.error(ERROR级别) #4级 logging.critical(CRITICAL级别) #5级 默认第1和第2级的日志不会打印 …

解决 uniapp h5 页面在私有企微iOS平台 间歇性调用uni api不成功问题(uni.previewImage为例)。

demo <template><view class"content"><image class"logo" src"/static/logo.png"></image><button click"previewImage">预览图片</button></view> </template><script> //打…

CentOS7安装ZooKeeper3.7.1集群

目录 前提条件 集群规划 安装步骤 下载zookeeper-3.7.1安装包 解压 同步至其他机器 配置环境变量&#xff08;所有机器都执行&#xff09; 配置服务器编号 配置zoo.cfg 分别启动zk服务 查看zk状态 进入zk客户端命令行测试 ZK集群启动停止脚本 前提条件 具备三台C…