Está en la página 1de 6

Del PDF MANUALPIC

STATUS EQU 0X03


OPTIONR EQU 0X81
TRISA EQU 0X85
PORTA EQU 0X05
TRISB EQU 0X86
PORTB EQU 0X06

INICIO

BSF STATUS,5 ;SE PASA AL BANCO 1 DE RAM
CLRF TRISA ;SE PROGRAMA EL PUERTO A COMO SALIDA
MOVLW 0XF
MOVWF TRISB ;PARTE ALTA COMO SALIDA Y BAJA COMO
ENTRADA
BCF OPTIONR,7 ;SE HABILITAN RESISTENCIAS DEL PULL UP
BCF STATUS,5 SE PASA AL BANCO CERO DE RAM
LOOP:
COMF PORB,0 ;SE LEE EL PUERTO B,SE COMPLETA SU VALOR Y EL
PASA A W.
MOVWF PORTA ; SE PASA RESULTADO DE W AL PUERTO A
GOTO LOOP ;EJECUTA UN CICLO INFINITO
END

;rutina de display dinmico de dos dgitos)

;RITUTNA DE DISPLAY DINAMICO DE DOS DIGITOS
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0

CONT2 EQU 0X0D
DATO1 EQU 0X0E
DATO2 EQU 0X0F
DEL1 EQU 0X10
DEL2 EUQ 0X11

DISPLAY
BANK1
CLRF TRISA ;PUERTO A COMO SALIDA
CLRF TRISB ;PUERTO B COMO SALIDA
BANK0
MOVLW 0X03 ;INHABILITAR TRANSISTORES
MOVWF PORTA
MOVLW .10 ;VALOR DE REPETICIONES
MOVWF CONT2
LOOPDISP
;SACAR AL PUERTO EL DATO 1 POR UN TIEMPO ESPECIFICADO
MOVF DATO1,W ;DATO PARA DECODIFICAR
CALL TABLA ;DECODIFICACION DEL DATO
MOVWF PORTB ;DATO DECODIFICADO AL PUERTO
BCF PORTA,0 ;HABILITA Q DATO 1
CALL RETDIG ;RETARDO DE DIGITO
BSF PORTA0 ;INHABILITA Q DATO 1
NOP ;RETARDO DE APAGADO
NOP
NOP
NOP
NOP
NOP

DECFSZ CONT2,F ;DECREMENTA CONT2, ELUDE SIG. SI CERO
GOTO LOOPDISP ;REPITE CICLO
RETURN

TABLA
ADDWF PCL,F
RETLW 0X01 ;CUANDO EL DIGITO ES 0
RETLW 0X4F ;CUANDO EL DIGITO ES 1
RETLW 0X12 ;CUANDO EL DIGITO ES 2
RETLW 0X06 ;CUANDO EL DIGITO ES 3
RETLW 0X4C ;CUANDO EL DIGITO ES 4
RETLW 0X24 ;CUANDO EL DIGITO ES 5
RETLW 0X20 ;CUANDO EL DIGITO ES 6
RETLW 0X0F ;CUANDO EL DIGITO ES 7
RETLW 0X00 ;CUANDO EL DIGITO ES 8
RETLW 0X04 ;CUANDO EL DIGITO ES 9
RETLW 0X08 ;CUANDO EL DIGITO ES A
RETLW 0X60 ;CUANDO EL DIGITO ES B
RETLW 0X31 ;CUANDO EL DIGITO ES C
RETLW 0X42 ;CUANDO EL DIGITO ES D
RETLW 0X30 ;CUANDO EL DIGITO ES E
RETLW 0X38 ;CUANDO EL DIGITO ES F

RETDIG
MOVLW 2
MOVWF DEL2
LOOP1
MOVLW .50
MOVWF DEL2
LOOP2
DECFSZ DEL2,F
GOTO LOOP2
DECFSZ DEL1,F
GOTO LOOP1
RETURN


;Programa para realizar el apagado y encendido de un LED
colocado en el ;Puerto A0 basado en la interrupcin externa
INT (RB0)
LIST P=16F84
STATUS EQU 0X03
PORTA EQU 0X05
PORTB EQU 0X06
INTCON EQU 0X0B
OPTIONR EQU 0X81
TRISA EQU 0X85
TRISB EQU 0X86

#DEFINE LED PORTA,0
#DEFINE BANK1 BSF STATUS,5
#DEFINE BANK0 BCF STATUS,5

ORG 0 ;INDICA AL ENSAMBLADOR LA DIRECCION DE MEMORIA
DE LA SIGUIENTE INSTRUCCION
GOTO INICIO
ORG 0X04 ; INDICA AL ENSAMBLADOR LA DIRECCION DE MEMORIA
DE LA SIGUIENTE INSTRUCCION

INTRERRUPCION
BTFSS INTCON,1 ;ES INTERRUPCION INT?
RETFIE ;RETORNA DE INTERRUPCION Y GIE=1
BTFSC PORTA,0 ;PROBAR ESTADO ACTUAL DEL LED
GOTO PRENDER ; VA A ENCENDER EL LED
APAGAR
BSF PORTA,0 ;APAGA EL LED
GOTO ESPERA
PRENDER
BCF PORTA,0 ;ENCIENDE EL LED
ESPERA
BTFSS PORTB,0 ;ESPERA A QUE SE SUELTE EL PULSADOR
GOTO ESPERA
BCF INTCON,1 ;BORRA BANDERA INT
RETFIE ;RETORNA DE INTERRUPCION Y GIE=1


