当前位置:文档之家› IO口结构详解

IO口结构详解

IO口结构详解
IO口结构详解

1.什么是源型、漏型?什么是上拉电阻?下拉电阻?什

么是线驱动输出、集电极开路输出、推挽式输出?

我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极c跟发射极e之间相当于断开),所以5v电源通过1k电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。

我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。

再看图三。图三中那个1k的电阻即是上拉电阻。如果开关闭合,则有电流从1k电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1k电阻上的压降也为0,所以输出端的电压就是5v了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即1kω),如果接一个电阻为r的负载,通过分压计算,就可以算得最后的输出电压为5*r/(r+1000)伏,即5/(1+1000/r)伏。所以,如果要达到一定的电压的话,r就不能太小。如果r真的太小,而导致输出电压不够的话,那我们只有通过减小那个1k的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。

如果我们将一个读数据用的输入端接在输出端,这样就是一个io口了(51的io口就是这样的结构,其中p0口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于p0口来说,就是高阻态了。

对于漏极开路(od)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,oc就变成了od,原理分析是一样的。

另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起oc 或者od来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的oc或od输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态,avr单片机的一些io口就是这种结构。

2.AVR单片机IO口的结构分析

AVR的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握AVR的IO操作,所以有必要撰文说明一下,其实采用真正双向IO结构的新型MCU很多,常用的有增强型51,PIC,AVR等。

先简单的回顾一下标准51的准双向IO结构

这种准双向IO结构的特点是:

1、输出结构类似OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。

2、永远有内部电阻上拉(P0口除外),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口

(同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)

3、作输入时,因为OC门有"线与"特性,必须把IO口设为高电平(所以按键多为共地接法)

4、作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)

5、软件模拟OC结构的总线反而比较方便-----例如IIC总线

*P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。

*OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。具备"线与"能力,有0得0。

*为什么设计成输出时高电平弱,低电平强----是考虑了当年流行的TTL器件输入特性

相信我们大多数人都接触过51单片机,51单片机的I/O口是准双向I/O口。其实这种说法是不严谨的,我们知道,51单片机有4个I/O口,分别是P0、P1、P2、P3,这4个I/O口的结构并不完全一致,其中P0口是标准的双向I/O口,而P1、P2、P3则是准双向I/O口。

关于准双向I/O口和双向I/O口的区别请看另一篇文章“准双向I/O口和标准双向I/O 口的区别”

AVR单片机的I/O口是标准的双向I/O口,它的IO结构就就比51的I/O口复杂多了,单是控制端口的寄存器就有3个 PORTx(数据寄存器)、DDRx(数据方向寄存器)、PINx (端口输入引脚);另外还有一个SFIOR(特殊功能I/O寄存器),这个寄存器中的PUD位控制全部I/O口的上拉电阻是允许还是被禁止。

下图是AVR单片机通用I/O口结构示意图:

从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是数据方向寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x表示端口序号)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。

数据方向寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。

当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚,如下图。AVR的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O 引脚呈现低电平,同时可吸纳20mA电流。因此,AVR的I/O在输出方式下提供了比较大的驱动能力,可以直接驱动LED等小功率外围器件。

当DDRx=0时,I/O处于输入工作方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻,如下图:

AVR单片机通用I/O端口的主要特点为:

双向可独立位控的I/O口

ATmega16的PA、PB、PC、PD四个端口都是8位双向I/O口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6位用于输入的同时定义第1、7位用于输出,互不影响。

Push-Pull大电流驱动(最大40mA)

可控制的引脚内部上拉电阻

每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。

DDRx可控的方向寄存器。

AVR的I/O端口结构同其它类型单片机的明显区别是,AVR采用3个寄存器来控制I/O 端口。一般单片机的I/O仅有数据寄存器和控制寄存器,而AVR还多了一个方向控制器,用于控制I/O的输入输出方向。由于输入寄存器PINx实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与MCU的内部总线连接,因此,读PINx时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。这种结构的I/O端口,具备了真正的读-修改-写(Read-Modify-Write)特性。

AVR单片机通用I/O口设计注意事项:

数据寄存器PORTx和数据方向寄存器DDRx为读/写寄存器,而端口输入引脚PINx为只读寄存器。

但是需要特别注意的是,对PINx寄存器某一位写入逻辑"1“将造成数据寄存器相应位的数据发生"0“与“1“的交替变化。

当寄存器MCUCR 的上拉电阻禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。

在高阻态和输出高电平两种状态之间进行切换时,上拉电阻使能或输出低电平这两种模式必然会有一个发生。编写程序时要注意两者的顺序。

通常,上拉电阻使能是完全可以接受的,因为高阻状态下强高电平输出还是上拉输出都是可以接受的。

如果使用情况不是这样,可以通过置位SFIOR寄存器的PUD来禁止所有端口的上拉电阻。

在上拉输入和输出低电平之间切换也有同样的问题。

用户必须选择高阻态或输出高电平作为中间步骤。

不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚电平

PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。

这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。其缺点是引入了延迟。

