From c5aec66b3eae14068bfaacaa5364e002c02bf042 Mon Sep 17 00:00:00 2001 From: leo Date: Mon, 13 Nov 2023 23:18:50 -0300 Subject: aaaaaa --- teste.asm | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 teste.asm (limited to 'teste.asm') diff --git a/teste.asm b/teste.asm new file mode 100644 index 0000000..ee39a85 --- /dev/null +++ b/teste.asm @@ -0,0 +1,205 @@ +processor PIC16F873A +#include + __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BOREN_OFF & _LVP_OFF & _CP_OFF & _CPD_OFF +cblock 0x20 ;definir variaveis + tempbyte1 + tempbyte2 + ;; tempbyteX vai no timer para contar + byte1t1 + byte2t1 + ;; byteXt1: 2 bytes para armazernar o tempo 1 + byte1t2 + byte2t2 + ;; byteXt2: 2 bytes para armazenar o tempo 2 + flag ;; para saber se o timer deve adicionar ou esperar 256 ciclos + contador ;; para ajudar a contar os ciclos do timer +endc + org 0x0 + errorlevel -302 ;desabilitar mensagens de avisos na compilacao + goto INICIO +;;;;;;;;INICIO DO TIMER;;;;;;;;;;;;;;;; + org 0x004 + ;;toif = 0;;;;;;;;;;;;;;; + movlw b'10100000' + banksel INTCON + movwf INTCON + ;;TMR0 = 255;;;;;;;;;;;;;;;;;;;;;; + movlw d'253' + movwf TMR0 ; nao precisar selecionar o banco, pois INTCON esta no mesmo banco de TMR0 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + btfss flag, 0 ;; se o primeiro bit da flag for 0, entao adicionar + goto ADICIONAR_1 ;; sim -> adicionar 1 + + decf contador, 1; decrementar 1 no contador + goto PULO + +ADICIONAR_1: ;;ADICIONAR 1 NO tempbyteX + incfsz tempbyte1, 1 + goto PULO + incf tempbyte2, 1 + goto PULO +;;;;;;;;; +PULO: + retfie + +INICIO: + ; RB2 -> echo + ; RB1 -> trigger + banksel TRISB + movlw b'00000100' ; rb22= input(recebe) / rb1 = output(manda) + movwf TRISB + ;; echo e trigger arrumados + + ;;setar timer + ;;;;option_reg + movlw b'00000010' ; prescaler = 8 + banksel OPTION_REG + movwf OPTION_REG + ;;;;intcon + movlw b'00000000' ; rotinas de interrupcoes estao desativadas por enquanto + banksel INTCON ; e todas as rotinas de interrupcao estao desativadas + movwf INTCON + ;;;;TMR0 + ;movlw d'253' ; para o timer ficar 25us + movlw d'253' + banksel TMR0 ; Nint = 500000 + movwf TMR0 + + ;; resetar tempbyteX + movlw d'0' + movwf tempbyte1 + movwf tempbyte2 + + movlw d'0' ;; colocar 0 no flag + movwf flag + ;;ATIVAR O TRIGGER;;; + banksel PORTB + bsf PORTB, RB1 ; ligou o trigger + nop + nop + banksel PORTB + bsf PORTB, RB3 ; ativar um led + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop ;; 15 us + bcf PORTB, RB1 ;; desliga o trigger + + ;;ATIVAR O TIMER;; + movlw b'10100000' + movwf INTCON ;nao precisa selecionar intcon esta no banco do portb ;;;;;;;;;;;;;;;;;;;;; !!!!!!! PQ TA DEMORANDO PARA O TIMER COMECAR + ;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +ESPERA_RETORNO1: + banksel PORTB + btfss PORTB, RB2 ; VERIFICAR SE echo esta em 1 + goto ESPERA_RETORNO1 ; nao + ;;perguntar do timer que esta muito rapido e portanto nao sai dele + ;;perguntar do pq o rb2 esta em 1 quando comeca -> testar isso com um led + ;;DESATIVA O TIMER;; + movlw b'00000000' + banksel INTCON + movwf INTCON + +; banksel PORTB +; bcf PORTB, RB3 ; desativar o led + + ;;;;SALVAR O VALOR;;;; + movf tempbyte1, W + movwf byte1t1 + + movf tempbyte2, W + movwf byte2t1 + + ;;ATIVAR UM TIMER POR 400 CICLOS;;;; + ;;para dar 10 ms;;;;;;;;;;;;;;;;;;;; + movlw b'10100000' ;; ativar o timer + banksel INTCON + movwf INTCON + + movlw d'255' ;; colocar 1 no flag + movwf flag + movwf contador ; contador = 255; +ESPERA_255: + btfss STATUS, Z ; ver se contador - 1 = 0 + goto ESPERA_255 ; se nao for + + movlw d'145' ; 255+145 = 400 + movwf contador; contador = 145 + bcf STATUS, Z ; garantir que Z = 0 antes de entrar +ESPERA_145: + btfss STATUS, Z ; ver se contador - 1 = 0 + goto ESPERA_145 ; se nao for + + ;;;termino 10 ms + ;;desativar o timer + movlw b'00000000' + movwf INTCON + + ;;TERMINO DA ESPERA + ;goto $ ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!VERIFICAR AQUI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DEPOIS TESTAR O RESTO + + ;;;ATIVAR A SEGUNDA VEZ O SENSOR;;;;;; + movlw d'0' ;; colocar 0 no flag + movwf flag + movwf tempbyte1 ;;resetar o tempbyteX + movwf tempbyte2 + + ;;ATIVAR O TRIGGER;;; + banksel PORTB + bsf PORTB, RB1 ; ligou o trigger + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop ;; 15 us + bcf PORTB, RB1 ;; desliga o trigger + + ;;ATIVAR O TIMER;; + movlw b'10100000' + movwf INTCON ;nao precisa selecionar intcon esta no banco do portb ;;;;;;;;;;;;;;;;;;;;; !!!!!!! PQ TA DEMORANDO PARA O TIMER COMECAR + +ESPERA_RETORNO2: + banksel PORTB + btfss PORTB, RB2 ; VERIFICAR SE echo esta em 1 + goto ESPERA_RETORNO2 ; nao + + ;;DESATIVA O TIMER;; + movlw b'00000000' + banksel INTCON + movwf INTCON + + ;;;;SALVAR O VALOR;;;; + movf tempbyte1, W + movwf byte1t2 + + movf tempbyte2, W + movwf byte2t2 + + banksel PORTB + bcf PORTB, RB3 ; desativar o led + goto $ + end + + -- cgit v1.2.3