-
Notifications
You must be signed in to change notification settings - Fork 0
/
comparador-temp.ASM
190 lines (161 loc) · 8.16 KB
/
comparador-temp.ASM
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* MODIFICAÇÕES PARA USO COM 12F675 *
;* FEITAS PELO PROF. MARDSON *
;* MARÇO DE 2021 *
;* BASEADO NO EXEMPLO DO LIVRO *
;* Desbravando o PIC. David José de Souza *
;*-----------------------------------------------------------------*
;* 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
;COLOQUE AQUI SUAS NOVAS VARIÁVEIS
;NÃO ESQUEÇA COMENTÁRIOS ESCLARECEDORES
ENDC ;FIM DO BLOCO DE DEFINIÇÃO DE VARIÁVEIS
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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ÃO ESCRITAS 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
;GP1 SETADO COMO ENTRADA
MOVLW B'00000010' ;CONFIGURA TODAS AS PORTAS DO GPIO (PINOS)
MOVWF TRISIO ;COMO SAÍDAS
;GP1 COMO ENTRADA DIGITAL
MOVLW B'00000010'
MOVWF 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
;'VRCON' COM AS SEGUINTES CONFIGURAÇÕES:
; BITS 0 A 3 - N = 5
; BIT 5 - ESCOLHA DA ESCALA 'HIGH'
; BIT 7 - HABILITANDO A TENSÃO DE REFERÊNCIA
MOVLW B'10000101'
MOVWF VRCON
BANK0 ;RETORNA PARA O BANCO
;'CMCON' COM AS SEGUINTES CONFIGURAÇÕES:
; BITS 0 A 2 - ESCOLHA DO MODELO DE COMPARADOR
; BIT 4 - ESCOLHA DA SAÍDA NÃO INVERTIDA
MOVLW B'00000011'
MOVWF CMCON ;DEFINE O MODO DE OPERAÇÃO DO COMPARADOR ANALÓGICO
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
;EXPLICAÇÃO SOBRE O MODO DE APLICAÇÃO FINAL DA ATIVIDADE:
;
;EM UM PRIMEIRO CENÁRIO, AO CONSULTAR O DATASHEET DO SENSOR LM35,
;FOI CONSTATADO QUE O MESMO RETORNA UMA TENSÃO DE 10 mV POR ºC. COMO
;A ESPECIFICAÇÃO TROUXE 40ºC COMO LIMITE ESTÁVEL DE TEMPERATURA DE UM
;RESISTOR, A TENSÃO DE REFERÊNCIA SERIA (10 mV * 40ºC) = 400 mV. EM SE
;TRATANDO DA ESCOLHA DA ESCALA E DO VALOR DE 'N', FOI ESCOLHIDA A ESCALA
;'LOW', COM N = 2, O QUE RETORNAVA UMA TENSÃO DE REFERÊNCIA DE 416 mV,
;O QUE REPRESENTAVA 41,6ºC, FICANDO MUITO DISTANTE DA TEMPERATURA ESPE-
;RADA - 40ºC.
;
;SOLUÇÃO ADOTADA: ACOPLAMENTO DE UM AMPLIFICADOR COM GANHO 5 AO SENSOR
;LM35.
;
;NESTE CASO,
;
; SENSOR ORIGINAL | SENSOR AMPLIFICADO COM GANHO 5
; 10 mV POR ºC | 50 mV POR ºC
; 400 mV A 40ºC | 2 V A 40ºC
; Vref = 400 mV | Vref = 2 V
;
;ASSIM, DETERMINANDO A ESCALA E O VALOR DE 'N', E CONSIDERANDO Vdd = 5,
;TEMOS QUE:
;
;LOW -> Vref = (N/24) * Vdd -> 2 = (N/24) * 5 -> N = 9,6 -> N = 10
;HIGH -> Vref = (Vdd/4) + (N/32) * Vdd -> 2 = (5/4) + (N/32) * 5
; -> N = 4,8 -> N = 5
;
;Vref(LOW) = (10/24) * 5 -> Vref(LOW) = 2,08 V
;Vref(HIGH) = (5/4) + (5/32) * 5 -> Vref(HIGH) = // 2,03 V //
;
;LOGO, O VALOR QUE MAIS SE APROXIMA DE 2 V É O DA ESCALA 'HIGH', COM
;N = 5. NESTE CASO, OBTEMOS UM VALOR MUITO MAIS PRECISO DO QUE O PROBLEMA
;ORIGINAL.
GOTO MAIN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END