51单片机 | I/O口直接输入输出实例
51单片机P0/P1/P2/P3口的区别:
P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据;
P1口只能作为I/O口(P1.0、P1.1以外);
P2口除了作为普通I/O口之外,在扩展外围设备时,要用作高8位地址线;
P3口除了作为普通I/O口之外,其每个引脚都有第二功能。
I/O端口具有以下特性:
① 端口自动识别:无论是P0 P2口的总线复用还是P3口的功能复用,内部资源会自动选择,不需要通过指令的状态选择。
② 准双向口功能:准双向口作为输入口时,应先使锁存器置"1",然后再读引脚。
③ P0作为普通I/O口使用:不使用并行扩展总线时,必须外加上拉电阻。
④ I/O口驱动特性:P0口作为I/O口时可输出驱动8个LSTTL输入端,P1-P3口则可以输出驱动4个LSTTL输入端
————————————————————————————————————————————
I/O接口直接输入输出实例
//《51单片机原理及应用(第二版)——基于Keil C与Proteus》第四章例4.3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

程序分析:
电路中的P2口既用作输入也用作输出,P2.0-P2.3作为输入,P2.4-P2.7作为输出;
首先将 P2 = 0xff; P2口全部赋高电平 1111 1111,因为I/O作为输入时应先设置各个锁存器为"1",才能确保输入结果正确;
当P2.0-P2.3读入开关状态 if ((P2 & 0x0f) != 0x0f)时,通过对其移位 P2 = P2<< 4;,将P2.0-P2.3的值对应移到了P2.4-P2.7中
代码分析:

代码具体执行情况以及P2调试情况见下 ↓
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
调试及P2情况
Keil与Proteus联调,打开P2状态图;

开始调试并且未操作时,P2 = 0xff;,P2状态为 1111 1111,

闭合开关2,单击RUN执行,在这个执行过程中P2情况:
① 初始状态 1111 1111
② 闭合开关 1111 1101
④ "与运算" 0000 1101
//通过 (1111 1101 & 0000 1111) 运算得到 (0000 1101) 屏蔽掉高四位的情况,进行!= 0x0f 判断。
// 如果四开关同时断开,(1111 1111 & 0000 1111) == (0000 1111)
// 如果有任何一个开关闭合,则将执行左移操作
③ 左移四位 1101 0000
LED2 左端获得低电平,右端高电平,LED亮

所有开关断开,重新进入循环,P2 = 0xff;

程序代码执行结束,分析完毕。
51单片机 | I/O口直接输入输出实例的更多相关文章
- 51单片机I/O口直接输入输出实例(附调试及分析过程)
51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...
- MOS管、PCB、H桥、步进电机驱动电路、51单片机的IO口驱动能力、灌电流、拉电流、上拉电阻的选择
嵌入式开发PCB设计几点体会(转载):http://bbs.ednchina.com/BLOG_ARTICLE_3021801.HTMCollector-Emitter Saturation Volt ...
- 51单片机:IO口扩展芯片用法(74HC165,74HC595)
IO口扩展芯片,主要是解决单片机IO口太少. 74HC165:数据从并转串 74HC595:数据从串转并 两种芯片,都是通过时序电路,加上移位功能,进行数据传输 74HC165:数据从并转串.以下实例 ...
- 51单片机 | 实现SMC1602液晶屏显示实例
———————————————————————————————————————————— LCD1602 - - - - - - - - - - - - - - - - - - - - - - - - ...
- 51单片机I/O口使用经验
按常规,在51端口(P1.P2.P3)某位用作输入时,必须先向对应的锁存器写入1,使FET截止.一般情况是这样,也有例外.所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场 ...
- 51单片机 | A/D转换器实现数字电压表实例
———————————————————————————————————————————— ADC0809 - - - - - - - - - - - - - - - - - - - - - - - - ...
- STM32GPIO口8种模式细致分析(类比51单片机)
关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时 ...
- 51单片机入门1--与C语言的交接
我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51) 在说编程之前,要先说一些别的东西: 二进制,八进制,十六进制 二进制中只有数字0和1,在二进制中1+1为10 ...
- 单片机I/O口推挽与开漏输出详解(力荐)
推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电 ...
随机推荐
- 针对负载均衡集群中的session解决方案的总结
在日常运维工作中,当给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java语言环境,只要使用服务器保存Session,在做负 ...
- 作业20171116 beta2及beta发布 成绩
申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年12月13日 17:00. 成绩 scrum01 scrum02 scrum03 scrum04 scrum05 sc ...
- 12.8 Daily Scrum
最近大家都比较忙,任务今天也才刚刚分配,所以具体的编码任务从明天开始. Tomorrow's Task 丁辛 完善餐厅列表,显示距离. 邓亚梅 美化搜索框 ...
- 《Linux内核设计与分析》第十七章读书笔记
设备与模块 关于设备驱动和设备管理,四种内核成分. 设备类型:在所有Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据 ...
- Android之JSON格式数据解析
查看原文:http://blog.csdn.net/hantangsongming/article/details/42234293 JSON:JavaScript 对象表示法(JavaScript ...
- MySql修改root密码以及允许外网访问
1.修改root密码 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('n ...
- 开源RabbitMQ操作组件
开源RabbitMQ操作组件 对于目前大多的.NET项目,其实使用的技术栈都是差不多,估计现在很少用控件开发项目的了,毕竟一大堆问题.对.NET的项目,目前比较适合的架构ASP.NET MVC,ASP ...
- Neo4j初探
neo4j-desktop-win64 exe https://neo4j.com/download-thanks-desktop/?edition=desktop&flavour=winst ...
- ionic3应用的Android打包签名发布步骤
版权声明:本文为博主原创文章,未经博主允许不得转载. 当我们的ionic应用开发结束之后,就要开始上线到应用市场,那么Android的发布步骤具体是怎么样的呢? 1)编译 运行命令行: ionic c ...
- Kivy crash 中文教程 实例入门 1. 第1个应用 Kivy App (Making a simple App)
1. 空白窗口 在 PyCharm 中创建一个名为 TutorialApp 的项目,然后在该项目中新建了个名为 tutorial_app.py 的 Python 源文件,在 PyCharm 的代码编 ...