Búsqueda personalizada
Regístrate gratis para participar de los foros, o si ya estás registrado haz login.
| Mar Feb 21, 2006 11:54 pm | ||
|
me ayudan por favor. |
||
| Mie Feb 22, 2006 12:52 am | ||
| Mie Feb 22, 2006 3:29 am | ||
|
Saludos David Fernando Torres De La Mora Diagarama Panel.jpg (79.99 KB) ![]() |
||
| Jue Feb 23, 2006 3:48 am | ||
|
Saludos David Fernando Torres De La Mora Marquesina AT90S8515.jpg (201.61 KB) ![]()
Ultima edición por torresdelamora el Dom Sep 16, 2007 10:34 pm, editado 2 veces |
||
| Vie Feb 24, 2006 12:40 am | ||
|
gracias |
||
| Sab Feb 25, 2006 12:17 am | ||
|
;saludos David Fernando Torres De La Mora .include "4414def.inc" ;PROGRAMA DE PRUEBA DE UNA MATRIZ DE LEDS DE 13 POR 8 LEDS ;INICIADO DOMINGO 9 AGOSTO 2000 ;modificado .def dato =r16 ;registro para datos binarios .def gen =r17 ;registro DE PROPOSITO general .def temp =r18 ;registro de datos temporales .def aux =r19 ;registro auxiliar para ciertas operaciones .def oper1 =r20 .def oper2 =r21 .def caracter=r22 ;registro que sera utilizado como caracter ascii .org $000 rjmp RESET ;;0=48 ;;9=57 ;;A=65 ;;Z=90 ;;a=97 ;;z=122 ;tabla ascii del '1' al '9' ;TASCII1C: .DB ;TASCII1B: .DB ;tabla ascii del 'A' al 'Z' A B C D TASCII2C: .DB $7c,$7e,$43,$43,$43,$43,$7e,$7c, $7f,$7f,$63,$63,$63,$63,$7e,$1c, $7c,$fe,$03,$03,$03,$03,$0e,$0e, $7f,$7f,$03,$03,$03,$06,$7c,$78 TASCII2B: .DB $3f,$3f,$01,$01,$01,$01,$3f,$3f, $3f,$3f,$30,$30,$30,$30,$1f,$0f, $0f,$1f,$30,$30,$30,$30,$1e,$0e, $3f,$3f,$30,$30,$30,$18,$0f,$07 ;tabla ascii del 'a' al 'z' ;TASCII3C: .DB ;TASCII3B: .DB ;tabla del mono (moviendose) primer mono segundo mono tercer mono cuarto mono quinto mono TMONOC: .DB $60,$70,$3b,$7b,$7b,$18,$78,$70, $60,$70,$3b,$7b,$7b,$38,$70,$60, $00,$40,$73,$7b,$7b,$70,$40,$00, $60,$70,$3b,$7b,$7b,$38,$70,$60, $60,$70,$3b,$7b,$7b,$18,$78,$70 TMONOB: .DB $30,$38,$0c,$07,$03,$06,$3c,$38, $00,$30,$3c,$0f,$1f,$38,$20,$00, $00,$00,$00,$0f,$3f,$30,$00,$00, $00,$30,$3c,$0f,$1f,$38,$20,$00, $30,$38,$0c,$07,$03,$06,$3c,$38 ;tabla del mono (moviendose) primer mono segundo mono tercer mono cuarto mono quinto mono ;TMONOC: .DB $60,$70,$3b,$7b,$7b,$18,$78,$70, $60,$70,$38,$7b,$7b,$3b,$70,$60, $00,$40,$70,$7b,$7b,$73,$40,$00, $60,$70,$38,$7b,$7b,$3b,$70,$60, $60,$70,$3b,$7b,$7b,$18,$78,$70 ;TMONOB: .DB $30,$38,$0c,$07,$03,$06,$3c,$38, $00,$30,$3c,$0f,$1f,$38,$20,$00, $00,$00,$00,$0f,$3f,$30,$00,$00, $00,$30,$3c,$0f,$1f,$38,$20,$00, $30,$38,$0c,$07,$03,$06,$3c,$38 RESET: ;inicio del reset, aqui comienza cuando se resetea el caracter ldi gen,$01 out SPH,gen ldi gen,$5f out SPL,gen ;se configura la pila en $025f que es el final de la memoria RAM ldi gen,$ff out DDRB,gen ;el puerto B es salida de datos de las primeras 8 filas out DDRC,gen ;el puerto C es salida de datos de las primeras 8 filas ldi gen,$77 ;el puerto A tiene algunas salidas 01110111 y una entrada PORTB7 out DDRA,gen ;ldi gen,$00 ;este no tiene nada que hacer aqui ; te das cuenta? ldi aux,$00 ;se carga el auxiliar con cero (quien sabe para que investigalo) rcall ESPERA ;aqui todavia no se muestra (ni caracter ni mono) in gen,pind ;se lee el boton (si esta aplastado o no) osea se leyo el puerto andi gen,$04 ;se le hace una and para solo hacele caso al bit del boton cpi gen,$04 ;se compara con $04 para ver si fue aplastado breq CICLO2 ;si fue asi, entonces se va al programa del muñeco ldi caracter,'A' ;y si no, pues por default carga el caracter con 'A' y muestra un caracter CICLO1: ;ciclo 1 es el programa que muestra un caracter A -D rcall CAR_A_PUNT rcall CAR_A_PUNT rcall CAR_A_PUNT ;muestra 3 veces el caracter in gen,pind andi gen,$04 ;se revisa si se aplasto un boton cpi gen,$04 breq INCRE ;si se aplasto un boton, pues se salta a un lugar donde cambia al siguiente caracter rjmp CICLO1 ;y si no pues seguira mostrando el mismo INCRE: inc caracter ;si se decidio cambiar el caracter, se inctementa el caracter cpi caracter,'E' ;y se revisa si ya llego al ultimo brne INC_FIN ;y no fue asi , termina y regresa ldi caracter,'A' ;pero si no vuelve a comenzar en 'A' INC_FIN: rcall ESPERA ;se espera un 'ratito' rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rcall ESPERA rjmp CICLO1 ESPERA: rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY rcall DELAY ret CICLO2: ;ciclo 2 ese el programa que saca un mono caminando rcall SACA_MONO ;se muestra el mismo cuadro 10 veces rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO rcall SACA_MONO inc aux ;se incrementa el aux, (es el apuntador de cuadr, te acuerdas que te dije que lo investigaRAS?) cpi aux,5 ;verifica si es el ultimo cuadro brne CICLO2 ;si no fue asi, muestra el siguiente mono ldi aux,$00 ;y si aSI fue, vuelve a empezar con el primer cuadro rjmp CICLO2 ;y regresa a mostrarlo... ;rutina que toma un caracter en ascii , y lo convierte a puntos ;que sacara por el puerto CAR_A_PUNT: push dato push gen push temp mov oper1,caracter ;el caracter se traslada al registro oper1 para poderlo modificar ;cpi caracter,'0' ;compara caracter con el '0' y salta a zona 0 si es menor ;brmi CAR_ZON_0 ; '0'=48 ;cpi caracter,58 ;compara caracter con 58 y salta a zona 1 (numeros) si es menor ;brmi CAR_ZON_1 ; '9'=57 ;cpi caracter,'A' ;compara caracter con 'A' y salta a zona 0 (letras) si es menor ;brmi CAR_ZON_0 ; 'A'=65 ;cpi caracter,91 ;compara caracter con el 91 y salta a zona 2 si es menor ;brmi CAR_ZON_0 ; 'Z'=90 ;CAR_ZON_0: ;aqui falta************* ;breq CONV_FIN ;CAR_ZON_1: ;aqui falta************* ;subi oper1,'0' ;resta al caratcer el valor ascii del '0' para que A corresponda a 0 ;breq CONV_FIN ;CAR_ZON_2: ;seccion donde se saca la parte de la 'A' a la 'Z' del codigo ascii subi oper1,'A' ;resta al caratcer el valor ascii de la A para que A corresponda a 0 ldi oper2, 8 ;y se multiplica por 8 para poderlo buscar en la tabla rcall MULTIPLICA ;oper1=oper1*oper2 ldi gen,$00 ;gen se utiliza aqui como contador (inicia en cero) ldi temp,$00 ;temp se usa para sumar ceros en la tabla (temp=0) rcall CLEAR_164 ;se borra el 164 rcall SET_164 ;se saca el bit a correr CONV_CICLO_2: ldi ZL,low(TASCII2C) ;se carga en ZL la parte alta de la tabla para puerto c de la letra ldi ZH,high(TASCII2C) ;se carga en ZH la parte baja de la tabla para puerto c de la letra lsl ZL rol ZH add ZL,oper1 ;se desplaza 'oper1' en la tabla adc ZH,temp lpm mov dato,r0 ;se guarda el valor de pixeles para puerto c en dato ldi ZL,low(TASCII2B) ;se carga en ZL la parte alta de la tabla para puerto b de la letra ldi ZH,high(TASCII2B) ;se carga en ZH la parte baja de la tabla para puerto b de la letra lsl ZL rol ZH add ZL,oper1 ;se desplaza 'oper1' en la tabla adc ZH,temp lpm out PORTC,dato ;se saca los pixeles (de la parte de arriba) por puerto c mov dato,r0 out PORTB,dato ;se saca los pixeles (de la parte de abajo) por puerto b rcall DELAY rcall DELAY rcall DELAY rcall CLOCK_164 ;saca un pulso de reloj para el 164 (corre un bit) para cambiar a la siguiente columna inc oper1 ;oper1 se aumenta para apuntar a los sigientes bits de las letras inc gen ;inctementa el contador de columnas cpi gen,8 ;se hace 8 veces para cada columna de el caracter brne CONV_CICLO_2 rjmp CONV_FIN ;cuando acabe salta al final de esta subrutina CONV_FIN: pop temp pop gen pop dato ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;rutina que toma un contador en aux , y saca un dibujo (mono caminando) ;que sacara por el puerto SACA_MONO: push dato push gen push temp mov oper1,aux ;el contador se traslada al registro oper1 para poderlo modificar ldi oper2, 8 ;y se multiplica por 8 para poderlo buscar en la tabla rcall MULTIPLICA ;oper1=oper1*oper2 ldi gen,$00 ;gen se utiliza aqui como contador (inicia en cero) ldi temp,$00 ;temp se usa para sumar ceros en la tabla (temp=0) rcall CLEAR_164 ;se borra el 164 rcall SET_164 ;se saca el bit a correr MONO_CICLO_2: ldi ZL,low(TMONOC) ;se carga en ZL la parte alta de la tabla para puerto c del mono ldi ZH,high(TMONOC) ;se carga en ZH la parte baja de la tabla para puerto c del mono lsl ZL rol ZH add ZL,oper1 ;se desplaza 'oper1' en la tabla adc ZH,temp lpm mov dato,r0 ;se guarda el valor de pixeles para puerto c en dato ldi ZL,low(TMONOB) ;se carga en ZL la parte alta de la tabla para puerto b del mono ldi ZH,high(TMONOB) ;se carga en ZH la parte baja de la tabla para puerto b del mono lsl ZL rol ZH add ZL,oper1 ;se desplaza 'oper1' en la tabla adc ZH,temp lpm out PORTC,dato ;se saca los pixeles (de la parte de arriba) por puerto c mov dato,r0 out PORTB,dato ;se saca los pixeles (de la parte de abajo) por puerto b rcall DELAY rcall DELAY rcall DELAY rcall CLOCK_164 ;saca un pulso de reloj para el 164 (corre un bit) para cambiar a la siguiente columna inc oper1 ;oper1 se aumenta para apuntar a los sigientes bits de las letras inc gen ;inctementa el contador de columnas cpi gen,8 ;se hace 8 veces para cada columna de el caracter brne MONO_CICLO_2 rjmp MONO_FIN ;cuando acabe salta al final de esta subrutina MONO_FIN: pop temp pop gen pop dato ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina que borra el barrido (borra a los 74ls164);;;;;;;;;;;;;;;;; CLEAR_164: cbi PORTA,PA1 ;saca un 0 por el puerto A 1 que va al clear de los 165 rcall CLOCK_164 sbi PORTA,PA1 ;saca un 1 por el puerto A 1 que va al clear de los 165 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina que enciende la primer salida de los 164;;;;;;;;;;;;;;;;; SET_164: sbi PORTA,PA2 ;enciende el bit que va a correr rcall CLOCK_164 cbi PORTA,PA2 ;apaga para que solo sea un bit el que corre ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina un pulso de reloj ;;;;;;;;;;;;;;;;; CLOCK_164: sbi PORTA,PA0 ;y prende un ciclo de reloj nop nop nop nop cbi PORTA,PA0 ;apaga el ciclo de reloj ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; algoritmo de mutliplicacion oper1 =oper1*oper2;;;;;;;;;; MULTIPLICA: push temp ;se guardan temp y oper2 por si se utilizaban antes push oper2 mov temp,oper1 dec oper2 cpi oper2,$00 ;**probar quitando este********* breq MUL_FIN MUL_CICLO: add oper1,temp ;hace oper2 sumas de oper1 para obtener la multiplicacion dec oper2 cpi oper2,$00 brne MUL_CICLO MUL_FIN: pop oper2 ;se sacan temp y oper2 de la pila pop temp ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rutina de retardo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELAY: push temp ldi temp,$00 FOR_DELAY: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop inc temp cpi temp,$255 brne FOR_DELAY pop temp ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
| Sab Feb 25, 2006 12:19 am | ||
|
; Saludos David Fernando Torres De La Mora .include "4414def.inc" ;programa de prueba de matriz de leds ;iniciado 9 de junio 2000 ;modificado lunes 21 de agosto 2000 .def segundo1=r4 .def segundo2=r5 .def minuto1=r6 .def minuto2=r7 .def hora1=r8 .def hora2=r9 .def gen=r16 ;registro DE PROPOSITO general .def temp=r17 ;registro de datos temporales .def fcont=r17 .def columna=r18 .def desplaza=r19 .def caracter=r20 .def dato=r21 .def pos=r22 .def aux=r23 .def bandera=r24 .org $000 rjmp RESET .org $004 ;f424 rjmp TIMER_SEGUNDO ;A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ALFABETO: .DB $7e,$09,$09,$09,$7e,$7F,$49,$49,$49,$36,$3e,$41,$41,$41,$22,$7f,$41,$41,$22,$1c,$7f,$49,$49,$49,$49,$7f,$09,$09,$09,$01,$3e,$41,$49,$49,$3a,$7f,$08,$08,$08,$7f,$00,$00,$7f,$00,$00,$30,$40,$40,$40,$3f,$7f,$08,$14,$22,$41,$7F,$40,$40,$40,$40,$7f,$02,$0c,$02,$7f,$7f,$04, $08,$10,$7f,$3e,$41,$41,$41,$3e,$7e,$09,$09,$09,$06,$3E,$41,$51,$61,$7e,$7f,$09,$19,$29,$46,$26,$49,$49,$49,$32,$01,$01,$7f,$01,$01,$3f,$40,$40,$40,$3f,$1f,$20,$40,$20,$1f,$7f,$20,$18,$20,$7f,$63,$14,$08,$14,$63,$03,$04,$78,$04,$03,$61,$51,$49,$45,$43 ;$10,$7f,$7e,$09,$11, Ñ ;0 1 2 3 4 5 6 7 8 9 NUMEROS: .DB $3e,$51,$49,$45,$3e, $44,$42,$7f,$40,$40, $66,$51,$49,$45,$42,$22,$49,$49,$49,$36,$08,$0c,$0a,$7f,$08, $2f,$49,$49,$49,$31, $3e,$49,$49,$49,$32, $61,$11,$09,$05,$03, $36,$49,$49,$49,$36, $26,$49,$49,$49,$36 PMENSAJE: .DB "DAVID FERNANDO TORRES DE LA MORA" .dseg leds: .byte 220 ;220 columnas en 220 bytes .cseg RESET: ldi gen,$01 out SPH,gen ldi gen,$5f out SPL,gen ldi gen,$00 mov segundo1,gen mov segundo2,gen mov minuto1,gen mov minuto2,gen ldi gen,$02 mov hora2,gen ldi gen,$01 mov hora1,gen ldi gen,$0b ;hace que el prescaler divida entre 64 out TCCR1B,gen ldi gen,$f4 ;carga f424 para comparacion A en el timer 1 out OCR1AH,gen ;para que al ser didvidido el reloj entre 64 ldi gen,$24 ;haga una interrupcion cada segundo out OCR1AL,gen ldi gen,$40 ;se habilita la interrupcion de comparacion A out TIMSK,gen ;del timer 1 (16 bits) ldi gen,$ff out DDRB,gen ;el puerto B es salida de datos de las primeras 8 filas ldi gen,$77 ;el puerto A tiene algunas salidas 01110111 y una entrada PORTB7 out DDRA,gen ldi gen,$00 sei ldi bandera,00 in gen,pind andi gen,$04 cpi gen,$04 breq CICLO2 CICLO1: rcall MENSAJE1 ;se muestra el mensaje 1 rcall MENSAJE2 ;se muestra el mensaje 2 rcall MENSAJE3 ;se muestra el mensaje 3 rcall MUES_CLOCK ;se muestra el reloj rcall MENSAJE4 ;se muestra el mensaje 4 rcall MENSAJE5 ;se muestra el mensaje 5 rcall MENSAJE6 ;se muestra el mensaje 6 rcall MUES_CLOCK ;se muestra el reloj cpi bandera,$01 ;si la bandera es igual a 1 breq CICLO1_BLOQUEO rjmp CICLO1 CICLO1_BLOQUEO: rcall BLOQUEO ;salta a BLOQUEo que es una rutina donde se muestra el mensaje2 rjmp CICLO1 CICLO2: rcall MENSAJE3 rjmp CICLO2 BLOQUEO: rcall sMENSAJE2 rcall sMENSAJE2 ldi bandera,$00 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rutina de retardo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELAY: ldi fcont,$00 FOR_DELAY: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop inc fcont cpi fcont,$255 brne FOR_DELAY ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina que borra el barrido (borra a los 74ls164);;;;;;;;;;;;;;;;; CLEAR_164: cbi PORTA,PA1 ;saca un 0 por el puerto A 1 que va al clear de los 165 rcall CLOCK_164 sbi PORTA,PA1 ;saca un 1 por el puerto A 1 que va al clear de los 165 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina que enciende la primer salida de los 164;;;;;;;;;;;;;;;;; SET_164: sbi PORTA,PA2 ;enciende el bit que va a correr rcall CLOCK_164 cbi PORTA,PA2 ;apaga para que solo sea un bit el que corre ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;rutina un pulso de reloj ;;;;;;;;;;;;;;;;; CLOCK_164: sbi PORTA,PA0 ;y prende un ciclo de reloj nop nop nop nop cbi PORTA,PA0 ;apaga el ciclo de reloj ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;rutina que toma un caracter en ascii (letras), y lo convierte a puntos copiandolos a la zona;; ;;;;;;;;;;;;;;;;;;;;;;;de memoria de los leds, dadole un desplazamiento ;;;;;;;;;;;;;;;;;; CONV: push gen push temp mov aux,caracter subi aux,' ' ; ta al caratcer el valor ascii de la A para que A corresponda a 0 ldi gen,5 rcall MULTIPLICA ;aux*gen ldi gen,$00 CONV_CICLO: ldi temp,$00 ldi ZL,low(ALFABETO) ldi ZH,high(ALFABETO) lsl ZL rol ZH add ZL,aux adc ZH,temp lpm mov dato,r0 ldi temp,$00 ldi XL,low(leds) ldi XH,high(leds) add XL,desplaza adc XH,temp st X,dato inc aux inc desplaza inc gen cpi gen,5 brne CONV_CICLO pop temp pop gen ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;rutina que toma un caracter en ascii (numeros), y lo convierte a puntos copiandolos a la zona;; ;;;;;;;;;;;;;;;;;;;;;de memoria de los leds, dadole un desplazamiento ;;;;;;;;;;;;;;;;;; CONV_NUM: push gen push temp mov aux,caracter ldi gen,5 rcall MULTIPLICA ;aux*gen ldi gen,$00 CONV_NUM_CICLO: ldi temp,$00 ldi ZL,low(NUMEROS) ldi ZH,high(NUMEROS) lsl ZL rol ZH add ZL,aux adc ZH,temp lpm mov dato,r0 ldi temp,$00 ldi XL,low(leds) ldi XH,high(leds) add XL,desplaza adc XH,temp st X,dato inc aux inc desplaza inc gen cpi gen,5 brne CONV_NUM_CICLO pop temp pop gen ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;rutina que borra la memoria de los leds ;;;;;;;;;;;;;;;;;; BORRA: push gen push temp ldi gen,$00 BORRA_CICLO: ldi temp,$00 ldi XL,low(leds) ldi XH,high(leds) add XL,gen adc XH,temp st X,temp inc gen cpi gen,220 brne BORRA_CICLO pop temp pop gen ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;rutina que copia de la zona de memoria "leds" a los leds;;;;;;;;;;;;;; COPY: push temp push dato ldi columna,$00 mov dato,pos rcall CLEAR_164 rcall SET_164 CONTINUA: ldi temp,$00 ldi XL,low(leds) ldi XH,high(leds) add XL,dato adc XH,temp ld temp,X out PORTB,temp rcall DELAY ;ldi temp,$00 ;out PORTB,temp rcall CLOCK_164 inc dato inc columna ;AUMENTO EL CONTADOR DE COLUMNAS cpi columna,50 brne CONTINUA pop dato pop temp ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; algoritmo de mutliplicacion aux * gen;;;;;;;;;;; MULTIPLICA: push temp mov temp,aux dec gen cpi gen,$00 breq MUL_FIN MUL_CICLO: add aux,temp dec gen cpi gen,00 brne MUL_CICLO MUL_FIN: pop temp ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE1: push aux cpi bandera,$01 breq MENSAJE1_FIN ldi desplaza,6 ldi pos,$00 rcall BORRA ldi caracter,'M' rcall CONV inc desplaza ldi caracter,'A' rcall CONV inc desplaza ldi caracter,'N' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'J' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE1_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE1_COPIA ldi bandera,$01 rjmp MENSAJE1_FIN MENSAJE1_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE1_CICLO inc aux cpi aux,70 brne MENSAJE1_copia MENSAJE1_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE2: push aux cpi bandera,$01 breq MENSAJE2_FIN ldi desplaza,15 ldi pos,$00 rcall BORRA ldi caracter,'C' rcall CONV inc desplaza; ldi caracter,'O' rcall CONV inc desplaza ldi caracter,'N' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE2_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE2_COPIA ldi bandera,$01 rjmp MENSAJE2_FIN MENSAJE2_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE2_CICLO inc aux cpi aux,70 brne MENSAJE2_copia MENSAJE2_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE3: push aux cpi bandera,$01 breq MENSAJE3_FIN ldi desplaza,4 ldi pos,$00 rcall BORRA ldi caracter,'C' rcall CONV inc desplaza ldi caracter,'U' rcall CONV inc desplaza ldi caracter,'I' rcall CONV inc desplaza ldi caracter,'D' rcall CONV inc desplaza ldi caracter,'A' rcall CONV inc desplaza ldi caracter,'D' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE3_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE3_COPIA ldi bandera,$01 rjmp MENSAJE3_FIN MENSAJE3_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE3_CICLO inc aux cpi aux,70 brne MENSAJE3_copia MENSAJE3_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE4: push aux cpi bandera,$01 breq MENSAJE4_FIN ldi desplaza,1 ldi pos,$00 rcall BORRA ldi caracter,'G' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi caracter,'B' rcall CONV inc desplaza ldi caracter,'I' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'R' rcall CONV inc desplaza ldi caracter,'N' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE4_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE4_COPIA ldi bandera,$01 rjmp MENSAJE4_FIN MENSAJE4_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE4_CICLO inc aux cpi aux,70 brne MENSAJE4_copia MENSAJE4_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE5: push aux cpi bandera,$01 breq MENSAJE5_FIN ldi desplaza,15 ldi pos,$00 rcall BORRA ldi caracter,'D' rcall CONV inc desplaza; ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'L' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE5_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE5_COPIA ldi bandera,$01 rjmp MENSAJE5_FIN MENSAJE5_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE5_CICLO inc aux cpi aux,70 brne MENSAJE5_copia MENSAJE5_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE6: push aux cpi bandera,$01 breq MENSAJE6_FIN ldi desplaza,7 ldi pos,$00 rcall BORRA ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'S' rcall CONV inc desplaza ldi caracter,'T' rcall CONV inc desplaza ldi caracter,'A' rcall CONV inc desplaza ldi caracter,'D' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE6_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE6_COPIA ldi bandera,$01 rjmp MENSAJE6_FIN MENSAJE6_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE6_CICLO inc aux cpi aux,70 brne MENSAJE6_copia MENSAJE6_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENSAJE7: push aux cpi bandera,$01 breq MENSAJE7_FIN ldi desplaza,1 ldi pos,$00 rcall BORRA ldi caracter,'W' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'L' rcall CONV inc desplaza ldi caracter,'L' rcall CONV inc desplaza ldi caracter,'C' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi caracter,'M' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi aux,$00 ldi pos,$00 MENSAJE7_CICLO: in gen,PIND andi gen,$04 cpi gen,$04 brne MENSAJE7_COPIA ldi bandera,$01 rjmp MENSAJE7_FIN MENSAJE7_COPIA: rcall COPY rcall COPY rcall COPY brne MENSAJE7_CICLO inc aux cpi aux,70 brne MENSAJE7_copia MENSAJE7_FIN: pop aux ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;funcion que muestra un mensaje en la pantalla de leds.;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sMENSAJE2: ldi desplaza,50 ldi pos,$00 rcall BORRA ldi caracter,'C' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'N' rcall CONV inc desplaza ldi caracter,'T' rcall CONV inc desplaza ldi caracter,'R' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza inc desplaza inc desplaza inc desplaza ldi caracter,'B' rcall CONV inc desplaza ldi caracter,'L' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza ldi caracter,'Q' rcall CONV inc desplaza ldi caracter,'U' rcall CONV inc desplaza ldi caracter,'E' rcall CONV inc desplaza ldi caracter,'A' rcall CONV inc desplaza ldi caracter,'D' rcall CONV inc desplaza ldi caracter,'O' rcall CONV inc desplaza sMENSAJE_CICLO2: rcall COPY rcall COPY rcall COPY inc pos cpi pos,170 brne sMENSAJE_CICLO2 ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;funcion que muestra el reloj en la pantalla de leds;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MUES_CLOCK: push temp ldi temp,00 cpi bandera,$01 breq CLOCK_FIN CLOCK_CICLO: rcall BORRA ldi desplaza,05 ldi pos,$00 mov caracter,hora1 rcall CONV_NUM inc desplaza mov caracter,hora2 rcall CONV_NUM inc desplaza inc desplaza inc desplaza mov caracter,minuto1 rcall CONV_NUM inc desplaza mov caracter,minuto2 rcall CONV_NUM inc desplaza inc desplaza inc desplaza mov caracter,segundo1 rcall CONV_NUM inc desplaza mov caracter,segundo2 rcall CONV_NUM inc desplaza in gen,PIND andi gen,$04 cpi gen,$04 brne CLOCK_COPIA ldi bandera,$01 rjmp CLOCK_FIN CLOCK_COPIA: rcall COPY rcall COPY rcall COPY rcall COPY inc temp cpi temp,60 brne CLOCK_CICLO CLOCK_FIN: pop temp ret ;;;;;;;;;;;;;;;;rutina de interrupcion del timer 1;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;que se ejecuta cada segundo;;;;;;;;;;;;;;;;;;;;;;;;;; TIMER_SEGUNDO: push gen inc segundo2 ldi gen,10 cp gen,segundo2 brne TIMER_FIN ldi gen,$00 mov segundo2,gen inc segundo1 ldi gen,6 cp gen,segundo1 brne TIMER_FIN INC_MINUTO2: ldi gen,$00 mov segundo1,gen mov segundo2,gen ldi gen,10 inc minuto2 cp gen,minuto2 brne TIMER_FIN INC_MINUTO1: ldi gen,$00 mov minuto2,gen inc minuto1 ldi gen,6 cp gen,minuto1 brne TIMER_FIN INC_HORA2: ldi gen,$00 mov minuto1,gen mov minuto2,gen ldi gen,3 inc hora2 cp gen,hora2 brne TIMER_FIN ldi gen,$01 cp gen,hora1 brne TIMER_FIN mov hora2,gen ;hora2 <- 1 ya no se hace la carga a gen porque ya la tiene ldi gen,$00 mov hora1,gen ldi gen,10 cp hora2,gen brne TIMER_FIN ldi gen,$00 mov hora2,gen inc hora1 TIMER_FIN: pop gen reti ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ultima edición por torresdelamora el Lun May 08, 2006 4:26 pm, editado 3 veces |
||
| Mie Mar 08, 2006 1:53 am | ||
|
|
||
| Mar May 23, 2006 2:39 pm | ||
|
salu2. |
||
| Mar May 23, 2006 2:41 pm | ||
|
|
||
| Mie May 24, 2006 8:24 pm | ||
|
En el de 7 por 50 puedes incrementar mas columnas tantas como acepte la memoria, ademas de que la intensidad de iluminacion de los leds bajaria pues estarian menos tiempo encendidos, en este caso estan encendidos 1/50 del tiempo pues estamos usando un "barrido" de 50 posiciones. en el de 7 por 50 toma el caracter a mostrar y lo copia en pixeles a una zona de memoria, y de ahi la transfiere al puerto usando el barrido. En el de 8 por 13 tiene la opcion de usar el puerto RS232 pero en el programa que puse no lo usa, tengo por ahi otro que si lo utiliza, la idea de usar un caracter es de volverlo modular, se hacen muchos iguales, y via RS 232 le llega la señal a todos los caracteres, cada caracter tendra una direccion unica para que sepa que parte del mensaje va a desplegar Saludos |
||
| Sab Ago 05, 2006 3:24 pm | ||
torresdelamora escribió:La memoria que usa es la RAM del 8515 o 4414, el 8515 tiene el doble de memoria que el 4414, nada impide que los datos que quieras desplegar se puedan grabar en la EEPROM de datos que tienen estos Micros, el de 7 por 50 el movimiento lo hace desplazando los caracteres hacia la izquierda, en el de 8 por 13 puedes hacer animaciones sencillas. |
||
| Vie Ago 18, 2006 3:30 am | ||
|
|
||
| Dom Feb 11, 2007 9:42 pm | ||
|
Sincerly, Gavo. |
||
| Lun Feb 12, 2007 9:43 pm | ||
|
|
||
| Jue Abr 19, 2007 6:50 pm | ||
|
no se si has trabajado el ds1307. el programa lo tengo con asm y un lcd me marca los min,hor.seg pero para pasarlo a displays los numero no semuestan los display se actualizan cada 10seg no acorde al tiempo real, cabe decir que el programa esta simulado en proteius 6.9 solamente ;nada en fisico. con el lcd funciona bien pero con los seis displays no. saludos y gracias |
||
| Dom Abr 22, 2007 3:30 pm | ||
|
|
||