Nuevo en el Foro

Registrado: 05 Dic, 2007
Mensajes: 2
|
| ;*********************Pag 33-EJER 03***************************************************
;
; El portB enciende tantos leds (0-8) como valor indique el numero binario del PORTA,
;ZONA DE DATOS*******************************************************************
__CONFIG _CP_OFF & _WDT_OFF &_PWRTE_ON &_XT_OSC ; Configuración para el grabador
LIST P=16F84A ;Procesador.
INCLUDE<P16F84A.INC> ;Incluimos el fichero del microcontrolador.
CBLOCK 0x0C ; Reservamos posiciones de memoria para las variables
CONT ; Hará de contador
AUX ;Guardará el valor inicial del PORTA
ENDC ;Finalizamos el bloque de variables
;ZONA DE CÓDIGOS*****************************************************************
ORG 0 ; El programa comienza en la dirección 0 de memoria de programa
Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B se configuran como salidas
movlw b'11111111'
movwf TRISA ; Las líneas del Puerto A se configuran como entradas
bcf STATUS,RP0 ;Pone a 0 el bit 5 de STATUS. Acceso al Banco 0
Principal
clrf PORTB ;Ponemos a 0 todo el PORTB
movf PORTA,W ;Leemos el PORTA y su valor lo cargamos en ...
movwf CONT ;la variable contador...
movwf AUX ; y en la variable AUX
btfsc STATUS,Z ;Si PORTA es >0, Z=0, salta y continua el programa
goto Principal ;Si PORTA es cero vuelve a Principal
AS1 bsf STATUS,C ;Ponemos a 1 el carry del status
rlf PORTB,F ;Rotamos PORTB con lo cual entra un 1 por la dcha
decfsz CONT,F ;Decrementa CONT y salta si es 0, ...
goto AS1 ;sino vamos a AS1 y seguimos metiendo 1 por la dcha
AS2 movf PORTA,W ;volvemos a leer PORTA
xorwf AUX,W ;vemos si cambió o no su valor, si es igual Z=1
btfsc STATUS,Z ;testeamos y si son distintos salta a PRINCIPAL
goto AS2 ;si son iguales sigue en este bucle esperando el cambio
goto Principal ; Crea un bucle cerrado.
END ;Fin del programa |
| |
|
|