Mi nombre es Gerardo Martínez, soy alumno de FIME de la UANL (1400769)
El siguiente programa es de mi total autoría, no es copy paste de ningún sitio o persona.
Si tomas el programa para usarlo en mi facultad, ten en cuenta que reclamaré la autoría del mismo mediante la fecha de este post.
El dado debe de cumplir las siguientes características
Hasta el momento he hecho lo siguiente:
Así tal cual está el programa, no me responde como yo explico, pues pareciera que hay alguna interferencia o rebote, pues aveces si hace todo el ciclo de encender todos los LEDs, a veces no, y siempre me muestra el numero 6.
Otra manera en la cual lo tenía, era un JSR DOS inmediatamente después del JSR TRES, (sin los 6 JSR DOS que están en toda la subrutina TRES) y de este no presenta ese rebote o interferencia en el display, pero igualmente sólo me muestra el numero 6.
No sé si estoy aplicando bien el pulso del pulsador, pues hace un par de días pensé en usar el VDD para de ahí meter el valor alto al pin 11 (es el pin 5 del puerto B según la hoja de datos) y quemé el microprocesador.
Hoy el interruptor lo pongo del pin 11 a VSS, de este modo es como estoy deteniendo el dado y no parece calentarse el microcontrolador.
Otra cosa que noté, pareciera un error esta parte o tal vez si lo sea:
Pero si aquí escribo el 5, el dado no se detiene.
Agradeceré con gusto todos sus aportes, sugerencias, correcciones o mejoras.
Dicho ésto, no sé si hay un mejor modo de hacer este programa, pues apenas llevo 2 meses involucrado en la programación de este microcontrolador, del uso de CodeWarrior y del lenguaje ensamblador.
El siguiente programa es de mi total autoría, no es copy paste de ningún sitio o persona.
Si tomas el programa para usarlo en mi facultad, ten en cuenta que reclamaré la autoría del mismo mediante la fecha de este post.
El dado debe de cumplir las siguientes características
- Cuando se presione un interruptor el dado elegirá un número al azar del 1 al 6 y lo mostrará en un display de 7 segmentos
- (Modo de espera) Mientras el interruptor no esté accionado, todos los segmentos del display se iluminaran de uno por vez, (excepto el segmento g)
Hasta el momento he hecho lo siguiente:
PHP:
LDHX #RAMEnd+1 ; initialize the stack pointer
TXS
CLI ; enable interrupts
MOV #$FF,PTCDD ;Todo puerto C como salida
BCLR 5,PTBDD ;Bit 5 puerto B como entrada
LDA #1
STA PTBPE ;Habilito resistencia Pull-up del puerto B
mainLoop:
SW≈≈BRSET 5,PTBD,UNO ≈≈aqui checo si la entrada 5 es 0 o 1, si es 0 salta a la
MOV $83,PTCD≈≈≈≈≈etiqueta uno, cuando detecte un uno continuara al
BRSET 0,PTBD,SW≈≈≈siguiente renglon de programa. el tercer renglon, vuelve a
≈≈≈≈≈≈≈≈≈≈≈≈≈≈checar el estado de la entrada, para continuar con el modo
≈≈≈≈≈≈≈≈≈≈≈≈≈≈modo de espera
UNO≈≈JSR TRES
BRA SW
TRES≈≈MOV #$05,PTCD≈≈este es el modo de espera, #$05 enciende el segmento a y los
JSR TIME≈≈≈≈≈≈demás apagados, #$06 enciende el segmento b y así
JSR DOS≈≈≈≈≈≈≈sucesivamente. la subrutina time es el retardo de tiempo,
MOV #$06,PTCD≈≈antes de encender el siguiente segmento, la etiqueta dos
JSR TIME≈≈≈≈≈≈es la subrutina para encender los segmentos del 1 al 6 en el
JSR DOS≈≈≈≈≈≈display.
MOV #$0C,PTCD
JSR TIME
JSR DOS
MOV #$14,PTCD
JSR TIME
JSR DOS
MOV #$24,PTCD
JSR TIME
JSR DOS
MOV #$44,PTCD
JSR TIME
JSR DOS
RTS
DOS ≈≈MOV #$0A,$83≈≈≈#$0A enciende los segmentos b y c para formar el 1, el
BRSET 5,PTBD,SW≈#$B3 enciende los segmentos para formar y el y asi
MOV #$B3,$83≈≈≈sucesivamente.
BRSET 5,PTBD,SW≈≈entre cada valor para encender el numero 1 al 6, hay un
MOV #$9B,$83≈≈≈≈chequeo para ver el estado de la entrada del push button
BRSET 5,PTBD,SW≈≈y saltar a la etiqueta sw, y mover del registro 83 el valor que
MOV #$CA,$83≈≈≈≈en ese momento se encuentre a la salida del puerto C
BRSET 5,PTBD,SW
MOV #$D9,$83
BRSET 5,PTBD,SW
MOV #$F8,$83
BRSET 5,PTBD,SW
RTS
TIME ≈≈MOV #$EF,$81
L2 ≈≈MOV #$EF,$82
L1≈≈≈DBNZ $82,L1
DNZ $81,L2
RTS
Otra manera en la cual lo tenía, era un JSR DOS inmediatamente después del JSR TRES, (sin los 6 JSR DOS que están en toda la subrutina TRES) y de este no presenta ese rebote o interferencia en el display, pero igualmente sólo me muestra el numero 6.
No sé si estoy aplicando bien el pulso del pulsador, pues hace un par de días pensé en usar el VDD para de ahí meter el valor alto al pin 11 (es el pin 5 del puerto B según la hoja de datos) y quemé el microprocesador.
Hoy el interruptor lo pongo del pin 11 a VSS, de este modo es como estoy deteniendo el dado y no parece calentarse el microcontrolador.
Otra cosa que noté, pareciera un error esta parte o tal vez si lo sea:
Código:
SW BRSET 5,PTBD,UNO
MOV $83,PTCD
BRSET 0,PTBD,SW
Agradeceré con gusto todos sus aportes, sugerencias, correcciones o mejoras.
Dicho ésto, no sé si hay un mejor modo de hacer este programa, pues apenas llevo 2 meses involucrado en la programación de este microcontrolador, del uso de CodeWarrior y del lenguaje ensamblador.
Adjuntos
Última edición por un moderador: