pontifÍcia universidade catÓlica do paranÁlaplima/ensino/tcc/concluidos/2013/espectrofo… ·...
TRANSCRIPT
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ
ESCOLA POLITÉCNICA - ENGENHARIA DE COMPUTAÇÃO
PROJETO FÍSICO: Analisador de Espectrofotometria
CURITIBA - 2013
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ
ESCOLA POLITÉCNICA - ENGENHARIA DE COMPUTAÇÃO
Projeto Físico: Analisador de Espectrofotometria
ALUNOS: Bruno Baptista Buckeridge e Felipe Gustavo Behne
Trabalho apresentado para avaliação na disciplina de projeto final, do curso de engenharia de computação, turno manhã, da Universidade PUCPR ministrado pelo professor Luis Lima.
CURITIBA - 2013
SUMÁRIO
1. INTRODUÇÃO 04
2. DETALHAMENTO DO PROJETO 05
3. TECNOLOGIAS UTILIZADAS 11
4. CRONOGRAMA 13
5. TESTES 14
6. ANÁLISE DE RISCOS 18
7. RESULTADOS 20
8. CONCLUSÃO 20
9. REFERENCIAS BIBLIOGRAFICAS 21
4
1. INTRODUÇÃO
Este trabalho é baseado no teste ELISA (Enzyme-Linked Immunosorbent
Assay)[1]. ELISA basicamente se trata de um teste imunoenzimático capaz de
detectar substâncias específicas em amostras biológicas, analisando a cor da
amostra, devidamente tratada com os reagentes necessários, e previamente definida
pela medicina. Ele é capaz de diagnosticar doenças, como exemplo, o HIV(AIDS),
CHAGAS e outras DST’s. Além disso, é também bastante usado para verificar se
uma pessoa pode ou não doar sangue. Este teste possui um banco de dados com
as cores de cada resultado já testado pelo Estatuto Médico.
Existem dois modos de analisar amostras biológicas. Um desses modos é a
espectrofotometria e o outro é análise de cor realizada manualmente. O objetivo dos
testes é analisar se existem quantidades anormais de algum tipo de substância
específica através da cor. Na espectrofotometria são utilizados LED-s e um receptor
de intensidade para realizar essa verificação. Este método será explicado
detalhadamente neste documento. Já na análise manual, uma pessoa responsável
pelos exames utiliza um catálogo de cores e, através disso, dá o diagnóstico.
O maior problema da espectrofotometria é a demora que existe para
verificação de cada amostra. Usualmente dispõe-se uma bandeja com diversas
amostras, e cada uma é feita individualmente. Na verificação manual, apesar de ser
barato, ocorrem dois problemas: o tempo que a pessoa leva para realizar todo o
teste e a imprecisão da análise, pois entra em vigor o erro humano.
Este projeto tem como proposta fazer a análise da bandeja de forma muito
mais veloz, através de LED’s com diferentes cores e um fototransistor,
economizando uma considerável quantia de tempo e retirando a imprecisão
humana, sendo todo o processo realizado pelo microprocessador.
É de fundamental importância realizar esses testes para se obter um
diagnóstico preciso, porém os laboratórios que realizam esse tipo de teste
concentram-se nas grandes capitais do país. Devido a isso, é criado um problema
em relação às cidades do interior, onde é necessário realizar os exames, mas, por
falta de recursos, se faz necessário o envio da amostra para as capitais, gerando
custo com transporte e um tempo elevadíssimo para obter os resultados.
Com a solução que o projeto propõe será possível o desenvolvimento do
equipamente de forma muito menos custosa e a análise feita muito mais
rapidamente. Basicamente o projeto tem foco na humanização dos equipamentos
5
médicos pensando em todos os seus usuários e dando importância por igual às
regiões.
2. DETALHAMENTO DO PROJETO
O projeto original consistia em duas partes de software, sendo a primeira a
identificação das circunferências através da Transformada de Hough para detecção
de Círculos, e a segunda a comparação das cores dos círculos obtidos com um
padrão.
Para a identificação das circunferências, foram encontrados diversos
problemas, sendo o mais prejudicial a dificuldade em encontrar somente as
circunferências que se deseja. Foram feitos diversos testes com diferentes
diâmetros, porém o resultado satisfatório não foi alcançado. O principal defeito foi a
detecção de circunferências inexistentes, como mostram as figuras a seguir:
Figura 1 – Threshold 255
Figura 2 – Threshold 44
6
Na fase de comparação de cores, havia duas possibilidade de modelos de
cores para serem utilizados: RGB e HSI.
No modelo de cores RGB, cada cor aparece nos seus componentes espectrais
primários de vermelho, verde e azul. É um modelo de cor baseado na sintese aditiva,
com o qual é possível representar uma cor com a adição das cores primárias, como
mostra a imagem a seguir.
Figura 3 – Modelo RGB
O modelo de cores HSI representa uma cor em torno dos valores de matiz (H
– hue), saturação (S – saturation) e intensidade (I – intensity). A matiz é um atributo
que descreve a cor pura, enquanto que a saturação dá uma medida do grau de
diluição de uma cor pura por luz branca e a intensidade se refere ao brilho. O
modelo HSI apresenta canais mais descorrelacionados, ou seja, todas as cores
estão presente em seu espectro, como mostra a figura a seguir.
7
Figura 4 - Modelo HSI
Iniciamos utilizando o modelo de cores RGB. Apesar de diversas tentativas,
não foi possível fazer uma comparação de cores adequada. Após conversa com o
professor Facon, seguindo suas orintações, modificamos o modelo de cores para
HSI.
Iniciamos utilizando o modelo de cores RGB. Apesar de diversas tentativas,
não foi possível fazer uma comparação de cores adequada. Após conversa com o
professor Facon, seguindo suas orientações, modificamos o modelo de cores para
HSI.
Mesmo com a mudança, devido principalmente à falta de experiência dos
integrantes do grupo na área de tratamento e modificação de imagens, os problemas
persistiram.
Os integrantes chegaram a conclusão que essa abordagem não é a mais
otimizada, criando então outra abordagem.
8
NOVA ABORDAGEM
A nova abordagem consiste na medição da luz que passa através das
amostras, usando-se LED’s de 5 cores diferentes em um lado da bandeja e
fototransistores no outro lado da mesma.
O usuário poderá , através de navegação nos menus, realizar o teste de cada
cor de LED individualmente, além de poder testar o motor, posicionando a bandeja
na linha da amostra desejada em cima da cor de LED desejada.
O menu inicial mostra uma tela de apresentação do projeto, mostrando a
seguir a mensagem ABRIR. O usuário poderá apertar ENTER ou mudar o menu de
navegação. Ao pressionar ENTER a bandeja de testes deverá abrir, mudando a
mensagem no display para FECHAR.
Após abertura da bandeja o usuário poderá pressionar ENTER para fechar
novamente a mesma.
A navegação entre os menus é feita utilizando os botões LEFT e RIGHT do
multitect disponível na placa principal.
Ao pressionar a tecla RIGHT quando estiver no menu com a mensagem
ABRIR, a mensagem é modificada para EXAMES, que ao pressionar ENTER nesta
tela é possível escolher a cor que o usuário deseja posicionar a bandeja para
realizar o exame. As cores são AZUL, LARANJA, VERMELHO, VERDE e IR.
Para ativação dos LED’s corretos, foram usadas placas de endereçamento,
conforme mostra a figura a seguir.
Figura 5 – Placa de endereçamento
9
Ao pressionar ENTER em qualquer uma das cores, o motor é acionado
posicionando a linha que se deseja examinar na linha com a respectiva cor do LED
selecionada, transmitindo as informações obtidas pelo receptor para o computador,
através da saída serial, conforme mostrado na figura a seguir.
Figura 6 – Obtenção dos valores das amostras
Ao pressionar a tecla RIGHT enquanto estiver com a mensagem EXAMES
mostrada no display, a mensagem será modificada para AJUSTES, que ao
pressionar ENTER é mostrada a mensagem MOTOR, sendo possível, ao pressionar
RIGHT, mudar para LEDS. Ao pressionar ENTER em qualquer uma dessas duas
telas, é realizado o teste da função selecionada.
10
O fluxograma a seguir mostra o funcionamento do projeto:
Figura 7 – Funcionamento do projeto
11
A disposição dos LED’s é mostrada na figura a seguir:
Figura 8 – Disposição dos LED’s
Para automatização do movimento, será usado um motor de passo
devidamente configurado para passar todas as linhas de amostras por todos os
LED’s.
12
As figuras a seguir ilustram o resultado final:
Figura 9 – Case completo
Figura 10 – Placa principal
13
3. TECNOLOGIAS UTILIZADAS
Para a realização deste projeto, serão utlizadas principalmente as seguintes
tecnologias:
LED;
Microcontrolador PIC;
Fototransistor;
Motor de passo;
Display LCD
3.1 LED
Os LED’s serão utilizados para aplicar diferentes comprimentos de ondas de
luz, através das diferentes cores, para identificação da amostra. Eles serão
dispostos em quantidade de 8 de cada cor, sendo 5 cores, totalizando 40 LED’s.
3.2 Microcontrolador PIC
O microcontrolador será usado para fazer toda a interpretação da leitura do
fototransistor e controle do motor de passo, para funcionamento correto do projeto. A
programação do mesmo será feita no software MPLAB.
3.3 Fototransistor
O fototransistor será um componente vital para o funcionamento correto do
projeto. Será utilizado para realizar a leitura da luz que atravessa as amostras,
identificando-as. Espera-se que o fototransistor realize a leitura com os mesmos
valores para uma mesma amostra sempre que requerido. Serão dispostos em 5
linhas com 8 colunas, totalizando 40 fototransistores.
3.4 Motor de Passo
O motor de passo será usado para movimentar a bandeja com as amostras e
posicioná-la corretamente acima das fileiras de LED’s com as diferentes cores.
3.5 Display LCD
O display LCD será utilizado para mostrar quais são as amostras presentes
na bandeja e auxiliar o usuário na navegação pelos menus.
14
3.6 Tecnologias Concorrentes
É possível encontrar duas máquinas de fácil acesso aqui no Brasil, uma
chama-se IMMUNOMAT[2] (máquina fabricada na Alemanha e distribuída no Brasil
pela Virion\serion) e a outra chama-se Thunderbolt[3] (máquina fabricada nos Estados
Unidos da América pela empresa GoldStandard Diagnostics). Ambas as máquinas
possuem custo muito elevado, limitando o acesso às mesmas.
Além do custo elevado, ambas são ainda muito grandes e ocupam muito
espaço.
15
4. CRONOGRAMA
O Cronograma do projeto teve como data inicial no dia 04/02 quando
começou-se a discutir idéias de interesse do grupo. A data limite para o primeiro
semestre foi 21/06 e a data limite para o fim do projeto é 21/11 Segue abaixo a lista
de tarefas.
Figura 11 – Cronograma Disciplinar
16
5. TESTES
O projeto será testado primeiramente através do uso do Arduino, devido à
facilidade de uso do mesmo e à mudança de abordagem do projeto, causando
diminuição do tempo disponível para desenvolvimento.
O primeiro teste será o do fototransistor com as diferentes cores dos LED’s,
para verificar se o mesmo consegue fazer uma leitura consistente. Para monitoração
dos valores será usado o Serial Monitor do ambiente de desenvolvimento do
Arduino. Espera-se obter os mesmos valores de uma determinada amostra em todas
a medições.
O teste seguinte será o do motor de passo, verificando-se se o mesmo
posiciona-se corretamente em todas as posições acima das fileiras de LED’s.
Após o teste com o Arduino e as devidas implantações no microcontrolador
PIC, o mesmo será utilizado para os testes.
Primeiramente será testada a fonte de alimentação, para verificar se a
corrente é suficiente para funcionamento total do projeto.
Após verificação da alimentação, os testes podem ser feitos através dos
próprios menus de navegação feitos pela equipe, pela navegação através dos
botões. Tantos os LED’s quanto os motores podem ser testados separadamente.
Após testar todos os menus de navegação, será feito o teste final, consistindo
no exame propriamente dito. Deverá obter-se a identificação das amostras contidas
na bandeja e mostrá-las no display.
17
6. ANÁLISE DE RISCOS
Como qualquer projeto, este está susceptível a imprevistos e falhas durante o
desenvolvimento do projeto. Por isso é necessário estimar os impactos e riscos
destes acontecimentos.
1 – Nao conclusão até a data prevista
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Alto
Solução
pretendida:
Definir o cronograma anteriormente ao projeto.
2 – Saída de algum integrante do grupo
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Alto
Solução
pretendida:
Os integrantes já desenvolveram vários trabalhos juntos,
portanto dificilmente iria acontecer. Caso aconteça, o trabalho
será desenvolvido individualmente
3 – Cliente insatisfeito com o resultado final
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Médio
Solução
pretendida:
Como os integrantes se reúnem frequentemente com o cliente,
dificilmente o cliente ficará insatisfeito. Caso fique, os
integrantes ouvirão suas reclamações e propostas.
18
4 – Diagnósticos falhos
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Alto
Solução
pretendida:
Caso os diagnósticos nao sejam precisos, a precisão do
projeto será alterada
5 – Falha mecânica
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Baixa
Solução
pretendida:
Pode ocorrer alguma falha mecânica, como por exemplo o
motor nao funcionar ou a estrutura ficar emperrada. Caso isso
ocorra, pode ser resolvido rapidamente.
6 – Falha dos LED’s ou receptores
Probabilidade de
ocorrência:
Baixa Impacto causado
no projeto:
Baixa
Solução
pretendida:
Estes componentes são extremamentes confiáveis, sendo
muito improvável que falhem. Caso falhem, podem ser
trocados rapidamente.
19
7. RESULTADOS
Os resultados obtidos foram muito satisfatórios. Através do uso de cada cor,
foi possível identificar as amostras contidas nos poços das bandejas. Dependendo
da substância a ser identificada, foi necessário mais ou menos cores para
proporcionar um valor único para a mesma.
Apesar de algumas falhas na identificação, a simples repetição da tentativa já
foi o suficiente para fazer com que não haja erros.
8. CONCLUSÃO
Conclui-se, portanto, que por se tratar de uma área medica é de extrema
importância a precisão e o tempo de execução.
Levando em conta os métodos hoje utilizados sabe-se que uma melhora é
necessária, porém os laboratórios não querem ter grandes custos para obter essas
melhoras e um projeto de fácil adaptação se faz necessário.
Acredita-se que com um custo baixo possa-se criar o produto melhorando o
tempo hábil dos laboratórios e o custo para realizar os exames, dando assim outra
opção de diagnostico.
Além disso, os integrantes perceberam uma outra aplicação para o projeto,
podendo ser usado para identificação de substâncias em um aeroporto, por
exemplo, antes do embarque dos passageiros, permitindo que apenas substâncias
lícitas cadastradas possam passar pela alfândega.
Através do desenvolvimento do projeto, os integrantes puderem desenvolver
todas as habilidades adquiridas durante os 5 anos de curso de Engenharia de
Computação. Apesar dos eventuais problemas encontrados, as resoluções foram
efetuadas de maneira rápida e sem muita dificuldade, contanto sempre com o auxílio
dos professores.
20
ANEXO I
A seguir o código utilizado para programação do projeto através da PIC.
Código Fonte
;=====================================================================
; PADRAO PIC 16F877A
; PROJETO E PROGRAMA "Bruno Buckeridge e Felipe Behne"
;=====================================================================
; DESLIGA AVISOS DE ERROS NO BUILD
;=====================================================================
list n=0 ; suppress list file page breaks
list ST=off ; suppress list file symbol table
ERRORLEVEL -202
ERRORLEVEL -205
ERRORLEVEL -302
ERRORLEVEL -305
ERRORLEVEL -230
;=====================================================================
#INCLUDE <P16F877A.INC>
#INCLUDE <DELAY.INC>
#INCLUDE <LCD.INC>
#INCLUDE <LCDMENU.INC>
#INCLUDE <PASSO.INC>
#INCLUDE <MATH.INC>
#INCLUDE <SERIAL.INC>
;===========================================================================
; *** CONFIGURACAO INTERNA DO FUNCIONAMENTO DA PIC 16F877A
;===========================================================================
21
__CONFIG _BODEN_OFF & _CPD_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC
& _CP_OFF & _WRT_OFF
;=====================================================================
; PAGINACAO DE MEMORIA
;=====================================================================
BANK0 MACRO ;macro para selecionar data RAM bank 0
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO ;macro para selecionar data RAM bank 1
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK2 MACRO ;macro para selecionar data RAM bank 2
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK3 MACRO ;macro para selecionar data RAM bank 3
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
;=====================================================================
; DEFINICOES DE MEMORIA
;=====================================================================
WTEMP EQU 0x20
STEMP EQU 0x21
MEM01 EQU 0x22
MEM02 EQU 0x23
MEM03 EQU 0x24
22
CNT EQU 0x25
REF EQU 0x26
LCDDATA EQU 0x27
LCDTELA EQU 0x28
VOLTA EQU 0x29
TXTEMP EQU 0x2A
RXTEMP EQU 0x2B
ADD EQU 0x2C
MATHTEMP EQU 0x2D
CHARC EQU 0x2E
CHARD EQU 0x2F
CHARU EQU 0x30
RESULT EQU 0x31
AMOSTRA EQU 0x32
COMPLETA EQU 0x33
CNT2 EQU 0x34
BARRAMENTO EQU 0x35
;=====================================================================
; DEFINICOES DE I/O
;=====================================================================
#DEFINE ANALOG PORTA,0 ;1
#DEFINE BT_ESC PORTA,1 ;1
#DEFINE BT_BAI PORTA,2 ;1
#DEFINE BT_ESQ PORTA,3 ;1
#DEFINE BT_OK PORTA,4 ;1
#DEFINE BT_CIM PORTA,5 ;1
#DEFINE ST1 PORTB,0 ;0
#DEFINE ST2 PORTB,1 ;0
#DEFINE ST3 PORTB,2 ;0
#DEFINE ST4 PORTB,3 ;0
23
;#DEFINE PORTB,4 ;1
#DEFINE BEEP PORTB,5 ;0
;#DEFINE PORTB,6 ;1 PGC
;#DEFINE PORTB,7 ;1 PGD
#DEFINE LCD1 PORTC,0 ;0
#DEFINE LCD2 PORTC,1 ;0
#DEFINE LCD3 PORTC,2 ;0
#DEFINE LCD4 PORTC,3 ;0
#DEFINE ADD2 PORTC,4 ;0
#DEFINE DADO PORTC,5 ;0
#DEFINE TX PORTC,6 ;0
#DEFINE RX PORTC,7 ;0
#DEFINE LCDPORT PORTC
#DEFINE LCDEN PORTD,0 ;0
#DEFINE LCDCD PORTD,1 ;0
#DEFINE ADD0 PORTD,2 ;0
#DEFINE ADD1 PORTD,3 ;0
#DEFINE ADD3 PORTD,4 ;0
#DEFINE ADD4 PORTD,5 ;0
#DEFINE ADD5 PORTD,6 ;0
#DEFINE ENABLE PORTD,7 ;0
#DEFINE BT_DIR PORTE,0 ;1
;#DEFINE PORTE,1 ;1
;#DEFINE PORTE,2 ;1
;=====================================================================
; ENDEREGO DE RESET
;=====================================================================
ORG 0x00
24
GOTO CONFIGURA
;=====================================================================
; ENDERECO DE INTERRUPCAO
;=====================================================================
ORG 0x04 ;ENDERECO INICIAL DA INTERRUPCAO
GOTO CONFIGURA
;=====================================================================
; CONFIGURACAO
;=====================================================================
CONFIGURA ;INICIA A PIC
BANK0
CLRF PORTA ;LIMPA O PORTA
CLRF PORTB ;LIMPA O PORTB
CLRF PORTC ;LIMPA O PORTC
CLRF PORTD ;LIMPA O PORTD
CLRF PORTE ;LIMPA O PORTE
BANK1
MOVLW B'01001110' ;CONFIGURA ENTRADAS E SAIDAS DIGITAIS
MOVWF ADCON1
MOVLW B'11111111' ; CONFIGURA ENTRADAS E SAIDAS
MOVWF TRISA ;
MOVLW B'11010000' ; CONFIGURA ENTRADAS E SAIDAS
MOVWF TRISB ;
MOVLW B'10000000' ; CONFIGURA ENTRADAS E SAIDAS
MOVWF TRISC ;
25
MOVLW B'00000000' ; CONFIGURA ENTRADAS E SAIDAS
MOVWF TRISD ;
MOVLW B'11101111' ; CONFIGURA ENTRADAS E SAIDAS
MOVWF TRISE ;
CLRF INTCON
BANK0
MOVLW B'10000001' ;CONFIGURA ENTRADAS E SAIDAS DIGITAIS
MOVWF ADCON0
CALL LIMPA
CALL LCDINI
CALL LMENUINI
CALL DLY1S
CALL DLY1S
CALL DLY1S
CALL SERIALINI
CALL DLY1S
;=====================================================================
; PROGRAMA PRINCIPAL
;=====================================================================
START ; <--- AQUI VAI O PROGRAMA PRINCIPAL
MENU01
CALL LMENU_EXAME
CALL LMENU01
CALL BUZZER
CALL DLY500MS
L_MENU01
26
BTFSS BT_ESQ
GOTO MENU06
BTFSS BT_BAI
GOTO MENU02
BTFSS BT_OK
GOTO EX_VERM
GOTO L_MENU01
MENU02
CALL LMENU_EXAME
CALL LMENU02
CALL BUZZER
CALL DLY500MS
L_MENU02
BTFSS BT_ESQ
GOTO MENU06
BTFSS BT_CIM
GOTO MENU01
BTFSS BT_BAI
GOTO MENU03
BTFSS BT_OK
GOTO EX_LARA
GOTO L_MENU02
MENU03
CALL LMENU_EXAME
CALL LMENU03
CALL BUZZER
CALL DLY500MS
L_MENU03
BTFSS BT_ESQ
GOTO MENU06
BTFSS BT_CIM
27
GOTO MENU02
BTFSS BT_BAI
GOTO MENU04
BTFSS BT_OK
GOTO EX_VERD
GOTO L_MENU03
MENU04
CALL LMENU_EXAME
CALL LMENU04
CALL BUZZER
CALL DLY500MS
L_MENU04
BTFSS BT_ESQ
GOTO MENU06
BTFSS BT_CIM
GOTO MENU03
BTFSS BT_BAI
GOTO MENU05
BTFSS BT_OK
GOTO EX_AZUL
GOTO L_MENU04
MENU05
CALL LMENU_EXAME
CALL LMENU05
CALL BUZZER
CALL DLY500MS
L_MENU05
BTFSS BT_ESQ
GOTO MENU06
BTFSS BT_CIM
GOTO MENU04
28
BTFSS BT_OK
GOTO EX_IR
GOTO L_MENU05
MENU06
CALL LMENU06
CALL BUZZER
CALL DLY500MS
L_MENU06
BTFSS BT_DIR
GOTO MENU01
BTFSS BT_CIM
CALL MAN_ABRE
BTFSS BT_BAI
CALL MAN_FECHA
GOTO L_MENU06
GOTO START
;=====================================================================
; ROTINAS EXAMES
;=====================================================================
EX_VERM
CALL LMENU07
CALL BUZZER
CALL DLY500MS
MOVLW .0
MOVWF BARRAMENTO
GOTO EXAME
EX_LARA
CALL LMENU07
CALL DLY500MS
CALL AVANCA
29
BTFSS BT_OK
GOTO MENU01
MOVLW .8
MOVWF BARRAMENTO
GOTO EXAME
EX_VERD
CALL LMENU07
CALL DLY500MS
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
MOVLW .16
MOVWF BARRAMENTO
GOTO EXAME
EX_AZUL
CALL LMENU07
CALL DLY500MS
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
MOVLW .24
MOVWF BARRAMENTO
30
GOTO EXAME
EX_IR
CALL LMENU07
CALL DLY500MS
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
CALL AVANCA
BTFSS BT_OK
GOTO MENU01
MOVLW .32
MOVWF BARRAMENTO
GOTO EXAME
;******************************************
EXAME
CLRF AMOSTRA
MOVLW .6 ;NUMERO DE LEITURAS 6 PARA EXEMPLIFICAR
MOVWF CNT2
L_EX
BTFSS BT_OK
GOTO MENU01
MOVF BARRAMENTO,W
MOVWF ADD
CALL ENDERECO
31
CALL LEITURA
CALL AVANCA
; CALL DLY10S
DECFSZ CNT2
GOTO L_EX
GOTO MENU01
;***** BEEP *****
BUZZER
BSF BEEP
CALL DLY10MS
CALL DLY10MS
CALL DLY10MS
CALL DLY10MS
BCF BEEP
RETURN
;****** ROTINA LEITURA *******
LEITURA
MOVLW .8
MOVWF CNT
L_LEITURA
BSF ENABLE
BSF DADO
CALL DLY10MS
CALL LE_AD
CALL DLY10MS
BCF DADO
BCF ENABLE
CALL TRANSMITE
CALL BUZZER
INCF AMOSTRA
32
INCF ADD
CALL ENDERECO
DECFSZ CNT
GOTO L_LEITURA
RETURN
;=====================================================================
; ROTINA A/D
;=====================================================================
LE_AD
BSF ADCON0,2
NOP
NOP
BTFSC ADCON0,2
GOTO $-2
MOVF ADRESH,W
MOVWF RESULT
RETURN
;=====================================================================
; ROTINA TRANSMITE
;=====================================================================
TRANSMITE
MOVLW "T"
CALL TXDATA
MOVLW "E"
CALL TXDATA
MOVLW "S"
CALL TXDATA
MOVLW "T"
CALL TXDATA
MOVLW "E"
CALL TXDATA
33
MOVLW " "
CALL TXDATA
MOVF AMOSTRA,W
CALL MATH
MOVF CHARD,W
CALL TXDATA
MOVF CHARU,W
CALL TXDATA
MOVLW " "
CALL TXDATA
MOVLW "V"
CALL TXDATA
MOVLW "A"
CALL TXDATA
MOVLW "L"
CALL TXDATA
MOVLW "O"
CALL TXDATA
MOVLW "R"
CALL TXDATA
MOVLW " "
CALL TXDATA
MOVF RESULT,W
CALL MATH
MOVF CHARC,W
34
CALL TXDATA
MOVF CHARD,W
CALL TXDATA
MOVF CHARU,W
CALL TXDATA
MOVLW 0x0D
CALL TXDATA
RETURN
;=====================================================================
; ROTINA ENDERECO
;=====================================================================
ENDERECO
BCF ADD0
BCF ADD1
BCF ADD2
BCF ADD3
BCF ADD4
BCF ADD5
BTFSC ADD,0
BSF ADD0
BTFSC ADD,1
BSF ADD1
BTFSC ADD,2
BSF ADD2
BTFSC ADD,3
BSF ADD3
BTFSC ADD,4
BSF ADD4
35
BTFSC ADD,5
BSF ADD5
RETURN
;=====================================================================
; ROTINA LIMPA
;=====================================================================
LIMPA
CLRF ADD
L_LIMPA
CALL ENDERECO
BCF DADO
BSF ENABLE
NOP
BCF ENABLE
INCFSZ ADD
GOTO L_LIMPA
RETURN
;=====================================================================
; ROTINAS MOTOR PASSO
;=====================================================================
;**** MANUAL ****
MAN_ABRE
BTFSS BT_OK
RETURN
BTFSS BT_ESC
GOTO MAN_ABRE2
CALL PASSO
GOTO MAN_ABRE
36
MAN_ABRE2
BTFSC BT_CIM
RETURN
CALL PASSO
GOTO MAN_ABRE
MAN_FECHA
BTFSS BT_OK
RETURN
BTFSS BT_ESC
GOTO MAN_FECHA2
CALL CLOSEPASSO
GOTO MAN_FECHA
MAN_FECHA2
BTFSC BT_BAI
RETURN
CALL CLOSEPASSO
GOTO MAN_FECHA
;**** AUTOMATICA ****
AVANCA
MOVLW .18
MOVWF VOLTA
L_AVANCA
CALL UMAVOLTA
BTFSS BT_ESC
RETURN
DECFSZ VOLTA
GOTO L_AVANCA
RETURN
;-----------------------------
37
UMAVOLTA
MOVLW .200
MOVWF COMPLETA
L_UMAVOLTA
CALL PASSO
DECFSZ COMPLETA
GOTO L_UMAVOLTA
RETURN
;-----------------------------
PASSO
BTFSC REF,0
GOTO PASSO1
BTFSC REF,1
GOTO PASSO2
BTFSC REF,2
GOTO PASSO3
BTFSC REF,3
GOTO PASSO4
BTFSC REF,4
GOTO PASSO5
BTFSC REF,5
GOTO PASSO6
BTFSC REF,6
GOTO PASSO7
BTFSC REF,7
GOTO PASSO0
GOTO START
CLOSEPASSO
BTFSC REF,7
GOTO PASSO6
BTFSC REF,6
38
GOTO PASSO5
BTFSC REF,5
GOTO PASSO4
BTFSC REF,4
GOTO PASSO3
BTFSC REF,3
GOTO PASSO2
BTFSC REF,2
GOTO PASSO1
BTFSC REF,1
GOTO PASSO0
BTFSC REF,0
GOTO PASSO7
GOTO START
PASSO0
BSF ST1
CLRF REF
BSF REF,0
CALL DLY1MS
CALL DLY1MS
BCF ST1
RETURN
PASSO1
BSF ST2
BSF ST1
CLRF REF
BSF REF,1
CALL DLY1MS
CALL DLY1MS
BCF ST2
BCF ST1
RETURN
39
PASSO2
BSF ST2
CLRF REF
BSF REF,2
CALL DLY1MS
CALL DLY1MS
BCF ST2
RETURN
PASSO3
BSF ST2
BSF ST3
CLRF REF
BSF REF,3
CALL DLY1MS
CALL DLY1MS
BCF ST2
BCF ST3
RETURN
PASSO4
BSF ST3
CLRF REF
BSF REF,4
CALL DLY1MS
CALL DLY1MS
BCF ST3
RETURN
PASSO5
BSF ST3
BSF ST4
CLRF REF
BSF REF,5
CALL DLY1MS
40
CALL DLY1MS
BCF ST3
BCF ST4
RETURN
PASSO6
BSF ST4
CLRF REF
BSF REF,6
CALL DLY1MS
CALL DLY1MS
BCF ST4
RETURN
PASSO7
BSF ST4
BSF ST1
CLRF REF
BSF REF,7
CALL DLY1MS
CALL DLY1MS
BCF ST4
BCF ST1
RETURN
;------------------------------------------
; **** ROTINAS MACRO ****
;------------------------------------------
MDELAY
MSERIAL
MLCD
MPASSO
MMATH
MLCDMENU
;------------------------------------------
41
; **** FIM DO PROGRAMA ****
;------------------------------------------
END
42
;========================================
;***** ROTINA DE LCD *******
;========================================
MLCD MACRO
;CONEXOES NECESSARIAS
;PORTAS PIC LCD
;#DEFINE LCD4 PORTC,0 ; 11
;#DEFINE LCD5 PORTC,1 ; 12
;#DEFINE LCD6 PORTC,2 ; 13
;#DEFINE LCD7 PORTC,3 ; 14
;#DEFINE LCDRS PORTD,1 ; 04
;#DEFINE LCDE PORTD,0 ; 06
;#DEFINE LCDPORT PORTX
;POSICOES DE MEMSRIA NECESSARIAS LCD
;LCDDATA EQU 0x ;DADO DO LCD
;POSICOES DE MEMSRIA NECESSARIAS DELAY
;MEM01 EQU 0x ;TIMER DELAY1
;MEM02 EQU 0x ;TIMER DELAY2
;MEM03 EQU 0x ;TIMER DELAY3
;========================================
;***** INICIALIZA LCD *******
;========================================
LCDINI
CALL DLY1S
43
;========================================
;***** SYNC LCD 3 X 0x30 *******
;========================================
;SINCROMISMO COM O LCD
MOVLW B'00000011' ;SYNC
MOVWF LCDPORT
BSF LCDEN
NOP
NOP
NOP
NOP
NOP
BCF LCDEN
CALL DLY100MS
CALL DLY100MS
MOVLW B'00000011' ;SYNC
MOVWF LCDPORT
BSF LCDEN
NOP
NOP
NOP
NOP
NOP
BCF LCDEN
CALL DLY10MS
MOVLW B'00000011' ;SYNC
MOVWF LCDPORT
BSF LCDEN
NOP
44
NOP
NOP
NOP
NOP
BCF LCDEN
CALL DLY1MS
;===========================================
;ALTERNA PARA MODO DE 4 BITS
MOVLW B'00000010' ;4BIT MODE
MOVWF LCDPORT
BSF LCDEN
NOP
NOP
NOP
NOP
NOP
BCF LCDEN
CALL DLY1MS
;===========================================
; A PARTIR DE AQUI O LCD JA ESTA EM 4BITS
; AGORA A ROTINA LCDCMD SEPARA OS NIBBLES
; E TRANSMITE OS 4 MSB E DEPOIS OS 4 LSB
; COM INTERVALOS DE 50 US ENTRE ELES
; E 100US NO FIM PARA O PROCESSAMENTO DO LCD
;--------------------------------------
;PRIMEIRA CONFIGURAGCO
;D=0 4BITS MODE
;D=1 8BITS MODE
;N=0 UMA LINHA
;N=1 DUAS LINHAS
45
;F=0 CARACTERE 8x5
;F=1 CARACTERE 10x5
; B'001DNFxx'
MOVLW B'00101000'
CALL LCDCMD
;--------------------------------------
;SEGUNDA CONFIGURAGCO
;C=0 ESCREVE E DEPOIS DESLOCA O CURSOR
;C=1 DESLOCA O CURSOR E DEPOIS ESCREVE
;D DIREGCO DO DESLOCAMENTO DO CURSOR
;D=0 ESQUERDA
;D=1 DIREITA
; B'0001CDxx'
MOVLW B'00010100'
CALL LCDCMD
;--------------------------------------
;TERCEIRA CONFIGURAGCO
;D=0 DESLIGA DISPLAY
;D=1 LIGA DISPLAY
;C=0 DESLIGA CURSOR
;C=1 LIGA CURSOR
;B=0 NCO PISCA CURSOR
;B=1 PISCA CURSOR
; B'00001DCB'
MOVLW B'00001100'
CALL LCDCMD
CALL CLRLCD ;LIMPA LCD
RETURN
;=================================================================
;ROTINA LIMPA LCD
;=================================================================
46
CLRLCD MOVLW 0x01 ;Clear display
CALL LCDCMD
CALL DLY1MS
CALL DLY1MS
CALL DLY1MS
CALL DLY1MS
CALL DLY1MS
RETURN
;=================================================================
; ROTINA SEPARA COMANDO OU DATA
;=================================================================
LCD
MOVWF MEM01
BTFSS MEM01,7 ;TESTA SE I COMMAND >= 80
GOTO LCDDT
GOTO LCDCMD
;=================================================================
; ROTINA TX P/LCD COMANDO COM W REGISTER
;=================================================================
LCDCMD
MOVWF LCDDATA ;TX=W SALVA TX
SWAPF LCDDATA,W ;LE O DADO DE TX E JA FAZ UM NIBBBLE D0=D4 E
;COLOCA EM W
ANDLW 0x0F ;
MOVWF LCDPORT ;POE W=CODIGO DE COMANDO NA PORTA A
BCF LCDCD ;
BSF LCDEN ;
NOP
NOP
NOP
NOP
NOP
47
BCF LCDEN ;
CALL DLY50US ;AGURDA 50uS
MOVF LCDDATA,W ;TX=W SALVA TX
ANDLW 0x0F ;
MOVWF LCDPORT ;POE W=CODIGO DE COMANDO NA PORTA A
BCF LCDCD ;
BSF LCDEN ;
NOP
NOP
NOP
NOP
NOP
BCF LCDEN ;
CALL DLY100US ;AGURDA 50uS
RETURN ;VOLTA
;=================================================================
; ROTINA TX P/LCD DADOS COM W REGISTER
;=================================================================
LCDDT
MOVWF LCDDATA ;TX=W SALVA TX
SWAPF LCDDATA,W ;LE O DADO DE TX E JA FAZ UM NIBBBLE D0=D4 E
;COLOCA EM W
ANDLW 0x0F ;
MOVWF LCDPORT ;POE W=CODIGO DE COMANDO NA PORTA A
BSF LCDCD ;
BSF LCDEN ;
NOP
NOP
NOP
BCF LCDEN ;
CALL DLY50US ;AGURDA 50uS
MOVF LCDDATA,W ;TX=W SALVA TX
48
ANDLW 0x0F ;
MOVWF LCDPORT ;POE W=CODIGO DE COMANDO NA PORTA A
BSF LCDCD ;
BSF LCDEN ;
NOP
NOP
NOP
BCF LCDEN ;
CALL DLY50US ;AGURDA 50uS
MOVF LCDDATA,W
RETURN ;VOLTA
;---------------------------------------------------
; ROTINA DE LIMPA LINHA
;---------------------------------------------------
LIMPALINHA1
MOVLW 0x80
CALL LCD
MOVLW " "
GOTO LIMPALCD
LIMPALINHA2
MOVLW 0xC0
CALL LCD
MOVLW " "
GOTO LIMPALCD
LIMPALINHA3
MOVLW 0x90
CALL LCD
MOVLW " "
GOTO LIMPALCD
49
LIMPALINHA4
MOVLW 0xD0
CALL LCD
MOVLW " "
GOTO LIMPALCD
LIMPALCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
CALL LCD
RETURN
ENDM
;========================================
;***** MENUS DE LCD *******
;========================================
MLCDMENU MACRO
LMENUINI
MOVLW 0x80 ;LINHA 1
CALL LCD
50
MOVLW "S" ;0
CALL LCD
MOVLW "P" ;1
CALL LCD
MOVLW "E" ;2
CALL LCD
MOVLW "C" ;3
CALL LCD
MOVLW "T" ;4
CALL LCD
MOVLW "R" ;5
CALL LCD
MOVLW "O" ;6
CALL LCD
MOVLW "F" ;7
CALL LCD
MOVLW "O" ;8
CALL LCD
MOVLW "T" ;9
CALL LCD
MOVLW "O" ;A
CALL LCD
MOVLW "M" ;B
CALL LCD
MOVLW "E" ;C
CALL LCD
MOVLW "T" ;D
CALL LCD
MOVLW "E" ;E
CALL LCD
MOVLW "R" ;F
CALL LCD
51
MOVLW 0xC0 ;LINHA 2
CALL LCD
MOVLW "*" ;0
CALL LCD
MOVLW "*" ;1
CALL LCD
MOVLW "*" ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW " " ;4
CALL LCD
MOVLW " " ;5
CALL LCD
MOVLW "V" ;6
CALL LCD
MOVLW "." ;7
CALL LCD
MOVLW " " ;8
CALL LCD
MOVLW "1" ;9
CALL LCD
MOVLW " " ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW "*" ;D
CALL LCD
52
MOVLW "*" ;E
CALL LCD
MOVLW "*" ;F
CALL LCD
MOVLW 0x90 ;LINHA 3
CALL LCD
MOVLW " " ;0
CALL LCD
MOVLW " " ;1
CALL LCD
MOVLW " " ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW "B" ;4
CALL LCD
MOVLW "R" ;5
CALL LCD
MOVLW "U" ;6
CALL LCD
MOVLW "N" ;7
CALL LCD
MOVLW "O" ;8
CALL LCD
MOVLW " " ;9
CALL LCD
MOVLW "B" ;A
CALL LCD
MOVLW "." ;B
CALL LCD
MOVLW " " ;C
53
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW " " ;E
CALL LCD
MOVLW " " ;F
CALL LCD
MOVLW 0xD0 ;LINHA 4
CALL LCD
MOVLW " " ;0
CALL LCD
MOVLW " " ;1
CALL LCD
MOVLW "F" ;2
CALL LCD
MOVLW "E" ;3
CALL LCD
MOVLW "L" ;4
CALL LCD
MOVLW "I" ;5
CALL LCD
MOVLW "P" ;6
CALL LCD
MOVLW "E" ;7
CALL LCD
MOVLW " " ;8
CALL LCD
MOVLW "B" ;9
CALL LCD
MOVLW "E" ;A
CALL LCD
54
MOVLW "H" ;B
CALL LCD
MOVLW "N" ;C
CALL LCD
MOVLW "E" ;D
CALL LCD
MOVLW " " ;E
CALL LCD
MOVLW " " ;F
CALL LCD
RETURN
LMENU_EXAME
CALL CLRLCD
MOVLW 0x80 ;LINHA 2
CALL LCD
MOVLW "<" ;0
CALL LCD
MOVLW "-" ;1
CALL LCD
MOVLW " " ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW " " ;4
CALL LCD
MOVLW "E" ;5
CALL LCD
MOVLW "X" ;6
CALL LCD
MOVLW "A" ;7
CALL LCD
55
MOVLW "M" ;8
CALL LCD
MOVLW "E" ;9
CALL LCD
MOVLW "S" ;A
CALL LCD
RETURN
LMENU01
MOVLW 0x90 ;LINHA 3
CALL LCD
MOVLW " " ;0
CALL LCD
MOVLW " " ;1
CALL LCD
MOVLW " " ;2
CALL LCD
MOVLW "V" ;3
CALL LCD
MOVLW "E" ;4
CALL LCD
MOVLW "R" ;5
CALL LCD
MOVLW "M" ;6
CALL LCD
MOVLW "E" ;7
CALL LCD
MOVLW "L" ;8
CALL LCD
MOVLW "H" ;9
CALL LCD
MOVLW "O" ;A
56
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW "O" ;E
CALL LCD
MOVLW "K" ;F
CALL LCD
MOVLW 0xD2 ;LINHA 4
CALL LCD
MOVLW "v" ;2
CALL LCD
RETURN
LMENU02
MOVLW 0xC2 ;LINHA 2
CALL LCD
MOVLW "^" ;2
CALL LCD
MOVLW 0x93 ;LINHA 3
CALL LCD
MOVLW "L" ;3
CALL LCD
MOVLW "A" ;4
CALL LCD
MOVLW "R" ;5
CALL LCD
57
MOVLW "A" ;6
CALL LCD
MOVLW "N" ;7
CALL LCD
MOVLW "J" ;8
CALL LCD
MOVLW "A" ;9
CALL LCD
MOVLW " " ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW "O" ;E
CALL LCD
MOVLW "K" ;F
CALL LCD
MOVLW 0xD2 ;LINHA 4
CALL LCD
MOVLW "v" ;2
CALL LCD
RETURN
LMENU03
MOVLW 0xC2 ;LINHA 2
CALL LCD
MOVLW "^" ;2
CALL LCD
58
MOVLW 0x93 ;LINHA 3
CALL LCD
MOVLW "V" ;3
CALL LCD
MOVLW "E" ;4
CALL LCD
MOVLW "R" ;5
CALL LCD
MOVLW "D" ;6
CALL LCD
MOVLW "E" ;7
CALL LCD
MOVLW " " ;8
CALL LCD
MOVLW " " ;9
CALL LCD
MOVLW " " ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW "O" ;E
CALL LCD
MOVLW "K" ;F
CALL LCD
MOVLW 0xD2 ;LINHA 4
CALL LCD
59
MOVLW "v" ;2
CALL LCD
RETURN
LMENU04
MOVLW 0xC2 ;LINHA 2
CALL LCD
MOVLW "^" ;2
CALL LCD
MOVLW 0x93 ;LINHA 3
CALL LCD
MOVLW "A" ;3
CALL LCD
MOVLW "Z" ;4
CALL LCD
MOVLW "U" ;5
CALL LCD
MOVLW "L" ;6
CALL LCD
MOVLW " " ;7
CALL LCD
MOVLW " " ;8
CALL LCD
MOVLW " " ;9
CALL LCD
MOVLW " " ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
60
MOVLW " " ;D
CALL LCD
MOVLW "O" ;E
CALL LCD
MOVLW "K" ;F
CALL LCD
MOVLW 0xD2 ;LINHA 4
CALL LCD
MOVLW "v" ;2
CALL LCD
RETURN
LMENU05
MOVLW 0xC2 ;LINHA 2
CALL LCD
MOVLW "^" ;2
CALL LCD
MOVLW 0x93 ;LINHA 3
CALL LCD
MOVLW "I" ;3
CALL LCD
MOVLW "R" ;4
CALL LCD
MOVLW " " ;5
CALL LCD
MOVLW " " ;6
CALL LCD
MOVLW " " ;7
CALL LCD
61
MOVLW " " ;8
CALL LCD
MOVLW " " ;9
CALL LCD
MOVLW " " ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW "O" ;E
CALL LCD
MOVLW "K" ;F
CALL LCD
RETURN
LMENU06
CALL CLRLCD
MOVLW 0x84 ;LINHA 2
CALL LCD
MOVLW "B" ;4
CALL LCD
MOVLW "A" ;5
CALL LCD
MOVLW "N" ;6
CALL LCD
MOVLW "D" ;7
CALL LCD
MOVLW "E" ;8
62
CALL LCD
MOVLW "J" ;9
CALL LCD
MOVLW "A" ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW " " ;C
CALL LCD
MOVLW " " ;D
CALL LCD
MOVLW "-" ;E
CALL LCD
MOVLW ">" ;F
CALL LCD
MOVLW 0xC2 ;LINHA 2
CALL LCD
MOVLW "^" ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW "A" ;4
CALL LCD
MOVLW "B" ;5
CALL LCD
MOVLW "R" ;6
CALL LCD
MOVLW "E" ;7
CALL LCD
MOVLW 0x91 ;LINHA 3
63
CALL LCD
MOVLW "O" ;1
CALL LCD
MOVLW "K" ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW "P" ;4
CALL LCD
MOVLW "A" ;5
CALL LCD
MOVLW "R" ;6
CALL LCD
MOVLW "A" ;7
CALL LCD
MOVLW 0xD2 ;LINHA 4
CALL LCD
MOVLW "v" ;2
CALL LCD
MOVLW " " ;3
CALL LCD
MOVLW "F" ;4
CALL LCD
MOVLW "E" ;5
CALL LCD
MOVLW "C" ;6
CALL LCD
MOVLW "H" ;7
CALL LCD
MOVLW "A" ;8
CALL LCD
64
RETURN
LMENU07
MOVLW 0x80 ;LINHA 1
CALL LCD
MOVLW " " ;0
CALL LCD
MOVLW "E" ;1
CALL LCD
MOVLW "X" ;2
CALL LCD
MOVLW "A" ;3
CALL LCD
MOVLW "M" ;4
CALL LCD
MOVLW "I" ;5
CALL LCD
MOVLW "N" ;6
CALL LCD
MOVLW "A" ;7
CALL LCD
MOVLW "N" ;8
CALL LCD
MOVLW "D" ;9
CALL LCD
MOVLW "O" ;A
CALL LCD
MOVLW "." ;B
CALL LCD
MOVLW "." ;C
CALL LCD
MOVLW "." ;D
65
CALL LCD
MOVLW " " ;E
CALL LCD
MOVLW " " ;F
CALL LCD
MOVLW 0xC0 ;LINHA 1
CALL LCD
MOVLW " " ;0
CALL LCD
MOVLW "V" ;1
CALL LCD
MOVLW "E" ;2
CALL LCD
MOVLW "R" ;3
CALL LCD
MOVLW "I" ;4
CALL LCD
MOVLW "F" ;5
CALL LCD
MOVLW "." ;6
CALL LCD
MOVLW " " ;7
CALL LCD
MOVLW "T" ;8
CALL LCD
MOVLW "E" ;9
CALL LCD
MOVLW "R" ;A
CALL LCD
MOVLW "M" ;B
CALL LCD
66
MOVLW "I" ;C
CALL LCD
MOVLW "N" ;D
CALL LCD
MOVLW "A" ;E
CALL LCD
MOVLW "L" ;F
CALL LCD
MOVLW 0x90 ;LINHA 1
CALL LCD
MOVLW "-" ;0
CALL LCD
MOVLW "-" ;1
CALL LCD
MOVLW "-" ;2
CALL LCD
MOVLW "-" ;3
CALL LCD
MOVLW "-" ;4
CALL LCD
MOVLW "-" ;5
CALL LCD
MOVLW "-" ;6
CALL LCD
MOVLW "-" ;7
CALL LCD
MOVLW "-" ;8
CALL LCD
MOVLW "-" ;9
CALL LCD
MOVLW "-" ;A
67
CALL LCD
MOVLW "-" ;B
CALL LCD
MOVLW "-" ;C
CALL LCD
MOVLW "-" ;D
CALL LCD
MOVLW "-" ;E
CALL LCD
MOVLW "-" ;F
CALL LCD
MOVLW 0xD0 ;LINHA 1
CALL LCD
MOVLW "S" ;0
CALL LCD
MOVLW "E" ;1
CALL LCD
MOVLW "G" ;2
CALL LCD
MOVLW "U" ;3
CALL LCD
MOVLW "R" ;4
CALL LCD
MOVLW "E" ;5
CALL LCD
MOVLW " " ;6
CALL LCD
MOVLW "O" ;7
CALL LCD
MOVLW "K" ;8
CALL LCD
68
MOVLW " " ;9
CALL LCD
MOVLW "=" ;A
CALL LCD
MOVLW " " ;B
CALL LCD
MOVLW "P" ;C
CALL LCD
MOVLW "A" ;D
CALL LCD
MOVLW "R" ;E
CALL LCD
MOVLW "A" ;F
CALL LCD
RETURN
ENDM
69
;================================
;*** ROTINA DE MATEMATICA *******
;================================
MMATH MACRO
MATH
MOVWF MATHTEMP
CLRF CHARC
CLRF CHARD
CLRF CHARU
TESTE100 BCF STATUS,C
MOVLW .100
SUBWF MATHTEMP,F
BTFSS STATUS,C
GOTO TESTE10
INCF CHARC
GOTO TESTE100
TESTE10
MOVLW .100
ADDWF MATHTEMP,F
TESTE10L
BCF STATUS,C
MOVLW .10
SUBWF MATHTEMP,F
BTFSS STATUS,C
GOTO TESTE1
INCF CHARD
GOTO TESTE10L
70
TESTE1
MOVLW .10
ADDWF MATHTEMP,F
TESTE1L
BCF STATUS,C
MOVLW .1
SUBWF MATHTEMP,F
BTFSS STATUS,C
GOTO SAIMATH
INCF CHARU
GOTO TESTE1L
SAIMATH
MOVLW 0x30
ADDWF CHARC
ADDWF CHARD
ADDWF CHARU
RETURN
ENDM
71
;==========================================
;***** INICIALIZACAO DA SERIAL *****
;==========================================
MSERIAL MACRO
SERIALINI
; BCF INTCON,7
BANK1 ; Go to Bank1
MOVLW .25 ; Set Baud rate
MOVWF SPBRG
MOVLW B'00100100' ; 8-bit transmit, transmitter enabled,
MOVWF TXSTA ; asynchronous mode, HI speed mode
BCF PIE1,TXIE ; Enable transmit interrupts
BCF PIE1,RCIE ; Enable receive interrupts
BANK0 ; Go to Bank0
MOVLW B'10000000' ; 8-bit receive, receiver enabled,
MOVWF RCSTA ; serial port enabled
; BSF INTCON,7
RETURN
;-----------------------------------------------
;***** TRANSMITE SERIAL *********
;-----------------------------------------------
TXDATA ;TRANSMITE TXTEMP
; BSF RW
BSF TXSTA,TXEN
; MOVF TXTEMP,W
MOVWF TXREG
CALL AGUARDA_TX
CALL DLY1MS
CALL DLY1MS
72
CALL DLY1MS
CALL DLY1MS
CALL DLY1MS
; BCF RW
BCF TXSTA,TXEN
RETURN
AGUARDA_TX
BTFSS PIR1,TXIF
GOTO AGUARDA_TX
RETURN
;-----------------------------------------------
;***** RECEBE SERIAL *********
;-----------------------------------------------
RXDATA ;RECEBE DADO EM RXTEMP
BSF RCSTA,CREN
RXLOOP1
BTFSS PIR1,RCIF
GOTO RXLOOP1
MOVF RCREG,W
MOVWF RXTEMP
BCF RCSTA,CREN
RETURN
;=========================================================
ENDM
73
;================================
;*** ROTINA DE PASSOS *******
;================================
MPASSO MACRO
FRENTE
MOVLW .50
MOVWF VOLTA
L_FRENTE
BSF ST1
BCF ST4 ;1
CALL DELAY
BSF ST2 ;12
CALL DELAY
BCF ST1 ;2
CALL DELAY
BSF ST3 ;23
CALL DELAY
BCF ST2 ;3
CALL DELAY
BSF ST4 ;34
CALL DELAY
BCF ST3 ;4
CALL DELAY
BSF ST1 ;41
CALL DELAY
DECFSZ VOLTA
GOTO L_FRENTE
BSF ST1
; CALL DELAY
BCF ST1
BCF ST2
74
BCF ST3
BCF ST4
RETURN
;----------------------------------------------------
TRAS
MOVLW .50
MOVWF VOLTA
L_TRAS
BSF ST1
BCF ST2 ;1
CALL DELAY
BSF ST4 ;14
CALL DELAY
BCF ST1 ;4
CALL DELAY
BSF ST3 ;43
CALL DELAY
BCF ST4 ;3
CALL DELAY
BSF ST2 ;32
CALL DELAY
BCF ST3 ;2
CALL DELAY
BSF ST1 ;21
CALL DELAY
DECFSZ VOLTA
GOTO L_TRAS
BSF ST1
; CALL DELAY
BCF ST1
BCF ST2
BCF ST3
75
BCF ST4
RETURN
;----------------------------------------------------
DELAY
CALL DLY1MS
CALL DLY1MS
; CALL DLY1MS
; CALL DLY1MS
; CALL DLY1MS
RETURN
ENDM
LIST
;==========================================================================
76
; MPASM PIC16F877A processor include
;
; (c) Copyright 1999-2010 Microchip Technology, All rights reserved
;==========================================================================
NOLIST
;==========================================================================
; This header file defines configurations, registers, and other useful
; bits of information for the PIC16F877A microcontroller. These names
; are taken to match the data sheets as closely as possible.
;
; Note that the processor must be selected before this file is included.
; The processor may be selected the following ways:
;
; 1. Command line switch:
; C:\MPASM MYFILE.ASM /PIC16F877A
; 2. LIST directive in the source file
; LIST P=PIC16F877A
; 3. Processor Type entry in the MPASM full-screen interface
; 4. Setting the processor in the MPLAB Project Dialog
;==========================================================================
;==========================================================================
;
; Verify Processor
;
;==========================================================================
IFNDEF __16F877A
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF
;==========================================================================
77
;
; Register Definitions
;
;==========================================================================
W EQU H'0000'
F EQU H'0001'
;----- Register Files -----------------------------------------------------
;-----Bank0------------------
INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'
PORTD EQU H'0008'
PORTE EQU H'0009'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
PIR2 EQU H'000D'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
SSPBUF EQU H'0013'
SSPCON EQU H'0014'
78
CCPR1 EQU H'0015'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CCPR2 EQU H'001B'
CCPR2L EQU H'001B'
CCPR2H EQU H'001C'
CCP2CON EQU H'001D'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'
;-----Bank1------------------
OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
TRISD EQU H'0088'
TRISE EQU H'0089'
PIE1 EQU H'008C'
PIE2 EQU H'008D'
PCON EQU H'008E'
SSPCON2 EQU H'0091'
PR2 EQU H'0092'
SSPADD EQU H'0093'
SSPSTAT EQU H'0094'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
CMCON EQU H'009C'
CVRCON EQU H'009D'
79
ADRESL EQU H'009E'
ADCON1 EQU H'009F'
;-----Bank2------------------
EEDATA EQU H'010C'
EEADR EQU H'010D'
EEDATH EQU H'010E'
EEADRH EQU H'010F'
;-----Bank3------------------
EECON1 EQU H'018C'
EECON2 EQU H'018D'
;----- STATUS Bits -----------------------------------------------------
C EQU H'0000'
DC EQU H'0001'
Z EQU H'0002'
NOT_PD EQU H'0003'
NOT_TO EQU H'0004'
IRP EQU H'0007'
RP0 EQU H'0005'
RP1 EQU H'0006'
;----- PORTA Bits -----------------------------------------------------
RA0 EQU H'0000'
RA1 EQU H'0001'
RA2 EQU H'0002'
RA3 EQU H'0003'
RA4 EQU H'0004'
RA5 EQU H'0005'
80
;----- PORTB Bits -----------------------------------------------------
RB0 EQU H'0000'
RB1 EQU H'0001'
RB2 EQU H'0002'
RB3 EQU H'0003'
RB4 EQU H'0004'
RB5 EQU H'0005'
RB6 EQU H'0006'
RB7 EQU H'0007'
;----- PORTC Bits -----------------------------------------------------
RC0 EQU H'0000'
RC1 EQU H'0001'
RC2 EQU H'0002'
RC3 EQU H'0003'
RC4 EQU H'0004'
RC5 EQU H'0005'
RC6 EQU H'0006'
RC7 EQU H'0007'
;----- PORTD Bits -----------------------------------------------------
RD0 EQU H'0000'
RD1 EQU H'0001'
RD2 EQU H'0002'
RD3 EQU H'0003'
RD4 EQU H'0004'
RD5 EQU H'0005'
RD6 EQU H'0006'
81
RD7 EQU H'0007'
;----- PORTE Bits -----------------------------------------------------
RE0 EQU H'0000'
RE1 EQU H'0001'
RE2 EQU H'0002'
;----- INTCON Bits -----------------------------------------------------
RBIF EQU H'0000'
INTF EQU H'0001'
TMR0IF EQU H'0002'
RBIE EQU H'0003'
INTE EQU H'0004'
TMR0IE EQU H'0005'
PEIE EQU H'0006'
GIE EQU H'0007'
T0IF EQU H'0002'
T0IE EQU H'0005'
;----- PIR1 Bits -----------------------------------------------------
TMR1IF EQU H'0000'
TMR2IF EQU H'0001'
CCP1IF EQU H'0002'
SSPIF EQU H'0003'
TXIF EQU H'0004'
RCIF EQU H'0005'
ADIF EQU H'0006'
PSPIF EQU H'0007'
82
;----- PIR2 Bits -----------------------------------------------------
CCP2IF EQU H'0000'
BCLIF EQU H'0003'
EEIF EQU H'0004'
CMIF EQU H'0006'
;----- T1CON Bits -----------------------------------------------------
TMR1ON EQU H'0000'
TMR1CS EQU H'0001'
NOT_T1SYNC EQU H'0002'
T1OSCEN EQU H'0003'
T1SYNC EQU H'0002'
T1CKPS0 EQU H'0004'
T1CKPS1 EQU H'0005'
T1INSYNC EQU H'0002'
;----- T2CON Bits -----------------------------------------------------
TMR2ON EQU H'0002'
T2CKPS0 EQU H'0000'
T2CKPS1 EQU H'0001'
TOUTPS0 EQU H'0003'
TOUTPS1 EQU H'0004'
TOUTPS2 EQU H'0005'
TOUTPS3 EQU H'0006'
83
;----- SSPCON Bits -----------------------------------------------------
CKP EQU H'0004'
SSPEN EQU H'0005'
SSPOV EQU H'0006'
WCOL EQU H'0007'
SSPM0 EQU H'0000'
SSPM1 EQU H'0001'
SSPM2 EQU H'0002'
SSPM3 EQU H'0003'
;----- CCP1CON Bits -----------------------------------------------------
CCP1Y EQU H'0004'
CCP1X EQU H'0005'
CCP1M0 EQU H'0000'
CCP1M1 EQU H'0001'
CCP1M2 EQU H'0002'
CCP1M3 EQU H'0003'
;----- RCSTA Bits -----------------------------------------------------
RX9D EQU H'0000'
OERR EQU H'0001'
FERR EQU H'0002'
ADDEN EQU H'0003'
CREN EQU H'0004'
SREN EQU H'0005'
RX9 EQU H'0006'
SPEN EQU H'0007'
84
RCD8 EQU H'0000'
RC9 EQU H'0006'
NOT_RC8 EQU H'0006'
RC8_9 EQU H'0006'
;----- CCP2CON Bits -----------------------------------------------------
CCP2Y EQU H'0004'
CCP2X EQU H'0005'
CCP2M0 EQU H'0000'
CCP2M1 EQU H'0001'
CCP2M2 EQU H'0002'
CCP2M3 EQU H'0003'
;----- ADCON0 Bits -----------------------------------------------------
ADON EQU H'0000'
GO_NOT_DONE EQU H'0002'
GO EQU H'0002'
CHS0 EQU H'0003'
CHS1 EQU H'0004'
CHS2 EQU H'0005'
ADCS0 EQU H'0006'
ADCS1 EQU H'0007'
NOT_DONE EQU H'0002'
85
GO_DONE EQU H'0002'
;----- OPTION_REG Bits -----------------------------------------------------
PSA EQU H'0003'
T0SE EQU H'0004'
T0CS EQU H'0005'
INTEDG EQU H'0006'
NOT_RBPU EQU H'0007'
PS0 EQU H'0000'
PS1 EQU H'0001'
PS2 EQU H'0002'
;----- TRISA Bits -----------------------------------------------------
TRISA0 EQU H'0000'
TRISA1 EQU H'0001'
TRISA2 EQU H'0002'
TRISA3 EQU H'0003'
TRISA4 EQU H'0004'
TRISA5 EQU H'0005'
;----- TRISB Bits -----------------------------------------------------
TRISB0 EQU H'0000'
TRISB1 EQU H'0001'
TRISB2 EQU H'0002'
TRISB3 EQU H'0003'
TRISB4 EQU H'0004'
TRISB5 EQU H'0005'
TRISB6 EQU H'0006'
86
TRISB7 EQU H'0007'
;----- TRISC Bits -----------------------------------------------------
TRISC0 EQU H'0000'
TRISC1 EQU H'0001'
TRISC2 EQU H'0002'
TRISC3 EQU H'0003'
TRISC4 EQU H'0004'
TRISC5 EQU H'0005'
TRISC6 EQU H'0006'
TRISC7 EQU H'0007'
;----- TRISD Bits -----------------------------------------------------
TRISD0 EQU H'0000'
TRISD1 EQU H'0001'
TRISD2 EQU H'0002'
TRISD3 EQU H'0003'
TRISD4 EQU H'0004'
TRISD5 EQU H'0005'
TRISD6 EQU H'0006'
TRISD7 EQU H'0007'
;----- TRISE Bits -----------------------------------------------------
TRISE0 EQU H'0000'
TRISE1 EQU H'0001'
TRISE2 EQU H'0002'
PSPMODE EQU H'0004'
IBOV EQU H'0005'
OBF EQU H'0006'
87
IBF EQU H'0007'
;----- PIE1 Bits -----------------------------------------------------
TMR1IE EQU H'0000'
TMR2IE EQU H'0001'
CCP1IE EQU H'0002'
SSPIE EQU H'0003'
TXIE EQU H'0004'
RCIE EQU H'0005'
ADIE EQU H'0006'
PSPIE EQU H'0007'
;----- PIE2 Bits -----------------------------------------------------
CCP2IE EQU H'0000'
BCLIE EQU H'0003'
EEIE EQU H'0004'
CMIE EQU H'0006'
;----- PCON Bits -----------------------------------------------------
NOT_BOR EQU H'0000'
NOT_POR EQU H'0001'
NOT_BO EQU H'0000'
;----- SSPCON2 Bits -----------------------------------------------------
SEN EQU H'0000'
RSEN EQU H'0001'
PEN EQU H'0002'
88
RCEN EQU H'0003'
ACKEN EQU H'0004'
ACKDT EQU H'0005'
ACKSTAT EQU H'0006'
GCEN EQU H'0007'
;----- SSPSTAT Bits -----------------------------------------------------
BF EQU H'0000'
UA EQU H'0001'
R_NOT_W EQU H'0002'
S EQU H'0003'
P EQU H'0004'
D_NOT_A EQU H'0005'
CKE EQU H'0006'
SMP EQU H'0007'
R EQU H'0002'
D EQU H'0005'
I2C_READ EQU H'0002'
I2C_START EQU H'0003'
I2C_STOP EQU H'0004'
I2C_DATA EQU H'0005'
NOT_W EQU H'0002'
NOT_A EQU H'0005'
NOT_WRITE EQU H'0002'
NOT_ADDRESS EQU H'0005'
R_W EQU H'0002'
89
D_A EQU H'0005'
READ_WRITE EQU H'0002'
DATA_ADDRESS EQU H'0005'
;----- TXSTA Bits -----------------------------------------------------
TX9D EQU H'0000'
TRMT EQU H'0001'
BRGH EQU H'0002'
SYNC EQU H'0004'
TXEN EQU H'0005'
TX9 EQU H'0006'
CSRC EQU H'0007'
TXD8 EQU H'0000'
NOT_TX8 EQU H'0006'
TX8_9 EQU H'0006'
;----- CMCON Bits -----------------------------------------------------
CIS EQU H'0003'
C1INV EQU H'0004'
C2INV EQU H'0005'
C1OUT EQU H'0006'
C2OUT EQU H'0007'
CM0 EQU H'0000'
CM1 EQU H'0001'
CM2 EQU H'0002'
90
;----- CVRCON Bits -----------------------------------------------------
CVRR EQU H'0005'
CVROE EQU H'0006'
CVREN EQU H'0007'
CVR0 EQU H'0000'
CVR1 EQU H'0001'
CVR2 EQU H'0002'
CVR3 EQU H'0003'
;----- ADCON1 Bits -----------------------------------------------------
ADCS2 EQU H'0006'
ADFM EQU H'0007'
PCFG0 EQU H'0000'
PCFG1 EQU H'0001'
PCFG2 EQU H'0002'
PCFG3 EQU H'0003'
;----- EECON1 Bits -----------------------------------------------------
RD EQU H'0000'
WR EQU H'0001'
WREN EQU H'0002'
WRERR EQU H'0003'
EEPGD EQU H'0007'
;==========================================================================
91
;
; RAM Definitions
;
;==========================================================================
__MAXRAM H'01FF'
__BADRAM H'008F'-H'0090'
__BADRAM H'0095'-H'0097'
__BADRAM H'009A'-H'009B'
__BADRAM H'0105'
__BADRAM H'0107'-H'0109'
__BADRAM H'0185'
__BADRAM H'0187'-H'0189'
__BADRAM H'018E'-H'018F'
;==========================================================================
;
; Configuration Bits
;
; NAME Address
; CONFIG 2007h
;
;==========================================================================
; The following is an assignment of address values for all of the
; configuration registers for the purpose of table reads
_CONFIG EQU H'2007'
;----- CONFIG Options --------------------------------------------------
_LP_OSC EQU H'3FFC' ; LP oscillator
_XT_OSC EQU H'3FFD' ; XT oscillator
_HS_OSC EQU H'3FFE' ; HS oscillator
_RC_OSC EQU H'3FFF' ; RC oscillator
92
_WDT_OFF EQU H'3FFB' ; WDT disabled
_WDT_ON EQU H'3FFF' ; WDT enabled
_PWRTE_ON EQU H'3FF7' ; PWRT enabled
_PWRTE_OFF EQU H'3FFF' ; PWRT disabled
_BODEN_OFF EQU H'3FBF' ; BOR disabled
_BODEN_ON EQU H'3FFF' ; BOR enabled
_LVP_OFF EQU H'3F7F' ; RB3 is digital I/O, HV on MCLR must be used for programming
_LVP_ON EQU H'3FFF' ; RB3/PGM pin has PGM function; low-voltage programming enabled
_CPD_ON EQU H'3EFF' ; Data EEPROM code-protected
_CPD_OFF EQU H'3FFF' ; Data EEPROM code protection off
_WRT_HALF EQU H'39FF' ; 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written
to by EECON control
_WRT_1FOURTH EQU H'3BFF' ; 0000h to 07FFh write-protected; 0800h to 1FFFh may be
written to by EECON control
_WRT_256 EQU H'3DFF' ; 0000h to 00FFh write-protected; 0100h to 1FFFh may be written
to by EECON control
_WRT_OFF EQU H'3FFF' ; Write protection off; all program memory may be written to by
EECON control
_DEBUG_ON EQU H'37FF' ; In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the
debugger
_DEBUG_OFF EQU H'3FFF' ; In-Circuit Debugger disabled, RB6 and RB7 are general purpose
I/O pins
_CP_ALL EQU H'1FFF' ; All program memory code-protected
_CP_OFF EQU H'3FFF' ; Code protection off
;----- DEVID Equates --------------------------------------------------
93
_DEVID1 EQU H'2006'
;----- IDLOC Equates --------------------------------------------------
_IDLOC0 EQU H'2000'
_IDLOC1 EQU H'2001'
_IDLOC2 EQU H'2002'
_IDLOC3 EQU H'2003'
LIST
;===============================================================
;***** ROTINAS DE DELAY XTAL 4MHZ Valores Aproximados *****
;***** Valores Medidos com Osciloscspio *****
;***** Intervalos Maiores, maior margem de erro *****
;===============================================================
; DLY10US 0,00001 SEG
; DLY50US 0,00005 SEG
; DLY100US 0,0001 SEG
; DLY500US 0,0005 SEG
; DLY1MS 0,001 SEG
; DLY2MS 0,002 SEG
; DLY10MS 0,01 SEG
; DLY50MS 0,05 SEG
; DLY100MS 0,1 SEG
; DLY500MS 0,5 SEG
; DLY1S 1 SEG
;POSICOES DE MEMORIA NECESSARIAS DELAY
;MEM01 EQU 0x ;TIMER DELAY1
;MEM02 EQU 0x ;TIMER DELAY2
94
;MEM03 EQU 0x ;TIMER DELAY3
;------------------------------------------
; **** DELAY 50US **** XTAL 4MHz
;------------------------------------------
DLY50US
MOVLW .14
MOVWF MEM01
LDLY50US
DECFSZ MEM01
GOTO LDLY50US
NOP
NOP
RETURN
;------------------------------------------
; **** DELAY 100US **** XTAL 4MHz
;------------------------------------------
DLY100US
MOVLW .31
MOVWF MEM01
LDLY100US
DECFSZ MEM01
GOTO LDLY100US
NOP
RETURN
;------------------------------------------
; **** DELAY 1MS **** XTAL 4MHz
;------------------------------------------
DLY1MS
MOVLW .73
MOVWF MEM01
95
MOVLW .2
MOVWF MEM02
LDLY1MS
DECFSZ MEM01
GOTO LDLY1MS
NOP
DECFSZ MEM02
GOTO LDLY1MS
RETURN
;------------------------------------------
; **** DELAY 10MS **** XTAL 4MHz
;------------------------------------------
DLY10MS
MOVLW .250
MOVWF MEM01
MOVLW .13
MOVWF MEM02
LDLY10MS
DECFSZ MEM01
GOTO LDLY10MS
DECFSZ MEM02
GOTO LDLY10MS
RETURN
;------------------------------------------
; **** DELAY 100MS **** XTAL 4MHz
;------------------------------------------
DLY100MS
MOVLW .250
MOVWF MEM01
MOVLW .130
MOVWF MEM02
96
LDLY100MS
DECFSZ MEM01,F
GOTO LDLY100MS
DECFSZ MEM02,F
GOTO LDLY100MS
RETURN
;------------------------------------------
; **** DELAY 500MS **** XTAL 4MHz
;------------------------------------------
DLY500MS
CLRF MEM01
MOVLW .138
MOVWF MEM02
MOVLW .3
MOVWF MEM03
LDLY500MS
DECFSZ MEM01,F
GOTO LDLY500MS
DECFSZ MEM02,F
GOTO LDLY500MS
DECFSZ MEM03,F
GOTO LDLY500MS
RETURN
;------------------------------------------
; **** DELAY 1S **** XTAL 4MHz
;------------------------------------------
DLY1S
CALL DLY500MS
CALL DLY500MS
97
RETURN
;------------------------------------------
; **** DELAY 10S **** XTAL 4MHz
;------------------------------------------
DLY10S
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
CALL DLY500MS
RETURN
;=====================================
ENDM
98
9. REFERÊNCIAS BIBLIOGRÁFICAS
1) Campbell M. A. Enzyme-Linked ImmunoSorbant Assay. Disponível em:
<http://www.bio.davidson.edu/courses/genomics/method/elisa.html>.
Acesso em: 18/08/2013
2) IMMUNOMAT - Disponível em:
<http://hitechnologies.com.br/diagnostics/immunomat/>. Acesso em: 07/06/2013
3) THUNDERBOLT - Disponível em: < http://www.gsdx.us/thunderbolt>. Acesso
em: 07/06/2013