domingo, marzo 31, 2013

PROGRAMACION DE PIC EN ASSEMBLER - Nº 1

MANEJO DE PUERTOS DIGITALES (PRACTICA 2)

Ahora pasaremos a dar la entrega de dos de los ejercicios restantes, pertenecientes al curso de "Programacion de PIC en Assembler".

C) Se tiene tres valvulas (A,B y C) que alimenta un tanque, el tanque a su vez tiene una salida. Existen 3 sensores de nivel (X,Y y Z). Cuando el tanque esta vacio los 3 sensores estan a 0-logico y es necesario activar el trabajo de las tres bombas. Cuando se llena 1/3 del tanque el sensor X pasa a 1-logico y la bomba  A deja de funcionar.Cuando se llenan 2/3 del tanque el sensor Y esta activado y la bomba B deja de funcionar. Cuando esta lleno el tanque el sensor Z se activa y la bomba C deja de funcionar. Una vez que el tanque esta lleno este empieza a expulsa el liquido acumulado. Cuando los 3 sensores pasan a 0-logico la secuencia antes descrita se repite antes NO.

A continuacion presentamos el esquema en proteus: 


Para una mejor resolucion del problema imaginemos los siguientes graficos:


Algoritrmo:

1. Configurar el PORTB como entrada y PORTC como salida
2. Si PORTB !=0 entonces ir paso 2
3. Abrir las 3 valvulas (PORTC = 0x07)
4. Si PORTB !=0x01entonces ir paso 4
5. Abrir 2 valvulas (PORTC = 0x06)
6. PORTB != 0x03 entonces Ir paso 6
7. Abrir 1 valvula (PORTC = 0x04)
8. si PORTB != 0x07 entonces ir paso 8
9. Cerrar todas las valvulas (PORTC = 0x00)
10. Ir paso 2


Ahora tenemos el codigo: 


D) Diseñar un programa que lea los 4 bits inferiores del puerto A y muestre el dato en un display de 7 segmentos que se encuentra en el puerto C

El esquema en PROTEUS es el siguiente:


Ahora nos ayudaremos del siguiente gráfico:


Algoritmo:
1. Ir banco 0
2. Configurar RA0-3 como entrada digital
3. Configurar RC0-7 como salida digital
4. Ir banco 1
5. W=0x0F
6. W = PORTA AND W
7. W = TABLA[W]
8. PORTC = W
9. Ir paso 5

Diagrama de flujo:


Definiciones previas:

CALL Llamada a una rutina
Sintaxis        [etiqueta]    CALL k
Operandos   0<= k <= 2047
Operacion:    (PC)+1 -> TOS (Sumamos 1 al valor acutal del PC y lo guardamos en la cima de la pila)
                     k -> PC <10:0>
                     PCLATH<4:3> -> PC <12:11>
Bits afectados en el STATUS: No aplica
Descripcion: CALL se usa para llamar a una rutina. Primer suma 1 al valor actual del PC y lo guarda en la cima de la pila (primera posicion libre en la pila). Los 11 bits definitivos por k (o el valor de esa etiqueta) es almacenada en el PC en los bits 0-10. Los bits superiores son cargados desde el PCLATH. La instruccion CALL ocupa dos ciclos de instruccion.

Ejemplo:  AQUI: CALL ALLA 


Diseño del programa: 

Al inicio configuramos las lineas del puerto A como entradas en tanto que las lineas del puerto C seran configuradas como salida. Luego entramos a un bucle infinito que empieza explorando el valor del puerto A (PORTA), tomaremos los 4 bits menos significativos que representa el indice de la tabla, entraremos a la tabla a buscar el contenido señalado por el indice, ese valor sera depositado el puerto C (PORTC).

Ahora tenemos el programa en MPLAB.: 


©Copyrigth Bach. Ing. Mishell Sanchez Guevara         cell: 985 653 382 

No hay comentarios: