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...
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...