circuito de pic

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:

;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

Emiliano[/img]
 

Adjuntos

  • circuito_150.gif
    circuito_150.gif
    8.2 KB · Visitas: 537
solo debes añadir mas retlw

Como supongo que tienes el datasheet a mano , primero averigua que patilla enciende cada led(abcde..)
toma como ejemplo los numeros que ya tienes
retlw b'00111111' ;genera el 0

Ya puedes hacer las letras (seguramente en minúscula se ven mejor a,b,c,d)

(Ojo estoy intentando reutilizar codigo)

Tambien debes crear nuevas variables , o sea
Cuatro (uni,decenas y centenas) PANTALLA
Cuatro (uni,decenas y centenas) para el A
Cuatro (uni,decenas y centenas) para el B
Cuatro (uni,decenas y centenas) para el C
Cuatro (uni,decenas y centenas) para el D

La forma de actuar es la siguiente:

Pulsas el pulsador A
incrementas (uni,decenas y centenas) para el A
Copias (uni,decenas y centenas) para el A ->(uni,decenas y centenas) Pantalla
vuelves al principio

Pulsas el pulsador B
incrementas (uni,decenas y centenas) para el B
Copias (uni,decenas y centenas) para el B ->(uni,decenas y centenas) Pantalla
vuelves al principio


Te recomiendo encarecidamente lo simules con el MPLAB para no perder tiempo reprogramando
 
perdon que siga preguntando, pero mucho no caso del tema, como quedaria el codigo con la modificacion? y ese codigo completo donde lo puedo probar? no tengo armado el circuito, nose si vale la pena hacerlo, el profesor me dijo que con un simulador y el codigo estaria bien, gracias por la ayuda, espero que me puedas dar una mano mas
Aca te adjunto el cometario del circuito, no pego el link de la pagina por respeto a esta, como te dije antes no entiendo nada o muy poco entiendo, es esto lo que me pedias?
 

Adjuntos

  • explicacion_del_circuito_182.doc
    22.5 KB · Visitas: 13
Ve a la pagina de microchip y bajate un programa llamado MPLAB.
Buscate algun tutorial o prueba tu mismo el programa, recuerda que por defecto el debuger SIM viene desmarcado y debes activarlo.
Primero creas un poyecto y despues escribes el programa, compilas F9 y simulas.

No hago código, solo te sugiero el camino.
 
cyberpek dijo:
Aca te adjunto el cometario del circuito, no pego el link de la pagina por respeto a esta,...

http://www.pablin.com.ar/electron/circuito/mc/contador/index.htm

No hace falta respeto, el sitio de Pablin fue nombrado muchas veces en el foro, si utilizas el buscador vas a ver que se nombra en mas de 200 post.

Lo que no estas respetando es una de las reglas generales del foro:

7. En nuestra comunidad NO se aplica la ley del mínimo esfuerzo: "no hacer nada y conseguirlo todo".

Saludos..
 
perdon, no era que no queria hacer nada, solo que no entiendo sobre el tema y queria saber como se hace, todo bien investigare a ver si puede hacerlo, gracias
 
hola.
Ten cuidado en la posicion del programa donde metas la tabla con los datos, es frecuente olvidarse que si la pones despues de la posicion FF esta no te funcionara.
Te aconsejo que la situes al inicio del programa.
 
Hola.

En este mismo foro, puse 5 videotutoriales para aprender a utilizar el mplab.

Para hacer este trabajo, te recomiendo que estudies como programar en assembler, desde mi punto de vista, no tienes que hacer ningún cambio en el hardware, solo el software. Pero si no entiendes de programación, no vas a lograr nada.
 
Compilado con el CCS y debugueado desde mplab

En principio esta bien, pero hasta que no tengas programado el pic no lo sabremps a ciencia ciertoa.

Un saludo y buenas noches.
 

Adjuntos

  • contador_c_850.rar
    15.5 KB · Visitas: 9
Atrás
Arriba