ist p=16f877
include "p16f877.inc"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
org 0x00
goto Inicio
org 0x05
Auxiliar EQU 0X21
Inicio ;este programa enciende 1 segundo y apaga un segundo un led en ra1
clrwdt
bsf STATUS,RP0
movlw 0x06
movwf ADCON1 ; pasa al banco 1 y convierte en E/S digitles
movlw 0xFF
movwf TRISB
clrf TRISA ; configura a puertoa como salidas
movlw 0x07
movwf OPTION_REG ; pre-escaler de 1:256 a Tmr0
BCF STATUS,RP0
Ciclo
bsf PORTA,1 ; enciende a ra1 y llama a temporizado de 1 segundo
call Temporizado
bcf PORTA,1
CALL Temporizado ; apaga a ra1 y lla a temporizado de 1 segundo
goto Ciclo
Temporizado
movlw .16
movwf Auxiliar ; debido a que el pic solo llega 16ms se necestia a auxiliar para llegar a 1 segundo
clrf TMR0 ; asocia el valor de 0 a tmr0 para que realice 256 incrementos
Sigue1
bcf INTCON,T0IF ; borra la bandera de desborde de tmr0
Sigue
clrwdt ;refresca el watchdog
btfss INTCON,T0IF ; ya se desbordo tmro?
goto Sigue ; no, sigue con el incremento en la etiqueta Sigue
decfsz Auxiliar,1 ; si, se desbordo , pregunta si auxiliar ya es cero
goto Sigue1 ; no, vuelve a temporizar con tmr0 y decrementa auxiliar una vez mas
return ; ya auxiliar es cero, vuelve al program pral.
end