| Hola queria hacerles una consulta, yo tengo que hacer un trabajo para la facu, y no quiero tampoco interiorizarme tanto, y encontre este circuito y le pregunte al profesor si estaba bien, pero como siempre buscan una vuelta mas, y me dijo que habria que agregarle como si habria 4 mesas y cada una con un pulsador, entonces segun la mesa que se presiona aparece una letra (A,B,C o D) y el turno, como este es de cuatro digitos, yo pensaba (nose si se puede) usar el primero para mostrar la letra y los otros 3 para el turno, ahora mi problema es que con este circuito encontre el cogido en asembler para manejarlo con 4 digitos y sin letras, quisiera saber como tendria que ser el codigo, si es que se puede modificar el que consegui para que funcione como les conte, aca les adjunto el codigo en assembler: 
 Código: 
;Contador de 4 digitos.
 
 indo equ 00h ;registro de indireccion
 pc equ 02h ;contador de programa
 status equ 03h ;registro de estado
 fsr equ 04h ;registro de seleccion
 ptoa equ 05h ;puerto a
 ptob equ 06h ;puerto b
 rota equ 0fh ;variable para desplazamiento de display
 trisa equ 85h ;configuracion puerto a
 trisb equ 86h ;configuracion puerto b
 dig1 equ 10h ;acumulador miles
 dig2 equ 11h ;acumulador centenas
 dig3 equ 12h ;acumulador decenas
 dig4 equ 13h ;acumulador unidades
 loops equ 1dh ;variables usadas en retardos
 loops2 equ 1eh
 z equ 02h ;flag de cero
 ram equ 05h ;bit de seleccion de pagina de memoria
 c equ 00h ;flag de acarreo
 w equ 00h ;bit de destino a variable de trabajo
 
 reset org 00
 goto inicio
 org 05h
 
 retardo ;subrutina de retardo
 movwf loops ;la variable de trabajo contiene la cant.
 top2 movlw d'110' ;de ms a demorar
 movwf loops2
 top nop
 nop
 nop
 nop
 nop
 nop
 decfsz loops2 ;controla si termina 1mS
 goto top
 decfsz loops ;controla si termina el retardo completo
 goto top2
 retlw 0
 
 s1000 ;rutina de incremento x 1000
 clrf dig2 ;pone a cero las centenas
 incf dig1 ;incrementa el contador de miles
 movf dig1, w ;carga en work el conteo de los miles
 xorlw 0ah ;si work era 10, entonces quedara en cero
 btfsc status, z ;si es cero, el flag z queda alto
 clrf dig1 ;inicializa los miles
 return
 s100 ;rutina de incremento x 100
 clrf dig3 ;pone a cero las decenas
 incf dig2 ;incrementa el contador de centenas
 movf dig2, w ;carga en work el conteo de las centenas
 xorlw 0ah ;si work era 10, entonces quedara en cero
 btfsc status, z ;si es cero, el flag z queda alto
 call s1000 ;incrementa los miles
 return
 
 s10 ;rutina de incremento x 10
 clrf dig4 ;pone a cero las unidades
 incf dig3 ;incrementa el contador de decenas
 movf dig3, w ;carga en work el conteo de las decenas
 xorlw 0ah ;si work era 10, entonces quedara en cero
 btfsc status, z ;si es cero, el flag z queda alto
 call s100 ;incrementa las centenas
 return
 
 subir ;rutina de incremento
 incf dig4 ;incrementa el contador de unidades
 movf dig4, w ;carga en work el conteo de las unidades
 xorlw 0ah ;si work era 10, entonces quedara en cero
 btfsc status, z ;si es cero, el flag z queda alto
 call s10 ;incrementa las decenas
 movlw d'250' ;retardo de 100ms
 call retardo
 return
 
 tabla ;genera los numeros sobre el display
 addwf pc ;agrega al cont. programa el valor de work
 retlw b'00111111' ;genera el 0
 retlw b'00011000' ;genera el 1
 retlw b'01110110' ;genera el 2
 retlw b'01111100' ;genera el 3
 retlw b'01011001' ;genera el 4
 retlw b'01101101' ;genera el 5
 retlw b'01101111' ;genera el 6
 retlw b'00111000' ;genera el 7
 retlw b'01111111' ;genera el 8
 retlw b'01111101' ;genera el 9
 
 inicio ;programa principal
 bsf status, ram ;selecciona el banco de memoria alto
 movlw b'00010000' ;configura el puerto a
 movwf trisa ;bit 4 entrada, demas bits salidas.
 movlw 00h ;configura el puerto b
 movwf trisb ;como salidas
 bcf status, ram ;selecciona el banco de memoria bajo
 clrf dig1 ;inicializa acumuladores
 clrf dig2
 clrf dig3
 clrf dig4
 movlw 00 ;envia ceros a los transistores para apagar
 movwf ptoa ;todos los displays
 
 empe btfss ptoa, 4 ;chequea el pulsador
 call subir ;llama la rutina de incremento
 movlw 08h ;iniciar un 1 en el registro de rotacion
 movwf rota
 movlw dig1 ;con el registro selector (fsr) se apunta
 movwf fsr ;al primer dato que se va a mostrar
 disp movlw 00h ;colocar en cero el dato del display
 movwf ptob ;para apagarlos
 movf rota, w ;pasa rotacion del 1 a la variable work
 movwf ptoa ;enciende el transistor (display)
 movf indo, w ;lee el dato del registro apuntado por fsr
 call tabla ;genera el digito de 7 segmentos
 movwf ptob ;envia el digito al puerto b
 movlw 03h ;retardo de 3ms para visualizacion
 call retardo
 btfsc rota, 0 ;controla si terminaron las cuatro rotaciones
 goto empe ;si termino, vuelve desde el comienzo
 bcf status, c ;carry en cero para no afectar las rotaciones
 rrf rota ;desplaza el 1 que enciende los displays
 incf fsr ;incrementa el puntero. Apunta el proximo
 goto disp ;digito a mostrar
 
 end
 
 
 Espero que me puedan ayudar asi me puedo sacar la materia de encima, les agradeceria mucho
 Saludos
 
 
   
 Adjunto lo que encontre de este circuito
 
 http://rapidshare.com/files/99373879/ex ... o.doc.html
 
 espero que me puedan ayudar
 |