Você está na página 1de 3

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* EX2 – 3 BOTÕES E 2 LED *


;* DESBRAVANDO O PIC *
;* *
;* PROF. PAULO SILVEIRA DATA: 10/03/2020 *
;* DISCIPLINA: SISTEMAS A MICROCONTROLADORES *
;* *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* DESCRIÇÃO DO ARQUIVO *
;*-------------------------------------------------------------------------------------------------------------------------------------------------*
;* *
;* *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ARQUIVOS DE DEFINIÇÕES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

#INCLUDE <P16F628A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A


__CONFIG _BOREN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_OFF & _XT_OSC

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* PAGINAÇÃO DE MEMÓRIA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;DEFINIÇÃO DE COMANDOS DE USUÁRIO PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA


#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MAMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DOS NOMES E ENDEREÇOS DE TODAS AS VARIÁVEIS UTILIZADAS


; PELO SISTEMA

CBLOCK 0x20 ;ENDEREÇO INICIAL DA MEMÓRIA DE


;USUÁRIO

W_TEMP ;REGISTRADORES TEMPORÁRIOS PARA


STATUS_TEMP ;INTERRUPÇÕES
;ESTAS VARIÁVEIS NEM SERÃO UTI-
;LIZADAS
ENDC ;FIM DO BLOCO DE MEMÓRIA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FLAGS INTERNOS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CONSTANTES *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ENTRADAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA


; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE BT_VM PORTA,0 ;PORTA DO BOTÃO QUE LIGA LED VERMELHO


; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BT_VD PORTA,1 ;PORTA DO BOTÃO QUE LIGA LED VERDE


; 0 -> PRESSIONADO
; 1 -> LIBERADO

#DEFINE BT_CLR PORTA,2 ;PORTA DO BOTÃO QUE APAGA OS LEDS


; 0 -> PRESSIONADO
; 1 -> LIBERADO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* SAÍDAS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA


; RECOMENDAMOS TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1)

#DEFINE LED_VM PORTB,3 ;PORTA DO LED VERMELHO


; 0 -> APAGADO
; 1 -> ACESO

#DEFINE LED_VD PORTB,4 ;PORTA DO LED VERDE


; 0 -> APAGADO
; 1 -> ACESO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* VETOR DE RESET *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO


GOTO INICIO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INÍCIO DA INTERRUPÇÃO *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; AS INTERRUPÇÕES NÃO SERÃO UTILIZADAS, POR ISSO PODEMOS SUBSTITUIR


; TODO O SISTEMA EXISTENTE NO ARQUIVO MODELO PELO APRESENTADO ABAIXO
; ESTE SISTEMA NÃO É OBRIGATÓRIO, MAS PODE EVITAR PROBLEMAS FUTUROS

ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO


RETFIE ;RETORNA DA INTERRUPÇÃO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

INICIO
BANK0 ;ALTERA PARA O BANCO 0
MOVLW B'00000111'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO COMPARADOR ANALÓGICO

CLRF PORTA ;LIMPA O PORTA


CLRF PORTB ;LIMPA O PORTB

BANK1 ;ALTERA PARA O BANCO 1


MOVLW B'00000111'
MOVWF TRISA ;DEFINE RA0, RA1 E RA2 COMO ENTRADAS E DEMAIS
;COMO SAÍDAS
MOVLW B'00000000'
MOVWF TRISB ;DEFINE TODO O PORTB COMO SAÍDA
MOVLW B'10000000'
MOVWF OPTION_REG ;PRESCALER 1:2 NO TMR0
;PULL-UPS DESABILITADOS
;AS DEMAIS CONFG. SÃO IRRELEVANTES
MOVLW B'00000000'
MOVWF INTCON ;TODAS AS INTERRUPÇÕES DESLIGADAS
BANK0 ;RETORNA PARA O BANCO 0

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

MAIN

TESTA_ LIGA_LED_VM
BTFSC BT_VM ;O BOTÃO ESTÁ PRESSIONADO?
GOTO TESTA_ LIGA_LED_VD ;NÃO
GOTO LIGA_LED_VM ;SIM
TESTA_ LIGA_LED_VD
BTFSC BT_VD ;O BOTÃO ESTÁ PRESSIONADO?
GOTO TESTA_ APAGA_LEDS ;NÃO
GOTO LIGA_LED_VD ;SIM

TESTA_ APAGA_LEDS
BTFSC BT_CLR ;O BOTÃO ESTÁ PRESSIONADO?
GOTO TESTA_ LIGA_LED_VM ;NÃO
GOTO APAGA_LEDS ;SIM

APAGA_LEDS
BCF LED_VM ;APAGA O LED VERMELHO
BCF LED_VD ;APAGA O LED VERDE
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

LIGA_LED_VM
BSF LED_VM ;ACENDE O LED VERMELHO
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

LIGA_LED_VD
BSF LED_VD ;ACENDE O LED VERDE
GOTO MAIN ;RETORNA AO LOOP PRINCIPAL

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

END ;OBRIGATÓRIO

Você também pode gostar