AVR IO具备多种IO模式:

1、高阻态,多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入

2、弱上拉状态(Rup=20K~50K),输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入

3、推挽强输出状态,驱动能力特强(>20mA),可直接推动LED,而且高低驱动能力对称.

使用注意事项:

写用PORTx,读取用PINx

实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,IO口将会输出/灌入

80mA(Vcc=5V)的大电流,导致器件损坏。

作输入时:

1、通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(表面看好像是51的抗干扰能力强,是因为51永远有内部电阻上拉,)

2、尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合------CMOS电路的特点

3、如果先前I/O口为输出状态,设置为输入状态后,必须等待1个时钟周期后才能正确的读到外部引脚PINx的值。

4、功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。

5、用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入

作输出时:

采用必要的限流措施,例如驱动LED要串入限流电阻

复位时:

复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平

休眠时:

作输出的,依然维持状态不变

作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如外部中断的唤醒功能。

AVR的C语言IO操作:

AVR的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令,所以需要采用位逻辑运算来实现,这是必须要掌握的。

IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。

不必考虑代码效率的问题,如果可能,GCCAVR会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。

例如iom16.h里面定义了#define PA7 7

(这标准头文件定义了MCU的所有官方定义(包括寄存器,位,中断入口等),但管脚的第二功能没有定义)

