上拉电阻: 就是将不确定的信号通过一个电阻拉到高电平,同时此电阻起到一个限流的作用。
下拉电阻,就是下拉到低电平。
1、 OC 门要输出高电平, 必须外部加上拉电阻才能正常使用, 其实 OC 门就相当于单片
机 IO 的开漏输出。
2、 加大普通 IO 口的驱动能力。 标准 51 单片机的内部 IO 口的上拉电阻, 一般都是在几
十 K 欧, 比如 STC89C52 内部是 20K 的上拉电阻, 所以最大输出电流是 250uA, 因此外部加
个上拉电阻, 可以形成和内部上拉电阻的并联结构, 增大高电平时电流的输出能力。
3、 在电平转换电路中, 比如我们前边讲的 5V 转 12V 的电路中, 上拉电阻其实起到的是
限流电阻的作用。
4、 单片机中未使用的引脚, 比如总线引脚, 引脚悬空时, 容易受到电磁干扰而处于种
个紊乱状态, 虽然不会对程序造成什么影响, 但通常会增加单片机的功耗, 加上一个对 VCC
的上拉电阻或者一个对 GND 的下拉电阻后, 可以有效的抵抗电磁干扰。
那么我们在进行电路设计的时候, 又该如何选择合适的上下拉电阻的阻值呢?
1、 从降低功耗的方面考虑应当足够大, 因为电阻越大, 电流越小。
2、 从确保足够的引脚驱动能力考虑应当足够小, 电阻小了, 电流才能大。
3、 在开漏输出时, 过大的上拉电阻会导致信号上升沿变缓。 我们来解释一下: 实际电
平的变化都是需要时间的, 虽然很小, 但永远都达不到零, 而开漏输出时上拉电阻的大小就
直接影响了这个上升过程所需要的时间。
#include<reg52.h>
unsigned char code BeatCode[8] = {
0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06}; //步进电机节拍对应的IO控制码
void delay();
void main()
{
unsigned char tmp;
unsigned char index = 0;
while(1)
{
tmp = P1; //P1口低四位控制步进电机
tmp = tmp & 0xF0; //低四位清零
tmp = tmp | BeatCode[index]; //低四位赋值
P1 = tmp;
index++;
index = index & 0x07; //index到8以后清零。0000 1000 & 0000 0111
delay();
}
}
void delay()
{
unsigned int i = 200;
while(i--);
}