原创 单片机引脚读写操作

2013-4-3 16:15 2880 15 27 分类: 消费电子

    自己总结下单片机引脚的用法。

 

    使用单片机时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示

 

qq截图20130403150849.jpg
 
    当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。
 
    如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。
 
    汇编语言中对读寄存器和读引脚做了一定的区别,但说实话我在看汇编代码时还是区分不清两者的区别。现在大家对单片机编程应该大部分采用的都是C语言,在我看来,C语言中已经极大的淡化了读寄存器还是读引脚的区别。
 
    有些人说a=P1是读引脚(a是某个字符变量),P1=P1|0x00是读寄存器(可能是认为这里P1进行了一次逻辑运算,只有寄存器中的值才能进行逻辑运算),但我在用C语言时感觉用P1=P1|0x00也是读的引脚。也有些人说看经过编译器编译后的汇编代码才能分辩出两者的区别,不知道这里大家怎么看读引脚和读寄存器?
 
    在读引脚时需要先向引脚锁存器中写1。因为如果引脚寄存器中是0的话会导通MOSFET,使外部端口一直是低电平,即使外面接的是高电平在读引脚的时候也读的是0。以前知道需要这样做,但读引脚的时候一直没写过1,发现读的也对,现在我觉得这样写不符合规范。
 
    一般来说单片机在上电复位后默认引脚寄存器的值是1,这样一来关断了MOSFET,而我们在使用单片机的时候如果这个引脚作为输入,也不会让它变成一会儿输出一会儿输入,使得能够准确的读出外部端口的值。现在我在写程序时如果端口做为输入引脚,我会在初始化里对其写一次1。当然,以后就不用写了,因为写了一次1后没有其他的写操作,引脚锁存器中会一直保持这个值不变。当然,如果某个单片机引脚同时作为输出和输入引脚复用时,则必须在输出完成后变成输入前先向其写1,再读引脚的值。
 
    大家有什么看法欢迎提出。
   

文章评论12条评论)

登录后参与讨论

用户1454308 2016-3-9 16:12

Good

用户1678053 2016-3-9 15:35

看看

忆轻狂 2015-6-18 23:56

有点悬

用户1277994 2015-6-12 16:01

百度地图确实很好用,至于造无人驾驶汽车,这需要与整车厂商合作,可行性还是很高的。不过这些智能识别技术再好,也不可能让百度的无人驾驶汽车走在先进车厂之前。欧洲的目标是2020年前无人驾驶汽车可以上路,中国定的目标应该要晚几年,甚至十几年,几十年。(中国的路况太复杂了)

用户1057497 2015-6-11 10:54

"虽然前不久在ImageNet的图像人工智能测试中,百度被指责作-弊,调试程序的次数超过规定,但是最终成绩还是优秀的。对用户来说,你最后拿出来的程序识别率高就可以了,调试了多少次和我没关系。 " 调试次数过多,说明百度的图像识别算法有凑参数的可能,智能的算法应该是自适应调整参数的,百度的算法并不能说是优秀的。所以这绝对与用户有关。

用户1454308 2015-6-11 08:00

Good

用户1406868 2014-5-26 11:29

很有用,解开了我长久以来对于输入输出用法的迷茫

用户1025761 2013-4-9 12:28

版主這個現象是8051 I/O的特有性能,大部分MCU 的GPIO都須設定I/O mode 且8051output mode 在Hi lever時高端的FET處於弱輸出也因此8051 GPIO可做wire and並連使用,當使用其他mcu時請小心port 燒毀

用户1406868 2013-4-8 16:02

其实都一样,只不过“读”之前要先写1,输出就不用管!

用户1689368 2013-4-7 21:09

看的我迷迷糊糊的,还是太嫩了啊~~深感知识的欠缺。
相关推荐阅读
用户1610197 2013-09-04 16:22
信号的上升时间和带宽及如何选择合适的示波器
用示波器测量信号时会涉及到信号的带宽与示波器的带宽这两个概念。下面就对这两个概念进行总结和概括。   带宽是对信号做傅里叶变换后得到的所有信号分量的频率范围。所以单一信号的带宽就是其频率对...
用户1610197 2012-08-28 11:27
共模与差模
    一直以来对共模和差模的了解非常模糊,不是很清楚,现在就总结下,来自网络,有不正确的地方希望大家一定要提出来,共同学习进步。       首先是共模信号和差模信号的定义,差模又称串模...
用户1610197 2012-08-22 23:23
滤波器的使用与设计
    在电子系统里滤波器是很见的组成部分,可以通过R,L,C的搭配组成各种滤波电路。一阶RC滤波器的截止频率等于1/2*pi*RC.,R,C,L串联可以搭建二阶带通滤波器等等。     ...
用户1610197 2012-07-20 15:01
Cadence出光绘文件总结
以前总结过出光绘文件的注意事项,现在重新总结下。 什么是Gerber文件     Gerber文件是所有电路设计软件都可以产生的文件,在电子组装行业又称为模版文件(stencil data),...
用户1610197 2012-06-18 09:32
C51中data idata等的关系
在用keil编写程序的过程中定义了两个全局数组变量,每个数组都是48个字节,加上原来的程序还占有一些字节,结果在编译时发现出错了: *** ERROR L107: ADDRESS SPACE ...
我要评论
12
15
关闭 站长推荐上一条 /2 下一条