;PROGRAMA PRINCIPAL
INICIO
BANK1 ;SELECCION DEL BANCO 1
BCF TRISA,0 ;SELECCION PORTA, 0
BANK0 ;SELECCION DEBANCO 0
BSF PORTA,0 ;APAGAR LED
;PROGRAMACION DE INTERRUPCION
BSF INTCON,4 ;ACTIVAR INTERRUPCION INT
BANK1 SELECCION BANCO 1
BCF OPTIONR,6 ;SELECCION DEL FLANCO DE BAJADA EN EL PIN
BANK0
BSF INTCON,7 ;HABILITAR INTERRUPCIONES GLOBALES
GOTO $ ;QUEDA A LA ESPERA DE INTERRUPCION
END


PIC PRIMERA PARTE 16F84

LIST P=16F84
RADIX HEX

W EQU 0
F EQU 1
TMR_OPT EQU 0X01 ;TMR0 EN BANCO 0 OPTION EN BANCO 1
ESTADO EQU 0X03
PUERTAA EQU 0X05 ;PA EN BANCO 0 TRISA EN BANCO1
PUERTAB EQU 0X06 ;PB EN BANCO 0 TRISB EN BANCO1
INTCON EQU 0X0B
CONTA EQU 0X10 ;CONTADOR AUXILIAR

ORG 0 ;VECTOR DE RESET
GOTO INICIO
ORG 4 ;VECTOR DE INTERRUPCION
GOTO INTER ;SALTA A COMIENZO DE RUTINA DE INTERRUPCION
ORG 5

INICIO
BSF ESTADO,5 ;SELECCION DEL BANCO 1
CLRF PUERTAB ;CONFIGURACION PUERTA B COMO SALIDA
MOVLW b00000011 ;CONF RA0, RA1 COMO ENTRADAS
MOVWF PUERTAA
MOVLW b00000111
MOVWF TMR0_OPT
BCF ESTADO,5 ;BANCO 0
MOVLW b10100000 ;SE PERMITE INTERRUPCION DEL TMR0 Y LA
;GLOBAL (GIE)

MOVWF INTCON
MOVLW 0X10
MOVWF CONTA ;SE CARGA CONTA CON 16 DECIMALES
MOVLW 0X0C
MOVWF TMR0_OPT ;SE CARGA TMR0 CON 12 DECIMALES
BUCLE BTFSC PUERTAA,0 ;EXPLORA RA0 Y BRINCA SI 0, SALTA A
;RA0_1
GOTO RA0_1
BCF PUERTAB,0 ;SI RA0 = RB0 = 0
GOTO RALX ;A EXPLORAR RA1
RA0_1 BSF PUERTAB,0 ;SI RA0 = 1 SE SACA POR RB0 UN 1
RALX BTFSC PUERTAA,1 ;EXAMINA RAL Y BRINCO SI 0
GOTO RA0_1 ;SALTA SI RA1 = 1
BCF PUERTASB,1 ;SI RA1 = 0, RB1 = 0
GOTO BUCLE2
RA1_1 BSF PUERTAB,1 ;SI RA1 = 1, RB1 = 1
BUCLE2 GOTO BUCLE ;BUCLE INDEFINIDO, SE SALE POR INTER
INTER DECFSZ CONTA,1 ;RSI. DECREMENTA CONTA Y BRINCO SI 0
GOTO SEGUIR
CONTA_0 MOVLW 0X10 ;SI CONTA = 0 SE CARGA
MOVWF CONTA
BTFSC PUERTAB,7 ;SI RB7 = 0, BRINCO
GOTO RB7_1
BSF PUERTAB,7 ;SI RB7 = 0 SE INVIERTE
GOTO SEGUIR
RB7_1 BCF PUERTAB,7 ;SI RB7 = 1, SE INVIERTE
SEGUIR MOVLW b10100000 ;SE RESTAURA INTCON
MOVWF INTCON
MOVLW 0X0C
MOVWF TMR_OPT ;SE RECARGA TMR0 CON 12
RETFIE
END




INTERRUPCIONES PAG. (198)

LIST P=16F84

RADIX HEX

W EQU 0
F EQU 1
ESTADO EQU 0X03
PUERTAA EQU 0X05
PUERTAB EQU 0X06
INTCON EQU 0X0B

ORG 0

GOTO INICIO

ORG 4

GOTO INTER

ORG 5
INICIO BSF ESTADO,5 ;BANCO 1
MOVLW b00000000
MOVWF PUERTAA ;PUERTA A SALIDA
MOVLW b11111111
MOVWF PUERTAB ;PUERTA B ENTRADAS
BCF ESTADO,5 ;BANCO 0

CLRF PUERTAA
CLRF PUERTAB

MOVLW b10011000 ;SE ACTIVA GIE, INT EXT E INT X CAM DE PB
MOVWF INTCON
BUCLE GOTO BUCLE

INTER BTFSS INTCON,0 ;EXPLORA FLAG DE IN POR CAMBIO RB4 RB7
GOTO PARAR
GOTO ALARMA
ALARMA CLRF PUERTAB
MOVLW b10011000 ;se activan GIE INT EXTERNA
MOVWF INTCON ;E INT POR CAMBIO DE PB
BUZZER BSF PUERTAA,0
NOP
BCF PUERTAA,0
BSF PUERTAA,1
NOP
BCF PUERTAA,1
GOTO BUZZER
PARAR CLRF PUERTAA
BCF PUERTAB,0
MOVLW b10011000 ;SE ACTIVA GIE, INT EXTERNA E INT POR
;CAMBIO DE PB
MOVWF INTCON
GOTO BUCLE
END

También podría gustarte