单片机引脚读写操作
自己总结下单片机引脚的用法。
使用单片机时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示
当单片机进行写操作时,引脚锁存器(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,再读引脚的值。
单片机引脚读写操作
使用单片机时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示
当单片机进行写操作时,引脚锁存器(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,再读引脚的值。
来源:网络整理,如涉及版权问题,请及时联系删除
相关问答
单片机 的管脚是怎么控制高低电平的? - 懂得如楼下所述,单片机内部是由一个场效应管控制io的高低电平状态,而场效应管的输入端是一个内部的锁存器,锁存器则直接由cpu控制,因此程序里对io口的操...
51 单片机读 写 引脚 是哪个?读写引脚是RD和WR引脚读写引脚是RD和WR引脚
51 单片机引脚 输入设置?根据51引脚的定义,对该引脚置1,可以作为输入使用。而51单片机的所有IO引脚,在启动后默认都是1。因此,如之前没有对此引脚进行过置0操作的话,可以直接读该引...
如何判断 单片机引脚 电压?可通过万用表直接进行测量。可通过万用表直接进行测量。
单片机 boot 引脚 功能?单片机的boot引脚是用于引导启动芯片的引脚,通常在启动时用来加载程序或者固件。当boot引脚被拉低时,单片机会从外部设备如Flash存储器中加载程序或者固件。...
为什么 单片机引脚 有电压,没有电流?电容充电要限流,否则将电源电压拉底,单片机不工作。不能这么说,单片机总的输出功率是一定的,具体管脚的输出电流电压会因外接负载的不同而有所变化,输出电...
芯片 引脚 的1,2,3……次序是怎么数的,顺时针还是逆时针,从哪...普通芯片的引脚图都是俯视图,即芯片正面向上,人从上面向下看得到的图。芯片一般会在上面有1脚的标记,有的是一个圆点,有的是整个芯片起始脚边的标...
单片机 的寄存器和 引脚 的区别?1.位置不同单片机的寄存器是内部结构,只能通过程序来控制,引脚是属于外部结构,受外部电路以及内部电路的影响2.功能不同可以通过寻址配置寄存器的数值来...
单片机 数字针脚的高低怎么搞?单片机数字针脚的高低是通过控制引脚的电平来实现的。当控制引脚输出高电平时,针脚电平为高,表示1;当控制引脚输出低电平时,针脚电平为低,表示0。具体操控过...
单片机 怎么检测上升沿与下降沿?可以通过单片机的引脚来检测,通过设置引脚的外部中断,检测引脚的边沿信号就可以检测上升沿或者下降沿,以stm32单片机为例,先将定时器设定为外部触发,然后配...