Repository navigation
Expand file tree
/
Copy pathConverADMediaEEPROM.ASM
More file actions
302 lines (247 loc) · 11.3 KB
/
Copy pathConverADMediaEEPROM.ASM
File metadata and controls
302 lines (247 loc) · 11.3 KB
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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* MODIFICAÇÕES PARA USO COM 12F675 *
;* FEITAS PELO PROF. MARDSON *
;* MARÇO DE 2024 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* NOME DO PROJETO *
;* CLIENTE *
;* DESENVOLVIDO PELA MOSAICO ENGENHARIA E CONSULTORIA *
;* VERSÃO: 1.0 DATA: 17/06/03 *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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
DADO ;ARMAZENA O DADO PARA A EEPROM
;NOVAS VARIÁVEIS
SOMA_LOW ;ARMAZENA OS BITS MENOS SIGNIFICATIVOS DA SOMA
SOMA_HIGH ;ARMAZENA OS BITS MAIS SIGNIFICATIVOS DA SOMA
CONTADOR ;VARIAVEL PARA REALIZAR CONTAGEM
POSICAO_I ;VARIAVEL QUE DETERMINA EM QUAL POSICAO SERÁ GRAVADO
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
; INICIALIZAÇÃO DA EEPROM, DE ACORDO COM A DESCRIÇÃO NO ARQUIVO "Def_Rega_Formigas.inc"
;A PARTIR DO ENDEREÇO ZERO DA EEPROM, DADOS EM ORDEM ALEATÓRIA
ORG 0x2100
DE 0X89,0X1E,0X39,0X9F,0XC2,0X0C,0XAB,0X33,0X63,0XD3,0X95,0X7B,0X38,0XD6,0X1E,0X48
DE 0XDB,0XD8,0X86,0XFD,0XA5,0XFC,0X0C,0XBE,0X68,0X9B,0XD9,0X10,0XD8,0XEC,0X90,0X91
DE 0XAA,0XBB,0XCC,0XDD,0XEE,0XF1,0XC9,0X77
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* 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.
LE_EEPROM
;LER DADO DA EEPROM, CUJO ENDEREÇO É INDICADO EM W
;O DADO LIDO RETORNA EM W
ANDLW .127 ;LIMITA ENDEREÇO MAX. 127
BANK1 ;ACESSO VIA BANK 1
MOVWF EEADR ;INDICA O END. DE LEITURA
BSF EECON1,RD ;INICIA O PROCESSO DE LEITURA
MOVF EEDATA,W ;COLOCA DADO LIDO EM W
BANK0 ;POSICIONA PARA BANK 0
RETURN
GRAVA_EEPROM
;ESCREVE UM DADO NA EEPROM, CUJO ENDEREÇO É INDICADO EM W
;O DADO A SER ESCRITO DEVE ESTAR ARMAZENADO NA VARIÁVEL DADO
ANDLW .127 ;LIMITA ENDEREÇO MAX. 127
BANK1 ;ACESSO VIA BANK 1
MOVWF EEADR
MOVF DADO,W
MOVWF EEDATA
BSF EECON1,WREN ;HABILITA ESCRITA
BCF INTCON,GIE ;DESLIGA INTERRUPÇÕES
MOVLW B'01010101' ;DESBLOQUEIA ESCRITA
MOVWF EECON2 ;
MOVLW B'10101010' ;DESBLOQUEIA ESCRITA
MOVWF EECON2 ;
BSF EECON1,WR ;INICIA A ESCRITA
AGUARDA
BTFSC EECON1,WR ;TERMINOU?
GOTO AGUARDA
BSF INTCON,GIE ;HABILITA INTERRUPÇÕES
BANK0 ;POSICIONA PARA BANK 0
RETURN
SUBROTINA1
;CORPO DA ROTINA
RETURN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIO DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
INICIO
BANK1 ;ALTERA PARA O BANCO 1
MOVLW B'00000100' ;CONFIGURA TODAS AS PORTAS DO GPIO (PINOS)
MOVWF TRISIO ;COMO SAÍDAS, E GP0 COMO ENTRADA
MOVLW B'00010100'
MOVWF ANSEL ;DEFINE PORTAS COMO Digital I/O (GP2 COMO ANALOGICO)
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
MOVLW B'00001001'
MOVWF ADCON0 ;DEFINE GP2 COMO ENTRADA DO CONVERSOR AD (BITS 2 E 3)
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* INICIALIZAÇÃO DAS VARIÁVEIS *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* ROTINA PRINCIPAL *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
;CORPO DA ROTINA PRINCIPAL
BSF ADCON0, GO ;INICIA O A/D
;SETA O INCIO DO FSR
MOVLW 030
MOVWF FSR
INICIA_CONVERSAO
;CHECA SE ESTAMOS NA TRIGESIMA SEGUNDA POSIÇÃO
MOVLW 04F
SUBWF FSR, W
BTFSC STATUS, Z ;SE O RESULTADO FOI 0, ESTAMOS NA POSIÇÃO 31, LOGO FORAM PREENCHIDOS 31 VALORES
GOTO _FIM
ESPERA_CONVERTER
BTFSC ADCON0, GO ;CHECA SE A CONVERSÃO ANALOG/DIGITAL FOI TERMINADA
GOTO ESPERA_CONVERTER
BSF ADCON0, GO ;INICIA O A/D
MOVFW ADRESH ;ARMAZENA O VALOR LIDO NO WORK
MOVWF INDF ;PASSA O VALOR LIDO PARA A POSIÇÃO ATUAL
INCF FSR ;INCREMENTA FSR
GOTO INICIA_CONVERSAO
;REALIZA A TRIGESIMA SEGUNDA CONVERSÃO
_FIM
ESPERA_CONVERTER2
BTFSC ADCON0, GO ;CHECA SE A CONVERSÃO ANALOG/DIGITAL FOI TERMINADA
GOTO ESPERA_CONVERTER2
MOVFW ADRESH ;ARMAZENA O VALOR LIDO NO WORK
MOVWF INDF ;PASSA O VALOR LIDO PARA A POSIÇÃO ATUAL
INCF FSR ;INCREMENTA FSR
GRAVACAO_EEPROM
;SETA O INCIO DO FSR
MOVLW 030
MOVWF FSR
;SETA O CONTADOR PARA GRVAR 32 VALORES NA EEPROM
MOVLW .32
MOVWF CONTADOR
CLRF POSICAO_I ;LIMPA A VARIAVEL DE POSIÇÃO
INCF POSICAO_I ;COMEÇA A GRAVAÇÃO APARTIR DA POSICAO 0X01
CICLO_DE_GRAVACAO
MOVFW INDF
MOVWF DADO ;OBTEM O VALOR A SER ARMAZENADO NA EEPROM
MOVFW POSICAO_I ;OBTEM A POSIÇÃO A SER ARMAZENADA
CALL GRAVA_EEPROM ;GRAVAÇÃO DA EEPROM NA POSICAO I
INCF POSICAO_I ;INCREMENTA A POSICAO I PARA GRAVACAO NA EEPROM
INCF FSR ;NCREMENTA O REGISTRADOR DE POSICAO PARA LEITURA NA MEMORIA
DECFSZ CONTADOR
GOTO CICLO_DE_GRAVACAO ;FICA NO LOOP ATÉ QUE O CONTADOR FOR ZERADO
SOMA
;LIMPA AS VARIÁVEIS QUE ARMAZENARÃO O RESULTADO DA SOMA
CLRF SOMA_LOW
CLRF SOMA_HIGH
;SETA O INCIO DA POSICAO A SER LIDA NA EEPROM
MOVLW .1
MOVWF POSICAO_I
PROXIMA_SOMA
;CHECA SE ESTAMOS NA TRIGESIMA TERCEIRA POSIÇÃO
MOVLW .33
SUBWF POSICAO_I, W
BTFSC STATUS, Z ;SE O RESULTADO FOI 0, ESTAMOS NA POSIÇÃO 33, LOGO FORAM SOMADOS 32 VALORES
GOTO FIM_SOMA
MOVFW POSICAO_I
CALL LE_EEPROM ;MOV O VALOR DA POSIÇÃO ATUAL PARA WORK
ADDWF SOMA_LOW
BTFSC STATUS, C ;CHECA O CARRY
INCF SOMA_HIGH ;SE O CARRY APONTA OVERFLOW, INCREMENTA OS BITS MAIS SIGNIFICATIVOS
INCF POSICAO_I ;PROXIMA POSICAO
GOTO PROXIMA_SOMA
FIM_SOMA
DIVISAO_INTEIRA_32
MOVLW .5
MOVWF CONTADOR ;COLOCA O CONTADOR PARA REALIZAR 5 ITERAÇÕES
PROXIMA_DIVISAO
RRF SOMA_HIGH
RRF SOMA_LOW ;ROTACIONA OS BITS MENOS SIGNIFICATIVOS
DECFSZ CONTADOR ;CASO O CONTADOR CHEGUE EM 0, SAI DA DIVISÃO
GOTO PROXIMA_DIVISAO
FIM_DIVISAO
;ARMAZENA A MÉDIA NA POSIÇÃO 0X00
MOVFW SOMA_LOW
MOVWF DADO
MOVLW .0
CALL GRAVA_EEPROM
GOTO MAIN
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* FIM DO PROGRAMA *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END