manejo de puerto paralelo

Upload: incaurco

Post on 23-Feb-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Manejo de Puerto Paralelo

    1/13

    Manejo de puerto Paralelo

    Configuracin de Puerto.-

    El Puerto paralelo tambin llamado lpt usado anteriormente para la conexin de impresoras,

    escner ,etc. Tiene mucas aplicaciones en esta seccin !eremos como podemos controlarlo.

    Para empe"ar con el uso debemos tener en cuenta la configuracin de los pines del puerto #ue

    nos ser!ira para construir nuestro cable. En el puerto existen tos registros #ue se denominanpuertos o P$%T., & cada uno de sus bits, representa un pin determinado del puerto. 'os pin(s #ue

    !an del )* al + )*,),+/,+),++,+0,+1,+23 4on para masa, & sir!en para conectar las descargas

    de los circuitos.

    5ota.-El Cpu puede tener tanto conectores embras como macos debemos tener en cuenta #ue

    los macos son seriales & nos interesan los conectores embras #ue son para transmisin

    paralela.

    6eamos aora los tres registros

    Puerto de datos (Pin 2 al 9):Es el P$%T *** este puerto se lo puede usar tanto como entrada o

    como salida, debemos saber #ue por default esta configurado como salida si se #uiere usar como

    entrada se debe programar el puerto de control #ue !eremos despus.

    Puerto de estado (Pin 15, 13, 12, 10 y 11): Es el P$%T ** & es de solo lectura, por a#u7

    en!iaremos se8ales elctricas al ordenador, de este registro solo se utili"an los cinco bits de ms

    peso, #ue son el bit 9, :, , 1 & 0 teniendo en cuenta #ue el bit 9 funciona en modo in!ertido.

    Puerto de control (Pin 1, 14, 16 y 17):Es el correspondiente al P$%T */, & es de

    lectura;escritura, es decir, podremos en!iar o recibir se8ales elctricas, seg

  • 7/24/2019 Manejo de Puerto Paralelo

    2/13

    Esta para entrada de datos3

    Configuracin Port *** como salida

    El pin + es tierra

  • 7/24/2019 Manejo de Puerto Paralelo

    3/13

    5ota+.- 'os circuitos de arriba no necesitan fuente externa pero si se #uiere interactuar con otro

    CD como ser un Pic,etc. 4e recomienda el uso de optacopladores #ue son mu& buenos por#ue

    nos a&udan a aislar tierras.

    5ota0.-4e recomienda usar el parmon #ue es un programita encontrado en la eb #ue sir!e como

    testeador del puerto paralelo , inclusi!e se puede mandar datos por el Por***.Es decir si &a

    armaste los circuitos de arriba &a podr7as !er en accin tu puerto si aces correr el Parmon.exe2

    Programacin.-

    Para programar puertos en 6isual >asic :./ tenemos #ue tener en cuenta #ue !isual >asic solo nopuede manejar puertos , para manejar debemos recurrir a un dll o a un componente externo el

    cual nos permita interactuar directamente con el sistema operati!o.

    Existen mucos =ll como ser el inpout0+.dll, el port.dll, el port).dll,el io.dll etc.

    Fso del D$.=ll

    Para usar este dll en 6isual >asic se carga en un modulo el siguiente codigo, #ue prcticamente

    son todas las funciones #ue tiene el dll. Por ejemplo para mandar al puerto de datos solo

    deber7amos llamar a la funcion de la siguiente manera3

    Call Port$ut***,/2 Este codigo nos manda puros ceros al puerto

    Port ** entrada

    El pin + es Tierra

  • 7/24/2019 Manejo de Puerto Paralelo

    4/13

    Codigo del dll #ue se carga en el modulo(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    (=eclarations for direct port D;$ in 0+-bit 6isual >asic : programs.( Hunciona en Ix, ME, 5T, +/// & JP(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    Public =eclare 4ub Port$ut 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al =ata Bs >&te2Public =eclare 4ub PortIord$ut 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al =ata Bs Dnteger2

    Public =eclare 4ub Port=Iord$ut 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al =ata Bs 'ong2Public =eclare Hunction PortDn 'ib KD$.=''K >&6al Port Bs Dnteger2 Bs >&tePublic =eclare Hunction Port=IordDn 'ib KD$.=''K >&6al Port Bs Dnteger2 Bs 'ongPublic =eclare 4ub 4etPort>it 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al >it Bs >&te2Public =eclare 4ub ClrPort>it 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al >it Bs >&te2Public =eclare 4ub 5otPort>it 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al >it Bs >&te2

    Public =eclare Hunction LetPort>it 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al >it Bs >&te2 Bs >ooleanPublic =eclare Hunction %igtPort4ift 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al 6al Bs >oolean2 Bs >ooleanPublic =eclare Hunction 'eftPort4ift 'ib KD$.=''K >&6al Port Bs Dnteger, >&6al 6al Bs >oolean2 Bs >ooleanPublic =eclare Hunction Ds=ri!erDnstalled 'ib KD$.=''K 2 Bs >oolean

    (GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG(GGGGGGGGG Hunction =escriptions GGGGGGGGGGGGGGGGGGG(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    (Port$ut - $utputs a b&te to te specified port.

    (PortIord$ut - $utputs a ord ):-bits2 to te specified port.(Port=Iord$ut - $utputs a double ord 0+-bits2 to te specified port.(PortDn - %eads a b&te from te specified port.

    (PortIordDn - %eads a ord ):-bits2 from te specified port.(Port=IordDn - %eads a double ord 0+-bits2 from te specified port.(4etPort>it - 4ets te bit of te specified port.

    (ClrPort>it - Clears te bit of te specified port.(5otPort>it - 5ots in!erts2 te bit of te specified port.(LetPort>it - %eturns te state of te specified bit.

    (%igtPort4ift - 4ifts te specified port to te rigt. Te '4> is

    ( returned, and te !alue passed becomes te M4>.('eftPort4ift - 4ifts te specified port to te left. Te M4> is( returned, and te !alue passed becomes te '4>.

    (Ds=ri!erDnstalled - %eturns non-"ero if io.dll is installed and( functioning. Te primar& purpose of tis function( is to ensure tat te ernel mode dri!er for( 5T;+///;JP as been installed and is accessible.

    5ota1.-Para usar este codigo deberiamos copiar el arci!o io.dll en c3NIindoaN4&stem

  • 7/24/2019 Manejo de Puerto Paralelo

    5/13

    o en d3NIindoaN4&stem =ependiendo donde esta el sistema operati!o2,4i no se #uiere

    sobrecargar el sistema operati!o se puede tener el io.dll donde sea pero en la declaracion del

    modulo se debe dar el pat o la direccion donde esta el io.dll.

    ejemplo.-4i tenemos el io.dll en e3NcarpetaNio.dll el codigo en el modulo cambiaria a3(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    (=eclarations for direct port D;$ in 0+-bit 6isual >asic : programs.( Hunciona en Ix, ME, 5T, +/// & JP

    (GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    Public =eclare 4ub Port$ut 'ib Ke3NcarpetaND$.dll K >&6al Port Bs Dnteger, >&6al =ata Bs >&te2

    Public =eclare 4ub PortIord$ut 'ib Ke3NcarpetaND$.dll K >&6al Port Bs Dnteger, >&6al =ata Bs Dnteger2

    Public =eclare 4ub Port=Iord$ut 'ib Ke3NcarpetaND$.dll K >&6al Port Bs Dnteger, >&6al =ata Bs 'ong2

    .

    .

    .

    O asi sucesi!amente

    Programacin de un uego de 'uces4upongamos #ue #ueremos el siguiente juego de luces

    */

    1/

    +/

    )/

    /*

    /1

    /+

    /)

    /+

    /1

    /*

    )/

    )

    +

    0

    1

    :

    9

    *

    )/

    ))

    )+

  • 7/24/2019 Manejo de Puerto Paralelo

    6/13

    5ota.-Podemos 5otar #ue nuestro juego de luces tiene )+ estados & tambin se saco el ?ex del

    >&te.

    Ddea de programacin usando un contador mandar si el contQ) mando el ?ex */ cuando es +

    mando el ?ex 1/ & asi sucesi!amente asta llegar al )+ donde seria mi condicin de reseteo.

    En el formulario primero nos !amos a crear3

    ) HrameCaption Port***2

    ) Timer Dnter!al-@)/Rue seria )/ms2,Enabled-@true2

    * 4apes>acst&le-@) $pa#ue,sape-@Circle2

    ) label

    Este Hrame nos se!ira par sa!er el estado del puerto.

    4u codigo del timer) es3

    Pri!ate 4ub Timer)STimer2'abel).Caption Q PortDn***2 (Testeando todo el >&te & mostrndolo

    (GGGGGGGGGBora testeamos >it por >itGGGGGGGGGG=im c) Bs 6ariantc) Q !b%ed=im c+ Bs 6ariantc+ Q !bLreen

    Df LetPort>it***, 92 Q True Ten4ape).>acColor Q c)Else4ape).>acColor Q c+End Df

    Df LetPort>it***, :2 Q True Ten4ape+.>acColor Q c)Else4ape+.>acColor Q c+End Df

    Df LetPort>it***, 2 Q True Ten4ape0.>acColor Q c)Else4ape0.>acColor Q c+End Df

    Df LetPort>it***, 12 Q True Ten4ape1.>acColor Q c)Else

  • 7/24/2019 Manejo de Puerto Paralelo

    7/13

    4ape1.>acColor Q c+End Df

    Df LetPort>it***, 02 Q True Ten4ape.>acColor Q c)

    Else

    4ape.>acColor Q c+End Df

    Df LetPort>it***, +2 Q True Ten4ape:.>acColor Q c)

    Else4ape:.>acColor Q c+End Df

    Df LetPort>it***, )2 Q True Ten4ape9.>acColor Q c)

    Else4ape9.>acColor Q c+

    End Df

    Df LetPort>it***, /2 Q True Ten4ape*.>acColor Q c)

    Else4ape*.>acColor Q c+End Df

    End 4ub

    Bora Bdicionamos otro reloj donde programaremos el juego de luces

    Timer+enabled-@Halse,Dnter!al-@0//2+ command>utton Caption-@Dnicio el otro Pause 2 Estos botones uno nos serira para Dniciar nuestro juego & el otro

    para #ue lo colo#uemos en pausa

    El cdigo en el timer + es3 Bntes declaramos cont como !ariable global Brriba de todo nuestro codigo2

    $ption Explicit=im cont Bs Dnteger

  • 7/24/2019 Manejo de Puerto Paralelo

    8/13

    Pri!ate 4ub HormS'oad2cont Q )Call Port$ut***, /2End 4ub

    Pri!ate 4ub Command)SClic2

    Timer+.Enabled Q True (?abilito el relojEnd 4ub

    Pri!ate 4ub Command+SClic2Df Timer+.Enabled Q True Ten (Cuando aga clic abilita otro clic desabilita

    Timer+.Enabled Q HalseElseTimer+.Enabled Q TrueEnd DfEnd 4ub

    Pri!ate 4ub Timer+STimer24elect Case contCase )3Call Port$ut***, A?*/2

    Case +3Call Port$ut***, A?1/2Case 03Call Port$ut***, A?+/2Case 13Call Port$ut***, A?)/2

    Case 3Call Port$ut***, A?*2Case :3

    Call Port$ut***, A?12Case 93Call Port$ut***, A?+2

    Case *3Call Port$ut***, A?)2Case 3Call Port$ut***, A?+2Case )/3Call Port$ut***, A?12

    Case ))3Call Port$ut***, A?*2Case )+3Call Port$ut***, A?)/2

    cont Q / ( Condicon de reseteoEnd 4elect

    cont Q cont )End 4ubPri!ate 4ub HormSFnloadCancel Bs Dnteger2Call Port$ut***, /2End 4ub

    Entrada de datos.

    Para la entrada es mu& importante tener en cuenta #ue al mandar pulsos a& flanco tanto de subida como de bajada &para poder controlarla solo debemos recurrir a uno de los siguientes pseudocodigos3

  • 7/24/2019 Manejo de Puerto Paralelo

    9/13

    /

    /

    )

    )

    Hlanco 5egati!o

    >itU

    EstadoU

    EstadoQ/

    EstadoQ)

    =eteccionContQCont)2

    EstadoQ/

    D5DCD$

  • 7/24/2019 Manejo de Puerto Paralelo

    10/13

    /

    /

    )

    )

    Hlanco Positi!o

    >itU

    EstadoU

    EstadoQ)

    EstadoQ/

    =eteccionContQCont)2

    EstadoQ)

    D5DCD$

  • 7/24/2019 Manejo de Puerto Paralelo

    11/13

    5ota :.- Estos diagramas sir!en para Fn bit si se recuperaria todo el b&te con el truco deenmascaramiento se filtra el bit Por ejemplo si recuperar7amos ////)/)/ para filtrar el bit) ago

    un and . ////)/)/ and //////)/ 2

    Programa de !eloc7metro con el bit 9

    Ddea Testeo el bit 9 & cada #ue a&a un pulso lo cuento & con otro reloj reinicio cada segundo de

    esta manera saco cuantos pulsos se ace en un segundo

    /

    /

    )

    )

    Hlanco 5egati!o &

    Positi!o

    EstadoQ/

    EstadoU/

    =eteccinContQCont/.2

    EstadoQ/

    )

    EstadoQ)

    >itU

    EstadoU

    =eteccionContQCont/.2

    EstadoQ)

    D5DCD$

  • 7/24/2019 Manejo de Puerto Paralelo

    12/13

    5ota9.'os sapes tienen sus propiedad sape en circle & su bacst&le en )-$pa#ue(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG(Programa #ue nos da el estado del pin9 suponiendo #ue cada(#ue se igresa un pulso es ) !uelta(GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

    (6ariables Llobales=im cont Bs =ouble (contador del bit de entrada

    =im estado Bs Dnteger ( Para controlar si era cero o uno el bit en cuestion=im !el Bs =ouble (!elocidad de entradaPri!ate 4ub Timer)STimer2 Para tener un testeador de mi Puerto **

    (GGGGGGGG'abel).Caption Q PortDn**2 (Testeando el >&te de entrada(GGGGGGGG

    (GGGGGGGGGBora testeamos >it por >itGGGGGGGGGG=im c) Bs 6ariant

    c) Q !b%ed=im c+ Bs 6ariantc+ Q !bLreen

    Df LetPort>it**, 92 Q !erdadero Ten4ape).>acColor Q c)

    Else4ape).>acColor Q c+End Df

    Df LetPort>it**, :2 Q !erdadero Ten4ape+.>acColor Q c)

    Else4ape+.>acColor Q c+End Df

    Df LetPort>it**, 2 Q !erdadero Ten4ape0.>acColor Q c)

    Else

    'abel)Timer)

    inter!al-@)/2

    'abel+

    'abel0

    Timer+

    inter!al-@)/2

    Timer0

    inter!al-@)///2

  • 7/24/2019 Manejo de Puerto Paralelo

    13/13

    4ape0.>acColor Q c+End Df

    Df LetPort>it**, 12 Q !erdadero Ten4ape1.>acColor Q c)

    Else

    4ape1.>acColor Q c+End Df

    Df LetPort>it**, 02 Q !erdadero Ten4ape.>acColor Q c)

    Else4ape.>acColor Q c+End DfEnd 4ub

    Pri!ate 4ub Timer+STimer2 (flanco negati!o

    Df LetPort>it**, 92 Q !erdadero22 Ten Df estado Q )2 Ten

    estado Q ) Else cont Q cont /. co) Q co) /.

    estado Q ) End Df Else Df estado Q )2 Ten cont Q cont /. co) Q co) /.

    estado Q / Else estado Q /

    End Df End DfEnd 4ub

    Pri!ate 4ub Timer0STimer2'abel+.Caption Q cont A K ?"K!el Q cont!el Q !el G :/ (por si #uiero en rpm G:/ si no en ?"'abel0.Caption Q !el A K %PMK

    cont Q /End 4ub

    5ota*.-4i se Ruiere testear mas bits se deberia en el mismo reloj de testeo copiar el detector de

    flanco & acerlo para otro bit & asi sucesi!amente.Por si Ruieren acer otra cosa #ue no seacontar por ejemplo #ue apague el formulario cuando aga clic en un pulsador solo se debe

    cambiar el contQcont) por lo #ue #uieren acer.