Hola chicos, me llamo Pedro y soy de Ceuta, esto como indicación para los compañeros españoles.
Ahora que tengo un poco, o mucho tiempo libre, con esto del paro me ha dado por cacharrear y aprender un poco.
El primer proyecto que he pensado es realizar un dado electronico, creo que en el libro de Angulo hay un ejemplo pero yo he querido empezar de cero por mi cuenta.
El circutio consta de un 16f84A que controla un display de 7 segmentos. Aprovechando el que en el display se puede escribir el nombre de mi sobrino al conectar el circuito en el display se muestra en intervalo de 1 segundo las letras G U I L L E, en bucle infinito.
Al accionar un pulsador conectado a RB0 se enciende un Led conectado a RA1 y a través de una subrutina se manda al display de 7 segmentos un número de 1 a 6, el cual se muestra durante 3 segundos y luego vuelve al bucle infinito a mostrar el nombre.
Fallos que he encotrado:
- El led conectado a RA1 parpadea junto con cada letra, incluso cuando fuerzo un 0 justo al principio del bucle infinito.
- La rutina de generación del número aleatorio no esta muy lograda porque mayormente sale el 1 y el 6 no sale nunca.
-La permanencia en pantalla del número sacado en la tirada no es fija, en vez de estar 3 segundos, varia entre 20 y 35...
Por otro lado es mi primer programa asi que la nomenclatura, estitica del programa... igual no es la más ortodoxa asi que espero que me deis algún consejo también sobre ello.
Os pongo la priemera parte del codigo para ir solucionando las cosas paso a paso, y además el parpadeo del LED es lo que más me intriga.
LIST P=16F84A;
RADIX HEX;
W EQU 5;
PUERTAA EQU 0x05;Declaración
PUERTAB EQU 0x06;
STATUS EQU 0x03;
TMR_OPTION EQU 0x01;
INTCON EQU 0x0B;
CUENTA EQU 0x0C;
org 0;
goto inicio;
org 4;
btfss INTCON,2; comprobación de las interrupciones, no se usa en esta parte del codigo
goto inter1;
goto inter2;
org 10;
inicio
bsf STATUS,5;
movlw B'00000001';
movwf PUERTAB;
movlw B'00000000';
movwf PUERTAA;
movlw B'10010000';1 he cambiado el bit 3 a 0 y el 4 a 1
movwf INTCON;
movlw B'01010111';
movwf TMR_OPTION;
bcf STATUS,5;
movlw B'00000000';
movwf PUERTAA;
movlw B'11101110'; Escribe la letra G
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
movlw B'01011110'; Escribe la letra U
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
movlw B'00011000'; Escribe la letra I
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
movlw B'01000110'; Escribe la letra L
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
movlw B'01000110'; Escribe la letra L
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
movlw B'11100110'; Escribe la letra E
movwf PUERTAB;
call conteo;
clrf PUERTAB;
call conteo;
goto inicio;
conteo
clrf TMR_OPTION; Rutina de retraso de 1 segundo para las letras
movlw b'00001010';
movwf CUENTA;
bcf INTCON,2;
com1 btfss INTCON,2;
goto com1;
bcf INTCON,2;
decfsz CUENTA,1;
goto com1;
return;
Por si sirve de algo os digo que uso el MPLAB versión 8.92, uso este
programador y grabador microbrn.