51单片机IO口的四种工作状态切换

51单片机IO口的四种工作状态切换

1.概述

这篇文章介绍单片机IO引脚的四种工作模式,每个模式都有各自的用武之地,后面在驱动外设硬件时会用它不同的模式。

2.IO口四种工作模式介绍

PnM1PnM0I/O口工作模式
00准双向口:灌电流达20mA, 上拉电流为150~270uA
01推挽输出:强上拉输出达20mA,外接限流电阻
10高阻输入
11开漏:内部上拉电阻断开,外接上拉电阻。既可以读外部状态也可对外部输出

名词解释
灌电流:VCC给其他IO引脚输入的电流
上拉电流:其他IO引脚到GND的电流

2.切换IO口四种工作模式

下面切换IO口工作模式是基于STC12C2052单片机介绍,该单片机默认IO模式为准双向。下面介绍下如何将它切换为其他的模式。

2.1.切换I/O口模式原理

单片机切换不同的模式是通过对PnM1和PnM0两个寄存器值的修改实现,下面介绍下修改原理。

  1. PnM1和PnM0中的n表示修改第几组IO接口,例如修改P1组I/O口,设置为P1M1和P1M0;修改P3组I/O口,设置为P3M1和P3M0
  2. PnM1和PnM0的值采用16进制,下面通过一个例子介绍如何计算它的值。
    例如:设置P1.7和P1.6两个引脚为推挽输出模式
引脚组名第8位第7位第6位第5位第4位第3位第2位第1位
P1(一组占用一个字节8位)P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0
二进制位11000000

将上面表格中的二进制分为高4位和低4位,1100转换为十进制是12,用十六进制值表示就是0xC0。

//设置P1.7 P1.6推挽输出 P1M0和P1M1值
P1M0 = 0X00 // 0000 0000
P1M1 = 0XC0 // 1100 0000

将一组接口的8位二进制分为高4位和低4位,如果要将设置P1.3和P1.2两个引脚为推挽输出模式,低4位也是1100转换为十进制是12,不就和上面的冲突了吗。其实十进制转十六进制时候,十六进制0x后面两位也是分开的,左边一位对应二进制高4位的值,右边一位对应二进制低4位值。

//设置P1.3  P1.2推挽输出 P1M0和P1M1值
P1M0 = 0X00 // 0000 0000
P1M1 = 0X0C // 0000 1100

2.1.切换为推挽输出模式

1.程序代码

下面是定义P1组I/O接口的P1.7 P1.6引脚为推挽模式,该引脚对应二进制中高四位。转换为十六进制是0XC0

/*************************************************************
* 程序名: 设置接口推挽模式
* 编写人: bruce
* 硬件支持:STC12C2052
* 日  期: 2023-11-23
* 修改日志: 
/*************************************************************/#include<STC12C2052AD.H>// 定义P1.7 和 P1.6接口
sbit LED1 = P1^7;
sbit LED2 = P1^6;void main(void){//设置P1.7 和 P1.6接口为推挽模式P1M0 = 0X00;P1M1 = 0XC0;// 定义接口高低电平LED1 = 1;LED2 = 0;
}

下面是定义P1组I/O接口的P1.3 P1.2引脚为推挽模式,该引脚对应二进制中低四位。转换为十六进制是0X0C

