tablas para displays en pic

hola, quiero controlar un display aprovechando las tablas, he mirado en una pagina y éste es el programa en assembler:
1. ; **** Encabezado ****
2. list p=16F84A
3. #include P16F84A.inc
4. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
5. ;**** Definicion de variables ****
6. Contador equ 0x0C ; Registro para almacenar conteo
7. Contador1 equ 0x0D ; Registro utilizado en demora.-
8. Contador2 equ 0x0E ; Registro utilizado en demora.-
9. Pulsador equ 7 ; Definimos Pulsador como el bit 7, en este caso sera para PORTB
10.;**** Inicio del Micro ****
11.Reset org 0x00 ; Aqui comienza el micro.-
12. goto Inicio ; Salto a inicio de mi programa.-
13.
14.
15.;**** Tabla de conversion BCD a 7 Segmentos ****
16.; Se coloca al inicio para asegurar ubicacion en Pagina.-
17. org 0x05 ; Origen del codigo de tabla.-
18.BCD7SEG: ; retlw b'gfedcba' para display catodo comun
19. addwf PCL,1 ; Se incrementa el contador del programa.-
20. retlw b'0111111' ; 0
21. retlw b'0000110' ; 1
22. retlw b'1011011' ; 2
23. retlw b'1001111' ; 3
24. retlw b'1100110' ; 4
25. retlw b'1101101' ; 5
26. retlw b'1111101' ; 6
27. retlw b'0000111' ; 7
28. retlw b'1111111' ; 8
29. retlw b'1101111' ; 9
30. clrf Contador ; Si llega 10, se resetea contador
31. retlw b'0111111' ; 0
32.
33.;**** Programa principal ****
34.;**** Configuración de puertos ****
35.Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.-
36. movlw b'10000000' ; RB7 como entrada y los demas como salida.-
37. movwf TRISB
38. bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
39. movlw b'0111111' ; Comienza en cero.-
40. movwf PORTB
41. clrf Contador
42.;**** Testeo de Pulsador ****
43.Testeo
44. btfss PORTB,Pulsador ; Testeamos si esta a 1 logico.-
45. goto Testeo ; No, seguimos testeando.-
46. call Demora_20ms ; Eliminamos Efecto rebote
47. btfss PORTB,Pulsador ; Testeamos nuevamente.-
48. goto Testeo ; Falsa Alarma, seguimos testeando.-
49. incf Contador,1 ; Se ha pulsado, incrementamos contador.-
50. movfw Contador ; pasamos contador a W
51. call BCD7SEG ; Llamamos tabla.-
52. movwf PORTB ; Cargamos valor recibido por Tabla en PORTB
53. btfsc PORTB,Pulsador ; Esperamos a que se suelte el pulsador -**-
54. goto $-1 ; No, PCL - 1, --> btfss PORTA,Pulsador.-
55. call Demora_20ms ; Eliminamos efecto rebote.-
56. btfsc PORTB,Pulsador ; Testeamos nuevamente.-
57. goto $-4 ; No, Falsa alarma, volvemos a testear a que se suelte (**).-
58.goto Testeo ; Si, Testeamos nuevamente.-
59.
60.;**** Demora ****
61.Demora_20ms
62. movlw 0xFF ;
63. movwf Contador1 ; Iniciamos contador1.-
64.Repeticion1
65. movlw 0x19 ;
66. movwf Contador2 ; Iniciamos contador2
67.Repeticion2
68. decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
69. goto Repeticion2 ; Si no es 0 repetimos ciclo.-
70. decfsz Contador1,1 ; Decrementa Contador1.-
71. goto Repeticion1 ; Si no es cero repetimos ciclo.-
72. return ; Regresa de la subrutina.-
73.
end

y mi duda esta en que funcion tiene el registro ''contador'' en este programa...:unsure:
 
Cristian Ayuso

En las lineas "6, 7 y 8" estan declarados los registros "Contador, Contador1 y Contador2". Es eso lo que buscabas ????

Saludos. JuanKa.-
 
