SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
Tema 5. Programación en CUPL
           5.1.        Introducción ................................................................................................................1
           5.2.        Ficheros y extensiones importantes...........................................................................2
           5.3.     Notación.......................................................................................................................2
              5.3.1. Nombres de variables ...............................................................................................2
              5.3.2. Números....................................................................................................................3
           5.4.        Esquema de un programa en CUPL. ........................................................................3
           5.5.        Encabezamiento ..........................................................................................................3
           5.6.     Declaración de pines ...................................................................................................4
              5.6.1. Comandos de preprocesado ......................................................................................4
           5.7.     Cuerpo principal del programa.................................................................................5
              5.7.1. Ecuaciones combinacionales ....................................................................................5
              5.7.2. Tablas de verdad .......................................................................................................6
              5.7.3. Máquinas de estado...................................................................................................6
           5.8.     Ejemplos ......................................................................................................................7
              5.8.1. Control de volumen. .................................................................................................7
              5.8.2. Control de barrera de aparcamiento........................................................................10




    5.1.            Introducción
        Con este tema se cubre lo relativo a la programación de dispositivos de baja capacidad,
centrándonos en la PAL22V10 como dispositivo de referencia. Se usará el lenguaje CUPL, y en
concreto el compilador gratuito suministrado por Atmel, llamado AWINCUPL.
        Este tema está basado en el Tutorial que sobre CUPL desarrollara en su día Brian War-
neke, encontrado a través de Internet. Sirvan estas líneas como agradecimiento.
         El lenguaje CUPL es un compilador universal para sistemas lógicos programables, y se-
rá el utilizado para programar dispositivos lógicos de baja capacidad, principalmente pal’s. En
concreto, en todos los ejemplos nos centraremos en la PAL22V10, que será sobre la que versarán
las prácticas de la asignatura.
Tema 5. Programación en CUPL. 2




    5.2.               Ficheros y extensiones importantes.
        El lenguaje de programación CUPL se basa en ficheros con la extensión PLD, que con-
tienen la definición del programa que se desea que ejecute el dispositivo programable. Cuando
son abiertos, desde el programa WinCUPL, como “proyecto”, se abrirán además los ficheros de
simulación y compilación que tengan su mismo nombre.
        Si la compilación se produce con éxito, y si se ha seleccionado un dispositivo físico con-
creto (distinto de virtual), entonces se generarán una serie de ficheros, dependiendo de las op-
ciones de compilación elegidas. De entre ellos, destacamos:
        *Fichero de mapa de fusibles: Con extensión .JED, incluye la información necesaria para
que el programador de dispositivos lógicos pueda programar la PLD correspondiente. La in-
formación contenida, en ASCII, representa la matriz de fusibles con lo que resulta, de alguna
manera, legible.
       *Fichero de documentación: Con extensión .DOC incluye, según las opciones que
hayamos elegido, información de las ecuaciones expandidas y minimizadas, el número de tér-
minos producto usado para cada variable, el mapa de fusibles, e incluso el pin-out del dispositi-
vo una vez programado.
        En caso de simular el circuito, se generarán los ficheros con extensión .SI, en el que se
guardan los estímulos definidos, y el fichero .SO, en el que se almacena el resultado de la simu-
lación.



    5.3.               Notación
           5.3.1. Nombres de variables
        Para programar el funcionamiento requerido del sistema, tendremos que definir una se-
rie de ecuaciones que manejarán las señales de entrada y salida. Para ello, tanto esas señales
como las intermedias que quiera definir para simplificar la notación, deberán tener nombres
válidos de variables. El lenguaje de programación tiene una serie de nombres reservados, que
no pueden ser usados como nombres de variables, como son:

APPEND            ASSEMBLY ASSY            COMPANY    CONDITION
DATE              DEFAULT       DESIGNER   DEVICE     ELSE
FIELD             FLD           FORMAT     FUNCTION   FUSE
GROUP             IF            JUMP       LOC        LOCATION
MACRO             MIN           NAME       NODE       OUT
PARTNO            PIN           PINNNODE   PRESENT    REV
REVISION          SEQUENCE SEQUENCED SEQUENCEJK SEQUENCERS
SEQUENCET TABLE
           Igualmente, hay una serie de símbolos que no podrán formar parte de nombres de va-
riables:

& # (         )        -    @
* + [         ]        /    $
: . ..        /*       */   ^
; , !         '        =
Tema 5. Programación en CUPL. 3



        Teniendo esto en cuenta, cualquier otro nombre es válido. Como ejemplos de nombres
válidos de variables podrían ser:
        ENTRADA_1. De esta manera defino nombres. Pueden contener números y subrayados,
pero no guiones ni espacios.
        Ent0..3 definirá un conjunto de variables que se nombrarán correlativamente Ent0, Ent1,
Ent2 y Ent3. Siempre tiene que empezar por 0.
       [Ent0,Ent1,Ent2, Ent3] esta es otra forma de definir lo mismo que antes, pero aquí sí que
podríamos agrupar nombres o índices no correlativos: [sube, baja, para, reset]


          5.3.2. Números
       Cuando queramos asignar un valor a una variable, o establecer una comparación, po-
demos usar números expresados en binario, decimal, hexadecimal y octal. Se diferenciarán en
un primer carácter, entre comillas simples:

Número           Base          Valor decimal
'b'0             Binario       0
'b'1101          Binario       13
'o'663           Octal         435
'D' 92           decimal       92
'h' BA           hexadecimal   186

'b'[001..100]    binario       rango de 1 a 4




       5.4.       Esquema de un programa en CUPL.
        Un fichero .PLD, que contiene un programa en CUPL, tiene siempre la misma estructu-
ra, compuesto de un encabezamiento, en el que se da información acerca del diseño, un bloque
de definición de variables, en el que se nombran los pines y se definen conjuntos de variables, y
el bloque central de definición de funcionamiento.



       5.5.       Encabezamiento
       El encabezamiento sigue una estructura totalmente estandar. De todas las líneas del
mismo, las dos únicas que tienen un efecto real sobre el diseño son la primera y la última.
        En la primera, name, se especifica el nombre del diseño, y será el nombre que se le dé al
fichero de salida *.JED que se produzca. Debe ser un nombre válido de fichero, por tanto.
         En la última línea, Device, se introduce el nombre del dispositivo que se va a usar por de-
fecto. Esta asignación se puede, en teoría, sobreseer en el momento de la compilación indicando
otro dispositivo. En la práctica, como el programa presenta un problema justamente en la elec-
ción de dispositivos, es necesario fijar en esta línea el dispositivo concreto que vamos a usar. En
nuestro caso, utilizaremos casi siempre el dispositivo PAL22V10, que se especifica como:
          Device p22v10
        Aunque también podemos hacer un primer diseño sin restricciones de tamaño, usando
para ello un dispositivo virtual, que especificaremos como:
          Device virtual
Tema 5. Programación en CUPL. 4



        Esto tiene la ventaja de que evitaremos quedarnos sin términos para sintetizar ecuacio-
nes, y nos permite comprobar a posteriori en el archivo .DOC qué salidas requieren más térmi-
nos productos, para asignar convenientemente los pines.
        Un ejemplo de cabecera sería como sigue:
