Exemplo de Programa Assembly

Post on 18-Apr-2015

241 views 0 download

description

programação

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