hola, quiero controlar un display aprovechando las tablas, he mirado en una pagina y éste es el programa en assembler:
1. ; **** Encabezado ****
2. listp=16F84A
3. #include P16F84A.inc
4. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
5. ;**** Definicion de variables ****
6. Contador equ 0x0C ; Registro para almacenar conteo
7. Contador1 equ 0x0D ; Registro utilizado en demora.-
8. Contador2 equ 0x0E ; Registro utilizado en demora.-
9. Pulsador equ7; Definimos Pulsador como el bit 7, en este caso sera para PORTB
10.;**** Inicio del Micro ****
11.Reset org 0x00 ; Aqui comienza el micro.-
12.goto Inicio ; Salto a inicio de mi programa.-
13.
14.
15.;**** Tabla de conversion BCD a 7 Segmentos ****
16.; Se coloca al inicio para asegurar ubicacion en Pagina.-
17.org 0x05 ; Origen del codigo de tabla.-
18.BCD7SEG: ; retlw b'gfedcba' para display catodo comun
19.addwfPCL,1; Se incrementa el contador del programa.-
20.retlw b'0111111'; 0
21.retlw b'0000110'; 1
22.retlw b'1011011'; 2
23.retlw b'1001111'; 3
24.retlw b'1100110'; 4
25.retlw b'1101101'; 5
26.retlw b'1111101'; 6
27.retlw b'0000111'; 7
28.retlw b'1111111'; 8
29.retlw b'1101111'; 9
30.clrf Contador ; Si llega 10, se resetea contador
31.retlw b'0111111'; 0
32.
33.;**** Programa principal ****
34.;**** Configuración de puertos ****
35.Inicio bsfSTATUS,RP0; Pasamos de Banco 0 a Banco 1.-
36.movlw b'10000000'; RB7 como entrada y los demas como salida.-
37.movwfTRISB
38.bcfSTATUS,RP0; Paso del Banco 1 al Banco 0
39.movlw b'0111111'; Comienza en cero.-
40.movwfPORTB
41.clrf Contador
42.;**** Testeo de Pulsador ****
43.Testeo
44.btfssPORTB,Pulsador ; Testeamos si esta a 1 logico.-
45.goto Testeo ; No, seguimos testeando.-
46.call Demora_20ms ; Eliminamos Efecto rebote
47.btfssPORTB,Pulsador ; Testeamos nuevamente.-
48.goto Testeo ; Falsa Alarma, seguimos testeando.-
49.incf Contador,1; Se ha pulsado, incrementamos contador.-
50.movfw Contador ; pasamos contador a W
51.call BCD7SEG ; Llamamos tabla.-
52.movwfPORTB; Cargamos valor recibido por Tabla en PORTB
53.btfscPORTB,Pulsador ; Esperamos a que se suelte el pulsador -**-
54.goto $-1; No, PCL - 1, --> btfss PORTA,Pulsador.-
55.call Demora_20ms ; Eliminamos efecto rebote.-
56.btfscPORTB,Pulsador ; Testeamos nuevamente.-
57.goto $-4; No, Falsa alarma, volvemos a testear a que se suelte (**).-
58.goto Testeo ; Si, Testeamos nuevamente.-
59.
60.;**** Demora ****
61.Demora_20ms
62.movlw 0xFF ;
63.movwf Contador1 ; Iniciamos contador1.-
64.Repeticion1
65.movlw 0x19 ;
66.movwf Contador2 ; Iniciamos contador2
67.Repeticion2
68.decfsz Contador2,1; Decrementa Contador2 y si es 0 sale.-
69.goto Repeticion2 ; Si no es 0 repetimos ciclo.-
70.decfsz Contador1,1; Decrementa Contador1.-
71.goto Repeticion1 ; Si no es cero repetimos ciclo.-
72. return ; Regresa de la subrutina.-
73.
end

y mi duda esta en que funcion tiene el registro ''contador'' en este programa...:unsure:

no se si este en lo correcto, pero la variable contador solo la utiliza para comparar la posición que debe moverse PCL y tomara el dato de la tabla para regresar el valor que tiene retlw seguan el valor que se encuentre en el contador.
 
Elvic, en este programa, si presuponemos que la dirección 0x0C esta inicialmente a 0 ( digo presuponemos porque lo mas correcto seria colocarla a 0...) cada vez que pulses el pulsador en el display ira aumentando de 1 en 1 el numero, y después del 9, reseteara la dirección 0x0C y aparecerá un 0, y así hasta el infinito :LOL: es decir, la función del registro contador en este programa no es otra que la de 'recordar' que numero hay en esa dirección, para sumarlo a PLC cuando toca y dirigir al PORTB el numero correcto
 
Elvic, en este programa, si presuponemos que la dirección 0x0C esta inicialmente a 0 ( digo presuponemos porque lo mas correcto seria colocarla a 0...) cada vez que pulses el pulsador en el display ira aumentando de 1 en 1 el numero, y después del 9, reseteara la dirección 0x0C y aparecerá un 0, y así hasta el infinito :LOL: es decir, la función del registro contador en este programa no es otra que la de 'recordar' que numero hay en esa dirección, para sumarlo a PLC cuando toca y dirigir al PORTB el numero correcto

haaa ya....(y)

algo así quise decir en el anterior mensaje :LOL:.... claro me faltaron detalles

pero gracias por tu explicación ... esperemos le sirva de ayuda al autor del primer mensaje...

suerte
 
aissss sorry Elvi, nose porque pensaba que habías escrito tu el mensaje :LOL:D Iba dirigida cristian ayuso la respuesta jejejejej Ibas bien encaminado Elvi, pero como como estabas seguro, ratificaba tu respuesta con la mia :)
 
Atrás
Arriba