Name         prueba3 ;
PartNo       00 ;
Date         30/10/2003 ;
Revision     01 ;
Designer     Engineer ;
Company      Atmel ;
Assembly     None ;
Location      ;
Device       p22v10 ;



    5.6.         Declaración de pines
        Tras la cabecera, se incluye la sección en la que se nombran los diferentes pines de E/S
que se vayan a usar. Para ello, la sintaxis es:
        PIN <nº> = <nombre> ;
        Se puede definir un nombre común para una serie de pines. Igualmente se puede indi-
car la polaridad de la señal, esto es si se activa a nivel alto o bajo. A todos los efectos, la señal se
cambia de sentido lógico, y operaríamos con ella negada. Algunos ejemplos serían:
        Pin 1 = entrada1;
        Pin [2..4] = [Q0..Q2];
        Pin 10 = !Reset;
        En esta sección también se definirán las variables de más de un bit que posteriormente
se usarán en el código. Estas variables, llamadas FIELD, se usarán para definir tablas de verdad
y máquinas de estado, entre otras cosas. Para definir un Field, simplemente tendré que darle un
nombre y asignarle variables:
        FIELD estado = [Q0..Q2];
        FIELD entradas = [entrada1, entrada2, entrada3];
        FIELD salidas = [sube, baja, paro, marcha];




        5.6.1. Comandos de preprocesado
        El compilador tiene una serie de comandos de preprocesado para ayudar a la confec-
ción de los programas. Así, puedo definir etiquetas, que me servirán para poder usarlas dentro
del programa, de la misma manera que en lenguaje C estándar:
        $define DIR_BASE ‘h’2000
        $define SI ‘b’1
        Estas líneas no acaban en punto y coma. Otro tipo de comandos de preprocesado son
los bucles REPEAT. Con estos bucles puedo escribir de forma cómoda una serie de líneas que
de otra manera sería más tedioso. Se define un índice, con un rango de variación, y posterior-
mente se incluyen líneas de código que se expandirán las veces que haga falta para tomar todos
los valores especificados del índice, como se ve en el ejemplo:
Tema 5. Programación en CUPL. 5


    $repeat i = [0..7]
    $define point{i} 'b'{i}
    $repend
        Esto sería lo mismo que poner:


    $define   point0   'b'000
    $define   point1   'b'001
    $define   point2   'b'010
    $define   point3   'b'011
    $define   point4   'b'100
    $define   point5   'b'101
    $define   point6   'b'110
    $define   point7   'b'111
         Dentro de los bucles REPEAT, se pueden usar operaciones aritméticas para definir va-
lores. Por ejemplo, para definir un contador ascendente-descendente, en cada estado tendré que
ir al anterior o al siguiente, lo que puedo expresar muy cómodamente así:
$repeat i=[1..14]
      Present 'D'{i}
            if SUBE next 'D'{i+1};
            if BAJA next 'D'{i-1};
            default next 'D'{i};
$repend




     5.7.         Cuerpo principal del programa
       En esta parte del fichero será en la que, propiamente, codificaré el funcionamiento que
deseo de mi sistema. Aquí podré incluir tanto ecuaciones lógicas que definan sistemas combi-
nacionales o secuenciales, como definiciones de máquinas de estados complejas.


        5.7.1. Ecuaciones combinacionales
        Para definir un circuito combinacional, tan solo habrá que escribir las ecuaciones lógicas
que lo forman. Ello se hará usando los operadores lógicos básicos, pudiendo usar paréntesis, o
dividir una ecuación en varias partes, por medio del comando APPEND.

Operador Ejemplo Función lógica
!           !A       NOT
&           A&B      AND
#           A#B      OR
$           A$B      XOR


         Como ejemplo de ecuaciones lógicas, podemos ver las siguientes, que reproducen la
codificación del nivel de llenado de un depósito(Z2-Z1) en función de los sensores (S2-S1-S0)
que estén activos, así como la generación de una señal de error (Z3) en caso de combinación
ilógica (por ejemplo, 110)
        Z1 = s1 & s2;
        Z2 = (!s0 & !s1 & s2) # (s0 & s1 & s2);
        Z3 = !s0 & s1 # s2 & !s1;

         Cuando las ecuaciones son muy complejas, o incluyen muchos términos (en el caso de
los bits centrales de una PAL22V10 pueden ser hasta 16 sumandos), se puede hacer uso de la
Tema 5. Programación en CUPL. 6



sentencia APPEND, que me permite ir añadiendo sumandos a una determinada ecuación. Así,
la segunda ecuación la puedo escribir como:
        APPEND Z2 = (!s0 & !s1 & s2);
        APPEND Z2 = (s0 & s1 & s2);

        5.7.2. Tablas de verdad
         Otra forma más sencilla, a veces, de establecer ecuaciones lógicas es definir directamen-
te la tabla de verdad que relaciona los valores lógicos a la entrada y a la salida del circuito com-
binacional que se quiere diseñar. Para ello, deberemos definir previamente, con la sentencia
FIELD, los dos grupos de variables (entradas y salidas) en le orden en que va a ser definida la
tabla.
         En el siguiente ejemplo, vemos cómo se definiría el circuito anteriormente descrito, pero
utilizando tablas. Primero, con las dos sentencias FIELD defino las entradas (ins) y las salidas
(outs), para posteriormente ir especificando los valores de las salidas en función de las entradas:

FIELD ins=[s2, s1, s0];
FIELD outs=[Z3, Z2, Z1];

TABLE ins => outs {
    'b'000 => 'b'000;
    'b'001 => 'b'001;
    'b'010 => 'b'100;
    'b'011 => 'b'010;
    'b'100 => 'b'100;
    'b'101 => 'b'100;
    'b'110 => 'b'100;
    'b'111 => 'b'011;}


         El compilador WinCUPL incluye además una herramienta para rellenar las tablas de
manera semi-automática, generando todas las combinaciones de entrada, y permitiendo cam-
biar los valores con un simple click de raton.


        5.7.3. Máquinas de estado
         Sin duda, una de las aplicaciones fundamentales de los dispositivos programables es la
realización de máquinas de estado, bien sean máquinas explícitas (con sus entradas, estados y
salidas) o implícitas (como puede ser un contador reversible).
        Para diseñar máquinas de estado, necesitaremos previamente definir las señales que
formarán mi “estado”, los biestables que vaya a utilizar. Esto lo haremos con la sentencia
FIELD, de manera similar a lo ya visto, asignando en este caso pines de salida que tengan regis-
tro asociado, obviamente. Resulta cómodo, aunque no es obligatorio, definir los nombres de los
estados asignando a cada nombre un valor binario del estado, usando para ello la orden de
preprocesado $DEFINE.
         Tras esto, definiremos la Tabla de transición de estados, simplemente escribiendo las dis-
