summaryrefslogtreecommitdiff
path: root/main.asm
blob: 5e2e6a901c4e3391ba4f653c744fd80249bbcd2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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
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'255'
	movwf TMR0 ; nao precisar selecionar o banco, pois INTCON esta no mesmo banco de TMR0
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	;;ADICIONAR 1 NO tempbyteX
	incfsz tempbyte1, 1
	goto PULO
	incf tempbyte2, 1
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'00000000' ; prescaler = 2 para ficar o mais rapido possivel	
	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'255' ; para o timer ficar o mais rapido possivel
	banksel TMR0 ; Nint = 500000
	movwf TMR0
	

	;;ATIVAR O TRIGGER;;;
	banksel PORTB
	bsf PORTB, RB1 ; ligou o trigger
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop ;; 11 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:
	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'
	movwf INTCON

	end