Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* MODIFICAÇÕES PARA USO COM 12F675 *
- ;* FEITAS PELO PROF. MARDSON *
- ;* FEVEREIRO DE 2016 *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* NOME DO PROJETO *
- ;* CLIENTE *
- ;* DESENVOLVIDO PELA MOSAICO ENGENHARIA E CONSULTORIA *
- ;* VERSÃO: 1.0 DATA: nAUmInteressa *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* DESCRIÇÃO DO ARQUIVO *
- ;*-----------------------------------------------------------------*
- ;* MODELO PARA O PIC 12F675 *
- ;* *
- ;* *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* ARQUIVOS DE DEFINIÇÕES *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- #INCLUDE <p12f675.inc> ;ARQUIVO PADRÃO MICROCHIP PARA 12F675
- __CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* 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 USO
- STATUS_TEMP ;JUNTO ÀS INTERRUPÇÕES
- X
- Y
- I
- R1
- R2
- ;NOVAS VARIÁVEIS
- 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)
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* 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)
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* VETOR DE RESET *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
- GOTO INICIO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* INÍCIO DA INTERRUPÇÃO *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; ENDEREÇO DE DESVIO DAS INTERRUPÇÕES. A PRIMEIRA TAREFA É SALVAR OS
- ; VALORES DE "W" E "STATUS" PARA RECUPERAÇÃO FUTURA
- ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
- MOVWF W_TEMP ;COPIA W PARA W_TEMP
- SWAPF STATUS,W
- MOVWF STATUS_TEMP ;COPIA STATUS PARA STATUS_TEMP
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* ROTINA DE INTERRUPÇÃO *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; AQUI SERÁ ESCRITA AS ROTINAS DE RECONHECIMENTO E TRATAMENTO DAS
- ; INTERRUPÇÕES
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* ROTINA DE SAÍDA DA INTERRUPÇÃO *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; OS VALORES DE "W" E "STATUS" DEVEM SER RECUPERADOS ANTES DE
- ; RETORNAR DA INTERRUPÇÃO
- SAI_INT
- SWAPF STATUS_TEMP,W
- MOVWF STATUS ;MOVE STATUS_TEMP PARA STATUS
- SWAPF W_TEMP,F
- SWAPF W_TEMP,W ;MOVE W_TEMP PARA W
- RETFIE
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* ROTINAS E SUBROTINAS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; CADA ROTINA OU SUBROTINA DEVE POSSUIR A DESCRIÇÃO DE FUNCIONAMENTO
- ; E UM NOME COERENTE ÀS SUAS FUNÇÕES.
- SUBROTINA1
- ;CORPO DA ROTINA
- RETURN
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* INICIO DO PROGRAMA *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- INICIO
- BANK1 ;ALTERA PARA O BANCO 1
- MOVLW B'00000000' ;CONFIGURA TODAS AS PORTAS DO GPIO (PINOS)
- MOVWF TRISIO ;COMO SAÍDAS
- CLRF ANSEL ;DEFINE PORTAS COMO Digital I/O
- MOVLW B'00000100'
- MOVWF OPTION_REG ;DEFINE OPÇÕES DE OPERAÇÃO
- MOVLW B'00000000'
- MOVWF INTCON ;DEFINE OPÇÕES DE INTERRUPÇÕES
- BANK0 ;RETORNA PARA O BANCO
- MOVLW B'00000111'
- MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO COMPARADOR ANALÓGICO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* INICIALIZAÇÃO DAS VARIÁVEIS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* ROTINA PRINCIPAL *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- MAIN
- ; ENTRADAS
- MOVLW 0x25 ; ENTRADA A
- MOVWF X ; SALVA EM X <- A
- MOVLW 0x4A ; ENTRADA B
- MOVWF Y ; Y <- B
- ; PREPROCESSAMENTO
- PRE_PROCESSING_A:
- MOVLW B'00000001'
- SUBWF X, W
- BTFSS STATUS, C ; VERIFICA SE A É 0
- GOTO ZERO
- GOTO PRE_PROCESSING_B
- PRE_PROCESSING_B:
- MOVLW B'00000001'
- SUBWF Y, W
- BTFSS STATUS, C ; VERIFICA SE B É 0
- GOTO ZERO
- GOTO PRE_PROCESSING_CONT
- PRE_PROCESSING_CONT: ; VERIFICA QUEM DEVE SER O CONTADOR
- MOVFW Y
- SUBWF X, W
- BTFSC STATUS, C
- GOTO PROCESSING
- GOTO CHANGEXY
- CHANGEXY:
- MOVFW Y
- XORWF X
- MOVFW X
- XORWF Y
- MOVFW Y
- XORWF X
- GOTO PROCESSING
- PROCESSING:
- MOVFW X
- MOVWF R1 ; R1 <- A
- MOVLW B'00000000'
- MOVWF R2 ; SETA R2 <- 0
- ; SETA Y COMO CONTADOR E INICIA O LOOP, CASO Y > 1
- DECFSZ Y
- GOTO LOOP
- GOTO FIM
- ; INICIA O FOR (MULTIPLICACAO = DIVERSAS SOMAS)
- LOOP:
- MOVFW X
- ADDWF R1 ; R1 + X
- BTFSC STATUS, C ; VERIFICA SE C É 0
- GOTO ADDR2 ; SE NÃO, EXISTE ESTOURO E A PARTE SIGNIFICATIVA É INCREMENTADA
- GOTO BACK ; SE SIM, NAO EXISTE PARTE ESTOURO, CONTINUA
- BACK:
- DECFSZ Y ; DECREMENTA O CONTADOR,
- GOTO LOOP ; CONTINUA O LAÇO
- GOTO FIM ;SE FOR IGUAL A ZERO, ACABOU
- ADDR2:
- MOVLW B'00000001'
- ADDWF R2 ; SOMA A R2 O BIT DO C
- GOTO BACK ; VOLTA PRO FLUXO NORMAL
- ZERO:
- MOVLW B'00000000'
- MOVWF R1
- MOVWF R2
- GOTO FIM
- FIM:
- NOP
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* FIM DO PROGRAMA *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement