Exemplo de Programa Assembly
-
Upload
eduardo-castellani -
Category
Documents
-
view
241 -
download
0
description
Transcript of Exemplo de Programa Assembly
;******************************************************************************; NOME DO PROJETO: INTERRUPTOR LIGA/DESLIGA COM 12F629; CLIENTE: EDSON; DESENVOLVIDO POR: ROBERTO TAKESHI MATINO; VERSAO: 1.0 DATA: 17/08/10;******************************************************************************; DESCRICAO DO ARQUIVO:;;INTERRUPTOR LIGA/DESLIGA COM LED DE STAND BY.;;;******************************************************************************; ARQUIVOS DE DEFINICOES
#include <p16f628a.inc>
__CONFIG _BOREN_ON & _CP_ON & _DATA_CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************; PAGINACAO DE MEMORIA;DEFINICAO DE COMANDOS DE USUARIO PARA ALTERACAO DA PAGINA DE MEMORIA
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMORIA#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MEMORIA
;******************************************************************************; VARIAVEIS;DEFINICAO DOS NOMES E ENDERECOS DE TODAS AS VARIAVEIS UTILIZADAS PELO SISTEMA
CBLOCK 0X20 ;ENDEREÇO INICIAL DA MEMORIA DO USUARIO
FILTRO_BOTOES ;FILTRO PARA RUIDOS
ENDC ;FIM DO BLOCO DE MEMORIA
;******************************************************************************; FLAGS INTERNOS;DEFINIÇAO DOS FLAGS UTILIZADOS PELO SISTEMA
;******************************************************************************; CONSTANTES;DEFINIÇAO DAS CONSTANTES UTILIZADAS PELO SISTEMA
FILTRO_TECLA EQU .250 ;FILTRO PARA BOTOES
;******************************************************************************; ENTRADAS;DEFINIÇAO DOS PINOS QUE SERAO UTILIZADOS COMO ENTRADA;COMENTAR O SIGNIFICADO DOS ESTADOS (0 E 1)
#DEFINE BOTAO1 PORTA,2 ;PORTA DO BOTAO;0 -> PRESSIONADO;1 -> LIBERADO
;******************************************************************************; SAIDAS;DEFINICAO DOS PINOS QUE SERAO UTILIZADOS COMO SAIDA;COMENTAR O SIGNIFICADO DOS PINOS (0 E 1)
#DEFINE LED_EQUIP PORTB,0 ;LED INDICADOR DE EQUIPAMENTO LIGADO#DEFINE LED_STANDBY PORTB,1 ;LED INDICADOR DE STANDBY#DEFINE SAIDA_EQUIP PORTB,3 ;SAIDA PARA O EQUIPAMENTO
;******************************************************************************; INICIALIZAÇAO DA EEPROM
;******************************************************************************; VETOR DE RESET
ORG 0X000 ;ENDERECO INICIAL DE PROCESSAMENTO
GOTO INICIO
;******************************************************************************; INICIO DAS INTERRUPCOES
ORG 0X0004 ;ENDEREÇO INICIAL DA INTERRUPCAO
RETFIE ;RETORNA DA INTERRUPÇÃO (HABILITA GIE)
;******************************************************************************; INICIO DO PROGRAMA
INICIO
CLRF PORTA ;LIMPA O PORTA CLRF PORTB ;LIMPA O PORTB
BANK1 ;ALTERA PARA O BANCO 1 MOVLW B'00000100' ;DEFINE RA2 COMO ENTRADA E MOVWF TRISA ;DEMAIS COMO SAIDA
MOVLW B'00000000' ;DEFINE O PORTB COMO SAIDA MOVWF TRISB
MOVLW B'10001010' ;PRESCALER 1:2 PARA WDT MOVWF OPTION_REG ;PULL-UPS DESABILITADOS ;AS DEMAIS CONFIGURACOES SAO IRRELEVANTES MOVLW B'00000000' ;TODAS AS INTERRUPCOES DESLIGADAS MOVWF INTCON
BANK0 ;RETORNA AO BANCO 0 MOVLW B'00000111' ;DEFINE O MODO DE OPERACAO DO COMP. ANALOGICO MOVWF CMCON
;******************************************************************************; AS INTRUÇÕES A SEGUIR FAZEM COM QUE O PROGRAMA TRAVE QUANDO HOUVER UM; RESET OU POWER-UP, MAS PASSE DIRETO SE O RESET FOR POR WDT. DESTA FORMA,; SEMPRE QUE O PIC É LIGADO, O PROGRAMA TRAVA, AGUARDA UM ESTOURO DE WDT; E COMEÇA NOVAMENTE. ISTO EVITA PROBLEMAS NO START-UP DO PIC.
BTFSC STATUS,NOT_TO ; RESET POR ESTOURO DE WATCHDOG TIMER ? GOTO $ ; NÃO - AGUARDA ESTOURO DO WDT ; SIM
;******************************************************************************; INICIALIZACAO DAS VARIAVEIS
BSF LED_STANDBY ;ACENDE LED_STANDBY
;******************************************************************************; ROTINA PRINCIPAL
MAIN
VARRE CLRWDT ;LIMPA WATCHDOG TIMER
BTFSS BOTAO1 ;O BOTÃO 1 ESTÁ PRESSIONADO? GOTO TRATA_BOTAO_INTERR ;SIM - PULA PARA TRATA_BOTAO_PROG
;NAO MOVLW FILTRO_TECLA ;CARREGA NO W O VALOR DO FILTRO_TECLA
MOVWF FILTRO_BOTOES ;SALVA EM FILTRO_BOTOES
GOTO VARRE
TRATA_BOTAO_INTERR
MOVF FILTRO_BOTOES,F BTFSC STATUS,Z ;FILTRO JÁ É IGUAL A ZERO? GOTO VARRE ;SIM - VOLTA PARA A VARREDURA DECFSZ FILTRO_BOTOES,F ;NÃO - FIM DO FILTRO? GOTO VARRE ;NÃO - VOLTA PARA A VARREDURA ;SIM - BOTÃO PRESSIONADO BTFSS LED_EQUIP ;LED DO EQUIPAMENTO ESTA LIGADO? GOTO ENTRA_ACIONA_EQUIP ;NAO - ENTRA DADOS DA PROGRAMAÇAO ;SIMSAI_ACIONA_EQUIP
BCF LED_EQUIP ;APAGA LED_EQUIPBSF LED_STANDBY ;ACENDE LED_STANDBYBCF SAIDA_EQUIP ;DESLIGA EQUIPAMENTO
GOTO VARRE
ENTRA_ACIONA_EQUIP
BCF LED_STANDBY ;APAGA LED_STANDBY BSF LED_EQUIP ;ACENDE LED_EQUIP
BSF SAIDA_EQUIP ;LIGA EQUIPAMENTO
GOTO VARRE
;******************************************************************************; FIM DO PROGRAMA
END