tintas transiciones que pueden ocurrir desde un estado dado. Para ello, puedo definir previa-
mente una serie de condiciones de transición, para simplificar la notación, que serán posterior-
mente simplificadas. También será frecuente el uso de transiciones por defecto, esto es, si no se
cumple ninguna de las condiciones especificadas previamente. Veamos esto con un ejemplo:
        diseñamos una máquina de estado para el control de una barrera de un garaje. Tiene dos senso-
        res, y debe empezar a abrir la barrera cuando detecta un coche en el sensor 1, y mantenerla arriba
        hasta que pase por ambos y finalmente sólo toque al segundo sensor, momento en el que empeza-
        rá a bajar la barrera. Cuando el coche acabe de pasar, se dará un pulso de un ciclo de reloj para
        “contar” el coche.
Tema 5. Programación en CUPL. 7


field estado=[Q1..0] ; /* Estado: bits Q1 y Q0*/
$define S0 'b'00        /* Defines para asignar nombre*/
$define S1 'b'01        /* a los estados. */
$define S2 'b'10
$define S3 'b'11


entrando=In1&(!In2)&Res_in;              /* Variables intermedias */
debajo=In1&In2&Res_in;                   /* no son necesarias pero */
saliendo=!In1&In2;                       /* ayudan a definir las transiciones*/
nada=!(In1#In2)&Res_in;
algo=(In1#In2);


sequenceD estado {      /*Comienzo de una M.Est: SequenceD <nombre> {*/
                  /* sintaxis de las transiciones: */
                  /* Present <estado> if <condicion> next <estado>;*/
present S0   if entrando next S1;
             default next S0; /* si no se da la condición: quédate*/
present S1   if nada next S0;
             if debajo next S2;
             if !Res_in next S0;
             if entrando next S1;
present S2   if nada next S3;
             if algo next S2;
             if !Res_in next S0;
present S3   next S0    ; /* Estado inestable: ve a S0 */
}


Up=!Q1&Q0;              /*Salidas de la M.Est. como combinacion del estado*/
Down=!Q1&!Q0;
Count=Q1&Q0;

        Si quisiéramos definir una máquina de Mealy, deberíamos incluir en las diferentes tran-
siciones (en todas las líneas if), la especificación de la salida deseada, usando la orden OUT,
seguida de las señales que se activarán en ese estado o transición:
present S3        next S0 OUT Count           ; /* Estado inestable: ve a S0 */




    5.8.        Ejemplos
       A continuación, se incluyen una serie de ejemplos básicos de programas completos
hechos con WINCUPL. Los propios comentarios del programa sirven a modo de explicación de
los mismos. Se incluyen asimismo algunas simulaciones.


        5.8.1. Control de volumen.
        Se desea controlar el volumen de un equipo, para lo que se dispone de un botón de UP,
otro de DOWN, y uno de MUTE. El sistema deberá filtrar generando señales de un sólo pulso
cada vez que se pulse Up o DOWN, siendo estas señales las que hagan que crezca o decrezca un
determinado registro (contador) de 4 bits. La señal MUTE hará que el sistema entre o salga del
estado de mute, que se define como todas las salidas a “0”. Tras salir de él debe recordar el últi-
mo valor asignado.

Name        vol ;
PartNo      00 ;
Date        20/10/2004 ;
Tema 5. Programación en CUPL. 8


Revision 01 ;
Designer MAPE ;
Company GTE ;
Assembly None ;
Location ;
Device   p22v10 ;
/************************************************************/
/*    Sistema de control de volumen. Incluye:              */
/*    Maquina de estado para filtrar entrada Up            */
/*    Maquina de estado para filtrar entrada Dn            */
/*    Maquina de estado para convertir Mute en conmutador */
/*    Contador reversible de 4 bits para guardar estado    */
/*    El Mute se realiza con la opcion .OE                 */
/************************************************************/
/* *************** INPUT PINS *********************/
PIN 1 = Clk       ; /* Reloj*/
PIN 2 = Up        ; /* Sube */
PIN 3 = Dn        ; /* Baja */
PIN 4 = Mute      ; /* Mute */
PIN 5 = Reset     ; /* Reset act. a nivel bajo */

/* *************** OUTPUT PINS *********************/
PIN 14    = Q0 ; /* Contador de 4 bits. LSB */
PIN 15    = Q1 ; /* Contador de 4 bits.       */
PIN 16    = Q2 ; /* Contador de 4 bits.       */
PIN 17    = Q3 ; /* Contador de 4 bits. MSB */
PIN 18 = Q0U ; /* M.estados up       */
PIN 19 = Q1U ; /* M.estados up       */
PIN 20 = Q0D ; /* M.estados down */
PIN 21 = Q1D ; /* M.estados down */
PIN 22 = Q0M ; /* M.estados mute */
PIN 23 = Q1M ; /* M.estados mute */

FIELD   estup = [Q1U, Q0U];
FIELD   estdn = [Q1D, Q0D];
FIELD   estmt = [Q1M, Q0M];
FIELD   Cont = [Q3, Q2, Q1, Q0];

sequence estup {        /* maquina UP: cada vez que se activa */
      Present 'b'00     /* la entrada, se da un solo pulso. */
            if Up & Reset Next 'b'01;
            if !Reset Next 'b'00;
            default next 'b'00;
      Present 'b'01
            if Up & Reset Next 'b'10;
            if !Reset Next 'b'00;
            default next 'b'10;
      Present 'b'10
            if !Up & Reset Next 'b'00;
            if !Reset Next 'b'00;
            default next 'b'10;
            }     /* la salida es Q0U*/

sequence estdn {        /* maquina DOWN: cada vez que se activa */
      Present 'b'00     /* la entrada, se da un solo pulso. */
            if Dn & Reset Next 'b'01;
            if !Reset Next 'b'00;
            default next 'b'00;
      Present 'b'01
            if Dn & Reset Next 'b'10;
            if !Reset Next 'b'00;
            default next 'b'10;
      Present 'b'10
Tema 5. Programación en CUPL. 9


           if !Dn & Reset Next 'b'00;
           if !Reset Next 'b'00;
           default next 'b'10;
           }/* la salida es Q0D*/

sequence estmt {        /* Maquina mute: cada vez que se activa*/
      Present 'b'00     /* la entrada, cambia de estado: se apaga */
            if Mute & Reset Next 'b'01; /* o se enciende */
            if !Reset Next 'b'00;   /* Codificado: 00, 01, 11, 10*/
            default next 'b'00;     /* con lo que la salida es Q1*/
      Present 'b'01
            if !Mute & Reset Next 'b'11;
            if !Reset Next 'b'00;
            default next 'b'01;
      Present 'b'11
            if Mute & Reset Next 'b'10;
            if !Reset Next 'b'00;
            default next 'b'11;
      Present 'b'10
            if !Mute & Reset Next 'b'00;
            if !Reset Next 'b'00;
            default next 'b'11;
            }

Sequence Cont{         /* contador 4 bits reversible */

      Present 'D'0
if Q0U & !Q0D & Reset next 'D'1; /* Q0U: salida maquina up (bit 0)*/
if Q0D & Reset next 'D'15;    /* Q0D: salida maquina down (bit 0)*/
default next 'D'0;

$repeat i=[1..14]
      Present 'D'{i}
            if Q0U & !Q0D & Reset next 'D'{i+1};
            if Q0D & Reset next 'D'{i-1};
            default next 'D'{i};
$repend
      Present 'D'15
            if Q0U & !Q0D & Reset next 'D'0;
            if Q0D & Reset next 'D'14;
            default next 'D'0;
}

Q1.oe=!Q1M; /*activacion del MUTE*/
Q2.oe=!Q1M;
Q3.oe=!Q1M;
Q0.oe=!Q1M;
Tema 5. Programación en CUPL. 10




       5.8.2. Control de barrera de aparcamiento
        Este ejemplo ha sido comentado previamente. Aquí se desarrolla íntegro el programa
de control de la barrera, y se incluye finalmente unas gráficas de simulación:
Name           Prueba2       ;
Partno         pru2-1        ;
Revision       1             ;
Date           27/10/2003    ;
Designer       mape          ;
Company        GTE           ;
Assembly       1             ;
Location       aqui          ;
Device         p22v10        ;
Format         c:            ;

/******************************************************************/
/* Programa de las barreras, en PAL22V10                         */
/******************************************************************/

/**   Inputs **/
Pin   1 = clk ;
Pin   2 = In1 ;
Pin   3 = In2 ;
Pin   4 = Res_in;

/**   Outputs **/
Pin   14 = Up;
Pin   15 = Down;
Pin   16 = Count;

/** Declarations and Intermediate Variables              **/
Pin 17 = Q0 ;
Pin 18 = Q1 ;

/** Logic Equations **/

field estado=[Q1..0] ;
$define S0 'b'00
$define S1 'b'01
$define S2 'b'10
$define S3 'b'11


entrando=In1&(!In2)&Res_in;
debajo=In1&In2&Res_in;
Tema 5. Programación en CUPL. 11


saliendo=!In1&In2;
nada=!(In1#In2)&Res_in;
algo=(In1#In2);


sequenceD estado {
present S0   if entrando next S1;
             if !entrando next S0;
present S1   if nada next S0;
             if debajo next S2;
             if !Res_in next S0;
             if entrando next S1;
present S2   if nada next S3;
             if algo next S2;
             if !Res_in next S0;
present S3   next S0    ;
}

estado.oe = 'b'11;


Up=!Q1&Q0;
Down=!Q1&!Q0;
Count=Q1&Q0;

Weitere ähnliche Inhalte

Was ist angesagt?

Diferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuencialesDiferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuencialesWilfred Garcia Diomeda
 
3 2 circuitos-disparo
3 2 circuitos-disparo3 2 circuitos-disparo
3 2 circuitos-disparoAxtridf Gs
 
Presentacion 2 - Maquinas de Estado Finito
Presentacion 2 - Maquinas de Estado FinitoPresentacion 2 - Maquinas de Estado Finito
Presentacion 2 - Maquinas de Estado Finitojunito86
 
Set de 35 instrucciones para pic16f877A programación en assembler
Set de 35 instrucciones para pic16f877A programación en assembler Set de 35 instrucciones para pic16f877A programación en assembler
Set de 35 instrucciones para pic16f877A programación en assembler Anllel Cardenas Yllanes
 
Latches y flip flops
Latches y flip flopsLatches y flip flops
Latches y flip flopsJimmy Osores
 
Señales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABSeñales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABJose Agustin Estrada
 
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,Miguel Brunings
 
151953932 laboratorio-de-codificador-y-decodificador
151953932 laboratorio-de-codificador-y-decodificador151953932 laboratorio-de-codificador-y-decodificador
151953932 laboratorio-de-codificador-y-decodificadorEver Omar Nolasco
 
Amplificadores operacionales con funciones de transferencia
Amplificadores operacionales con funciones de transferenciaAmplificadores operacionales con funciones de transferencia
Amplificadores operacionales con funciones de transferenciaMartín E
 
Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Israel Magaña
 
Fuente de alimentación simétrica regulada y variable
Fuente de alimentación simétrica regulada y variableFuente de alimentación simétrica regulada y variable
Fuente de alimentación simétrica regulada y variableDulce
 
Circuitos secuenciales sincronos y asincronos
Circuitos secuenciales sincronos y asincronosCircuitos secuenciales sincronos y asincronos
Circuitos secuenciales sincronos y asincronosAlexa Ramirez
 
L09 sumador restador-binariode8bits
L09 sumador restador-binariode8bitsL09 sumador restador-binariode8bits
L09 sumador restador-binariode8bitsChristian Acuña
 

Was ist angesagt? (20)

Diferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuencialesDiferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuenciales
 
3 2 circuitos-disparo
3 2 circuitos-disparo3 2 circuitos-disparo
3 2 circuitos-disparo
 
Sumador\Restador
Sumador\RestadorSumador\Restador
Sumador\Restador
 
Presentacion 2 - Maquinas de Estado Finito
Presentacion 2 - Maquinas de Estado FinitoPresentacion 2 - Maquinas de Estado Finito
Presentacion 2 - Maquinas de Estado Finito
 
Amplificadores Multietapa
Amplificadores MultietapaAmplificadores Multietapa
Amplificadores Multietapa
 
Set de 35 instrucciones para pic16f877A programación en assembler
Set de 35 instrucciones para pic16f877A programación en assembler Set de 35 instrucciones para pic16f877A programación en assembler
Set de 35 instrucciones para pic16f877A programación en assembler
 
Registro status PIC16F84A
Registro status PIC16F84ARegistro status PIC16F84A
Registro status PIC16F84A
 
Latches y flip flops
Latches y flip flopsLatches y flip flops
Latches y flip flops
 
Flip flop
Flip flopFlip flop
Flip flop
 
Señales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLABSeñales de tiempo continuo y discreto MATLAB
Señales de tiempo continuo y discreto MATLAB
 
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
Diferentes tipos de flip flops (jk, sr, d, t) sus tablas de verdad,
 
Limitadores
LimitadoresLimitadores
Limitadores
 
TTL-CMOS
TTL-CMOSTTL-CMOS
TTL-CMOS
 
151953932 laboratorio-de-codificador-y-decodificador
151953932 laboratorio-de-codificador-y-decodificador151953932 laboratorio-de-codificador-y-decodificador
151953932 laboratorio-de-codificador-y-decodificador
 
Amplificadores operacionales con funciones de transferencia
Amplificadores operacionales con funciones de transferenciaAmplificadores operacionales con funciones de transferencia
Amplificadores operacionales con funciones de transferencia
 
Restador completo
Restador completoRestador completo
Restador completo
 
Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555Pulsos de reloj de Circuito integrado 555
Pulsos de reloj de Circuito integrado 555
 
Fuente de alimentación simétrica regulada y variable
Fuente de alimentación simétrica regulada y variableFuente de alimentación simétrica regulada y variable
Fuente de alimentación simétrica regulada y variable
 
Circuitos secuenciales sincronos y asincronos
Circuitos secuenciales sincronos y asincronosCircuitos secuenciales sincronos y asincronos
Circuitos secuenciales sincronos y asincronos
 
L09 sumador restador-binariode8bits
L09 sumador restador-binariode8bitsL09 sumador restador-binariode8bits
L09 sumador restador-binariode8bits
 

Andere mochten auch

Gal 22v10 Descripcion
Gal 22v10 DescripcionGal 22v10 Descripcion
Gal 22v10 DescripcionDiego Muela
 
Circuitos Logicos Combinacionales
Circuitos Logicos CombinacionalesCircuitos Logicos Combinacionales
Circuitos Logicos Combinacionalesguest1e528d
 
Algoritmos
AlgoritmosAlgoritmos
AlgoritmosCarlos
 
Compuertas y circuitos logicos
Compuertas y circuitos logicosCompuertas y circuitos logicos
Compuertas y circuitos logicosChristian Gimenez
 
Programmable logic device (PLD)
Programmable logic device (PLD)Programmable logic device (PLD)
Programmable logic device (PLD)Sɐɐp ɐɥɯǝp
 
PLD’s (programmable logic device)
PLD’s (programmable logic device)PLD’s (programmable logic device)
PLD’s (programmable logic device)Carlos Solano
 
Como elaborar diagrama de estado
Como elaborar diagrama de estadoComo elaborar diagrama de estado
Como elaborar diagrama de estadojesus369
 
Método de mapa de karnaugh
Método de mapa de karnaughMétodo de mapa de karnaugh
Método de mapa de karnaughwrithe
 
Conceptos de redes e internet
Conceptos de redes e internetConceptos de redes e internet
Conceptos de redes e internetliliarosaortiz
 
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...Edi B Mulyana
 
Elementos de la comunicacion
Elementos de la comunicacionElementos de la comunicacion
Elementos de la comunicacionlmvqz
 
Los 20 conceptos basico de redes e internet
Los 20 conceptos basico de redes e internetLos 20 conceptos basico de redes e internet
Los 20 conceptos basico de redes e internetjenniferbarrero
 

Andere mochten auch (16)

Gal 22v10 Descripcion
Gal 22v10 DescripcionGal 22v10 Descripcion
Gal 22v10 Descripcion
 
Circuitos Logicos Combinacionales
Circuitos Logicos CombinacionalesCircuitos Logicos Combinacionales
Circuitos Logicos Combinacionales
 
Gal
GalGal
Gal
 
Pld
PldPld
Pld
 
Circuitos combinacionales
Circuitos combinacionalesCircuitos combinacionales
Circuitos combinacionales
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Compuertas y circuitos logicos
Compuertas y circuitos logicosCompuertas y circuitos logicos
Compuertas y circuitos logicos
 
Programmable logic device (PLD)
Programmable logic device (PLD)Programmable logic device (PLD)
Programmable logic device (PLD)
 
PLD’s (programmable logic device)
PLD’s (programmable logic device)PLD’s (programmable logic device)
PLD’s (programmable logic device)
 
Como elaborar diagrama de estado
Como elaborar diagrama de estadoComo elaborar diagrama de estado
Como elaborar diagrama de estado
 
Método de mapa de karnaugh
Método de mapa de karnaughMétodo de mapa de karnaugh
Método de mapa de karnaugh
 
Conceptos de redes e internet
Conceptos de redes e internetConceptos de redes e internet
Conceptos de redes e internet
 
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...
RPP Kelas 1. Kurikulum 2013. Tema : Keluargaku. Sub Tema : Kebersamaan dalam ...
 
PLDs
PLDsPLDs
PLDs
 
Elementos de la comunicacion
Elementos de la comunicacionElementos de la comunicacion
Elementos de la comunicacion
 
Los 20 conceptos basico de redes e internet
Los 20 conceptos basico de redes e internetLos 20 conceptos basico de redes e internet
Los 20 conceptos basico de redes e internet
 

Ähnlich wie Programacion en WinCupl

Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Diego Paúl Cuenca Quezada
 
Guia3 emu8086 Arquitectura de computadoras
Guia3 emu8086 Arquitectura de computadorasGuia3 emu8086 Arquitectura de computadoras
Guia3 emu8086 Arquitectura de computadorasJohan Silva Cueva
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 finalIrving Che
 
Bases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sqlBases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sqlFreddyRomana
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)Darwin Durand
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensambladorgbermeo
 
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_ireneromaweb
 
Curso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje CCurso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje Cguestbc0748
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regularpayasito1980
 
Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Samuel Ballén
 
Mprogintc++ prog(3)
Mprogintc++ prog(3)Mprogintc++ prog(3)
Mprogintc++ prog(3)desi2907
 

Ähnlich wie Programacion en WinCupl (20)

Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
Analizador Léxico y Sintáctico para Compilador que Invierte Cadenas utilizand...
 
Guia3 emu8086 Arquitectura de computadoras
Guia3 emu8086 Arquitectura de computadorasGuia3 emu8086 Arquitectura de computadoras
Guia3 emu8086 Arquitectura de computadoras
 
Informe tecnico u4 final
Informe tecnico u4 finalInforme tecnico u4 final
Informe tecnico u4 final
 
Bases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sqlBases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sql
 
Awk
AwkAwk
Awk
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
 
Lenguaje sql
Lenguaje sqlLenguaje sql
Lenguaje sql
 
Lenguaje c 2_neo
Lenguaje c 2_neoLenguaje c 2_neo
Lenguaje c 2_neo
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Conexion wi fi_con_un_modulo_esp8266
Conexion wi fi_con_un_modulo_esp8266Conexion wi fi_con_un_modulo_esp8266
Conexion wi fi_con_un_modulo_esp8266
 
Curso de pl sql básico
Curso de pl sql básicoCurso de pl sql básico
Curso de pl sql básico
 
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_
Curso de iniciaci_n_al_lenguaje_c_www.emugamesworld.com_
 
Curso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje CCurso De IniciacióN Al Lenguaje C
Curso De IniciacióN Al Lenguaje C
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regular
 
Mprogintc++
Mprogintc++Mprogintc++
Mprogintc++
 
Apuntes de progra c++
Apuntes de progra c++Apuntes de progra c++
Apuntes de progra c++
 
Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++
 
Mprogintc++ prog(3)
Mprogintc++ prog(3)Mprogintc++ prog(3)
Mprogintc++ prog(3)
 

Kürzlich hochgeladen

Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesYanirisBarcelDelaHoz
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdfValeriaCorrea29
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxlupitavic
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 

Kürzlich hochgeladen (20)

Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 

Programacion en WinCupl

  • 1. Tema 5. Programación en CUPL 5.1. Introducción ................................................................................................................1 5.2. Ficheros y extensiones importantes...........................................................................2 5.3. Notación.......................................................................................................................2 5.3.1. Nombres de variables ...............................................................................................2 5.3.2. Números....................................................................................................................3 5.4. Esquema de un programa en CUPL. ........................................................................3 5.5. Encabezamiento ..........................................................................................................3 5.6. Declaración de pines ...................................................................................................4 5.6.1. Comandos de preprocesado ......................................................................................4 5.7. Cuerpo principal del programa.................................................................................5 5.7.1. Ecuaciones combinacionales ....................................................................................5 5.7.2. Tablas de verdad .......................................................................................................6 5.7.3. Máquinas de estado...................................................................................................6 5.8. Ejemplos ......................................................................................................................7 5.8.1. Control de volumen. .................................................................................................7 5.8.2. Control de barrera de aparcamiento........................................................................10 5.1. Introducción Con este tema se cubre lo relativo a la programación de dispositivos de baja capacidad, centrándonos en la PAL22V10 como dispositivo de referencia. Se usará el lenguaje CUPL, y en concreto el compilador gratuito suministrado por Atmel, llamado AWINCUPL. Este tema está basado en el Tutorial que sobre CUPL desarrollara en su día Brian War- neke, encontrado a través de Internet. Sirvan estas líneas como agradecimiento. El lenguaje CUPL es un compilador universal para sistemas lógicos programables, y se- rá el utilizado para programar dispositivos lógicos de baja capacidad, principalmente pal’s. En concreto, en todos los ejemplos nos centraremos en la PAL22V10, que será sobre la que versarán las prácticas de la asignatura.
  • 2. Tema 5. Programación en CUPL. 2 5.2. Ficheros y extensiones importantes. El lenguaje de programación CUPL se basa en ficheros con la extensión PLD, que con- tienen la definición del programa que se desea que ejecute el dispositivo programable. Cuando son abiertos, desde el programa WinCUPL, como “proyecto”, se abrirán además los ficheros de simulación y compilación que tengan su mismo nombre. Si la compilación se produce con éxito, y si se ha seleccionado un dispositivo físico con- creto (distinto de virtual), entonces se generarán una serie de ficheros, dependiendo de las op- ciones de compilación elegidas. De entre ellos, destacamos: *Fichero de mapa de fusibles: Con extensión .JED, incluye la información necesaria para que el programador de dispositivos lógicos pueda programar la PLD correspondiente. La in- formación contenida, en ASCII, representa la matriz de fusibles con lo que resulta, de alguna manera, legible. *Fichero de documentación: Con extensión .DOC incluye, según las opciones que hayamos elegido, información de las ecuaciones expandidas y minimizadas, el número de tér- minos producto usado para cada variable, el mapa de fusibles, e incluso el pin-out del dispositi- vo una vez programado. En caso de simular el circuito, se generarán los ficheros con extensión .SI, en el que se guardan los estímulos definidos, y el fichero .SO, en el que se almacena el resultado de la simu- lación. 5.3. Notación 5.3.1. Nombres de variables Para programar el funcionamiento requerido del sistema, tendremos que definir una se- rie de ecuaciones que manejarán las señales de entrada y salida. Para ello, tanto esas señales como las intermedias que quiera definir para simplificar la notación, deberán tener nombres válidos de variables. El lenguaje de programación tiene una serie de nombres reservados, que no pueden ser usados como nombres de variables, como son: APPEND ASSEMBLY ASSY COMPANY CONDITION DATE DEFAULT DESIGNER DEVICE ELSE FIELD FLD FORMAT FUNCTION FUSE GROUP IF JUMP LOC LOCATION MACRO MIN NAME NODE OUT PARTNO PIN PINNNODE PRESENT REV REVISION SEQUENCE SEQUENCED SEQUENCEJK SEQUENCERS SEQUENCET TABLE Igualmente, hay una serie de símbolos que no podrán formar parte de nombres de va- riables: & # ( ) - @ * + [ ] / $ : . .. /* */ ^ ; , ! ' =
  • 3. Tema 5. Programación en CUPL. 3 Teniendo esto en cuenta, cualquier otro nombre es válido. Como ejemplos de nombres válidos de variables podrían ser: ENTRADA_1. De esta manera defino nombres. Pueden contener números y subrayados, pero no guiones ni espacios. Ent0..3 definirá un conjunto de variables que se nombrarán correlativamente Ent0, Ent1, Ent2 y Ent3. Siempre tiene que empezar por 0. [Ent0,Ent1,Ent2, Ent3] esta es otra forma de definir lo mismo que antes, pero aquí sí que podríamos agrupar nombres o índices no correlativos: [sube, baja, para, reset] 5.3.2. Números Cuando queramos asignar un valor a una variable, o establecer una comparación, po- demos usar números expresados en binario, decimal, hexadecimal y octal. Se diferenciarán en un primer carácter, entre comillas simples: Número Base Valor decimal 'b'0 Binario 0 'b'1101 Binario 13 'o'663 Octal 435 'D' 92 decimal 92 'h' BA hexadecimal 186 'b'[001..100] binario rango de 1 a 4 5.4. Esquema de un programa en CUPL. Un fichero .PLD, que contiene un programa en CUPL, tiene siempre la misma estructu- ra, compuesto de un encabezamiento, en el que se da información acerca del diseño, un bloque de definición de variables, en el que se nombran los pines y se definen conjuntos de variables, y el bloque central de definición de funcionamiento. 5.5. Encabezamiento El encabezamiento sigue una estructura totalmente estandar. De todas las líneas del mismo, las dos únicas que tienen un efecto real sobre el diseño son la primera y la última. En la primera, name, se especifica el nombre del diseño, y será el nombre que se le dé al fichero de salida *.JED que se produzca. Debe ser un nombre válido de fichero, por tanto. En la última línea, Device, se introduce el nombre del dispositivo que se va a usar por de- fecto. Esta asignación se puede, en teoría, sobreseer en el momento de la compilación indicando otro dispositivo. En la práctica, como el programa presenta un problema justamente en la elec- ción de dispositivos, es necesario fijar en esta línea el dispositivo concreto que vamos a usar. En nuestro caso, utilizaremos casi siempre el dispositivo PAL22V10, que se especifica como: Device p22v10 Aunque también podemos hacer un primer diseño sin restricciones de tamaño, usando para ello un dispositivo virtual, que especificaremos como: Device virtual
  • 4. Tema 5. Programación en CUPL. 4 Esto tiene la ventaja de que evitaremos quedarnos sin términos para sintetizar ecuacio- nes, y nos permite comprobar a posteriori en el archivo .DOC qué salidas requieren más térmi- nos productos, para asignar convenientemente los pines. Un ejemplo de cabecera sería como sigue: Name prueba3 ; PartNo 00 ; Date 30/10/2003 ; Revision 01 ; Designer Engineer ; Company Atmel ; Assembly None ; Location ; Device p22v10 ; 5.6. Declaración de pines Tras la cabecera, se incluye la sección en la que se nombran los diferentes pines de E/S que se vayan a usar. Para ello, la sintaxis es: PIN <nº> = <nombre> ; Se puede definir un nombre común para una serie de pines. Igualmente se puede indi- car la polaridad de la señal, esto es si se activa a nivel alto o bajo. A todos los efectos, la señal se cambia de sentido lógico, y operaríamos con ella negada. Algunos ejemplos serían: Pin 1 = entrada1; Pin [2..4] = [Q0..Q2]; Pin 10 = !Reset; En esta sección también se definirán las variables de más de un bit que posteriormente se usarán en el código. Estas variables, llamadas FIELD, se usarán para definir tablas de verdad y máquinas de estado, entre otras cosas. Para definir un Field, simplemente tendré que darle un nombre y asignarle variables: FIELD estado = [Q0..Q2]; FIELD entradas = [entrada1, entrada2, entrada3]; FIELD salidas = [sube, baja, paro, marcha]; 5.6.1. Comandos de preprocesado El compilador tiene una serie de comandos de preprocesado para ayudar a la confec- ción de los programas. Así, puedo definir etiquetas, que me servirán para poder usarlas dentro del programa, de la misma manera que en lenguaje C estándar: $define DIR_BASE ‘h’2000 $define SI ‘b’1 Estas líneas no acaban en punto y coma. Otro tipo de comandos de preprocesado son los bucles REPEAT. Con estos bucles puedo escribir de forma cómoda una serie de líneas que de otra manera sería más tedioso. Se define un índice, con un rango de variación, y posterior- mente se incluyen líneas de código que se expandirán las veces que haga falta para tomar todos los valores especificados del índice, como se ve en el ejemplo:
  • 5. Tema 5. Programación en CUPL. 5 $repeat i = [0..7] $define point{i} 'b'{i} $repend Esto sería lo mismo que poner: $define point0 'b'000 $define point1 'b'001 $define point2 'b'010 $define point3 'b'011 $define point4 'b'100 $define point5 'b'101 $define point6 'b'110 $define point7 'b'111 Dentro de los bucles REPEAT, se pueden usar operaciones aritméticas para definir va- lores. Por ejemplo, para definir un contador ascendente-descendente, en cada estado tendré que ir al anterior o al siguiente, lo que puedo expresar muy cómodamente así: $repeat i=[1..14] Present 'D'{i} if SUBE next 'D'{i+1}; if BAJA next 'D'{i-1}; default next 'D'{i}; $repend 5.7. Cuerpo principal del programa En esta parte del fichero será en la que, propiamente, codificaré el funcionamiento que deseo de mi sistema. Aquí podré incluir tanto ecuaciones lógicas que definan sistemas combi- nacionales o secuenciales, como definiciones de máquinas de estados complejas. 5.7.1. Ecuaciones combinacionales Para definir un circuito combinacional, tan solo habrá que escribir las ecuaciones lógicas que lo forman. Ello se hará usando los operadores lógicos básicos, pudiendo usar paréntesis, o dividir una ecuación en varias partes, por medio del comando APPEND. Operador Ejemplo Función lógica ! !A NOT & A&B AND # A#B OR $ A$B XOR Como ejemplo de ecuaciones lógicas, podemos ver las siguientes, que reproducen la codificación del nivel de llenado de un depósito(Z2-Z1) en función de los sensores (S2-S1-S0) que estén activos, así como la generación de una señal de error (Z3) en caso de combinación ilógica (por ejemplo, 110) Z1 = s1 & s2; Z2 = (!s0 & !s1 & s2) # (s0 & s1 & s2); Z3 = !s0 & s1 # s2 & !s1; Cuando las ecuaciones son muy complejas, o incluyen muchos términos (en el caso de los bits centrales de una PAL22V10 pueden ser hasta 16 sumandos), se puede hacer uso de la
  • 6. Tema 5. Programación en CUPL. 6 sentencia APPEND, que me permite ir añadiendo sumandos a una determinada ecuación. Así, la segunda ecuación la puedo escribir como: APPEND Z2 = (!s0 & !s1 & s2); APPEND Z2 = (s0 & s1 & s2); 5.7.2. Tablas de verdad Otra forma más sencilla, a veces, de establecer ecuaciones lógicas es definir directamen- te la tabla de verdad que relaciona los valores lógicos a la entrada y a la salida del circuito com- binacional que se quiere diseñar. Para ello, deberemos definir previamente, con la sentencia FIELD, los dos grupos de variables (entradas y salidas) en le orden en que va a ser definida la tabla. En el siguiente ejemplo, vemos cómo se definiría el circuito anteriormente descrito, pero utilizando tablas. Primero, con las dos sentencias FIELD defino las entradas (ins) y las salidas (outs), para posteriormente ir especificando los valores de las salidas en función de las entradas: FIELD ins=[s2, s1, s0]; FIELD outs=[Z3, Z2, Z1]; TABLE ins => outs { 'b'000 => 'b'000; 'b'001 => 'b'001; 'b'010 => 'b'100; 'b'011 => 'b'010; 'b'100 => 'b'100; 'b'101 => 'b'100; 'b'110 => 'b'100; 'b'111 => 'b'011;} El compilador WinCUPL incluye además una herramienta para rellenar las tablas de manera semi-automática, generando todas las combinaciones de entrada, y permitiendo cam- biar los valores con un simple click de raton. 5.7.3. Máquinas de estado Sin duda, una de las aplicaciones fundamentales de los dispositivos programables es la realización de máquinas de estado, bien sean máquinas explícitas (con sus entradas, estados y salidas) o implícitas (como puede ser un contador reversible). Para diseñar máquinas de estado, necesitaremos previamente definir las señales que formarán mi “estado”, los biestables que vaya a utilizar. Esto lo haremos con la sentencia FIELD, de manera similar a lo ya visto, asignando en este caso pines de salida que tengan regis- tro asociado, obviamente. Resulta cómodo, aunque no es obligatorio, definir los nombres de los estados asignando a cada nombre un valor binario del estado, usando para ello la orden de preprocesado $DEFINE. Tras esto, definiremos la Tabla de transición de estados, simplemente escribiendo las dis- tintas transiciones que pueden ocurrir desde un estado dado. Para ello, puedo definir previa- mente una serie de condiciones de transición, para simplificar la notación, que serán posterior- mente simplificadas. También será frecuente el uso de transiciones por defecto, esto es, si no se cumple ninguna de las condiciones especificadas previamente. Veamos esto con un ejemplo: diseñamos una máquina de estado para el control de una barrera de un garaje. Tiene dos senso- res, y debe empezar a abrir la barrera cuando detecta un coche en el sensor 1, y mantenerla arriba hasta que pase por ambos y finalmente sólo toque al segundo sensor, momento en el que empeza- rá a bajar la barrera. Cuando el coche acabe de pasar, se dará un pulso de un ciclo de reloj para “contar” el coche.
  • 7. Tema 5. Programación en CUPL. 7 field estado=[Q1..0] ; /* Estado: bits Q1 y Q0*/ $define S0 'b'00 /* Defines para asignar nombre*/ $define S1 'b'01 /* a los estados. */ $define S2 'b'10 $define S3 'b'11 entrando=In1&(!In2)&Res_in; /* Variables intermedias */ debajo=In1&In2&Res_in; /* no son necesarias pero */ saliendo=!In1&In2; /* ayudan a definir las transiciones*/ nada=!(In1#In2)&Res_in; algo=(In1#In2); sequenceD estado { /*Comienzo de una M.Est: SequenceD <nombre> {*/ /* sintaxis de las transiciones: */ /* Present <estado> if <condicion> next <estado>;*/ present S0 if entrando next S1; default next S0; /* si no se da la condición: quédate*/ present S1 if nada next S0; if debajo next S2; if !Res_in next S0; if entrando next S1; present S2 if nada next S3; if algo next S2; if !Res_in next S0; present S3 next S0 ; /* Estado inestable: ve a S0 */ } Up=!Q1&Q0; /*Salidas de la M.Est. como combinacion del estado*/ Down=!Q1&!Q0; Count=Q1&Q0; Si quisiéramos definir una máquina de Mealy, deberíamos incluir en las diferentes tran- siciones (en todas las líneas if), la especificación de la salida deseada, usando la orden OUT, seguida de las señales que se activarán en ese estado o transición: present S3 next S0 OUT Count ; /* Estado inestable: ve a S0 */ 5.8. Ejemplos A continuación, se incluyen una serie de ejemplos básicos de programas completos hechos con WINCUPL. Los propios comentarios del programa sirven a modo de explicación de los mismos. Se incluyen asimismo algunas simulaciones. 5.8.1. Control de volumen. Se desea controlar el volumen de un equipo, para lo que se dispone de un botón de UP, otro de DOWN, y uno de MUTE. El sistema deberá filtrar generando señales de un sólo pulso cada vez que se pulse Up o DOWN, siendo estas señales las que hagan que crezca o decrezca un determinado registro (contador) de 4 bits. La señal MUTE hará que el sistema entre o salga del estado de mute, que se define como todas las salidas a “0”. Tras salir de él debe recordar el últi- mo valor asignado. Name vol ; PartNo 00 ; Date 20/10/2004 ;
  • 8. Tema 5. Programación en CUPL. 8 Revision 01 ; Designer MAPE ; Company GTE ; Assembly None ; Location ; Device p22v10 ; /************************************************************/ /* Sistema de control de volumen. Incluye: */ /* Maquina de estado para filtrar entrada Up */ /* Maquina de estado para filtrar entrada Dn */ /* Maquina de estado para convertir Mute en conmutador */ /* Contador reversible de 4 bits para guardar estado */ /* El Mute se realiza con la opcion .OE */ /************************************************************/ /* *************** INPUT PINS *********************/ PIN 1 = Clk ; /* Reloj*/ PIN 2 = Up ; /* Sube */ PIN 3 = Dn ; /* Baja */ PIN 4 = Mute ; /* Mute */ PIN 5 = Reset ; /* Reset act. a nivel bajo */ /* *************** OUTPUT PINS *********************/ PIN 14 = Q0 ; /* Contador de 4 bits. LSB */ PIN 15 = Q1 ; /* Contador de 4 bits. */ PIN 16 = Q2 ; /* Contador de 4 bits. */ PIN 17 = Q3 ; /* Contador de 4 bits. MSB */ PIN 18 = Q0U ; /* M.estados up */ PIN 19 = Q1U ; /* M.estados up */ PIN 20 = Q0D ; /* M.estados down */ PIN 21 = Q1D ; /* M.estados down */ PIN 22 = Q0M ; /* M.estados mute */ PIN 23 = Q1M ; /* M.estados mute */ FIELD estup = [Q1U, Q0U]; FIELD estdn = [Q1D, Q0D]; FIELD estmt = [Q1M, Q0M]; FIELD Cont = [Q3, Q2, Q1, Q0]; sequence estup { /* maquina UP: cada vez que se activa */ Present 'b'00 /* la entrada, se da un solo pulso. */ if Up & Reset Next 'b'01; if !Reset Next 'b'00; default next 'b'00; Present 'b'01 if Up & Reset Next 'b'10; if !Reset Next 'b'00; default next 'b'10; Present 'b'10 if !Up & Reset Next 'b'00; if !Reset Next 'b'00; default next 'b'10; } /* la salida es Q0U*/ sequence estdn { /* maquina DOWN: cada vez que se activa */ Present 'b'00 /* la entrada, se da un solo pulso. */ if Dn & Reset Next 'b'01; if !Reset Next 'b'00; default next 'b'00; Present 'b'01 if Dn & Reset Next 'b'10; if !Reset Next 'b'00; default next 'b'10; Present 'b'10
  • 9. Tema 5. Programación en CUPL. 9 if !Dn & Reset Next 'b'00; if !Reset Next 'b'00; default next 'b'10; }/* la salida es Q0D*/ sequence estmt { /* Maquina mute: cada vez que se activa*/ Present 'b'00 /* la entrada, cambia de estado: se apaga */ if Mute & Reset Next 'b'01; /* o se enciende */ if !Reset Next 'b'00; /* Codificado: 00, 01, 11, 10*/ default next 'b'00; /* con lo que la salida es Q1*/ Present 'b'01 if !Mute & Reset Next 'b'11; if !Reset Next 'b'00; default next 'b'01; Present 'b'11 if Mute & Reset Next 'b'10; if !Reset Next 'b'00; default next 'b'11; Present 'b'10 if !Mute & Reset Next 'b'00; if !Reset Next 'b'00; default next 'b'11; } Sequence Cont{ /* contador 4 bits reversible */ Present 'D'0 if Q0U & !Q0D & Reset next 'D'1; /* Q0U: salida maquina up (bit 0)*/ if Q0D & Reset next 'D'15; /* Q0D: salida maquina down (bit 0)*/ default next 'D'0; $repeat i=[1..14] Present 'D'{i} if Q0U & !Q0D & Reset next 'D'{i+1}; if Q0D & Reset next 'D'{i-1}; default next 'D'{i}; $repend Present 'D'15 if Q0U & !Q0D & Reset next 'D'0; if Q0D & Reset next 'D'14; default next 'D'0; } Q1.oe=!Q1M; /*activacion del MUTE*/ Q2.oe=!Q1M; Q3.oe=!Q1M; Q0.oe=!Q1M;
  • 10. Tema 5. Programación en CUPL. 10 5.8.2. Control de barrera de aparcamiento Este ejemplo ha sido comentado previamente. Aquí se desarrolla íntegro el programa de control de la barrera, y se incluye finalmente unas gráficas de simulación: Name Prueba2 ; Partno pru2-1 ; Revision 1 ; Date 27/10/2003 ; Designer mape ; Company GTE ; Assembly 1 ; Location aqui ; Device p22v10 ; Format c: ; /******************************************************************/ /* Programa de las barreras, en PAL22V10 */ /******************************************************************/ /** Inputs **/ Pin 1 = clk ; Pin 2 = In1 ; Pin 3 = In2 ; Pin 4 = Res_in; /** Outputs **/ Pin 14 = Up; Pin 15 = Down; Pin 16 = Count; /** Declarations and Intermediate Variables **/ Pin 17 = Q0 ; Pin 18 = Q1 ; /** Logic Equations **/ field estado=[Q1..0] ; $define S0 'b'00 $define S1 'b'01 $define S2 'b'10 $define S3 'b'11 entrando=In1&(!In2)&Res_in; debajo=In1&In2&Res_in;
  • 11. Tema 5. Programación en CUPL. 11 saliendo=!In1&In2; nada=!(In1#In2)&Res_in; algo=(In1#In2); sequenceD estado { present S0 if entrando next S1; if !entrando next S0; present S1 if nada next S0; if debajo next S2; if !Res_in next S0; if entrando next S1; present S2 if nada next S3; if algo next S2; if !Res_in next S0; present S3 next S0 ; } estado.oe = 'b'11; Up=!Q1&Q0; Down=!Q1&!Q0; Count=Q1&Q0;