Thursday, August 28, 2008

primer código en Assembler

éste es el primer código escrito en clase en Assembly , esencialmente programamos una salida (output) digital (0 - 1) a un intervalo de 1000 ms (un segundo) de pestañeo (un segundo prendido un segundo apagado). el código está hecho para el PIC 16f84a



blink ...
author: librepensante.org
FREEWARE


; incluye las librerias e intrucciones del pic
LIST P=16F84a
INCLUDE
;subrutina que mueve al banco 1 de memoria RAM
BANK0 MACRO
BCF STATUS,5
BCF STATUS,6
ENDM

;subrutina que mueve al banco 0 de memoria RAM
BANK1 MACRO
BSF STATUS,5
BCF STATUS,6
ENDM

;nombramiento de variables en la memoria ram
CONTADOR1 EQU 20H
CONTADOR2 EQU 21H
CONTADOR3 EQU 22H

ORG 05 ; ingreso al programa

SETUP ;variables inciciales
BANK1 ; llama macro (subrutina) para ingresar al banco 1
MOVLW 0x00 ; hexadecimal byte "00000000"
MOVWF TRISA ;mueve el número al byte TRISA (i/o)
MOVLW 0xFF ; hexadecimal byte "11111111"
MOVWF TRISB ;mueve el número al byte TRISB (i/o)
BANK0 ; al banco de memoria 0
MOVLW 0xFF ; hexadecimal "11111111"
MOVWF CONTADOR1 ; byte en la memoria RAM
MOVLW .255 ; decimal 255 (byte "11111111")
MOVWF CONTADOR2 ; byte en la memoria RAM
MOVLW B'0000101' ; binario, suma 9
MOVWF CONTADOR3 ; byte en la memoria RAM
GOTO LOOP ; salta a la rutina loop

1000ms ;contador por decrecimiento de 1 seg.
DECFSZ CONTADOR1
GOTO SALTO
DECFSZ CONTADOR2
GOTO SALTO
DECFSZ CONTADOR3
GOTO SALTO
RETURN ;vuelve a la rutida de donde es llamada

LOOP ;programación de la salida
BSF PORTB,0 ; el pin 0 de portb en 0
CALL 1000ms ; llama subrutina 1000ms
BCF PORTB,0 ; el pin 0 de portb en 1
CALL 1000ms ; llama subrutina 1000ms
GOTO LOOP ; vuelve al inicio de esta rutina para quedar en bucle
END ; fin


código en hexadecimal para programar al pic

:020000040000FA
:06000A0083160313003011
:100010008500FF30860083120313FF30A000FF30FD
:10002000A1000530A2001B28A00B1428A10B142846
:10003000A20B1428080006141420061014201B28F4
:00000001FF

No comments: