Está en la página 1de 6

CONTROLAR TODOS LOS BITS DE SALIDA

Disponemos de 8 bits de salida o lo que es igual a 1byte.

En fin, para encender el primer bit debíamos enviar un 1, para encender los demás debemos
pensar en el puerto como un número binario, los 1 representan un estado "alto" y los 0 un
estado "bajo".

Si queremos, encender todos los 8 bits, entonces debemos mandar un 11111111, podemos
mandarlo en decimal y el mismo programa lo pasa a binario, enviaremos entonces un 255.

Y así es para cada número.


000=00000000
001=00000001
002=00000010
...
255=11111111

Así que nos pasamos directo al Software.

SOFTWARE EN C
En C, puede ser de esta manera:
La función paralelo, lo que hace es buscar la dirección del puerto y almacenarla.
Si queremos que al salir del programa se apaguen todos los bits debemos mandar un

outport(para,0);

De lo contrario al salir del programa se quedarán tal cuál los hayamos dejado.

#include <conio.h>
#include <graphics.h>
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

int paralelo(), para, contador=2, stop=0, opci, arreglo[8], salida(), datum[8];


unsigned int _far *puntero_a_direccion;
char *letra, *stopo="*", *n0="0", *n1="1", *n2="2", *n3="3", *n4="4", *n5="5", *n6="6",
*n7="7", *n8="8";
long dato=0;
float resultado;
main()
{
paralelo();
outportb(para,0);
contador=0;
while(contador<8)
   {
   arreglo[contador]=0;
   contador++;
   }

while(stop==0)
   {
   clrscr(); ------------------------sirve para limpiar la pantalla
   printf("Presiona una n£mero del 0-7\nPara Salir Presiona *");
   *letra=getch();

   opci=strcmp(letra, n0);
   if(opci==0)
      arreglo[0]=arreglo[0]+1;

   opci=strcmp(letra, n1);
   if(opci==0)
      arreglo[1]=arreglo[1]+1;

1
   opci=strcmp(letra, n2);
   if(opci==0)
      arreglo[2]=arreglo[2]+1;

   opci=strcmp(letra, n3);
   if(opci==0)
      arreglo[3]=arreglo[3]+1;

   opci=strcmp(letra, n4);
   if(opci==0)
      arreglo[4]=arreglo[4]+1;
opci=strcmp(letra, n5);
   if(opci==0)
      arreglo[5]=arreglo[5]+1;

   opci=strcmp(letra, n6);
   if(opci==0)
      arreglo[6]=arreglo[6]+1;

   opci=strcmp(letra, n7);
   if(opci==0)
      arreglo[7]=arreglo[7]+1;

   opci=strcmp(letra,stopo);
   if(opci==0)
      stop=1;

   salida();
   }
}

salida()
{

contador=0;
clrscr();
dato=0;
while(contador<8)
   {
   datum[contador]=((arreglo[contador])%2)*(pow(2,contador));
   dato=dato+datum[contador];
   contador++;
   }
outportb(para,dato);
}

paralelo()
{
   clrscr();
   busqueda:
   puntero_a_direccion=(unsigned int _far *)0x00000408;
   printf("Rastreando Direcci¢n de Puerto Paralelo");
   while(contador<40)
   {
   printf(".");
   contador++;
   delay(30);
   }
   clrscr();
   para=*puntero_a_direccion;
   outportb(para, 0);
}

2
SOFTWARE PARA ENCENDIDO \ APAGADO
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <string.h>

int paralelo(), para, opc=0, contador, estado=0;


unsigned int _far *puntero_a_direccion;
char *uno="1", *dos="2", *tres="3", *letra;

main()
{
paralelo();
outportb(para,0);
while(opc!=3)
{
    clrscr();
    *letra=getch();
    opc=strcmp(letra,uno);
    if(opc==0)
        {
        outportb(para,1);
        estado=1;
        }
    else
        {
        opc=strcmp(letra,dos);
        if(opc==0)
            {
            outportb(para,0);
            estado=0;
            }
        else
            {
            opc=strcmp(letra,tres);
            if(opc==0)
                {
                gotoxy(30,20);
                printf("Aplicaci¢n Finalizada");
                delay(1000);
                opc=3;
                }
            else
                {
                gotoxy(30,20);
                printf("Presiona una opci¢n v*lida");
                delay(1000);
                }
            }
        }
}
outportb(para,0);
}

paralelo()
{
   clrscr();
   busqueda:
   puntero_a_direccion=(unsigned int _far *)0x00000408;
   printf("Rastreando Direcci¢n de Puerto Paralelo");
   while(contador<40)
    {
    printf(".");
    contador++;
    delay(35);
    }
   clrscr();
   para=*puntero_a_direccion;
   outportb(para, 0);
}

3
DISPLAY 7 SEGMENTOS
Para lograr que el programa detecte la letra que hemos presionado sin presionar ENTER, he
utilizado la instrucción getche(), pero para ello hubo la necesidad de declarar una cadena de
caracteres para cada símbolo a mostrar.

char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h", *i="i", *j="j",
*l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra, *stopo="*", *n0="0", *n1="1",
*n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8", *n9="9", *punto= ".";

Ahora si utilizamos el getch y le decimos que lo que presionemos, lo guarde en la variable


letra

*letra=getch();

Ya guardado el símbolo que hemos presionado, se va a buscar cuál es el que hemos


presionado y que es lo que debe de hacer.

Para comparar lo que ha guardad con las variables que declaramos, se utiliza

Strcmp

