Microcontroladores
DADO ELECTRÓNICO
Jaime Pérez Crespo
Rubén Seijas Valverde
Introducció n:
Con esta práctica se pretende familiarizarse con la programación en ensamblador
de microcontroladores como el PIC utilizado. Se trata de la construcción de un sencillo
dado electrónico mediante un PIC, un display y un pulsador, entre otros componentes.
El display, al conectarse el circuito, comenzará una cuenta desde el número 1
hasta el número 6 de forma progresiva, cambiando cada segundo. Cuando el jugador
accione el pulsador, en el display se mostrarán todos los leds encendidos (salvo el punto
decimal) para indicar que se está procediendo a una tirada. Al liberar el pulsador se
mostrará durante un segundo el número aleatorio obtenido por el jugador. Transcurrido
ese segundo, el dado volverá a retomar la cuenta exactamente en el número siguiente al
último número mostrado previamente a ejecutar la tirada.
Listado:
A continuación se muestra el listado en ensamblador del programa construído para
el dado electrónico.
;Practica del dado electronico de la asignatura
; Microprocesadores 20032004
;Autores:; Jaime Perez Crespo
; Ruben Seijas Valverde
;Ultima modificacion: 3/11/2003
LIST P=16F84
INCLUDE "a:\P16F84.INC" ;Libreria de registros del PIC
RADIX HEX
SEG EQU 0x0C
NUM EQU 0x0D
ORG 0x00
GOTO
INICIO
ORG
0x04
GOTO
INTERR
;Direccion de comienzo del programa
;Captura de interrupciones;Salto a la rutina de tratamiento de
;interrupciones
INICIO:
CLRF SEG ;Iniciamos la cuenta de fracciones de
;segundo
CLRF NUM ;Iniciamos el Numero a mostrar
BSF STATUS,RP0 ;Cambiamos al banco de memoria 1
MOVLW 0xff
MOVWF TRISA ;configuramos puerta A de entrada
MOVLW 0x00 MOVWF TRISB ;configuramos puerta B de salida
MOVLW b'00000111'
;cargamos los flags en OPTION
MOVWF OPTION_REG
MOVLW b'10100000' ;Permitimos interrupciones en TMR0 y GIE
MOVWF INTCON
BCF STATUS,RP0 ;Cambiamos al banco de memoria 0
MOVLW b'00100110' ;Cargamos 38 en el TMR0 (255 217)
MOVFW TMR0 MOVLW b'11111111' ;Apagamos todos los leds del display
MOVWF
PORTB
BUCLE:
BCF
STATUS,RP0
;Seleccionamos banco de memoria 0
BTFSS PORTA,0 ;Comprobamos si el pulsador esta
;accionado (RA0 = 0)
CALL
GEN_NUM
;Pulsador accionado, generamos numero
;aleatorio
GOTO
BUCLE
;No hay pulsacion, seguimos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Generacion del numero aleatorio ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GEN_NUM:
BSF
STATUS,RP0
;Seleccionamos banco de memoria 1
MOVLW
b'00000000'
;Deshabilitamos interrupciones
MOVWF
INTCON
BCF
STATUS,RP0
;Seleccionamos banco de memoria 0
MOVLW b'10000000' ;Encendemos todos los leds del display
;salvo el punto
MOVWF
PORTB
PULS:
INCF
NUM,F;Incrementamos el numero de tirada
MOVF NUM,W ;Comprobamos si la tirada es superior a 6
SUBLW 7 ;Restamos 7 a la tirada
BTFSS STATUS,Z ;Comprobamos si la resta es 0
;Si la resta anterior es 0, debemos poner
;a 1 la tirada, Z sera 1
GOTO
COMP_PULS
;Tirada correcta, comprobamos el
;pulsador
MOVLW
0x01;Iniciamos a 1 la tirada
MOVWF
NUM
COMP_PULS:
BCF STATUS,RP0 ;Seleccionamos banco de memoria 0
BTFSC
PORTA,0
;Comprobamos RA0 para ver el estado del
;pulsador
GOTO
NO_PULS
;No hay pulsacion, mostramos el numero
GOTO PULS ;Pulsador accionado, seguimos generando
;el numero...
Regístrate para leer el documento completo.