Vous êtes sur la page 1sur 4

ENCENDIDO DE LED EN LENGUAJE ENSAMBLADOR

Encenderemos un LED, lo mantendremos encendido por un tiempo, luego lo apagaremos y haremos que se repita todo de nuevo.
LIST

p=16f84
radix
hex
;------------mapa de memoria--------estado equ
TRISB
equ
ptob
equ

0x03
0x06
0x06

; Haciendo asignaciones

reg1
reg2
reg3

0x0C
0x0D
0x0E

; Estos 3 registros los utilizar


; para hacer el retardo

equ
equ
equ

;-------Configuracin de puertos------reset

org

goto
inicio bsf
movlw
movwf
bcf

0x00

; origen del programa, aqu comenzar


; siempre que ocurra un reset
inicio
; salta a "inicio"
estado,5
; pone rp0 a 1 y pasa al banco1
b'00000000'
; carga W con 00000000
TRISB
; y pasa el valor a trisb
estado,5
; pone rp0 a 0 y regresa al banco0

;----Aqu enciende y apaga el LED----ahora

bsf
call

ptob,0
retardo

; pone un 1 en RB0 (enciende el LED)


; llama al retardo

bcf
call
goto

ptob,0
retardo
ahora

; pone a 0 RB0 (apaga el LED)


; llama al retardo
; repite todo de nuevo

;-----------Rutina de Retardo----------retardo movlw


movwf

10
reg1

tres

movlw
movwf

20
reg2

dos

movlw
movwf

30
reg3

uno

decfsz
goto
decfsz
goto
decfsz
goto
retlw

reg3,1
uno
reg2,1
dos
reg1,1
tres
00

;
;
;
;

Aqu se cargan los registros


reg1, reg2 y reg3
con los valores 10, 20 y 30
respectivamente

;
;
;
;
;
;
;
;

Aqu se comienza a decrementar


Cuando reg3 llegue a 0
le quitare 1 a reg2
cuando reg2 llegue a 0
le quitare 1 a reg1
cuando reg1 llegue a 0
regresare al lugar
de donde se hizo la llamada

;-----------------------------------------end
; se acab

Este programa enciende un led dependiendo de qu interruptor sea.


list
p=16f84
#include p16f84.inc
port_a
equ 5
port_b
equ 6
trisb
equ 86
trisa
equ 85
retard
equ 11
estado
equ 3
clrf
estado
clrf
port_a
bsf
estado,5
movlw
0x1f
movwf
port_a
clrf
port_b
movlw
0x00
movwf
port_b
bcf
estado,5
clrf
port_a
clrf
port_b
inicio btfss port_a,0
call
enci0
call
retardo
btfss port_a,1
call
enci1
call
retardo
btfss port_a,2
call
enci2
call
retardo
btfss port_a,3
call
enci3
call
retardo
btfss port_a,4
call
enci4
call
retardo
goto inicio
enci0 movlw 0x00
movwf port_b
call
retar2
movlw B'01'
movwf port_b
return
enci1 movlw 0x00
movwf port_b
call
retar2
movlw B'10'
movwf port_b
return
enci2 movlw 0x00
movwf port_b
call
retar2
movlw B'100'
movwf port_b
return
enci3 movlw 0x00
movwf port_b
call
retar2
movlw B'1000'
movwf port_b
return
enci4 movlw 0x00
movwf port_b
call
retar2
movlw B'10000'
movwf port_b
return
retardo movlw 0x96
movwf retard
reta3 decfsz retard,1
goto
reta3
return

;RETARDO

;seleccin del banco 1


;define RA0 como entrada
;define puerto B como salida

;si el bit 0 del puerto a esta en nivel alto se salta una instruccin
;si el bit 1 del puerto a esta en nivel alto se salta una instruccin
;si el bit 2 del puerto a esta en nivel alto se salta una instruccin
;si el bit 3 del puerto a esta en nivel alto se salta una instruccin
;si el bit 4 del puerto a esta en nivel alto se salta una instruccin

end
; Que hace => A de encender el LED 1 apagarlo, encender LED 2 y
^
; apagarlo, sigue hasta LED 8. La secuencia se invierte y sigue
^
; desde LED 8 hasta LED 1
^
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;--------------- Encabezado ------------;********************************************************************
;
LIST
p=PIC16F84A
; Directiva para definir micro.
#include <p16f84a.inc>
; Fichero estandard de cabezera.
;******************** DEFINICIONES **********************************
; Todas las definiciones estan en 'include ', por tanto
; solo se definen las locales
porta
equ
h'0005' ; define puerto A
portb
equ
h'0006' ; define puerto B
con1
con2

equ
equ

0x0C
0x0D

; Variable de temporizacion.
; Variable de temporizacion.

;******************** COMIENZO DEL PROGRAMA ********************