Esta instrucción, regresa un valor de "0", si las 2 cadenas que estamos comparando son
iguales, entonces, hacemos la comparación y le decimos que el resultado lo guarde en opci,
compara lo que hay guardado en "letra" con la cadena que hemos guardado en cada
variable, en este caso busca si hemos presionado un punto ".", si es así guarda un 0 en opci.

opci=strcmp(letra, punto);

Ahora, lo anterior solo fue una comparación, ahora hay que preguntarle si es cierto que
hemos presionado ese caracter y utilizamos un IF, si lo que presionamos fue un puno,
entonces en opci debe haber un 0 guardado, de lo contrario un 1.

opci=strcmp(letra, punto);
if(opci==0)

Y como si es cierto que presionamos un punto ".", entonces opci=0, ahora que debe de hacer
el programa? pues sacar el dato correspondiente a los bits que deben encenderse para que
en el display se encienda el punto.

En este caso el punto solo necesita que se encienda el bit 8, entonces el dato a sacar,
debemos pensarlo como si el puerto paralelo fuese un número binario, y sería así =
10000000, eso lo onvertimos a decimal y es igual a 128, entonces lo que debemos sacar es
un 128.

opci=strcmp(letra, punto);
if(opci==0)
   outportb(para, 128);

Si no fue el punto "." lo que hemos presionado, entonces opci será igual a 1 y como la
condición no se cumple, se brinca la línea del outport y ahora empieza a checar el siguiente
carácter por ejemplo la "A" y sigue el mismo porcedimiento que con el punto.

Si no se ha presionado ninguna tecla, entonces esta dando vueltas checando una y otra vez
hasta que se presione algo.

Eso siempre y cuando no se presione "*" asterisco, he agregado una condición, para que al
presionarlo, stop tome un valor de 1

opci=strcmp(letra,stopo);
if(opci==0)
   stop=1;

Y cuando ello ocurre, la condición del while principal ya no se cumple y se sale del ciclo
terminando el programa

while(stop==0)

4
El código completo es este:

#include <conio.h>
#include <graphics.h>
#include <dos.h>
#include <stdio.h>
#include <string.h>

int paralelo(), para, contador=2, stop=0, opci;


unsigned int _far *puntero_a_direccion;
char *a= "a", *b= "b", *c= "c", *d="d", *e="e", *f="f", *g="g", *h="h", *i="i", *j="j",
*l="l", *o="o", *p="p", *r="r", *s="s", *u="u", *letra, *stopo="*", *n0="0", *n1="1",
*n2="2", *n3="3", *n4="4", *n5="5", *n6="6", *n7="7", *n8="8", *n9="9", *punto= ".";
main()
{
paralelo();
outportb(para,0);
while(stop==0)
{
   clrscr();
   printf("Presiona una letra");
   *letra=getch();
   opci=strcmp(letra, punto);
   if(opci==0)
      outportb(para, 128);

   opci=strcmp(letra, a);
   if(opci==0)
      outportb(para, 119);

   opci=strcmp(letra, b);
   if(opci==0)
      outportb(para, 124);

   opci=strcmp(letra, c);
   if(opci==0)
      outportb(para, 57);

   opci=strcmp(letra, d);
   if(opci==0)
      outportb(para,94);

   opci=strcmp(letra, e);
   if(opci==0)
      outportb(para, 121);

   opci=strcmp(letra, f);
   if(opci==0)
      outportb(para, 113);

   opci=strcmp(letra, g);
   if(opci==0)
      outportb(para, 111);

   opci=strcmp(letra, h);
   if(opci==0)
      outportb(para, 118);

   opci=strcmp(letra, i);
   if(opci==0)
      outportb(para, 48);

   opci=strcmp(letra, j);
   if(opci==0)
      outportb(para, 30);

   opci=strcmp(letra, l);
   if(opci==0)
      outportb(para, 56);

   opci=strcmp(letra, o);
   if(opci==0)
      outportb(para, 92);

   opci=strcmp(letra, p);

5
   if(opci==0)
      outportb(para, 115);

   opci=strcmp(letra, r);
   if(opci==0)
      outportb(para, 80);

   opci=strcmp(letra, s);
   if(opci==0)
      outportb(para, 109);

   opci=strcmp(letra, u);
   if(opci==0)
      outportb(para, 62);
   /*N£meros*/
   opci=strcmp(letra, n1);
   if(opci==0)
      outportb(para, 6);

   opci=strcmp(letra, n2);
   if(opci==0)
      outportb(para, 91);

   opci=strcmp(letra, n3);
   if(opci==0)
      outportb(para, 79);

   opci=strcmp(letra, n4);
   if(opci==0)
      outportb(para, 102);

   opci=strcmp(letra, n5);
   if(opci==0)
      outportb(para, 109);

   opci=strcmp(letra, n6);
   if(opci==0)
      outportb(para, 125);

   opci=strcmp(letra, n7);
   if(opci==0)
      outportb(para, 7);

   opci=strcmp(letra, n8);
   if(opci==0)
      outportb(para, 127);

   opci=strcmp(letra, n9);
   if(opci==0)
      outportb(para, 103);

   opci=strcmp(letra, n0);
   if(opci==0)
      outportb(para, 63);

   opci=strcmp(letra,stopo);
   if(opci==0)
      stop=1;
   }
outportb(para, 0);
}
paralelo()
{
   clrscr();
   busqueda:
   puntero_a_direccion=(unsigned int _far *)0x00000408;
   printf("Rastreando Direcci¢n de Puerto Paralelo");
   while(contador<40)
   {
   printf(".");
   contador++;
   delay(30);
   }
   clrscr();
   para=*puntero_a_direccion;
   outportb(para, 0);
}

También podría gustarte