/*************************************************************
* 程序名: 设置接口推挽模式
* 编写人: bruce
* 硬件支持:STC12C2052
* 日  期: 2023-11-23
* 修改日志: 
/*************************************************************/#include<STC12C2052AD.H>// 定义P1.3 和 P1.2接口
sbit LED1 = P1^3;
sbit LED2 = P1^2;void main(void){//设置P1.3 和 P1.2接口为推挽模式P1M0 = 0X00;P1M1 = 0X0C;// 定义接口高低电平LED1 = 1;LED2 = 0;}
2.硬件电路

设置P1.7 和 P1.6接口为推挽模式

LED灯正极连接单片机9号引脚,负极连接单片机7号引脚,设置为推挽模式后,输出20mA点亮,高亮LED灯。

斜体样式设置P1.3 和 P1.2接口为推挽模式

LED灯正极连接单片机5号引脚,负极连接单片机4号引脚,设置为推挽模式后,输出20mA点亮,高亮LED灯。

在这里插入图片描述

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

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

相关文章

平衡树 - splay

相比于之前的普通平衡树进行左旋右旋来比&#xff0c;splay的适用性更高&#xff0c;使用更广泛。 核心函数rotate、splay函数&#xff0c;其它的根据需要进行修改。 int n, m; struct Node {int s[2], p, v, cnt; // 左右儿子、父节点、值、出现数量int size, flag; // 子树大…

头歌python

目录 文章目录 目录顺序查找&#xff08;依频率查找&#xff09;任务描述 计算器链表的构造线性表的构造图遍历 顺序查找&#xff08;依频率查找&#xff09; 思路&#xff1a;用字典进行存储&#xff0c;考字典的操作 任务描述 本关任务&#xff1a;顺序查找是一种简单的查…

php如何对比浮点数大小(bccomp函数)

第一部分&#xff0c;常规例子&#xff1a; 例1&#xff1a;左边比右边小&#xff0c;结果&#xff1a;-1 //示例&#xff0c;左边比右边小返回值&#xff1a;-1 $price1 2.14; $price2 3.14; $result bccomp($price1, $price2, 2); echo 对比结果&#xff1a;.$result;//…

leetcode刷题日志-15.三数之和

这道题还是有点难度&#xff0c;我能想到的就是三重循环&#xff0c;但是题目限制不能重复&#xff0c;所以这道题三重循环完还要去重&#xff0c;太过于麻烦。看了题解以后&#xff0c;大佬们还是厉害&#xff0c;大概思路是这样子的&#xff1a;先对数组进行排序&#xff0c;…

《洛谷深入浅出基础篇》P4017最大食物链————拓扑排序

上链接&#xff1a;P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4017 上题干&#xff1a; 题目背景 你知道食物链吗&#xff1f;Delia 生物考试的时候&#xff0c;数食物链条数的题目全都错了&#xff0c;因为她总是…

安全攻击及防范手册

目录 1 概述 1.1 简介 1.2 参考资料 2 安全隐患及预防措施 <

堆和栈的区别 重点来说一下堆和栈;堆与栈之间的联系

文章目录 堆和栈的区别重点来说一下堆和栈&#xff1a;那么堆和栈是怎么联系起来的呢? 堆与栈的区别 很明显&#xff1a; 今天来聊一聊java中的堆和栈&#xff0c;工作当中这两个也是经常遇到的&#xff0c;知识我们没有去注意理论上的这些内容&#xff0c;今天就来分享一下。…

02_MySQL体系结构及数据文件介绍

#课程目标 了解MySQL的体系结构了解MySQL常见的日志文件及作用了解事务的控制语句&#xff0c;提交和回滚能够查看当前数据库的版本和用户了解MySQL数据库如何存放数据能在使用SQL语句创建、删除数据库 #一、MySQL的体系结构 ##1、客户端(连接者) MySQL的客户端可以是某个客户…

如何处理消费过程中的重复消息?

欢迎大家到我的博客浏览。如何处理消费过程中的重复消息&#xff1f; | YinKais Blog 本文来聊一聊消息队列过程中消息重复怎么办&#xff1f;<!--more--> 在消息传递过程中&#xff0c;如果出现消息传递失败&#xff0c;发送方就会进行重试&#xff0c;重试过程中就有可…

redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】

redis数据结构介绍 redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;但是value的类型多种多样。 redis 通用命令 keys : 查看符合模板的所有key &#xff08;keys partten ,匹配表达式支持一些特殊字符 * &#xff1f;&#xff09;del&#xff1a;删…

项目实战详细讲解带有条件响应的 SQL 盲注、MFA绕过技术、MFA绕过技术、2FA绕过和技巧、CSRF绕过、如何寻找NFT市场中的XSS漏洞

项目实战详细讲解带有条件响应的 SQL 盲注、MFA绕过技术、MFA绕过技术、2FA绕过和技巧、CSRF绕过、如何寻找NFT市场中的XSS漏洞。 带有条件响应的 SQL 盲注 这篇文章的核心要点如下: 漏洞发现:作者在Portswigger提供的实验室中发现了一个盲SQL注入漏洞。这个漏洞存在于一个应…

paho mqtt的keepAliveInterval

一、keepAliveInterval 所用的版本为1.3.12 实验一、 这个值设置的30&#xff0c;打开mqtt的trace&#xff0c;发现每隔33s发送一次pingreq note&#xff1a; 期间&#xff0c;client和server一直保持qos0的消息交互&#xff08;client->server&#xff09; 实验二、 …

力扣:提莫攻击

代码&#xff1a; class Solution { public:int findPoisonedDuration(vector<int>& timeSeries, int duration){//根据数组中给出的元素的值来进行判断&#xff01;//若后面元素-前面元素>d 中了d秒&#xff01;// <d 中了差的秒数&…

cesium轨迹线(闪烁轨迹线)

cesium轨迹线(闪烁轨迹线) 下面有源码 实现思路 使用ellipse方法加载圆型,修改polyline中‘material’方法重写glsl来实现当前效果(cesium版本1.109) 示例代码 index.html <!DOCTYPE html> <html lang="en"><head

opencv入门1.1:从视频或摄像头读取图像

cv::VideoCapture是 OpenCV 中用于从视频文件或摄像头捕获图像帧的类。它提供了各种方法和函数&#xff0c;用于读取和处理视频数据。 以下是对 cv::VideoCapture类的详细解释和说明&#xff1a; 1. 打开视频源 为了使用 cv::VideoCapture&#xff0c;我们首先需要打开一个视…

Java多态:多态多态,多么变态

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…

基于python+Django+SVM算法模型的文本情感识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 简介2. 技术栈3. 系统架构4. 关键模块介绍5. 如何运行 二、功能三、系统四. 总结 一项目简介 # 基于 Python Django SVM 算法模型的文本情感识别系统介…

DeepWalk代码实战-维基百科词条图嵌入可视化

准备工作&#xff1a; 从爬虫网站中爬取维基百科See also关联词条&#xff1a;https://densitydesign.github.io/strumentalia-seealsology/ 维基百科网站&#xff1a;https://www.wikipedia.org/ 爬取过程&#xff1a; 下载 tsv 文件&#xff1a; import networkx as nx # 图…

【数据结构】D : 图的顶点可达闭包

D : 图的顶点可达闭包 Description 给定有向图的邻接矩阵A&#xff0c;其元素定义为&#xff1a;若存在顶点i到顶点j的有向边则A[i,j]1&#xff0c;若没有有向边则A[i,j] 0。试求A的可达闭包矩阵A*&#xff0c;其元素定义为&#xff1a;若存在顶点i到顶点j的有向路径则A*[i,j…

pat实现基于邻接矩阵表示的深度优先遍历[含非递归写法]

文章目录 1.递归2.非递归 1.递归 void DFS(Graph G, int v) {visited[v] 1;printf("%c ", G.vexs[v]);for (int i 0; i < G.vexnum; i) {if (!visited[i] && G.arcs[v][i]) DFS(G, i);} }2.非递归 #include <stack> #include <iostream> …