Paso 5: PIC 12F508 anotado código fuente; Si alguien tiene un problema de montaje como, por favor comenten
lista p = 12F508; Directiva lista para definir procesador
#include; definiciones de variables específicas del procesador
__CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _IntRC_OSC
; Directiva "__CONFIG" se utiliza para insertar palabra de configuración en el archivo .asm.
; Los lables de tras la Directiva se encuentran en el archivo .inc respectivos.
; Ver hoja de datos correspondiente para obtener información adicional en la palabra de configuración.
; *** DEFINICIONES DE VARIABLES
cblock h 07
www
qw2
Temp
prueba
contador
counter2
on_counter
off_counter
CDDN
; PINOUT
; el pin 1 es poder
; el pin 8 es tierra
; no está conectado el pin 5
botón equ 3; pin 4, para el botón. pullup interna se establece
salida equ 4; pin 3, el P-FET; no hay pullup interna en este pin.
Que debo haber poner un pullup físico en la puerta P-FET,
; en caso de que el PIC a una baja de voltaje o de lo contrario falle.
LED equ 1; pin 6, Hola = en Lo = off
LBI equ 5; aquí va el pin 2, salida de indicador de batería baja de la LT1308.
Si se establece el "bias" resistencias 825K y 67K
; el valor de consigna es 2.9V. Ver hoja de datos de LT1308 para los detalles.
; este pin no tiene también un pullup interna. Olvide de poner esto en el pcb. :)
;**********************************************************************
ORG 0X3FF; vector de reset del procesador
; Valor de calibración RC interno se coloca en lugar 0x3FF por Microchip
; como un movlw k, donde k es un valor literal.
ORG 0X000; codificación comienza aquí
movwf OSCCAL; registro de actualización con valor de fábrica cal
inicializar
movlw b '00000000'
; 7:lo_enable despertador; 6:lo_enable pullups débil; 5:lo_timer reloj fuente es interna
; 4:hi_timer fuente de reloj habilitado en flanco descendente; 3:lo_prescaler seleccione temporizador (vs WDT)
2-0:prescaler (p22)
opción
Inicio
llamada clara; set tristate y salida de pines de I/O por defecto/estado
btfss GPIO, botón, compruebe el estado del botón
Goto en; si pulsa goto
sueño; si no, goto sueño
NOP
En
BSF GPIO, LED; enciende LED
BCF GPIO, salida; activar P-FET
Llame a DD; Debounce Delay
btfss GPIO, botón, compruebe el estado del botón
Goto $-1; espere hasta que se libera antes de continuar con el bucle principal
llamada DD
lazo
btfss GPIO, LBI; este comprueba el indicador de batería baja
Goto LB_shutdown; si los baja, luego ir apagado de batería baja
btfsc GPIO, botón; siempre y cuando no se presiona el botón, el PIC se queda en "bucle".
Goto bucle
cierre; si se pulsa el botón, todo se apaga y el PIC se va a dormir.
; Este dispositivo comienza al principio del código cuando despierta, FYI
Llame a claro;
llamada DD
botón del btfss GPIO,
Goto $-1
llamada DD
sueño
NOP
; Subroutines;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
claro
movlw b '101000'
Tris GPIO
movlw b '010000'
movwf GPIO
volver; este dispositivo realmente no tiene un comando de "retorno".
; Se trata de un pseudo-comando, que actualmente está montado como el "retlw 0" comando.
; Que sólo significa que coloca 0 literal en el acumulador W cuando aparece.
DD
movlw.100
movwf qw2
Goto dsub.2
DSUB.2
decfsz qw1
Goto $-1
decfsz qw2
Goto $-3
volver
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LB_shutdown; Esta es la secuencia de cierre de pantalones de lujo
LB.1
clrf contador
LB.2
btfss GPIO, LBI
Goto LB.3
BSF GPIO, LED
Goto bucle
LB.3
Goto $+ 1; sólo un retraso extra
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
decfsz contador, f
Goto $+ 2
Goto shutdown_kewl
movf contador, w
movwf qw2
movlw b '000010'
xorwf GPIO, f
llamada DLB
movwf temp
decfsz temp, f
Goto LB.2
Goto Apagar
DLB; rutina de retardo batería baja
btfss GPIO, botón, verificar constantemente el estado del botón
retlw.1; si se pulsa, entonces inmediatamente pop con.1 literal en el acumulador,
; así que sabemos que el botón
; fue presionado y el retraso fue salió temprano... así podremos Apagar
; el poder en lugar de seguir la fantasía pantalones blinky luz cerró en rutina.
Goto $+ 1
decfsz qw1
Goto DLB
decfsz qw2
Goto DLB
retlw.0
shutdown_kewl; se descolora hacia fuera el LED, en lugar de simplemente apagar
clrf on_counter
movlw.1
movwf off_counter
shutdown_kewl.1
BSF GPIO, LED
llamar al on_delay
BCF GPIO, LED
llamar al off_delay
off_counter incf, f
decfsz on_counter, f
Goto shutdown_kewl.1
Goto Apagar
on_delay
movf on_counter, w
movwf qw2
Goto se descolora
off_delay
movf off_counter, w
movwf qw2
Goto se descolora
se desvanecen
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
Goto $+ 1
decfsz qw2, f
Goto se descolora
volver
FINAL; Directiva 'fin del programa'