summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo <leo@azuminha.com>2023-11-13 23:18:50 -0300
committerleo <leo@azuminha.com>2023-11-13 23:18:50 -0300
commitc5aec66b3eae14068bfaacaa5364e002c02bf042 (patch)
treeb7771899b712302619a0bcd913e0589dbb320060
parent1a50cedef1eff729d870bc5cc46271de20cedeaa (diff)
aaaaaa
-rw-r--r--teste.asm205
1 files changed, 205 insertions, 0 deletions
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 <p16f873a.inc>
+ __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
+
+