要搞清这个问题,就要明白p0口的内部结构。P0口是由锁存器经两个驱动场效应管和外部引脚相连的。

读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。

两者不同。一般来说,读取P0的数据,都是读引脚,目的是获取与P0相连的外部电路的状态。而读端口是在执行下述语句时由CPU自行完成的:
inc P0;给p0加1

执行这个语句时 ,采用“读-改-写”的过程,先读取p0的端口数据,再加1,然后送到p0锁存器里。注意这个端口数据跟p0的引脚状态不一样,比如你事先给p0写进69H,p0里数据就是69H,而引脚上的状态因为你没有执行MOV A,p0之类的指令,它是不会进到p0的锁存器里去的。由此可见,所谓的读端口,不是读取p0的状态,而是在执行inc之类的指令时由CPU自行完成的。

读引脚就是读取p0口状态了。读引脚时要注意:先要给p0写FFH,使它的场效应管T2和地断开。

因为p0口的场效应管T2一端接地,一端与外部引脚相连,由P0的锁存器控制,当给锁存器写1时,它和地断开,写0时和地相连,所以写零时读到的总是低电平。

试想你现在要读P0引脚,按理说P0与外部电路相连,外部电路的是什么状态,就应该读到什么,但如果p0口的场效应管T2一端接地的话,它会把p0口电位拉低,你读到的总是低电平0,所以要先给p0写FFH,把p0的场效应管T2和地断开,再读数时就是真实状态了。当外部电路断开,再读时读到的就是p0端口(锁存器)的真实状态了。

实际上不光是P0口,所有口都需要区分的。

这里问题的关键是:你想读到什么?是你事先通过指令写入口锁存器中的数,还是由外部电路决定的口线的高低电平。因为这两个数有可能是不一样的。

IO口的输出锁存器是通过控制一个晶体管是否对地导通连接到口的对外引脚上的,该晶体管的C极通过上拉电阻接Vcc(当然P0口的上拉电阻需要外部加上,其它口内部已经有大约40K的弱上拉)。
于是会出现这样一种情况,例如你向某条口线写了1,锁存器的值是就是1,当然此时对应的晶体管截止,由于有上拉电阻,所以口线应该也是1(高电平),但如果你的口线是控制一个外部npn晶体管的通断,上拉电阻就相当于那个晶体管的基极电阻,于是它会导通。向口写0则口线会变低(<0.3V),它会截止,这都很正常。

问题是,当口锁存器输出1时,由于外部晶体管BE结导通,电压只有0.7V(也就是口线或者说口的引脚的电压只有0.7V),此时你读入锁存器时得到的是1,但读引脚时会得到0(至少要大于2.4V才算高电平)。例如你想改变该控制信号的状态,通常是先读入,取反,然后再写出,此时必须是读入锁存器才能实现正确的操作!如果是读引脚,本来输出的是1,读入的(引脚)却是0,取反后得1,状态是不会改变的!

单片机中 读引脚 和读锁存器的区别相关推荐

  1. 单片机的字节寻址c语言,单片机中位寻址和字节寻址的区别?

    一.作用不同: 字节寻址:把数据直接写入当前地址,或者把当前地址的内容读出. 位寻址是位操作命令,写入和读出的是一个位bit变量. 二.传递不同: MOV A,00H和MOV C,00H,前者是将RA ...

  2. c语言单片机读引脚,单片机引脚读写操作

    使用单片机时肯定会用到单片机的IO引脚.以51单片机P1口为例.内部结构如图所示本文引用地址:http://www.eepw.com.cn/article/307392.htm 当单片机进行写操作时, ...

  3. STC单片机通过ADC分段采样读按键实现方法

    STC单片机通过ADC分段采样读按键实现方法 ✨在阅读官方FreeRTOS for STC32G12K128开源工程当中有使用到ADC键盘计算键码功能块,底层实现原理也很简单,就是通过串联电阻分压的方 ...

  4. 使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones)

    使用Python,OpenCV+OCR检测护照图像中的机器可读区域(MRZ Machine-Readable Zones) 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何只使用基本的图 ...

  5. mysql物理读和逻辑读,SQL Server中STATISTICS IO物理读和逻辑读的误区

    SQL Server中STATISTICS IO物理读和逻辑读的误区 人人知道,SQL Server中可以行使下面下令查看某个语句读写IO的情形 SET STATISTICS IO ON 那么这个下令 ...

  6. [转]SAP ABAP中使用Read_Text函数读取项目文本的方法

    SAP ABAP中使用Read_Text函数读取项目文本的方法 使用Read_Text函数来读取文本内容.需要找到相关参数. 下面以采购订单为例: 双击文本,进入文本编辑器. 转到->表头. 显 ...

  7. 理解SQL SERVER中的逻辑读,预读和物理读

    在我的上一篇关于SQL SERVER索引的博文,有圆友问道关于逻辑读,预读和物理读的概念.我觉的还是写一篇博文能把这个问题解释清楚. SQL SERVER数据存储的形式 在谈到几种不同的读取方式之前, ...

  8. C语言试题三十一之判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。

    1. 题目 请编写函数function,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no.回文是指顺读和倒读都是一样的字符串. 2 .温馨提示 ...

  9. 计算机科学读ms还是phd好,美研申请中怎样判断适合读硕士(MS)还是博士(PhD)?

    原标题:美研申请中怎样判断适合读硕士(MS)还是博士(PhD)? 中国已经连续八年成为输出赴美留学生最多的国家,随着美国留学越来越成为一种趋势,也有越来越多的学生纠结于去美国读硕士还是博士.那么在美研 ...

最新文章

  1. LeetCode - 695. Max Area of Island (Java)
  2. java学习笔记9--内部类总结
  3. 踩坑之旅:springboot+vue+webpack项目实战(一)
  4. P3216-[HNOI2011]数学作业【矩阵乘法,数学】
  5. HTML5设备API 大批美女等你来摇一摇
  6. 天池学习赛:工业蒸汽量预测2——特征工程
  7. oracle导入导出表
  8. 微信小程序豆瓣电影项目的改造过程经验分享
  9. 深入了解JavaScript编程语言
  10. 荣耀6 android 7.0,依旧荣耀--荣耀6 升级到 荣耀7 智能手机
  11. 编译jemalloc以及报错解决
  12. Excel单元格科学计数法转换和小数点取整
  13. 逻辑地址和物理地址的相互转换
  14. Gentoo虚拟机安装教程
  15. 论文引用 - 1. JavaScript论文应用
  16. 设计模式(二):设计原则
  17. 2的32次方减1用python_3.Python入门
  18. winhex文件有写保护怎么修改也改变了该怎么办
  19. 自行实现 Onvif 对接开发模式
  20. 【C语言】 Static关键字的用法和详解(太细了!!!)

热门文章

  1. 2020年网络工程师发展前景如何
  2. 深度学习day01-深度学习环境、conda、创建第一张画布
  3. 显示器分辨率一直跳_电脑屏幕的分辨率老是变换怎么回事?
  4. linux连接多个显示器,如何在Linux Ubuntu中使用多个和外部显示器 | MOS86
  5. 移动web-线性渐变
  6. mysql8.013安装_关于mysql 8.0.13zip包安装
  7. 建议收藏:GitHub 上值得收藏的100个精选前端项目!
  8. 第一章 命题逻辑 1.7 推理理论
  9. 计算数据集的均值和方差(mean,std)
  10. root账号密码遗忘解决