tablas para displays en pic

#1
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:
 
#2
Cristian Ayuso

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

Saludos. JuanKa.-
 
#3
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.
 
#4
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
 
#5
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
 
#6
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 :)
 
Arriba