精通51单片机的说说

来源:百度知道 编辑:UC知道 时间:2024/06/01 01:28:44
P3.4、P3.5作计数脉冲端时。是不是要置高电平?那么P0等口接灯的时候要接低电平,为什么计数端要高电平才工作???

我理解你问的是为什么要执行setb P3.4/P3.5后才能做计数端用,对吗?
1、单片机的IO口是双向的,既可以输入也可以输出,其内部结构是带有一个弱上拉电阻的,这个电阻的下面是一个受IO口(输出)控制的晶体管。
2、作输出用时,当你clr P3.4时,这个晶体管导通,于是输出低电平;当你setb P3.4时,这个晶体管截止,由那个弱上拉电阻将输出拉到高电平。
3、做输入用时,P3.4的电平应该由外部电路决定。但此时如果前述的那个晶体管导通,那么外部无论如何也无法将P3.4驱动到高电平(导通的晶体管等效电阻很小)。此时只能将P3.4口置1,也就是让那个晶体管截止,因为上拉电阻很弱(阻值较大,一般几十K欧姆),所以外部电路很容易驱动P3.4到高或者低电平。
4、计数端(P3.4、P3.5)是“输入”端,所以需要将其输出置1。实际上所有IO端作输入端用的时候,都需要将其端口输出置1.
5、至于P0驱动LED,那是另一个问题,它是用于输出的,不用于输入。你的LED正极接Vcc,负极接P0.x,当其输出低时,前述的晶体管导通,有电流流过LED就亮了,反之晶体管截止,没有电流LED就不会亮。这是通常的用法,因为简单且功耗低,其实完全可以反过来(高电平亮,低电平灭),有兴趣你可以自己想想如何实现。

其实高、低电平都是自己随心所好的,P3.4、P3.5作计数脉冲端,你要它高电平作为有效计数,那么检测到高电平时就计数,或者你要它低电平作为有效计数,那么检测到低电平时就计数;
同样,你的P0口接的LED灯,如果灯的另外一端接的是 +的,即是高电平,那么单片机这里P0口要低电平才能点亮;如果灯的另外一端接的是 -的,即是低电平,那么单片机这里P0口要高电平才能点亮;就是这样。

但是有一个问题,I/0的驱动电流是多大,能否点亮LED灯,自己回去看下吧。

P3.4、P3.5作计数脉冲端时,捕获的是负跳变,就是高电平向低电平跳变,初始化的时候要置高

P0等口接灯的时候不一定要接低电平啊,口电平的高低取决于你灯的负极接GND还是VCC