;
SE DEFINEN BANCOS
#define banco1 bsf STATUS,RP0 ;Macro para abreviar el BANCO 1
;pone a 1 el bit5 del registro status
#define banco0 bcf STATUS,RP0 ;Macro para abreviar el BANCO 0
;pone a 0 el bit5 del registro status
ORG
0x00
; Vector de Reset.
GOTO
inicio
; Programa Principal.
;************************************************************
delay: CLRF con1
;lazo exterior
MOVLW 0xF0
MOVWF con2
;
RETURN ;esta linea es de prueba
loop:
DECFSZ con1,F ;lazo interior
GOTO loop
DECFSZ con2,F
GOTO loop
RETURN
;
;******************** PROGRAMA PRINCIPAL ********************
inicio: banco1 ; Banco 1.
CLRF TRISB
; aclara puerto B, pone a 0 , todo salidas
banco0
; Banco 0.
MOVLW 0xff
MOVWF portb
BCF STATUS,C

; PORTB 11111111.
;
;Preparado para rotar, pone a 0 el bit C

; Desplazar portB a la izquierda, usamos la instruccion ROTAR


gira_i:
BTFSS portb,7
ANDLW 01

;si el bit 7 = 1 salta y rota a derecha


;si no, AND entre literal y W

sigue_i: BTFSC portb,7 ; portb = 00?


goto $+3
; no, salta 2 lineas
movlw 0xff
; si, pon 255 en
movwf portb
; portb
BCF STATUS,C ;Asegura que en primera
; rotacion ingrese 0 en PORTB
RLF portb,F
;rota archivo F a izq. (F = '1111 1110')
CALL delay
;salta a retardo
GOTO gira_i
;vuele a girar.
END
; Fin de programa.

Funcion: Controlar 3 pulsadores y saltar a la subrutina indicada.


; Oscilador por red RC. 3 LEDs a masa.
LIST P=PIC16F84A
#include
__CONFIG _CP_OFF & _WDT_OFF &_RC_OSC
; __CONFIG
h'3FFB'
;
0011 1111 1111 1011
; Definicion o Declaracion de equs (igualdades)
d1
equ
0x0C
; siempre se necesitan un par
d2
equ
0x0D
; de registros auxiliares
d3
equ
0x0E
;----- Ficheros de Registro --------------------------------;DEFINIMOS LOS BANCOS
#define bank1
BSF STATUS,RP0 ;Macro para abreviar el BANCO 1
#define bank0
BCF STATUS,RP0 ;Macro para abreviar el BANCO 0
Org
0x00
;Posicion 0 de la Memoria de Programa (apuntador)
GOTO
inicio ;Va a la etiqueta INICIO
inicio: CLRF
STATUS
bank1
;Va a pagina1 para configurar puertos
MOVLW
0x07
;pone el literal 07h = b0000 0111 en el registro
MOVWF
PORTB
;define RB0-RB2 como entrada, los otros, salidas
CLRF
PORTA
;limpia el puerto A, salidas
;define todo el puerto A como salida
bank0
;Regresa a pagina0 para continuar
CLRF
PORTA
;limpia el puerto A
;
Escanea los 3 pulsadores hasta que se pulsa uno
scaner: BTFSC PORTB,0
; bit 0 del puerto B esta en nivel bajo, salta
CALL luce1
;salta a encender LED1
BTFSC PORTB,1
; bit 1 del puerto B esta en nivel bajo, salta
CALL luce2
;salta a encender LED2
BTFSC PORTB,2
; bit 2 del puerto B esta en nivel bajo, salta
CALL luce3
;salta a encender LED3
GOTO scaner
;repite secuencia
luce1: MOVLW 0x01
; pone a 1
MOVWF PORTA
;para encender LED1
CALL
pausa
;salta a rutina de retardo
CLRF
PORTA
RETURN
luce2: MOVLW 0x02
;pone a 1
MOVWF PORTA
;para encender LED2
CALL
pausa
;salta a rutina de retardo
CLRF
PORTA
RETURN
luce3: MOVLW 0x04
;pone a 1
MOVWF PORTA
;para encender LED3
CALL
pausa
;salta a rutina de retardo
CLRF
PORTA
RETURN
;
------ Rutina de retardo ----pausa: MOVLW
0x07
; b'00000111 = 7d
MOVWF
d1
;2Ah
MOVWF
0x2F
;b'00101111 = 47d
MOVWF
d2
MOVWF
0x03
;b'00000011 = 3d
MOVWF
d3
pausa1:
DECFSZ
d1,1
; Lazo interior
GOTO
pausa1
GOTO
$+2
DECFSZ
d2,1
GOTO
pausa1
GOTO
$+2
DECFSZ
d3,1
GOTO
pausa1
goto
$+1
goto
$+1
goto
$+1
RETURN
END

1 linea
1 linea
1 linea

Vous aimerez peut-être aussi