Codigo Assembler
;********************************************************************
; Nombre del archivo: TestStarter.asm
;********************************************************************
; Descripción:
; ------------
; Este software sirve para verificar el funcionamientos de la
; placa Starter.
; Enciende y apaga los leds conectados al PORTB en una secuencia
; determinada por el programa, siempre y
; cuando se active mediante un "1" la llave conectada en RA0.
;
;********************************************************************
; Hardware:
; ---------
; Placa Starter
; XTAL: 4MHz
;********************************************************************
; Autores: VMMB Fecha: 18/11/09 Versión:1.0
;********************************************************************
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
RAM EQU 0x0C
FLASHROM EQU 0x000
SW_0 EQU 0
SW_1 EQU 1
;********************************************************************
; Variables
;********************************************************************
CBLOCK RAM
var_1
var_2
var_3
w_temp
status_temp
ENDC
;********************************************************************
; MACROS (Sustituyen una o más lineas de código por un nombre)
;********************************************************************
; Macros usadas para este programa
LEDS_OFF MACRO
clrf PORTB
ENDM
LEDS_ON MACRO
movlw b'11111111'
movwf PORTB
call delay_200ms
LEDS_OFF
call delay_200ms
ENDM
LED_1 MACRO
movlw b'00000001'
movwf PORTB
ENDM
LED_2 MACRO
movlw b'00000010'
movwf PORTB
ENDM
LED_3 MACRO
movlw b'00000100'
movwf PORTB
ENDM
LED_4 MACRO
movlw b'00001000'
movwf PORTB
ENDM
LED_5 MACRO
movlw b'00010000'
movwf PORTB
ENDM
LED_6 MACRO
movlw b'00100000'
movwf PORTB
ENDM
LED_7 MACRO
movlw b'01000000'
movwf PORTB
ENDM
LED_8 MACRO
movlw b'10000000'
movwf PORTB
ENDM
LED_1y3 MACRO
movlw b'00000101'
movwf PORTB
ENDM
LED_2y4 MACRO
movlw b'00001010'
movwf PORTB
ENDM
LED_3y5 MACRO
movlw b'00010100'
movwf PORTB
ENDM
LED_4y6 MACRO
movlw b'00101000'
movwf PORTB
ENDM
LED_5y7 MACRO
movlw b'01010000'
movwf PORTB
ENDM
LED_6y8 MACRO
movlw b'10100000'
movwf PORTB
ENDM
LED_7y1 MACRO
movlw b'01000001'
movwf PORTB
ENDM
LED_8y2 MACRO
movlw b'10000010'
movwf PORTB
ENDM
LED_1y2 MACRO
movlw b'00000011'
movwf PORTB
ENDM
LED_3y4 MACRO
movlw b'00001100'
movwf PORTB
ENDM
LED_5y6 MACRO
movlw b'00110000'
movwf PORTB
ENDM
LED_7y8 MACRO
movlw b'11000000'
movwf PORTB
ENDM
; Macros usadas para guardar los registros W y STATUS al momento
; de llegar una interrupción
PUSH MACRO
movwf w_temp
swapf STATUS,W
movwf status_temp
ENDM
POP MACRO
swapf status_temp,W
movwf STATUS
swapf w_temp,F
swapf w_temp,W
ENDM
;********************************************************************
; Vectores
;********************************************************************
ORG FLASHROM
clrw
goto Inicio ; de Reset
ORG 0x004
goto Isr ; de Interrupción
;********************************************************************
Inicio
;********************************************************************
; Configuro los puertos I/O
BANK1
movlw b'11111'
movwf TRISA
clrf TRISB
BANK0
;********************************************************************
; Programa principal
;********************************************************************
Loop_1
;LEDS_OFF
LEDS_ON
goto Loop
Loop
btfss PORTA,SW_0
goto Variacion_1
goto Variacion_2
Variacion_1
btfss PORTA,SW_1
goto Loop_1
goto SECUENCIA_1
Variacion_2
btfss PORTA,SW_1
goto SECUENCIA_2
goto SECUENCIA_3
SECUENCIA_1
LED_1
call delay_200ms
LED_2
call delay_200ms
LED_3
call delay_200ms
LED_4
call delay_200ms
LED_5
call delay_200ms
LED_6
call delay_200ms
LED_7
call delay_200ms
LED_8
call delay_200ms
goto Loop
SECUENCIA_2
LED_1y3
call delay_200ms
LED_2y4
call delay_200ms
LED_3y5
call delay_200ms
LED_4y6
call delay_200ms
LED_5y7
call delay_200ms
LED_6y8
call delay_200ms
LED_7y1
call delay_200ms
LED_8y2
call delay_200ms
goto Loop
SECUENCIA_3
LED_1y2
call delay_200ms
LED_3y4
call delay_200ms
LED_5y6
call delay_200ms
LED_7y8
call delay_200ms
goto Loop
;********************************************************************
; Subrutinas
;********************************************************************
; Delays
;
delay_200ms
;499994 cycles
movlw 0x03
movwf var_1
movlw 0x18
movwf var_2
movlw 0x02
movwf var_3
delay_200ms_0
decfsz var_1, f
goto $+2
decfsz var_2, f
goto $+2
decfsz var_3, f
goto delay_200ms_0
;2 cycles
goto $+1
;4 cycles (including call)
return
;********************************************************************
; Servicio de Interrupción
;********************************************************************
Isr
PUSH
; Aca se escribe el Servicio de Interrupción
POP
retfie
;********************************************************************
END ;Directiva que indica la finalización del pgm
Simulación
No hay comentarios:
Publicar un comentario