1.
; **** Encabezado ****
2. list p=16F84A
3. #include [Link]
4. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
5. ;**** Definicion de variables ****
6. Contador1 equ 0x0C ; Seleccionamos posicion en la
memoria RAM (GPR) para guardar
7. ; registro utilizado para demora.-
8. Contador2 equ 0x0D ; Registro utilizado en demora.-
9. Led equ 0 ; Definimos Led como el bit cero de un
registro, en este caso PORTB.-
10. Pulsador equ 0 ; Definimos Pulsador como el bit
0, en este caso sera para PORTA
11. ;**** Configuracion de puertos ***
12. Reset org 0x00 ; Aqui comienza el micro.-
13. goto Inicio ; Salto a inicio de mi programa.-
14. org 0x05 ; Origen del codigo de programa.-
15. Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco
1.-
16. movlw b'11111' ; Muevo 11111 a W.-
17. movwf TRISA ; Cargo en TRISA.-
18. movlw b'11111110'
19. movwf TRISB
20. bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
21. bcf PORTB,Led ; Comienza apagado.-
22. ;**** Control de Led ****
23. Bucle btfsc PORTA,Pulsador ; Preguntamos si esta en 0
logico.-
24. goto Apagar ; Esta a 1 logico, Apagamos
Led.-
25. bsf PORTB,Led ; Esta a 0 logico,
Encendemos Led.-
26. call Demora_150ms ; Mantenemos prendido 150
milisegundos
27. bcf PORTB,Led ; Apagamos Led
28. call Demora_150ms ; Apagamos durante 150 ms,
Ya realizamos un titilo.-
29. goto Bucle ; Testeamos nuevamente la
condicion del Pulsador
30.
31. Apagar bcf PORTB,Led ;Apagamos Led.-
32. goto Bucle ; Testeamos nuevamente la
condicion del Pulsador.-
33. ;**** Demora ****
34. Demora_150ms
35. movlw 0xFF ;
36. movwf Contador1 ; Iniciamos contador1.-
37. Repeticion1
38. movlw 0xC3 ;
39. movwf Contador2 ; Iniciamos contador2
40. Repeticion2
41. decfsz Contador2,1 ; Decrementa Contador2 y
si es 0 sale.-
42. goto Repeticion2 ; Si no es 0 repetimos ciclo.-
43. decfsz Contador1,1 ; Decrementa Contador1.-
44. goto Repeticion1 ; Si no es cero repetimos
ciclo.-
45. return ; Regresa de la subrutina.-
46.
47. end