想PA7为1 PORTA|=(1<

想PA7为0 PORTA&=~(1<

想PA7取反PORTA^=(1<

想检测PA7是否为1 if (PINA&(1<

想检测PA7是否为0 if !(PINA&(1<

<<为左移运算符,不懂的就要好好复习C语言基础了。

注意IO操作的顺序:

//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻

假设PA口驱动LED的负极,低电平灯亮

初始化方法1:

PORTA=0xFF; //内部上拉,高电平

DDRA=0xFF; //输出高电平---------灯一直是灭的

初始化方法2:

DDRA=0xFF; //输出低电平--------灯被错误点亮了

PORTA=0xFF; //输出高电平--------马上被熄灭了,时间很短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉

但要是这个IO口是控制炸药包的点火信号呢?工控场合要考虑可靠性的问题

模拟OC结构的IIC总线的技巧:

虽然AVR大多带有硬件IIC接口,但也有需要使用软件模拟IIC的情况

可以通过使用外部上拉电阻+控制DDRx的方法来实现OC结构的IIC总线。

IIC的速度跟上拉电阻有关,内部的上拉电阻阻值较大(Rup=20K~50K),只能用于低速的场合

#define SDA 0 //PC0

#define SCL 1 //PC1

(程序初始化设定SDA和SCL都是PORT=0,DDR=0)

#define SDA_0() DDRA|=(1<

#define SDA_1() DDRA&=~(1<

#define SCL_0() DDRA|=(1<

#define SCL_1() DDRA&=~(1<

使用上面的SDA_0()/SDA_1()/SCL_0()/SCL_1()宏即可,直观,而且效率跟汇编是一样的

3.PIC单片机端口的概述

PIC单片机的IO口,特别是第二功能的AD口,当端口被配置为AD模拟输入时,误以为端口用作普通的IO口时,去读取相应的端口,然而读进来的数据不确定。(例如:用万用表测量该管脚的电压为4.0V,但是读进来的数据始终为低电平),这是由于PIC单片机的IO口有一个弱上拉(用MOS 管的开关代替),当端口被配置为AD模拟输入时,弱上拉disable,则单片机的IO口呈现为高阻状态。(可参照PIC单片机DATASHEET)

在数字电路中不用的输入脚都要接固定电平,通过1k电阻接高电平或接地。

1、电阻作用:

l 接电组就是为了防止输入端悬空

l 减弱外部电流对芯片产生的干扰

l 保护cmos内的保护二极管,一般电流不大于10ma

l 上拉和下拉、限流

l 1. 改变电平的电位,常用在ttl-cmos匹配

2. 在引脚悬空时有确定的状态

3.增加高电平输出时的驱动能力。

4.为oc门提供电流

l 那要看输出口驱动的是什么器件,如果该器件需要高电压的话,而输出口的输出电压又不够,就需要加上拉电阻。

l 如果有上拉电阻那它的端口在默认值为高电平你要控制它必须用低电平才能控制如三态

门电路三极管的集电极,或二极管正极去控制把上拉电阻的电流拉下来成为低电平。反之,l 尤其用在接口电路中,为了得到确定的电平,一般采用这种方法,以保证正确的电路状态,以

免发生意外,比如,在电机控制中,逆变桥上下桥臂不能直通,如果它们都用同一个单片机来驱

动,必须设置初始状态.防止直通!

2、定义:

l 上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!l 上拉是对器件注入电流,下拉是输出电流

l 弱强只是上拉电阻的阻值不同,没有什么严格区分

l 对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。

3、为什么要使用拉电阻:

l 一般作单键触发使用时,如果ic本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在ic外部另接一电阻。

l 数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!

l 一般说的是i/o端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,i/o端口的输出类似与一个三极管的c,当c接通过一个电阻和电源连接在一起的时候,该电阻成为上c拉电阻,也就是说,如果该端口正常时为高电平,c通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用吗:

比如:当一个接有上拉电阻的端口设为输如状态时,他的常态就为高电平,用于检测低电平的输入。

l 上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是你同学说的灌电流

线驱动(差动输出):

线驱动器是一个源电流输出器件。在导通状态时,线驱动器输出为电源(vcc);在关断状态时,输出悬空。因此,线驱动器需要一个灌电流输入接口。下面表格中给出了一个简单的线驱动器的原理图。差动输出(欧姆龙称为线性驱动输出)线性驱动输出就是根据rs-422a 的数据输送回路。可通过双股搅合线电缆进行长距离输送

集电极开路:

集电极开路电路是灌电流输出器件。在关断状态时,集电极开路输出连到地;在导通状态时,集电极开路输出悬空。因此,集电极开路输出需要一个源电流输入接口。下面表格中给出了

一个简单的集电极开路输出电路的原理图。

推挽式:

推挽式输出结合了线驱动与集电极开路输出,在关断状态时,推挽式输出接地;在导通状态时,推挽式输出连到电源(vcc)。推挽输出(欧姆龙称为互补输出)输出回路有2种,即npn与pnp2种晶体管输出。根据输出信号h或l,2种晶体管输出互相交叉进行on或off 动作,使用时,正电源,0v分别为吸合,拉下互补输出是输出电流流出或流入2种动作,特征是信号的上升、下降速度快,可进行导线的长距离延长。可与开路集电极输入机器(npn/pnp)连接,另外还可以连接到电压输入机器上。但是为了能更好的发挥未来的性能,一般推荐在电压输入机器上使用电压输入的编码器。

51单片机IO口使用经验绝对经典

绝对经典 按常规,在51端口(P1、P2、P3)某位用作输入时,必须先向对应的锁存器写入1,使FET截止。一般情况是这样,也有例外。所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场效应管并联在一起:一个FET为负载管,其阻值固定;另一个FET 可工作在导通或截止两种状态(姑且叫可变FET)。使其总电阻值变化近似为0或阻值较大(20千欧--40千欧)两种情况。当和端口锁存器相连的FET由导通至截止时,该阻值近似为0,可将引脚快速上拉至高电平;当和锁存器相连的FET由截止至导通时,该电阻呈现较大阻值,限制了和端口锁存器相连的FET的导通电流。 51I/O口作为输入端和外部信号相连有时必须考虑上述特性,本人在设计LTP1245热敏打印头驱动板时,资料上推介热敏头“抬头”和“纸尽”信号由头中内嵌检测电路提供,MCU IO口采集该信号时需加缓冲(如74HC04)。当时本人认为51IO口上拉电阻为一较大阻值的固定电阻,对输入信号无影响,故未加缓冲电路(为降低成本能省则省)。可到调试PCBA时发现,“抬头”、“纸尽”状态变化时,采集信号只在3.90V--5.10V之间变化,应为低电平时无低电平输出。究其原因,打印头的“抬头”、“缺纸”信号输出为一光敏三极管的集电极输出,集电极和电源间原有一个负载电阻,饱和导通设计工作电流仅为450--1100微安,当该集电极直接和MCU IO口某位相连时,IO口上拉电阻和光敏三极管负载电阻并联,当IO口上拉时,上拉电阻极小致使光敏三极管直流负载线斜率陡然增大,工作状态进入放大区而非希望的饱和区。当时在不改硬件的条件下,我几乎无计可施,甚至想到了准备烧断IO口上拉电阻(前两天我曾发帖求救怎么烧断IO 口上拉电阻的方法)后来听网友建议该方法风险较大,所以总想用软件方法解决。 后来我的解决方法是:采样信号前不是先向对应锁存器写1,而是先写入0,再写入1,延时约10毫秒以上,然后再采样(当然此法只适应于采样频率很低的情况)。这样作的目的是:先写入0迫使IO口上拉电阻先为一较大值,此时如果外部光敏三极管本来处于截止状态,当完成上述一系列锁存器的写入过程后光敏管仍为截止态,IO口正确采样到高电平;此时如果外部

发动机的工作原理和总体构造

《汽车构造》作业及答案 第四章汽油机燃油系统 4-1 用方框图表示,并注明汽油机燃料供给系统各组成的名称,燃料供给、空气供给及废气排出的路线。 4-2 结合理想化油器的特征曲线,说明现代化油器各供油装置的功用。 答: 现代化油器有以下几个部分组成:1,主供油系统:在一般情况下提供油料。2,启动系统:在启动时提供油料。3,怠速系统:在怠速时提供油料。4,大负荷加浓系统:在大负荷时提供油料。5,加速系统:在加速时瞬时提供油料。 4-3 说明主供油装置是在什么样的负荷范围内起作用?在此范围内,随着节气门开度的逐渐加大,混合气浓度怎样变化?它的构造和工作原理如何? 答:除了怠速情况和极小负荷情况下,主供油系统都起作用。在其工作范围内,随着节气门开度的逐渐加大,混合气浓度逐渐减小。它主要由主量孔,空气量孔,通气管和主喷管组成。它主要是通过空气量孔引入少量空气,适当降低吸油量真空度,借以适当地抑制汽油流量的增长率,使混合气的规律变为由浓变稀,以符合理想化油器特性的要求。 4-4 说明怠速装置是在什么样的情况下工作的?它的构造和工作原理如何? 答:怠速装置是在怠速和很小负荷的情况下工作的!它主要是由怠速喷口,怠速调整螺钉,怠速过渡孔,怠速空气量孔,怠速油道和怠速量孔组成。发动机怠速时,在怠速喷口真空度的作用下,浮子室中的汽油经主量孔和怠速量孔,流入怠速油道,与从怠速空气量孔进入的空气混合成泡沫状的油液自怠速喷口喷出。 4-5 说明起动装置是在什么情况下工作的?它的构造和工作原理如何? 答:起动装置是在发动机在冷启动状态下起作用的,它是在喉管之前装了一个阻风门,由弹簧保持它经常处于全开位置。发动期启动前,驾驶员通过拉钮将阻风门关闭,起动机带动曲轴旋转时,在阻风门后面产生很大的真空度,使主供油系统和怠速系统都供油,从而产生很浓的混合气。 4-6 加浓装置是在什么样的情况下起作用的?机械加浓装置和真空加浓装置的构造和工作原理如何? 答:它是在大负荷和全负荷的情况下工作的。对于机械加浓装置,在浮子室内装有加浓量孔和加浓阀,加浓量孔和主量孔并联,加浓阀上方有与拉杆连在一起的推杆,而拉杆又通过摇臂与节气门主轴相连。当节气门开启时,要比转动,带动拉杆和推杆一同向下运动,只有当节气门开度达到80%---85%时,推杆才开始顶开加浓阀,于是汽油便从浮子室经加浓阀和加浓量孔流入主喷管,于从主量孔来的汽油汇合,一起由主喷管喷出。对于真空加浓系统,有活塞式和膜片式,用得最多的是前者。其构造为:浮子室上端有一个空气缸,活塞与推杆相连,推杆上有弹簧。空气缸的下方借空气通道与喉管前面的空间相连,空气缸上方有空气通道通到节气门后面。在中等负荷时,如果发动机转速不是很低,喉管前面的压力几乎等与大气压力;而节气门后的压力则比大气压力小的多,因此在真空度的作用下,活塞压缩了弹簧以后处于最上面的位置。此时,加浓阀被弹簧压紧在进油口上,即真空式加浓系统不起作用。当转变到大负荷时,节气门后面的压力增加,则真空度间小道不能克服弹簧的作用力,于是弹簧伸张使推杆和活塞下落,推开加浓阀,额外的汽油经加浓量孔流入主喷管中,以补充主量孔出油的不足,使混合气加浓。 4-7 说明加速装置的功用、构造和工作原理。 答:加速装置是在加速或者超车时,供给浓混合气,使发动机的功率迅速增加。它有活塞式和膜片式两种,使用较多

单片机io口理解

【转】单片机IO口设置推挽和开漏的区别(转自网易博客冷水泡茶的日志)2010-09-28 13:43 单片机IO口设置推挽和开漏的区别 一般情况下我们在电路设计编程过程中设置单片机,大多是按照固有的模式去做的,做了几年这一行了,也没碰到过什么问题。昨天就遇到了这样一个问题,电路结构如图一,在这种情况下STC单片机与410单片机通讯是没问题的 但是与PC就无法通讯了,STC收不到PC的命令,以前410的位置是用的STC的片子一直没问题,我想也许是驱动能力不够,在410TX端加了上拉,不过没起作用。 用示波器监视串口得到面的波形 这说明sp3232下拉得不够,于是加了下拉,还是没起作用。又把410端口内部的上拉去掉,结果还是一样。 最后请教老师,在410程序里将TX的工作方式由推挽式改为开漏式,一切ok~!

从网上查了推挽和开漏的区别,放在这里免得以后再到处找了,给自己保存了 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极C跟发射极E之间相当于断开),所以5V电源通过1K电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。 我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。 再看图三。图三中那个1K的电阻即是上拉电阻。如果开关闭合,则有电流从1K电阻及开关上流过,但由于开关闭其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于P0口来说,就是高阻态了。 对于漏极开路(OD)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。 另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起OC或者OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的OC或OD输出则不会有这样的情况,因为上拉电

51单片机IO口使用DE 经验

DANPAINJI 51单片机I/O口使用经验 字体大小: 小中大作者:来源:日期:2006-08-18 点击:364 按常规,在51端口(P1、P2、P3)某位用作输入时,必须先向对应的锁存器写入1,使FET 截止。一般情况是这样,也有例外。所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场效应管并联在一起:一个FET为负载管,其阻值固定;另一个FET可工作在导通或截止两种状态(姑且叫可变FET)。使其总电阻值变化近似为0或阻值较大(20千欧--40千欧)两种情况。当和端口锁存器相连的FET由导通至截止时,该阻值近似为0,可将引脚快速上拉至高电平;当和锁存器相连的FET由截止至导通时,该电阻呈现较大阻值,限制了和端口锁存器相连的FET的导通电流。 51I/O口作为输入端和外部信号相连有时必须考虑上述特性,本人在设计LTP1245热敏打印头驱动板时,资料上推介热敏头“抬头”和“纸尽”信号由头中内嵌检测电路提供,MCU IO口采集该信号时需加缓冲(如74HC04)。当时本人认为51IO口上拉电阻为一较大阻值的固定电阻,对输入信号无影响,故未加缓冲电路(为降低成本能省则省)。可到调试PCBA时发现,“抬头”、“纸尽”状态变化时,采集信号只在3.90V--5.10V之间变化,应为低电平时无低电平输出。究其原因,打印头的“抬头”、“缺纸”信号输出为一光敏三极管的集电极输出,集电极和电源间原有一个负载电阻,饱和导通设计工作电流仅为450--1100微安,当该集电极直接和MCU IO口某位相连时,IO口上拉电阻和光敏三极管负载电阻并联,当IO口上拉时,上拉电阻极小致使光敏三极管直流负载线斜率陡然增大,工作状态进入放大区而非希望的饱和区。当时在不改硬件的条件下,我几乎无计可施,甚至想到了准备烧断IO口上拉电阻(前两天我曾发帖求救怎么烧断IO口上拉电阻的方法)后来听网友建议该方法风险较大,所以总想用软件方法解决。 后来我的解决方法是:采样信号前不是先向对应锁存器写1,而是先写入0,再写入1,延时约10毫秒以上,然后再采样(当然此法只适应于采样频率很低的情况)。这样作的目的是:先写入0迫使IO口上拉电阻先为一较大值,此时如果外部光敏三极管本来处于截止状态,当完成上述一系列锁存器的写入过程后光敏管仍为截止态,IO口正确采样到高电平;此时如果外部光敏三极管基极电流足够大有容许三极管饱和导通的条件(即基极吸收到充分光强),虽然采样一开始集电极被人为钳位在低电平,但当下一时隙和IO口相连的锁存器被写入1时,在IO口上拉电阻中的可变FET导通之前,光敏三极管已先进入饱和态而又把引脚钳位在实际输出的低电平,此时MCU IO口的上拉电阻仍为较大阻值,同时和原光敏三极管集电极负载电阻并联(考虑并联后阻值变化,原光敏三极管集电极负载电阻需增大到适当阻值)充当饱和导通后光敏三极管的负载电阻,事实上,IO口上拉电阻中的可变FET未来得及导通又被截止了,由此又保证了信号低电平的正确采样。经过波形测试问题得

单片机IO口结构与工作原理

一、P0端口的结构及工作原理 P0端口8位中的一位结构图见下图: 由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。 下面,先分析组成P0口的各个部分: 先看输入缓冲器:在P0口中,有两个三态的缓冲器,在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),上面一个是读锁存器的缓冲器,下面一个是读引脚的缓冲器,读取P0.X引脚上的数据,要使这个三态缓冲器有效,引脚上的数据才会传输到部数据总线上。 D锁存器:在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。 多路开关:在51单片机中,不需要外扩展存储器时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(部没有ROM)的单片机或者编写的程序超过了单片机部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。这个多路选择开关就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的。 输出驱动部份:P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。

P0口作为I/O端口使用时,多路开关的控制信号为0(低电平),V1管截止,多路开关是与锁存器的Q非端相接的(即P0口作为I/O口线使用)。作为地址/数据线使用时,多路开关的控制信号为1,V1管由地址/数据线决定,多路开关与地址/数据线连接。 输出过程: 1、I/O输出工作过程:当写锁存器信号CP有效,数据总线的信号→锁存器的输入端D→锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X。这时多路开关的控制信号为低电平0,V1管是截止的,所以作为输出口时,P0是漏极开路输出,类似于OC门,当驱动上接电流负载时,需要外接上拉电阻。 下图就是由部数据总线向P0口输出数据的流程图(红色箭头)。 2、地址输出过程 控制信号为1,地址信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。

实验二单片机IO口的使用

姓名:学号:日期: 实验二单片机I/O口的使用 一、实验名称:单片机I/O口的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,# H LOOP: MOV P2,A CALL DELAY SJMP LOOP DELAY: MOV R1,# H DL1: MOV R2,# H DL2: MOV R3,# H DJNZ R3,$

DJNZ R2,DL2 DJNZ R1,DL1 RET END 将以上程序补充完整,流水时间间隔为50ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:进行软硬件仿真时,观察到8支LED发光二极管流水发光。 六、回答思考题 1.如何让改变流水方向? 2.若将R3至R10上拉电阻省略,8支LED还能正常发光吗? 3.如果将LED接到P0口与接到P2口硬件设计时应注意什么问题? Keil软件建立项目的方法: 1.新建项目 2.新建文件 3.添加文件 4.设置选项 5.重建所有目标文件 6.调试仿真

51单片机IO端口的四种输入输出模式

51单片机IO端口的四种输入输出模式(by wuleisly) 单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O 口吗?你真的能按你的需要配置I O口吗? 一、准双向口输出 准双向口输出类型可用作输出和输入功能而不需重新配置 口线输出状态。这是因为当口线 输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强, 可吸收相当大的电流。(准双向口有3个上拉晶体管适应不同的需要) 准双向口读外部状态前,要先锁存为…1?,才可读到外部正确的状态. 二、强推挽输出 推挽输出配置的下拉结构与开漏输出以及准双向口的下拉 结构相同,但当锁存器为1时提供持续的强上拉。推挽模式一般用于需要更大驱动电流的情况。 三、仅为输入(高阻) 输入口带有一个施密特触发输入以及一个干扰抑制电路。 四、开漏输出配置(若外加上拉电阻,也可读) 当口线锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。这种方式的下拉与准双向口相同。 开漏端口带有一个施密特触发输入以及一个干扰抑制电路。 关于I/O口应用注意事项: 1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。 因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不

对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了. 有些实际没有损坏,加上拉电阻就OK了 有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多 大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强 推挽输出. 2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上 做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MOS电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上 拉口在由0变为1时,会有2时 钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有 可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在 软件处理上,不要出现按键两端的I/O口同时为低. 一种典型三极管控制电路: 如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3. 3K~10K), 建议R2的值在15K以上,或用强推挽输出。 典型发光二极管控制电路:

51单片机IO口应用详解

51单片机IO口应用详解 MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照单片机引脚图: 这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。 P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 P1口只做I/O口使用:其内部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其内部有上拉电阻; P3口有两个功能: 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp) 在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。 ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起

单片机实验 IO口输入输出实验

实验二I/O口输入、输出实验 一、实验目的 1. 学习I/O口的使用方法。 2. 学习延时子程序、查表程序的编写和使用。 二、参考程序框图 led灯 延时500ms //左移一位 跳转循环 DJNZ R6,DE2。 DJNZ R7,DE1。 RET END 2、I/O口输入输出(方法一) ORG 0000H。 START : MOV P2,#00H。//初始化 MOV P0,#00H。 MOV P1,#0FFH。//p1 MOV DPTR,#TABLE。// MOV 50H,#0FEH。// L0 :MOV A,P1。// CJNE A,#0FFH,L1。 AJMP L0。 L1 :MOV A,P1。 CJNE A,#0FFH,LL1。 AJMP L0。 LL1 :CJNE A,50H,LL2。//是否与地址50h中数据相等 MOV P0,A。//相等输出对应led灯 MOV A,#00H。 MOVC A,@A+DPTR。

MOV P2,A。//输出表格数据到数码管 LCALL DELAY。//延时 LJMP START。//返回程序开头 LL2 :XCH A,50H。//交换数据 RL A。//左移 XCH A,50H。//再次交换,此时地址50h中数据左移一位 INC DPTR。//表格数据地址加一 LJMP LL1。//返回继续比较 DELAY : MOV R7,#01H。//延时程序 DE1 : MOV R6,#28H。 DE2 : MOV R5,#5AH。 DJNZ R5,$。 DJNZ R6,DE2。 DJNZ R7,DE1。 RET TABLE : 。//DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H。 DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH。//表格数据END 程序二(方法二) ORG 0000H MOV P2,#00H。//I./O口初始化 MOV P1,#0FFH。//P1口赋FFH初值 MOV P0,#00H。 START : MOV P2,#00H。//P2清0; MOV P0,#00H。//P0清0; MOV R1 ,P1。 MOV A,R1。//读P1口 CJNE A,#0FFH,L1。//是否有数据输入 AJMP START。//无输入则跳转,继续查询 LCALL DELAY。 L1 : MOV R1,P1。//消除按键抖动 MOV A,R1。 CJNE A, #0FFH,LL1。 AJMP START。 LL1 : CJNE A,#0FEH,LL2。//是否按键1输入 MOV P2,#06H。//是则P2输出相应的按键号码 CPL A。//A取反 MOV P0,A。//输出到P0口 LCALL DELAY。//延迟 AJMP LP。//跳转到LP LL2 : CJNE A,#0FDH,LL3。//是否按键2输入 MOV P2,#5BH。//以下同上 CPL A。

工作原理和总体结构

第一章工作原理和总体结构 1、活塞从上止点到下止点所让出的空间容积称_______。 a.发动机排量 b. 气缸总容积 c.气缸工作容积 2、压缩比是指______与燃烧室容积的比值。 a.所有气缸工作容积 b.气缸总容积 c.气缸工作容积 3、活塞往复_____个行程完成一个工作循环的称为四冲程发动机。 a.四 b.两 c.一 4、四冲程汽油机的进气行程中,进入气缸的是________。 a.纯空气 b.汽油 c..混合气 5、四冲程发动机的一个工作循环中,曲轴转______,进、排气门各开启____次。 a.7200、一 b. 7200 、两 c.3600、一 6、四冲程汽油机和四冲程柴油机比较,汽油机的压缩比较柴油机的______。 a.大 b.小 c.相等 7、当发动机工作容积、压缩比和转速相等时,从理论上讲,二冲程发动机的功率应为四冲程发动机功率的_____倍。 a.一 b.二 c.三 第二章曲柄连杆机构 1、_________的功用是:将燃料燃烧时产生的热能转变为活塞往复运动的机械能,再通过连杆将活塞的往复运动变为曲轴的旋转运动而对外输出动力。 a.配气机构 b.曲柄连杆机构 c.燃料供给系 2、曲柄连杆机构由机体组、_______、_______三大部分组成。 a.活塞连杆组、气缸 b活塞、曲轴 c.活塞连杆组、曲轴飞轮组 3、曲柄连杆机构在工作时所受的力有_______、_______、摩擦力。 a.气压力、惯性力 b.气压力、侧向力 c.阻力、惯性力

4、曲轴箱有_____、_______、_______三种结构型式。 a.平分式、龙门式、隧道式 b.平分式、直列式、对置式 c.直列式、“Ⅴ”型式、对置式 5 平分式曲轴箱是指主轴承座孔中心线______曲轴箱分界面上。 a.位于 b.高于 c. 低于 6、______式曲轴箱的主轴承座孔中心线高于曲轴箱分界面。 a.龙门 b. 隧道 c.平分 7、与冷却水直接接触的气缸套称______气缸套。 a.干式 b.湿式 c. 筒式 8、气缸套分为_____和______两种,其中_____的散热效果好。 a.干式、湿式、干式 b.干式、湿式、湿式 c.干式、筒式、湿式 9、汽油机常有的燃烧室有盆形、_____、______。 a. 楔形、半球形 b.ω形、球形 c.ω形、U形 10、活塞连杆组由活塞、_____、活塞销和_____等主要机件组成。 a.活塞环、连杆 b.曲轴、连杆 c.气缸、活塞环 11、活塞变形是由于_____、气压力、侧压力等原因造成的。 a.热膨胀 b. 热膨胀 c.摩擦力 12、汽车发动机目前广泛采用的活塞材料是______。 a.铸铁 b.铝合金 c.合金钢 13、活塞裙部制成椭圆形,其长轴在______方向。 a. 平行于销轴 b.沿销轴 c.垂直于销轴 14、______是指活塞环装入气缸后,活塞环背面与环槽底部的间隙。 a. 端隙 b. 背隙 c.侧隙

2实验二 单片机IO口的使用

姓名:?学号:?日期: 实验二单片机I/O口的使用 一、实验名称:单片机I/O口的使用 二、实验目的 ?1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; ?3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 ?1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 ?1.在Proteus环境下建立如下仿真原理图,并保存为文件; ?原理图中常用库元件的名称: ?无极性电容:CAP?极性电容:CAP-ELEC?单片机:AT89C51? 晶体振荡器:CRYSTAL?电阻:RES ??按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN蓝色LED-BLUE黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; ?参考程序如下: ??ORG 0000H ?LJMP MAIN ??ORG 0100H MAIN: MOV A,# H LOOP: MOV P2,A ? CALL DELAY ??SJMP LOOP DELAY:?MOV R1,# H DL1:?MOV R2,# H DL2:?MOV R3,# H

??DJNZ R3,$ DJNZR2,DL2 ?DJNZR1,DL1 RET ??END ?将以上程序补充完整,流水时间间隔为50ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:进行软硬件仿真时,观察到8支LED发光二极管流水发光。六、回答思考题 ?1.如何让改变流水方向? ?2.若将R3至R10上拉电阻省略,8支LED还能正常发光吗? ?3.如果将LED接到P0口与接到P2口硬件设计时应注意什么问题? Keil软件建立项目的方法: 1.新建项目 2.新建文件 3.添加文件 4.设置选项 5.重建所有目标文件 6.调试仿真

单片机并行IO口的应用实验

一、实验目的 1熟悉Proteus软件和Keil软件的使用方法。 2熟悉单片机应用电路的设计方法。 3、掌握单片机并行I/O 口的直接应用方法。 4、掌握单片机应用程序的设计和调试方法。 二、设计要求 1用Proteus软件画出电路原理图。要求在P1.0至P1.7 口线上分别接LEDO至LED7八个发光二极管,在P3.0 口线上接一蜂鸣器。 2、编写程序:要求LED0至LED7以秒速率循环右移。 3、编写程序:要求LED0至LED7以秒速率循环左移。 4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。 三、实验程序流程框图和程序清单 延时程序流程框图 Y 返回

实验程序流程框图

汇编程序 ORG 0000H MOV A, #11111110B MOV P3, #0FFH MAIN : MOV RO, #07H L00P1: LCALL DELAY MOV P3, A RL A CLR P2.0 LCALL DELAY SETB P2.0 DJNZ R0, LOOP1 MOV R0, #07H L00P2: LCALL DELAY MOV P3, A RR A CLR P2.0 LCALL DELAY SETB P2.0 DJNZ R0, LOOP2 LJMP MAIN DELAY: MOV R7, #17H DL1: MOV R6, #98H DL0: MOV R5, #46H DJNZ R5, $ DJNZ R6, DL0 DJNZ R7, DL1 RET END C语言程序: #in clude #i ncludevi ntri ns.h> un sig ned char temp; int i; void delay(void); sbit speaker=P2A0; void mai n() { temp=0xfe; P3=temp;

用单片机IO口直接驱动段式LCD的方法

用单片机IO口直接驱动段式LCD的方法 用IO口驱动段式LED(数码管)的方法相信大家比较清楚,但用IO口直接驱动段式LCD的方法相对复杂一些。在网上搜了一下单片机IO口驱动段式LCD的方法,大部分资料讲得不够清晰、具体,而且简单问题复杂化。后来查了LCD的显示原理,结合网上的相关介绍,发现IO口直接驱动段式LCD原理比较简单,用几句话就可以描述清楚: 1.LCD和LED的显示原理不一样:LED是加正向电压发光,而LCD必须交替加正、反向电压才会持续显示(可以做个实验,如果把恒定电压加到LCD的一段上,该段会显示一下,但马上不能显示,而且长时间加恒定电压,会加速LCD的老化和损坏) 2.常听说1/2bias,1/3bias LCD,是什么意思呢对于1/2bias LCD,假如LCD的显示电压是3V,则1/2bias是,也就是说在±3V电压作用时,LCD有显示;±及以下的电压作用时没有显示 3.普通单片机IO口不能直接输出半高电平(),但可以用相等的上下拉电阻实现,当IO口设置为输入(高阻)时,由于上下拉电阻的分压作用,则产生一个半高电平() 知道了以上3点后,动态驱动LCD就不是难事了,对于4*8段的LCD(4个COM,8个SEG,显示电压为3V,1/2bias),驱动方法如下: 1、四个COM采用交替扫描的方式,每个COM在相邻两次扫描时又进行电压交变的方式。 2、若扫描到某一个COM时,该COM输出3V(0V): 与该COM相连的SEG输出与COM相反,ΔV=±3V,则该相连点亮; 与该COM相连的SEG输出与COM相同,ΔV=0,则该相连点不亮。 3、其他没有扫描到的COM,单片机IO口为输入,从而产生1/2 bias(),不管SEG为何值,ΔV<±,故该点不亮。 本人用4*8段的LCD自制了一个数字钟表,验证了以上方法的可行性,现把制作过程罗列如下

最新 单片机IO口控制实验报告

单片机I/O口的控制 一、实验目的 1、熟悉MCS-51的I/O结构; 2、掌握MCS-51 I/O的使用方法; 3、掌握MCS-51的中断机制。 二、实验原理 1、MCS-51单片机的硬件结构片内结构: 2、内部数据存储器(字节地址为00H~0FH):

3、SFR的名称及其分布: 4、I/O端口地址: 5、P0~P3端口功能总结: (1)P0~P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MUX,以进行转换。而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无MUX。P0口的MUX的一个输入端为“地址/数据”信号。P2口的MUX的一个输入信号为“地址”信号。 (2)在4个口中只有P0口是一个真正的双向口,P1~P3口都是准双向口。 原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。为此,

P0口的输出缓冲器应为三态门。P0口中输出三态门是由两只场效应管(FET)组成,所以是一个真正的双向口。 P1~P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的-准双向口。(3)P3口的口线具有第二功能,为系统提供一些控制信号。 因此P3口增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。 6、P0口结构及特点: ⑴P0口结构与运作 1个输出锁存器,用于进行输出数据的锁存; 2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MUX,它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出。在控制信号的的控制下能实现对锁存器输出端和地址/数据线之间的切换;由两只场效应管组成的输出驱动电路。 ⑵P0口的特点 P0口是一个双功能的端口:地址/数据分时复用口和通用I/O口; 具有高电平、低电平和高阻抗3种状态的I/O端口称为双向I/O端口。P0口作地址/数据总线复用口时,相当于一个真正的双向I/O口。而用作通用I/O口时,由于引脚上需要外接上拉电阻,端口不存在高阻(悬空)状态,此时P0口只是一个准双向口; 为保证引脚上的信号能正确读入,在读入操作前应首先向锁存器写1; 单片机复位后,锁存器自动被置1; 一般情况下,如果P0口已作为地址/数据复用口时,就不能再用作通用I/O口使用;P0口能驱动8个TTL负载。 7、P1口的结构及特点: ⑴P1口结构与运作 一个数据输出锁存器,用于输出数据的锁存; 两个三态输入缓冲器,BUF1用于读锁存器,BUF2用于读引脚; 数据输出驱动电路,由场效应管VT和片内上拉电阻R组成。

相关主题
文本预览
相关文档 最新文档