Vistas de página en total

miércoles, 24 de agosto de 2011

Ejercicios del Capítulo 9

Descargas:
ASM:
- Indexado_02.asm
- Ejercicios Cap. 9.DSN (Para probarlo en Proteus)

C:
-Indexado_02.c
-Indexado_02.h

En ASM:

;====================================================================
; Nombre del archivo: Indexado_02.asm
;====================================================================
; Descripción:
;
; Controla el nivel de un depósito de líquido. Utiliza (entre
; paréntesis las líneas del microcontrolador a la que se han
; conectado):
;
; * Tres sondas detectoras: SV, Sonda de Vacío (RA0); SLL, Sonda de
; LLenado (RA1); SR, Sonda de Rebose (RA2).
; * Dos bombas de agua: B1 (RB5), B2 (RB6).
; * Cinco indicadores: Vacio (RB0), Llenandose (RB1), Lleno (RB2),
; Rebose (RB3), Alarma (RB4).
;
; Su funcionamiento:
;
; * Cuando ninguna de las sondas está mojada se entiende que el
; depósito está vacío y se accionarán las dos bombas. El indicador
; "Vacio" se iluminará .
; * Cuando el nivel del líquido toque la sonda de vacío "SV" seguirá
; llenándose el depósito con las dos bombas. El indicador
; "Llenandose" se ilumina.
; * Cuando el nivel del líquido toca la sonda de llenado "SLL", para
; la bomba B2, quedando B1 activada en modo mantenimiento. El
; indicador "Lleno" se ilumina.
; * Si el nivel del líquido moja la sonda de rebose "SR" se apaga
; también la bomba B1, quedando las dos bombas fuera de servicio.
; El indicador "Rebose" se enciende.
; * Cuando se produce un fallo o mal funcionamiento en las sondas de
; entrada (por ejemplo que se active la sonda de rebose y no active
; la de vacío) se paran las dos bombas. El indicador "Alarma" se
; ilumina.
;====================================================================
; Descripción del Hardware:
;
; 1 --------------16
; SR -> |RA2 °|_| RA1| <- SLL
; |RA3 RA0| <- SV
; |RA4 OSC2| XTAL
; R10 K a Vdd |/MCLROSC1| XTAL
; GND |VSS VDD| 5V
; Vacío <- |RB0 RB7|
; Llenandose <- |RB1 RB6| -> Bomba2
; Lleno <- |RB2 RB5| -> Bomba1
; Rebose <- |RB3 RB4| -> Alarma
; 9 --------------10
;
; Frecuencia del oscilador externo: 4MHz (XT)
;====================================================================
; Autores: Kevin Garro y Jorge Palacio
; Fecha: 28/08/11 Versión:0.1
;====================================================================
LIST p=PIC16F84A
INCLUDE
__CONFIG _WDT_OFF & _PWRTE_ON & _CP_OFF & _XT_OSC
ERRORLEVEL -302
;====================================================================
; Definiciones y Equivalencias
;====================================================================
#DEFINE BANK0 bcf STATUS,RP0 ; Cambio al banco 0
#DEFINE BANK1 bsf STATUS,RP0 ; Cambio al banco 1
;====================================================================
; Declaración de Variables
;====================================================================
CBLOCK 0x0C
ENDC
;====================================================================
; Vectores
;====================================================================
ORG 0x000 ; Vector de Reset
clrw
goto Main
;====================================================================
; Servicio de Interrupción
;====================================================================
ORG 0x004 ; Vector de Interrupción
retfie
;====================================================================
Main
;====================================================================
BANK1
movlw b'11111'
movwf TRISA ;todo el PORTA como entrada
clrf TRISB ;todo el PORTB como salida
BANK0
;====================================================================
; Programa principal
;====================================================================

INICIO
movf PORTA,W
andlw b'111'
addwf PCL,F
goto VACIO
goto LLENANDOSE
goto ALARMA_1
goto LLENO
goto ALARMA_2
goto ALARMA_3
goto ALARMA_4
goto REBOSE

VACIO
movlw b'01100001'
goto SALIDA

LLENANDOSE
movlw b'01100010'
goto SALIDA

ALARMA_1
movlw b'00010000'
goto SALIDA

LLENO
movlw b'00100100'
goto SALIDA

ALARMA_2
movlw b'00010000'
goto SALIDA

ALARMA_3
movlw b'00010000'
goto SALIDA

ALARMA_4
movlw b'00010000'
goto SALIDA

REBOSE
movlw b'00001000'

SALIDA
movwf PORTB
goto INICIO

;====================================================================
END





En C:


#include

void main(){

while(1){

switch(input_a()){

case 0:
output_b(0b01100001);
break;
case 1:
output_b(0b01100010);
break;
case 2:
output_b(0b00010000);
break;
case 3:
output_b(0b00100100);
break;
case 4:
output_b(0b00010000);
break;
case 5:
output_b(0b00010000);
break;
case 6:
output_b(0b00010000);
break;
case 7:
output_b(0b00001000);
break;

}

}

}