Escolar Documentos
Profissional Documentos
Cultura Documentos
II
III
IV
O Rappa
VI
.Agradecimentos
Aos colegas de sala, que contriburam com todos os meios para que este projeto
tomasse forma, pelas idias trocadas, pelos relatrios criticados, enfim, pelo
companheirismo e os goles tomados no bar.
E, claro que no posso deixar de agradecer minha famlia, que por longos dias e
noites no tiveram-me no aconchego do nosso lar. No me ouviram falar em outra coisa e,
mesmo assim, tiveram a pacincia e a dedicao de me esperar e estarem ao meu lado.
Tambm agradeo a Helder Laudares e a Magneti Marelli, pelos dias que fiquei na
minha casa para a concluso da digitao destes pargrafos.
VII
Sumrio
Resumo
II
Abstract
III
1. INTRODUO
2. OBJETIVO
3. JUSTIFICATIVA
4. REVISO BIBLIOGRFICA
4.1 Tmpera
11
11
12
4.5 Microcontrolador
12
13
14
15
16
16
17
18
19
20
20
22
5. MATERIAIS E MTODOS
23
VIII
6. RESULTADOS
6.1 Os testes prticos
25
27
30
8. REFERNCIA BIBLIOGRFICA
32
33
35
36
37
IX
Resumo
forma,
altera-se
microestrutura
somente
na
superfcie
do
material,
1. INTRODUO
2. OBJETIVO
bancada didtica com o sistema de tmpera superficial por chama e uma placa eletrnica
prottipo com os elementos de automao necessrios.
3. JUSTIFICATIVA
4. REVISO BIBLIOGRFICA
4.1. Tmpera
Para a BRASIMET Comrcio e Indstria S.A (2003), a tmpera o tratamento
trmico que consiste no aquecimento de uma pea numa temperatura superior sua
temperatura crtica e, em seguida, resfriamento rpido do material, em meio de
resfriamento especfico - obtendo uma estrutura martenstica. Sem o necessrio
complemento de um revenimento, as peas temperadas apresentar-se-o, quase sempre
frgeis.
Para Chiaverini (1987), a tmpera superficial confere aos aos boa resistncia
fadiga por dobramento e boa capacidade de resistir a cargas de contato.
Para se ter uma maior segurana em relao aos riscos de empenamento ou
fissurao, devem-se evitar camadas muito profundas; com essa preocupao, previne-se
ainda o desenvolvimento de tenses levadas abaixo da camada endurecida (CHIAVERINI,
1987).
A tmpera superficial pode ser executada por quatro processos principais, segundo
Chiaverini (1996):
(SILVA, 1988). A Figura 4.1, mostra o esquema de tmpera superficial, pelo mtodo
rotativo e progressivo (CHIAVERINI, 1987).
Figura 4.2: Espessura da camada endurecida por tmpera superficial por chama.
(CHIAVERINI, 1987)
Figura 4.3: Trs mtodos de aplicao do endurecimento superficial por chama. A figura
superior corresponde ao mtodo progressivo; a figura central corresponde ao mtodo
giratrio;
finalmente,
figura
inferior
corresponde
ao
mtodo
combinado
(CHIAVERINI, 1987).
10
Figura 4.5:
Localizao das reaes de combusto na chama de um
maarico.(WAINER, BRAND E MELLO 1995).
No detalhe da Figura 4.5, est a formao da chama. O esquema de um bico de
maarico est na figura maior. As partes que a chama possui so: dardo e penacho, as quais
so constituintes de qualquer tipo de chama. No dardo ocorre a combusto primria e no
penacho, a combusto secundria.
As caractersticas da chama dependem da relao entre o combustvel (acetileno,
hidrognio, propano ou GLP) e o comburente (oxignio). Define-se a regulagem da chama,
ou relao de consumo, a razo entre os volumes do comburente e do combustvel na zona
de combusto primria:
A = regulagem da chama =
(4.1)
11
Tipo da chama
Formato da chama
Caracterstica
Penacho longo.
Aplicao
Soldagem de aos (ou
regulagem neutra
Neutro
Fig. 4.6a
Dardo branco,
levemente redutora).
brilhante e
arredondado.
(exceto lato).
Nquel e suas ligas.
Penacho esverdeado.
Vu branco
A < 1,0
Redutora
Fig. 4.6b
circundando o dardo.
Revestimento duro,
Dardo branco,
brilhante e
e chumbo.
arredondado.
Chama menos quente.
Penacho azulado ou
A > 1,1
Oxidante
Fig. 4.6c
avermelhado, mais
Aos em geral
curto e turbulento.
(regulagem neutra
Dardo branco,
levemente oxidante).
brilhante, pequeno e
Lato.
pontiagudo.
Bronze.
12
Figura 4.6: (A) chama neutra; (B) chama redutora; (C) chama oxidante, segundo
Wainer, Brand e Mello 1995.
Necessariamente, neste projeto, precisa-se de uma chama oxidante devido a sua
caracterstica de alta temperatura, porm, trabalha-se para conseguir uma mistura levemente
oxidante para no prejudicar o processo, no precipitando a oxidao do material e
conseqentemente, dificuldades no aquecimento da amostra.
A temperatura da chama uma funo da distncia, medida a partir da extremidade
do dardo. Existe um ponto onde ela atinge o mximo e depois comea a decrescer. Da
mesma maneira, a atmosfera do penacho muda sua composio qumica, tornando-se mais
oxidante medida que aumenta a distncia a partir da extremidade do dardo.
13
soma dos calores das reaes de combusto secundria pelo calor de reao da combusto
primria. Quanto maior o valor mais concentrada a chama.
Os clculos deste sistema seriam inviveis de se conseguir devido a dificuldade
prtica de se levantar este dados, pois a composio do GLP pode variar e a do ar
comprimido tem todos os elementos encontrados na nossa atmosfera, em quantidades que
somente um laboratrio de anlise de gases poderiam mensurar, ficando fora do escopo
deste projeto.
14
4.5 Microcontrolador
O microcontrolador um dispositivo eletrnico, especfico para tarefas dedicadas de
processos dos mais variados, desde equipamentos industriais a eletrodomsticos. Utiliza um
programa especfico, o qual gravado no dispositivo e com ele pode-se comandar diversos
instrumentos e perifricos.
O microcontrolador utilizado neste projeto o PIC 16F877, da famlia PIC da
Microchip.
Para Souza (2003), uma definio rpida que o microcontrolador um pequeno
componente eletrnico, dotado de uma inteligncia programvel, utilizado largamente no
controle de processos lgicos. Para um melhor entendimento, este ser exposto por partes:
composto por uma nica pastilha de silcio encapsulado, mais conhecido por CI
(circuito integrado) ou CHIP. Possui internamente todos os meios necessrios para
automaes, como: memria de programa, memria de dados, portas de entrada e/ou sada,
timers, contadores, comparadores, PWM, comunicao serial, conversores analgicodigitais, etc.
Este o ponto principal de diferena entre um microprocessador e um
microcontrolador: o primeiro no possui todos estes elementos em uma nica pastilha.
15
16
Microcontrolador de 40 pinos;
2 Comparadores;
Em cada pino das PORT, podem existir particularidades, como o pino RC2/CCP1.
Este pino pode ser configurado como entrada ou sada simplesmente, ou ser um pino para o
Capture 1 input / Compare 1 output / PWM 1 output. Esta caracterstica demonstra que os
pinos podem ter vrias funcionalidades, desde que configurados previamente para cada
funo.
As propriedades de cada pino podem ser visualizadas na Figura 4.7.
17
18
;*****************************************************
*********
; INICIALIZA O DISPLAY
;*****************************************************
*********
;
DISPLAY_INIT:
MOVLW 0x038
; Comando para interface 8-bits
call SEND_CMD
MOVLW 0x00E
CALL SEND_CMD
; liga display
;
MOVLW 0x006
; incrementa display
CALL SEND_CMD
;
Figura 4.8: Rotina para iniciar o display LCD.
19
Hbridos: uma mistura dos dois anteriores e apresenta rotor e estator multidentados
. O rotor de im permanente e magnetizado axialmente. Apresenta grande preciso (3%),
boa relao torque/tamanho e ngulos pequenos (0,9 e 1,8 graus).
Dentro dos trs tipos, encontra-se, o unipolar e o bipolar. So diferenciados na sua
construo. Os unipolares possuem dois enrolamentos com uma derivao central. Os
bipolares possuem mais enrolamentos e no so energizados num terminal central.
20
Sensores de Zircnio
A superfcie externa do elemento zircnio est em contato com o gs do escape; a
interna est em contato com o ar. Ambas esto revestidas por uma fina camada de platina.
O elemento de zircnio, a uma temperatura acima de 300C, conduz os ons de
oxignio, gerando uma tenso eltrica. Esta tenso eltrica gerada se a concentrao de
oxignio na parte interna e externa do elemento for diferente, e uma baixa voltagem
(prxima a zero) gerada se a mistura ar/combustvel for pobre e uma voltagem prxima
de 1000mV gerada se ela for rica.
Quando a mistura ar/combustvel se aproxima da relao ideal (estequiomtrica;
=1) existe uma variao brusca na tenso gerada, entre 0 e 1000mV.
Um controle usa a voltagem produzida pela sonda lambda para instruir o sistema de
mistura de combustvel para enriquecer ou empobrecer a mistura. Por um exemplo, como
em um automvel, visto que o sensor apenas produz a voltagem quando o elemento est
acima de 300C, o gs de escape leva algum tempo para aquecer o elemento a esta
temperatura, aps o motor ter sido acionado. Para reduzir o tempo que leva para o sensor
comear a funcionar, muitos sensores hoje em dia possuem um aquecedor interno de
cermica. Estes sensores tm 3 multicamadas, assegurando alta performance e
confiabilidade
21
22
Sada
Maarico
Calor
23
Entrada
Aquecedor
Temperatura
desejada
Sada
Temperatura
Medio de
Temperatura
Os elementos bsicos para o sistema de malha fechada, segundo Bolton (1995), so:
24
(4.2)
(4.3)
25
ao
que
chamamos
de
controlador
proporcional-integral-derivativo
ou
(4.4)
5. MATERIAIS E MTODOS
26
coifa para coleta dos gases provenientes da queima no maarico e suporte para
sonda Lambda, com ajuste de altura;
27
Uma construo de destaque, foi a de uma vlvula proporcional, que utilizada para
a liberao dos gases GLP e Ar comprimido. Utilizou-se uma vlvula reguladora de fluxo,
um motor de passo e um conjunto de engrenagens. O acoplamento se deu devido a uma
junta metlica, entre as peas j mencionadas.
Acionamento do maarico:
28
6. RESULTADOS
29
A montagem da bancada fez parte deste projeto, pois foi a partir desta montagem que
surgiu a idia de se controlar a chama e todos os elementos da bancada utilizando um
microcontrolador.
Os resultados obtidos so divididos em algumas etapas, conforme descrito no item 5
deste trabalho.
Os resultados aqui apresentados, so os considerados os mais relevantes, visto que,
poderiam ser detalhados em vrios pontos do projeto, e estes poderiam ser constitudos
outros trabalhos, dada a amplitude deste trabalho. Visando abordagem automao com
um microcontrolador, este trabalho um apanhado de informaes bsicas para o seu
desenvolvimento.
A bancada montada conforme a ltima atualizao, com as vlvulas de controle, com
o sistema de resfriamento, sonda lambda, mas sem funcionar integralmente, devido no
implementao nesta bancada do programa, pode ser visualizada na Figura 6.1, a qual
demonstra a bancada e seus elementos de automao.
Vlvulas
simples
solenide,
para os
gases.
Tubulao
para o
resfriamen
Vlvula
direcional
para
controlar o
cilindro
Vlvula
solenide
tipo
diafragma
Vlvulas
regulador
as de fluxo
e os
Maarico e
a coifa
com a
sonda
Porta
amostr
Bomba
centrifuga
e
30
Figura 6.1: Construo final da Bancada Didtica de Tmpera Superficial por Chama.
31
Gases
Presso em
Vazo
Temperatura a 200 mm da
KPa
(l/min)
chama.
9800
0,015
2,7
0,02
Oxignio
GLP
1400C
Ar
comprimido
GLP
Presso em
Vazo
Temperatura a 200 mm
KPa
(l/min)
da chama.
500
0,035
2,7
0,02
1250C
da
vlvula
32
t=
Z
Z
Onde :
1
(6.1)
33
Motor de passo
Circuito com o
SAA 1027
Conjunto de
engrenagens
Vlvula
reguladora
de vazo.
34
Display LCD
Drive
SAA1027
para
motor de
passo.
Botes
Microcontrolador
PIC 16F877
Drive gravador
in-circuit
Led
simbolizando
as sadas.
Potencimetro e o CI
amplificador operacional
Figura 6.3: Placa prottipo e o gravador de PIC.
35
36
8. REFERNCIA BIBLIOGRFICA
37
SILVA, Andr Luiz da Costa e; MEI, Paulo Roberto. Aos e ligas especiais. 2. ed.
Sumar: Eletrometal, 1988. 528 p.
WAINER, Emilio; BRANDI, Sergio Duarte; MELLO, Fabio Decourt Homem de.
Soldagem: processos e metalurgia. So Paulo: Edgard Blucher, 1995-2004. 494
p. ISBN 85-212-0238-5.
INICIAR
MICROCONTROLADOR
MENSAGEM
PROCESSO
NO
B_ENTER
PRESSIONADO
INCREMEN
DECREMEN
SIM
B_INC
PRESSIONADO
MENSAGEM
TEMPO CHAMA
B_DEC
PRESSIONADO
SIM
Incrementa valor
de memria,
solicitado.
B_ENTER
PRESSIONADO
SIM
INCREMEN
DECREMEN
B_ENTER
PRESSIONADO
Decrementa
valor de
memria,
NO
B_ENTER
PRESSIONADO
SIM
SIM
RETORNA
SIM
MENSAGEM
TEMPO
RESFRIAMENTO
RETORNA
38
INCREMEN
DECREMEN
B_ENTER
PRESSIONADO
NO
SIM
MENSAGEM
EXECUTA
NO
NO
B_ENTER
PRESSIONADO
SIM
B_DESL
PRESSIONADO
SIM
39
L sonda
Compara o
valor da
sonda com
SE valor
SE valor
SE valor
L sonda
Gira motor AR (1
L sonda
NO
Valor
sonda OK?
SIM
SE valor
Decrementa o tempo de
Gira motor GLP para
abrir (1volta) / Fecha
Atualiza o valor para
comparao
L sonda
PROCESSO
EXECUTADO
RETORNA
REINICIA
R
SIM
INICIO
NO
DESLIG
40
41
35
42
43
;********************************************************************
;
CONSTANTES
;********************************************************************
LCD_CNTL equ PORTE
;PORT DE CONTROLE PARA O DISPLAY
LCD_DATA equ PORTD
;PORT DE DADOS PARA O DISPLAY
E
equ 0
;CONTROLADORES DO DISPLAY
RW
equ 1
;PORT C
RS
equ 2
T_FILTRO EQU
B'11001000'
UM
equ
B'00000001'
DOIS
equ
B'00000010'
TRES
equ
B'00000011'
;********************************************************************
;
VARIAVEIS
;********************************************************************
;
MEMRIA
;********************************************************************
44
CBLOCK 0x20
DELAY1
DELAY2
DELAY3
NUMLCD
FILTRO1
FILTRO2
FILTRO3
FILTRO4
FRASES
FLAGS
CONTADOR
CONT_GLP
CONT_AR
T1
T2
T3
ACCaHI res 1
ACCaLO res 1
ACCbHI res 1
ACCbLO res 1
ACCcHI res 1
ACCcLO res 1
ACCdHI res 1
ACCdLO res 1
temp
res 1
H_byte
L_byte
res 1
res 1
res 1
res
res
1
1
mulplr
res 1
mulcnd
res 1
AUX
res 1
UNIDADE res 1
DEZENA1 res 1
DEZENA2 res 1
ENDC
;****************************************************************************
;
FLAGS
;****************************************************************************
#DEFINE
#DEFINE
;****************************************************************************
;
ENTRADAS
;****************************************************************************
#DEFINE
S_CONT1
PORTA,1
#DEFINE
S_CONT2
PORTA,2
#DEFINE
B_ENTER
PORTC,0
#DEFINE
B_DESL
PORTC,1
#DEFINE
B_INC
PORTC,2
#DEFINE
B_DEC
PORTC,3
;****************************************************************************
;
SADAS
;****************************************************************************
#DEFINE
RL_FAISCA
PORTC,4 ; centelha
#DEFINE
RL_GASES PORTC,5
#DEFINE
RL_SAGUA
PORTA,3
#DEFINE
RL_BOMBA
PORTA,4
#DEFINE
RL_VC
PORTA,5 ;vlvula de controle pneumtico
#DEFINE
TR_MOTOR
PORTB,7 ;TRANSISTOR
#DEFINE
MGLP_STOP
PORTB,6 ; PRA EM NIVEL ALTO
#DEFINE
MGLP_GIRO
PORTB,5 ; SENTIDO HORRIO NIVEL ALTO, ANTI-HORARIO BAIXO
#DEFINE
MAR_STOP
PORTB,4 ; PRA EM NIVEL ALTO
#DEFINE
MAR_GIRO
PORTB,3 ; SENTIDO HORRIO NIVEL ALTO, ANTI-HORARIO BAIXO
;===================================== inicio do programa ====================
;**************************************************************
; VETOR DE RESET
;**************************************************************
org
0
clrf
PCLATH
goto
main
;**************************************************************
; INICIO DA INTERRUPO
;**************************************************************
; setup para reset e interrupes
org
nop
goto
PICRES
inicio
45
org
PICINT
retfie
; setup para display e outros
setadisp:
call
t250ms
call
t250ms
call
DISPLAY_INIT
call
DISPLAY_MSG
;**************************************************************
; INICIALIZA O DISPLAY
;**************************************************************
;
DISPLAY_INIT:
MOVLW 0x038
; Comando para interface 8-bits
call SEND_CMD
MOVLW 0x00E
CALL SEND_CMD
; liga display
;
MOVLW 0x006
; incrementa display
CALL SEND_CMD
;
MOVLW 0x001
; apaga display
CALL SEND_CMD
;
retlw 0x00 ; volta
; setup para display e outros
setadisp:
call
t250ms
;aguarda display inicializar
call
t250ms
;0,5 segundos
call
DISPLAY_INIT
;inicializa display
call
DISPLAY_MSG
;envia mensagem
;**************************************************
;* Rotinas para temporizao sem usar o TIMER
;* da PIC - espera ocupada
;**************************************************
;
;*******************************************************************
; Temporizador para 1s em 4MHZ
; Faz 4 vezes 250ms
;
t1000ms:
movlw
0x04
movwf
T3
t1000msa:
call
t250ms
decfsz
T3,1
goto
t1000msa
retlw
0x00
;
;*******************************************************************
; Temporizador para 250ms em 4MHZ
;
t250ms:
movlw
0xFA
;250 decimal
movwf
T1
t250msa:
movlw
0xF8
;248 decimal
movwf
T2
t250msb:
nop
decfsz
T2,1
goto
t250msb
decfsz
T1,1
goto
t250msa
retlw
0x00
;********************************************************************
;
Atraso
;********************************************************************
Atraso
movlw
B'11001000';
movwf
DELAY1
;
l1
decfsz
DELAY1,F ; decrementa, se diferente
goto
l1
; executa goto ..
return
;********************************************************************
; INICIA AS PORTAS
; SETA AS PORTAS COMO SAIDA OU ENTRADAS
;********************************************************************
;
46
InitPort
clrf
clrw
CLRF
CLRF
CLRF
CLRF
CLRF
bcf
bsf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
movlw
movwf
bcf
return
STATUS
PORTA
PORTB
PORTC
PORTD
PORTE
STATUS,RP1
; seleciona
STATUS,RP0
; pagina 1
0x07
TRISA
; seta o portA como 0,1,2 como entrada e 3,4,5 como sada
0x00
TRISB
; seta o portB como sada
0x0F ;
TRISC ;seta pinos 4 5 6 7 port C saida
0x00
;
TRISD
; porta D como sada
0X00
;
TRISE
; coloca PORTA E como I/O saida
0x0E
ADCON1
; coloca portE em i/o digital - e s ra0 como analogico
STATUS,RP0
; volta a pagina 0
;**************************************************************
; main principal NOVA
;**************************************************************
main
call InitPort
; inicializa porta I/O
call DISPLAY_INIT
call MgInicLcd ; mens iniciando...
call
LongDly_1
MOVLW B'00000001'
MOVWF FRASES
;
MOVLW T_FILTRO
;
MOVWF FILTRO1
;
MOVWF FILTRO2
IMAGEM
CALL
PROC_INICIO
CALL
TEMPO_CHAMA
CALL
TEMPO_RESFRIA
CALL
EXECUTAR
CALL
MgInicLcd1
BSF
RL_FAISCA
CALL
LongDly_1
CALL
MgInicLcd2
BSF
RL_GASES
CALL
LongDly
CALL
MgInicLcd3
CALL
MOTOR_GLP_ABRE
CALL
MOTOR_AR_ABRE
CALL
LOOP:
CALL
MgInicLcd4
GOTO
RESET
LOOP:
bsf
ADCON0, GO_DONE ;colhe dado do canal analgico
espera_ad:
btfsc
goto
movf
movwf
ADRESH,W
mulplr
movlw
movwf
.250
mulcnd
call
mpy_F
movf
movwf
movf
movwf
H_byte,W
ACCbHI
L_byte,W
ACCbLO
clrf
movlw
movwf
ACCaHI
.255
ACCaLO
call
D_divF
movf ACCbLO,W
call
AJUSTE_DECIMAL
47
movlw
call
0XC9
SEND_CMD
movf
addlw
call
DEZENA2,W
0X30
SEND_CHAR
movf
addlw
call
DEZENA1,W
0X30
SEND_CHAR
movlw
call
','
SEND_CHAR
movf
addlw
call
UNIDADE,W
0X30
SEND_CHAR
movlw
CALL
'V'
SEND_CHAR
goto
loop
;faz eternamente
;**********************************************************************
;* Ajuste decimal
;* W [HEX] = dezena [DEC] ; unidade [DEC]
;* Conforme indicado no livro - "Conectando o PIC - Recursos avanados
;* Autores Nicols Csar Lavinia e David Jos de Souza
;*
;* Alterada por Mrcio Jos Soares para uso com nmeros com duas dezenas e uma unidade
;*
;* Esta rotina recebe um argumento passado pelo acumulador "W" e retorna nas variveis
;* DEZENA1, DEZENA2 e UNIDADE o nmero BCD correspondente ao parmetro passado.
AJUSTE_DECIMAL:
movwf
clrf
clrf
clrf
AUX
UNIDADE
DEZENA1
DEZENA2
movf
btfsc
return
AUX,F
STATUS,Z ;valor a converter = 0 ?
ini_ajuste:
incf
;sim - retorna
UNIDADE,F
movf
xorlw
btfss
goto
UNIDADE,W
;carrega W com valor em unidade
0X0A
STATUS,Z ;unidade = 10 decimal ?
fim_ajuste ;no
clrf
UNIDADE
movf
xorlw
btfss
goto
clrf
incf
goto
DEZENA1,W
0x09
STATUS,Z ;
incDez1
DEZENA1
DEZENA2,F
fim_ajuste ;desvia
DEZENA1,F
;Incrementa dezena1
incDez1:
incf
fim_ajuste:
decfsz
goto
return
AUX,F
ini_ajuste
;Fim da converso ?
;No - volta para continuar
;sim, final da converso
;**************************************
;*
ROTINA DE DIVISO by Microchip - AN544
*
;**************************************
;****************************************************************************
;
Double Precision Division
;****************************************************************************
; Division : ACCb(16 bits) / ACCa(16 bits) -> ACCb(16 bits) with
;
Remainder in ACCc (16 bits)
; (a) Load the Denominator in location ACCaHI & ACCaLO ( 16 bits )
; (b) Load the Numerator in location ACCbHI & ACCbLO ( 16 bits )
; (c) CALL D_divF
48
.16
temp
MOVF
MOVWF
MOVF
MOVWF
ACCbHI,W
ACCdHI
ACCbLO,W
ACCdLO
CLRF
CLRF
ACCbHI
ACCbLO
;limpa ACCb
CLRF
CLRF
ACCcHI
ACCcLO
;limpa ACCc
DIV
BCF
RLF
RLF
RLF
RLF
MOVF
SUBWF
BTFSS
GOTO
MOVF
SUBWF
NOCHK
BTFSS
GOTO
MOVF
SUBWF
BTFSS
DECF
MOVF
SUBWF
BSF
NOGO
RLF
RLF
DECFSZ
GOTO
STATUS,C
ACCdLO,F
ACCdHI,F
ACCcLO,F
ACCcHI,F
ACCaHI,W
ACCcHI,W
STATUS,Z
NOCHK
ACCaLO,W
ACCcLO,W
;verifica se a>c
STATUS,C
NOGO
ACCaLO,W
ACCcLO,F
STATUS,C
ACCcHI,F
ACCaHI,W
ACCcHI,F
STATUS,C
;shift de 1. Resultado em b
ACCbLO,F
ACCbHI,F
temp,F
DIV
;fim da diviso ?
;no - volta para DIV
RETURN
;**************************************
;*
ROTINA DE MULTIPLICAO by Microchip - AN544
*
;**************************************
;****************************************************************************
;
8x8 Software Multiplier
;
( Fast Version : Straight Line Code )
;****************************************************************************
;
; The 16 bit result is stored in 2 bytes
; Before calling the subroutine " mpy ", the multiplier should
; be loaded in location " mulplr ", and the multiplicand in
; " mulcnd " . The 16 bit result is stored in locations
; H_byte & L_byte.
;
Performance :
;
Program Memory : 37 locations
;
# of cycles : 38
;
Scratch RAM : 0 locations
;*******************************************************************
; ********************************************
; Define a macro for adding & right shifting
; ********************************************
mult MACRO bit
BTFSC
ADDWF
RRF
RRF
ENDM
mulplr,bit
H_byte,F
H_byte,F
L_byte,F
;fim da macro
49
; *****************************
; Begin Multiplier Routine
; *****************************
mpy_F
CLRF
CLRF
MOVF
BCF
mult
mult
mult
mult
mult
mult
mult
mult
H_byte
L_byte
mulcnd,W
STATUS,C
0
1
2
3
4
5
6
7
RETURN
; RETORNA
;****************************************************************
;SEND_CMD: envia comando contido no registro W para LCD *
;* esta rotina insere o dados completo no PORT
*
;* o dado eh transmitido pelo pinos do PORT<7:0>
*
;**************************************************************
SEND_CMD
BCF LCD_CNTL, RW ; seta o LCD em modo escrita
BCF LCD_CNTL, RS ; seta o LCD em modo comando
BCF LCD_CNTL, E ; inverte E para LCD
MOVWF LCD_DATA
; envie o dado para o LCD
BSF LCD_CNTL, E ; inverte E para LCD
NOP
BCF LCD_CNTL, E
CALL LongDly
return
;
;********************************************************************
;
LongDly_1
;*********************************************************************
LongDly_1
movlw .10
; atraso de 32 loop: alterou para 20h
movwf
DELAY3
a20 movlw .255
; atraso de 32 loop: alterou para 20h
movwf
DELAY2
; salva na RAM
l6 movlw .255
movwf
DELAY1
;
l7 decfsz
DELAY1,F ; decrementa, se diferente
goto
l7
; executa goto ..
decfsz
DELAY2,F ;
goto
l6
decfsz
DELAY3,F
GOTO
a20
return
;********************************************************************
;
LongDly
;*********************************************************************
LongDly
movlw 0xA1
; atraso de 32 loop: alterou para 20h
movwf
DELAY2
; salva na RAM
l2 movlw 0xF1
movwf
DELAY1
;
l3 decfsz
DELAY1,F ; decrementa, se diferente
goto
l3
; executa goto ..
decfsz
DELAY2,F ;
goto
l2
return
;*****************************************************************
;* SEND_CHAR - envia caracter que esta no registro W para o LCD *
;* Esta rotina envia todo caracter pelo port
*
;* O dado eh trasmitido pelo PORTB<7:0> pins
*
;*****************************************************************
;
SEND_CHAR
BCF LCD_CNTL, RW ; seta o LCD em modelo escrita
BSF LCD_CNTL, RS ; seta o LCD em modo dados
BCF LCD_CNTL, E ; inverte E para LCD
MOVWF LCD_DATA
; envie o dado para o LCD
BSF LCD_CNTL, E ; inverte E para LCD
50
NOP
BCF LCD_CNTL, E
CALL LongDly
return
;***********************************************************************
;
MgInicLcd "rotina para enviar frase inteira ao LCD"
;************************************************************************
MgInicLcd
movlw
0x80
call
SEND_CMD
movlw
0
;
LL
movwf
NUMLCD
; zera contador de dados enviados
call tabinic
; aponta para inicio da tabela
andlw 0ffh
; esta rotina retorna o dado da tabela
btfsc
STATUS,Z ; se for igual a zero e por que chegou
return
; ao fim
call
SEND_CHAR
; que esta em w
movf
NUMLCD,W
;
addlw
1
; incrementa contador de dados
goto LL
; continua at chegar ao fim da mensagem
tabinic addwf PCL,F
mens dt "Iniciando...",0
return
;***************************************************************
; Mensagem para Processo ??
;***************************************************************
MgInicLcd1
movlw
0x01
call
SEND_CMD
movlw
0xC2
call
SEND_CMD
movlw
0
;
A13
movwf
NUMLCD
; zera contador de dados enviados
call tabinic1
; aponta para inicio da tabela
andlw 0ffh
; esta rotina retorna o dado da tabela
btfsc
STATUS,Z ; se for igual a zero e por que chegou
return
; ao fim
call
SEND_CHAR
; que esta em w
movf
NUMLCD,W
;
addlw
1
; incrementa contador de dados
goto A13
; continua at chegar ao fim da mensagem
tabinic1 addwf PCL,F
mens1 dt " Processo ? ",0
RETURN
;***************************************************************
; Mensagem para Tempo Chama
;***************************************************************
MgInicLcd2
movlw
0x01
call
SEND_CMD
movlw
0x83
call
SEND_CMD
movlw
0
;
L2x
movwf
NUMLCD
; zera contador de dados enviados
call tabinic2
; aponta para inicio da tabela
andlw 0ffh
; esta rotina retorna o dado da tabela
btfsc
STATUS,Z ; se for igual a zero e por que chegou
return
; ao fim
call
SEND_CHAR
; que esta em w
movf
NUMLCD,W
;
addlw
1
; incrementa contador de dados
goto L2x
; continua at chegar ao fim da mensagem
tabinic2 addwf PCL,F
mens2 dt "Tempo Chama",0
RETURN
;***************************************************************
; Mensagem para tempo RESFRIAMENTO
;***************************************************************
MgInicLcd3
movlw
0x01
call
SEND_CMD
movlw
0x80
call
SEND_CMD
movlw
0
;
L3x
movwf
NUMLCD
; zera contador de dados enviados
call tabinic3
; aponta para inicio da tabela
andlw 0ffh
; esta rotina retorna o dado da tabela
btfsc
STATUS,Z ; se for igual a zero e por que chegou
return
; ao fim
call
SEND_CHAR
; que esta em w
movf
NUMLCD,W
;
addlw
1
; incrementa contador de dados
goto L3x
; continua at chegar ao fim da mensagem
51
52
goto A7
; continua at chegar ao fim da mensagem
tab7 addwf PCL,F
mens7 dt "Motor 1 GLP",0
RETURN
;***************************************************************
; Rotina para teste dos botes: B_ENTER ^ B_DESL
;***************************************************************
B_ENTER_DESL
BTFSS
B_ENTER ; O BOTO ENTER ESTA PRESSIONADO?
GOTO
B_ENTER_DESL
RETURN
;***************************************************************
; Rotina RESET, SEMPRE VOLTA PARA INICIO
;***************************************************************
RESET
BTFSS
B_DESL ; O BOTO ENTER ESTA PRESSIONADO?
GOTO
RESET
;VAI FAZER A contagem do boto ENTER e pular de frase em frase.
BCF
RL_FAISCA
BCF
RL_GASES
BCF
RL_SAGUA
GOTO
IMAGEM ;volta o programa na primeira frase Porcesso?
;TESTE2
; BSF
ST_DESL
; BCF
RL_FAISCA
; BCF
RL_GASES
; BCF
RL_SAGUA
; GOTO
IMAGEM
;***************************************************************
; Rotina FRASE PROCESSO E MARCAR O INICIO DO PROGRAMA
;***************************************************************
PROC_INICIO
CALL
MgInicLcd1
CALL
B_ENTER_DESL
RETURN
; call
TEMPO_CHAMA
;***************************************************************
; Rotina para chamar o tempo Chama
;***************************************************************
TEMPO_CHAMA
CALL
MgInicLcd2
CALL
B_ENTER_DESL
RETURN
; call
TEMPO_RESFRIA
;***************************************************************
; Rotina para chamar o Tempo Resfriamento
;***************************************************************
TEMPO_RESFRIA
CALL
MgInicLcd3
CALL
B_ENTER_DESL
RETURN
; call
EXECUTAR
;***************************************************************
; Rotina para chamar o Tempo Resfriamento
;***************************************************************
EXECUTAR
CALL
MgInicLcd4
CALL
B_ENTER_DESL
RETURN
; GOTO
PP
;***************************************************************
; Rotina para Decrementar
;***************************************************************
DEC
BSF
MOVF
XORLW
;AO DE DECREMENTAR
;MARCA BOTO 1 COMO J PRESSIONADO
;COLOCA CONTADOR EM W
;APLICA XOR ENTRE CONTADOR E MIN
;PARA TESTAR IGUALDADE. SE FOREM
;IGUAIS, O RESULTADO SER ZERO
BTFSC
STATUS,Z ;RESULTOU EM ZERO?
GOTO
MAIN
;SIM, RETORNA SEM AFETAR CONT.
;NO
DECF
CONTADOR,F
;DECREMENTA O CONTADOR
GOTO
ATUALIZA;ATUALIZA O DISPLAY
;*****************************************************************
;Ao de incrementar
;*****************************************************************
INC
;AO DE INCREMENTAR
B_DEC
CONTADOR,W
MIN
53
BSF
MOVF
XORLW
BTFSC
GOTO
INCF
GOTO
B_INC
CONTADOR,W
MAX
;**************************************************************
; GIRA MOTOR DO GLP PARA ABRIR
;**************************************************************
MOTOR_GLP_ABRE
BSF
BSF
BSF
CALL
HOR
GOTO
BCF
CALL
;
BCF
;
BTFSS
;
GOTO
BTFSS
GOTO
MOVLW
MGLP_STOP
MGLP_GIRO
TR_MOTOR
LongDly
BTFSS
HOR
B_ENTER
MGLP_STOP
CONT_MOT_GLP
MGLP_GIRO
B_DESL
$+1
B_DEC
$+1
VALOR_A/D
BSF
BCF
RETURN
MGLP_STOP
TR_MOTOR
;**************************************************************
; Contador para volta do motor 1 GLP
;**************************************************************
CONT_MOT_GLP
CONT1
BTFSS
GOTO
CLRF
INCF
MOVLW
XORLW
BTFSS
GOTO
RETURN
B_INC
CONT1
CONT_GLP
CONT_GLP,F
UM
CONT_GLP
STATUS,Z
CONT2
CONT2
BTFSS
GOTO
INCF
MOVLW
XORLW
BTFSS
GOTO
RETURN
B_INC
CONT2
CONT_GLP,F
DOIS
CONT_GLP
STATUS,Z
CONT3
CONT3
BTFSS
GOTO
B_INC
CONT3
RETURN
;**************************************************************
; GIRA MOTOR DE AR PARA ABRIR
;**************************************************************
MOTOR_AR_ABRE
BSF
MAR_STOP
BSF
MAR_GIRO
BSF
TR_MOTOR
CALL
LongDly
HOAR
BTFSS
B_ENTER
GOTO
HOAR
BCF
MAR_STOP
CALL
CONT_MOT_AR
;
BCF
MGLP_GIRO
;
BTFSS
B_DESL
;
GOTO
$+1
BSF
MAR_STOP
BCF
TR_MOTOR
RETURN
;**************************************************************
; Contador para volta do motor 1 AR
54
;**************************************************************
CONT_MOT_AR
CONTA1
BTFSS
GOTO
CLRF
INCF
MOVLW
XORLW
BTFSS
GOTO
RETURN
B_INC
CONTA1
CONT_AR
CONT_AR,F
UM
CONT_AR
STATUS,Z
CONTA2
CONTA2
BTFSS
GOTO
INCF
MOVLW
XORLW
BTFSS
GOTO
RETURN
B_INC
CONTA2
CONT_AR,F
DOIS
CONT_AR
STATUS,Z
CONTA3
CONTA3
BTFSS
GOTO
B_INC
CONTA3
RETURN
;******************************************************************************
; FIM DO PROGRAMA
;******************************************************************************
END