单片机经验积累
单片机I/O口的驱动能力及设计
• 虽然引脚可以直接驱动 LED 发光,但从 AT89C51 单片机的 PDF 手册文件中可 以看到,稳态输出时,“灌电流”的上限为: • Maximum IOL per port pin: 10 mA; Maximum IOL per 8-bit port:Port 0: 26 mA,Ports 1, 2, 3: 15 mA; Maximum total I for all output pins: 71 mA. • 这里是说: 每个单个的引脚,输出低电平的时候,允许外部电路向引脚灌入的最大电流为 10 mA; 每个 8 位的接口(P1、P2 以及 P3),允许向引脚灌入的总电流最大为 15 mA, 而 P0 的能力强一些,允许向引脚灌入的最大总电流为 26 mA; 全部的四个接口所允许的灌电流之和,最大为 71 mA。 • 当这些引脚“输出高电平”的时候,单片机的“拉电流”能力呢?可以说是太 差了,竟然不到 1 mA。 • 结论:单片机输出低电平的时候,驱动能力尚可,而输出高电平的时候,就没 有输出电流的能力。这个结论是依照手册中给出的数据做出来的。
*/
}
位码控制语句 (P1=0xf7;)在前];)输出语句在 后,否则可能出现显示 乱码。 否则,无论仿真演示还 是实物运行,都出现过 显示乱码!
单片机I/O口的驱动能力及设计
• 单片机的引脚,可以用程序来控制,输出高、低电平,但程序控制不了 单片机的输出电流。 • 单片机输出低电平时,将允许外部器件,向单片机引脚 “灌电流”,外 部电路称为“灌电流负载”; • 单片机输出高电平时,则允许外部器件,从单片机 “拉电流”,外部电 路称为“拉电流负载”。 • 这些电流一般是多少?最大限度是多少?这就是常见的单片机输出驱动 能力的问题。 • 早期的 8051 系列单片机的带负载能力,是很小的,仅仅用“能带动多 少个 TTL 输入端”来说明的。P1、P2 和 P3口,每个引脚可以都带动 3 个 TTL 输入端,只有 P0 口的能力强,它可以带动 8 个!早期的 8051 单片机基本上就没有什么驱动能力。它的引脚甚至不能带动LED 进行正常发光。 • AT89C51 单片机引脚的能力大为增强,可以直接带动 LED 发光了,这 可以通过实验证明
单片机I/O口的驱动能力
P0口正真的双向口,其余P1,P2,P3都是准双向口。 这种准双向IO结构的特点是 1. P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外 接上拉电阻。输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱 (60uA)。 2. P1、P2、P3有内部电阻上拉,高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口。 同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC。 3. 作输入时,因为OC门有“线与”特性,必须把IO口设为高电平,所以按键多为共地接法。 4. 作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳 接法) 单片机的引脚可以用程序来控制输出高、低电平,这些可算是单片机的输出电压,但是程序控制不了单片机 的输出电流,单片机的输出电流很大程度上是取决于引脚上的外接器件。 单片机输出低电平时将允许外部器件向单片机引脚内灌入电流,这个电流称为“灌电流”,外部电路称为 “灌电流负载”。单片机输出高电平时,则允许外部器件从单片机的引脚拉出电流,这个电流称为“拉电流”,外 部电路称为“拉电流负载”。 这些电流一般是多少?最大限度是多少?这就是常见的单片机输出驱动能力的问题。 早期的 51 系列单片机的带负载能力是很小的,仅仅用“能带动多少个 TTL 输入端”来说明的。 P1、P2 和 P3口每个引脚可以都带动 3 个 TTL 输入端,只有 P0 口的能力强,它可以带动 8 个。分析一下 TTL 的输入特性就可 以发现,51 单片机基本上就没有什么驱动能力。 它的引脚甚至不能带动当时的 LED 进行正常发光。 记得是在 AT89C51 LED 发光了。 看看下图,图中的 D1、D2 就可以不经其它驱动器件,直接由单片机的引脚控制发光显示。 51单片机IO口为集电极上拉输出方式,高电平输出电流等于上拉电阻的电流,这个电流比较小,低电平输出 是内部晶体管吸收的电流,最大可以达到10mA,但是整个端口的总电流不能超过24mA。
• 51 单片机的引脚和地之间,有个MOS管(或三极管),输出低电平的时候,允 许灌入 10mA 的电流;而引脚和正电源之间,有个几百K的“内部上拉电阻”, 所以,引脚在高电平的时候,能够输出的拉电流很小。而P0 口没有上拉电阻, 所以 P0 口没有高电平输出电流的能力。 • 图中的 D1,是接在正电源和引脚之间的,这就属于灌电流负载,D1 在单片机 输出低电平的时候发光。这个发光的电流,可以用电阻控制在 10 mA 之内。 • 图中的 D2,是接在引脚和地之间的,这属于拉电流负载,D2 应该在单片机输 出高电平的时候发光。但是单片机此时几乎没有输出能力,必须采用外接“上 拉电阻”的方法来提供 D2 所需的电流。所以,外接电路如果是“拉电流负 载”,单片机输出高电平时才起作用,并用“上拉电阻”来协助,产生负载所 需的电流。 • 下面专门讨论上拉电阻的问题。 • 从上面的图中可以看到,D2 发光,是由上拉电阻 R2 提供的电流,D2 导通发 光的电压约为 2V,那么发光的电流就是:(5 - 2) / 1K,约为 3mA。 • 而当单片机输出低电平(0V),D2 不发光的时候,却消耗了较高的的电流,全部 灌入单片机的引脚,具体取决于上拉电阻的大小。
常用引脚名称
/OE或OE:输出使能控制端; /IE或IE:输入使能控制端; /CS或CS:片选控制端; /WE或WE:写入使能控制端;
单片机程序烧录串行接口
MAX232接口芯片,原来在13脚,是计算机送 来的负压,断开串口线随即消失;应该接6脚本身 产生的负压。 带串口线的情况下,13脚为-9.5V左右,14脚 为-7.0V左右; 5脚为-3.8V左右,6脚为-7.5V左右(带需要7.5V液晶); 不带串口线的情况下,13脚为0V,14脚为8.0V左右; 5脚为-4.0V左右,6脚为-8.0V左右(带需要7.5V液晶);
• 如果在一个 8 位的接口,安装了 8 个 1K 的上拉电阻,当单片机都输出低电平 的时候,就有 40mA 的电流灌入这个 8 位的接口;如果四个 8 位接口,最大有 可能出现 32 × 5 = 160mA 的电流,超过了单片机手册上给出的上限。此时单 片机可能出现工作不稳定。 • 加大上拉电阻,可以减少灌电流,但驱动能力变差, LED回发光暗淡。 • 对于 D1,是灌电流负载,单片机输出低电平的时候,R1、D1 通路上会有灌电 流;输出高电平的时候,几乎没有电流,此时就不产生额外的功耗。 • 综上所述,灌电流负载,是合理的;而“拉电流负载”和“上拉电阻”会产生 很大的无效电流,这种电路不合理。设计单片机的负载电路,应该采用“灌电 流负载”的电路形式,以避免无谓的电流消耗。 • 上拉电阻,仅仅是在 P0 口才考虑加不加的问题:当用 P0 口做为输入口的时候, 需要加上,当用 P0 口输出高电平驱动 MOS 型负载的时候,也需要加上,其它 的时候,P0 口也不用加入上拉电阻。 • 在其它接口(P1、P2 和 P3),都不应该加上拉电阻,特别是输出低电平有效的 时候,外接器件就有上拉的作用。
51单片机IO端口能驱动8个TTL是什么意思?
TTL是晶体管-晶体管-逻辑电路的意思。单片机驱动TTL门,是指 TTL门作为单片机的后续电路(负载)。 当单片机接TTL门作为负载时,单片机输出的输出信号就是TTL 门的输入信号,因此称为:“单片机驱动TTL门”。 单片机输出低电平时,一个标准TTL门的低电平输入电流是-1mA (负号表示从TTL门向外流),电流是灌入单片机的;单片机输出高 电平时,TTL门高电平输入电流40μA。 51单片机IO口能驱动8个TTL门是指它输出低电平时,允许灌入 8mA电流;输出高电平时,允许输出0.32mA的拉电流。 P0口是集电极开路的,不能输出高电平,只有P1、P2、P3口可 以输出高电平。 P0口只有外加上拉电阻才能输出高电平。加上拉电阻后,驱动能 力又不止8个TTL门了。
数码管动态扫描显示程序
while(1) { /* j=0xef; for(i=0;i<4;i++) { j=_cror_(j,1); P1=j; P0=DSY_CODE[bit_data[i]]; DelayMs(2); } P1=0xf7; P0=DSY_CODE[bit_data[0]]; DelayMs(2); P1=0xfb; P0=DSY_CODE[bit_data[1]]; DelayMs(2); P1=0xfd; P0=DSY_CODE[bit_data[2]]; DelayMs(2); P1=0xfe; P0=DSY_CODE[bit_data[3]]; DelayMs(2);
知识积累
ACC >> 1; /*相当于汇编中的 RRC */ MSB是Most Significant Bit的缩写,最高有效位。 MSB位于二进制数的最左侧。若MSB=1,则表示 数据为负值,若MSB=0,则表示数据为正。 LSB是Least Significant Bit的缩写,最低有效位。 LSB位于二进制数的最右侧。