Anda di halaman 1dari 4

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

asm2-e10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CONECTANDO O PIC - RECURSOS AVAN ADOS * EXEMPLO 10 * * NICOL S C SAR LAVINIA e DAVID JOS DE SOUZA * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * VERS O : 3.0 * DATA : 24/02/2003 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * *

FLAG WORK_TEMP STATUS_TEMP PCLATH_TEMP FSR_TEMP ENDC

asm2-e10 ; FLAG DE USO GERAL

; REGISTRADORES UTILIZADOS P/ SALVAR ; O CONTEXTO DURANTE AS INTERRUP ES * * * * * * * * * * * * * PARA QUE NECESSIDADE

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DESCRI O GERAL * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ESTE EXEMPLO FOI ELABORADO PARA EXPLICAR O FUNCIONAMENTO DO TMR1 COMO CONTADOR, UTILIZADO NA PLACA MCLAB2 PARA CONTAR AS ROTA ES DO VENTILADOR. O SOFTWARE CONVERTE O CANAL 0 DO CONVERSOR A/D (SENSOR DE TEMPERATURA). DOIS PWMs FORAM UTILIZADOS, UM PARA MODULAR A RESIST NCIA DE AQUECIMENTO E OUTRO PARA A VELOCIDADE DO VENTILADOR. COM AS TECLAS S1 E S2 PODE-SE VARIAR O PWM DO AQUECEDOR E COM AS TECLAS S3 E S4 O PWM DO VENTILADOR. NO LCD S O MOSTRADOS OS VALORES DO PWM DO AQUECEDOR, O N MERO DE ROTA ES POR SEGUNDO DO VENTILADOR E A TEMPERATURA DO DIODO J CONVERTIDA EM GRAUS CELSIUS. AL M DISSO, O VALOR ATUAL DA TEMPERATURA DO DIODO TRANSMITIDO PERIODICAMENTE ATRAV S DA USART. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CONFIGURA ES PARA GRAVA O * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * DEFINI O DAS VARI VEIS INTERNAS DO PIC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; O ARQUIVO DE DEFINI ES DO PIC UTILIZADO DEVE SER REFERENCIADO ; OS NOMES DEFINIDOS PELA MICROCHIP POSSAM SER UTILIZADOS, SEM A ; DE REDIGITA O. #INCLUDE <P16F877A.INC>

; MICROCONTROLADOR UTILIZADO

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * DEFINI O DOS BANCOS DE RAM * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; OS PSEUDOS-COMANDOS "BANK0" E "BANK1", AQUI DEFINIDOS, AJUDAM A COMUTAR ; ENTRE OS BANCOS DE MEM RIA. #DEFINE BANK1 #DEFINE BANK0 BSF BCF STATUS,RP0 STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM ; SELECIONA BANK0 DA MEMORIA RAM

__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * DEFINI O DAS VARI VEIS * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTE BLOCO DE VARI VEIS EST LOCALIZADO LOGO NO IN CIO DO BANCO 0 CBLOCK 0X20 TEMPO0 TEMPO1 AUX UNIDADE DEZENA CENTENA INTENSIDADE_VENT INTENSIDADE_AQUE ACCaHI ACCaLO ACCbHI ACCbLO ACCcHI ACCcLO ACCdHI ACCdLO temp H_byte L_byte mulplr mulcnd TEMPERATURA TEMP_CELSIUS FILTRO_BOTOES TEMPO_TURBO TEMPO_1S CONT_VENT_HIGH CONT_VENT_LOW ; POSI O INICIAL DA RAM

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * CONSTANTES INTERNAS * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; A DEFINI O DE CONSTANTES FACILITA A PROGRAMA O E A MANUTEN O. FILTRO_TECLA TURBO_TECLA EQU EQU .200 .70 ; FILTRO P/ EVITAR RUIDOS DOS BOT ES ; TEMPERIZADOR P/ TURBO DO TECLADO

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * DECLARA O DOS FLAGs DE SOFTWARE * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; A DEFINI O DE FLAGs AJUDA NA PROGRAMA O E ECONOMIZA MEM RIA RAM. #DEFINE MOSTRA_RPS FLAG,0 ; FLAG PARA MOSTRAR A ROTA O NO LCD ; 1 -> DEVE MOSTRAR A ROTA O ; 0 -> NAO DEVE MOSTRAR A ROTA O ; FLAG PARA MOSTRAR A TEMPERATURA NO LCD ; 1 -> DEVE MOSTRAR A TEMPERATURA ; 0 -> NAO DEVE MOSTRAR A TEMPERATURA

; TMEPORIZADORES P/ ROTINA DE DELAY ; REGISTRADOR AUXILIAR DE USO GERAL ; ARMAZENA VALOR DA UNIDADE ; ARMAZENA VALOR DA DEZENA ; ARMAZENA VALOR DA CENTENA ; INTENSIDADE DO VENTILADOR ; INTENSIDADE DO AQUECEDOR ; ACUMULADOR a DE 16 BITS UTILIZADO ; NA ROTINA DE DIVIS O ; ACUMULADOR b DE 16 BITS UTILIZADO ; NA ROTINA DE DIVIS O ; ACUMULADOR c DE 16 BITS UTILIZADO ; NA ROTINA DE DIVIS O ; ACUMULADOR d DE 16 BITS UTILIZADO ; NA ROTINA DE DIVIS O

#DEFINE MOSTRA_TEMP

FLAG,1

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ENTRADAS * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; AS ENTRADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMA O E ; FUTURAS ALTERA ES DO HARDWARE. #DEFINE BOTAO_0 PORTB,0 ; ESTADO DO BOT O 0 ; 1 -> LIBERADO ; 0 -> PRESSIONADO ; ESTADO DO BOT O 1 ; 1 -> LIBERADO ; 0 -> PRESSIONADO ; ESTADO DO BOT O 2 ; 1 -> LIBERADO ; 0 -> PRESSIONADO ; ESTADO DO BOT O 3 ; 1 -> LIBERADO ; 0 -> PRESSIONADO

#DEFINE BOTAO_1

PORTB,1

#DEFINE BOTAO_2 ; CONTADOR TEMPOR RIO UTILIZADO ; NA ROTINA DE DIVIS O ; ACUMULADOR DE 16 BITS UTILIZADO ; P/ RETORNAR O VALOR DA ROTINA ; DE MULTIPLICA O ; OPERADOR P/ ROTINA DE MUTIPLICA ; OPERADOR P/ ROTINA DE MUTIPLICA O O #DEFINE BOTAO_3

PORTB,2

PORTB,3

; TEMPERATURA DO DIODO EM UNIDADES DE A/D ; TEMPERATURA DO DIODO J CONVERTIDO ; PARA GRAUS CELSIUS ; FILTRO P/ DEBOUNCE DOS BOTO ES ; TEMPORIZADOR P/ TUBO DO TECLADO ; TEMPORIZADOR DE 1 SEGUNDO ; CONTADORES PARA ROTA Pgina 1 O DO VENTILADOR

; ; ; ; ; ;

ESTE PROGRAMA UTILIZA UMA ENTRADA P/ O CONVERSOR A/D. ESTA ENTRADA N O PRECISA SER DECLARADA, POIS O SOFTWARE NUNCA FAZ REFER NCIA A ELA DE FORMA DIRETA, POIS O CANAL A/D A SER CONVERTIDO SELECIONADO NO REGISTRADOS ADCON0 DE FORMA BIN RIA E N O ATRAV S DE DEFINES. POR M PARA FACILITAR O ENTENDIMENTO DO HARDWARE VAMOS DECLARAR ESTA ENTRADA NORMALMENTE. PORTA,0 ; ENTRADA A/D PARA TEMPERATURA O).

#DEFINE CAD_TEMP ; ; ; ;

AL M DA ENTRADA DO CONVERSOR A/D, TEMOS A ENTRADA DA USART (RECEP NOVAMENTE ESTA ENTRADA N O NECESSITA SER DECLARADA, POR M, PARA FACILITAR O ENTENDIMENTO DO HARDWARE VAMOS DECLARAR ESTA ENTRADA NORMALMENTE. ; ENTRADA DE RX DA USART Pgina 2

#DEFINE RXUSART PORTC,7

asm2-e10 ; * * * * * * * * * * * * * * * * * ; * ; * * * * * * * * * * * * * * * * * ; AS SA DAS DEVEM SER ASSOCIADAS A ; FUTURAS ALTERA ES DO HARDWARE. #DEFINE DISPLAY #DEFINE RS PORTD PORTE,0 * * * * * * * * * * * * * * * * * * * * * SA DAS * * * * * * * * * * * * * * * * * * * * * * NOMES PARA FACILITAR A PROGRAMA O E ; BARRAMENTO DE DADOS DO DISPLAY ; INDICA P/ O DISPLAY UM DADO OU COMANDO ; 1 -> DADO ; 0 -> COMANDO ; SINAL DE ENABLE P/ DISPLAY ; ATIVO NA BORDA DE DESCIDA MOVF MOVWF MOVF MOVWF CLRF CLRF BSF BSF INT_TMR2_2 MOVF MOVWF BSF BSF TMR1H,W CONT_VENT_HIGH TMR1L,W CONT_VENT_LOW TMR1H TMR1L T1CON,TMR1ON MOSTRA_RPS

asm2-e10

; SALVA VALOR DO TMR1 EM CONT_VENT ; RESETA CONTADORES ; LIBERA CONTADORES DO TMR1 ; SETA FLAG P/ MOSTRAR VALOR ; DAS RPS DO VENTILADOR

#DEFINE ENABLE ; ; ;

PORTE,1

TEMOS TAMB M AS SA DAS DE TX DA USART, PWM1 E PWM2. PARA FACILITAR O ENTENDIMENTO DO HARDWARE VAMOS DECLARAR ESTAS SA DAS NORMALMENTE APESAR DE N O SEREM UTILIZADAS. PORTC,6 PORTC,1 PORTC,2 ; SA DA DE TX DA USART ; SA DA P/ VENTILADOR ; SA DA P/ AQUECEDOR

ADRESH,W TEMPERATURA ADCON0,GO MOSTRA_TEMP

; SALVA VALOR DA CONVERS O A/D ; NA VARI VEL TEMPERATURA ; INICIA UMA NOVA CONVERS O ; SETA FLAG P/ ATUALIZAR VALOR ; DA TEMPERATURA NO LCD

#DEFINE TXUSART #DEFINE VENTILADOR #DEFINE AQUECEDOR

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * VETOR DE RESET DO MICROCONTROLADOR * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; POSI O INICIAL PARA EXECU O DO PROGRAMA ORG NOP GOTO 0X0000 CONFIG_ ; ENDERE O DO VETOR DE RESET ; PULA PARA CONFIG DEVIDO A REGI O ; DESTINADA AS ROTINAS SEGUINTES

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * SA DA DA INTERRUP O * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ANTES DE SAIR DA INTERRUP O, O CONTEXTO SALVO NO IN CIO DEVE SER ; RECUPERADO PARA QUE O PROGRAMA N O SOFRA ALTERA ES INDESEJADAS. SAI_INT MOVF MOVWF MOVF MOVWF SWAPF MOVWF SWAPF SWAPF RETFIE PCLATH_TEMP,W PCLATH FSR_TEMP,W FSR STATUS_TEMP,W STATUS WORK_TEMP,F WORK_TEMP,W ; RECUPERA REG. PCLATH (PAGINA O)

; RECUPERA REG. FSR (END. INDIRETO) ; RECUPERA REG. STATUS ; RECUPERA REG. WORK ; RETORNA DA INTERRUP O (HABILITA GIE)

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * VETOR DE INTERRUP O * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; POSI O DE DESVIO DO PROGRAMA QUANDO UMA INTERRUP O ACONTECE ORG ; ; ; ; 0X0004 ; ENDERE O DO VETOR DE INTERRUP O

MUITO IMPORTANTE QUE OS REGISTRADORES PRIORIT RIOS AO FUNCIONAMENTO DA M QUINA, E QUE PODEM SER ALTERADOS TANTO DENTRO QUANTO FORA DAS INTS SEJAM SALVOS EM REGISTRADORES TEMPOR RIOS PARA PODEREM SER POSTERIORMENTE RECUPERADOS. WORK_TEMP STATUS,W STATUS_TEMP FSR,W FSR_TEMP PCLATH,W PCLATH_TEMP PCLATH STATUS ; SALVA REGISTRADOR DE TRABALHO E ; DE STATUS DURANTE O TRATAMENTO ; DA INTERRUP O. ; SALVA REGISTRADOR FSR ; SALVA REGISTRADOR PCLATH ; ; ; ; LIMPA REGISTRADOR PCLATH (SELECIONA P GINA 0) LIMPA REGISTRADOR STATUS (SELECIONA BANCO 0)

SALVA_CONTEXTO MOVWF SWAPF MOVWF MOVF MOVWF MOVF MOVWF CLRF CLRF ; ; ; ; ; ; ; ; ; ; ; ; ;

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA DE DIVIS O * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;**************************************************************************** ; 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 ; (d) The 16 bit result is in location ACCbHI & ACCbLO ; (e) The 16 bit Remainder is in locations ACCcHI & ACCcLO ;**************************************************************************** D_divF MOVLW MOVWF MOVF MOVWF MOVF MOVWF CLRF CLRF CLRF CLRF DIV BCF RLF RLF RLF RLF MOVF SUBWF BTFSS GOTO MOVF SUBWF NOCHK BTFSS GOTO MOVF STATUS,C ACCdLO,F ACCdHI,F ACCcLO,F ACCcHI,F ACCaHI,W ACCcHI,W STATUS,Z NOCHK ACCaLO,W ACCcLO,W STATUS,C NOGO ACCaLO,W .16 temp ACCbHI,W ACCdHI ACCbLO,W ACCdLO ACCbHI ACCbLO ACCcHI ACCcLO ; CARREGA CONTADOR PARA DIVIS O

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TRATAMENTO DA INTERRUP O DE TIMER 2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * A INTERRUP O DE TMR2 UTILIZADA PARA FORNECER A BASE DE TEMPO PARA AS MEDIDAS DAS ROTA ES POR SEGUNDO DO VENTILADOR E DA TEMPERATURA DO DIODO. AL M DISSO, ELA SETA OS FLAGS PARA QUE ESTES SEJAM ATUALIZADOS NO LCD. O TMR2 EST CONFIGURADO PARA POSTSCALE DE 1:10 E PORTANTO A CADA 10ms A INTERRUP O GERADA. O CONVERSOR A/D LIDO A CADA INTERRUP O, OU SEJA, A CADA 10ms. A CADA 100 INTERRUP ES, OU SEJA, A CADA 1 SEGUNDO, O VALOR DO CONTADOR DO TMR1 SALVO NA VARI VEL CONT_VENT (HIGH E LOW), DESTA FORMA, O VALOR DE CONT_VENT O N MERO DE ROTA ES DO VENTILADOR POR SEGUNDO. NA VERDADE ESTE VALOR ENCONTRA-SE MULTIPLICADO PELO N MERO DE PALHETAS DO VENTILADOR. BCF DECFSZ GOTO MOVLW MOVWF BCF PIR1,TMR2IF TEMPO_1S,F INT_TMR2_2 .100 TEMPO_1S T1CON,TMR1ON ; LIMPA FLAG DA INTERRUP O

; SALVA ACCb EM ACCd ; LIMPA ACCb ; LIMPA ACCc

INT_TMR2 ; FIM DO 1 SEGUNDO ? ; N O - PULA P/ INT_TMR2_2 ; SIM ; RECARREGA TEMPORIZADOR DE 1 SEGUNDO ; PARALIZA CONTADOR DO TMR1 Pgina 3

;check if a>c

;if msb equal then check lsb ;carry set if c>a ;c-a into c Pgina 4

asm2-e10 SUBWF BTFSS DECF MOVF SUBWF BSF NOGO RLF RLF DECFSZ GOTO RETURN ACCbLO,F ACCbHI,F temp,F DIV ; ; ; ; FIM DA DIVIS O ? N O - VOLTA P/ DIV SIM RETORNA ACCcLO,F STATUS,C ACCcHI,F ACCaHI,W ACCcHI,F STATUS,C RETURN

asm2-e10 ; SIM ; RETORNA

;shift a 1 into b (result)

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA DE ESCRITA DE UM CARACTER NO DISPLAY * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA ENVIA UM CARACTER PARA O M DULO DE LCD. O CARACTER A SER ; ESCRITO DEVE SER COLOCADO EM WORK (W) ANTES DE CHAMAR A ROTINA. ESCREVE MOVWF NOP BSF GOTO BCF MOVLW CALL RETURN ; ; ; ; ; ; DISPLAY ENABLE $+1 ENABLE .1 DELAY_MS ; ; ; ; ; ATUALIZA DISPLAY (PORTD) PERDE 1US PARA ESTABILIZA O ENVIA UM PULSO DE ENABLE AO DISPLAY . .

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA DE MULTIPLICA O * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;**************************************************************************** ; 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 BTFSC ADDWF RRF RRF ENDM ; ***************************** ; Begin Multiplier Routine ; ***************************** mpy_F CLRF CLRF MOVF BCF mult mult mult mult mult mult mult mult RETURN H_byte L_byte mulcnd,W STATUS,C 0 1 2 3 4 5 6 7 ; RETORNA * * * * * * * * * * * * * * 256MS) * * * * * * * * * * * * * * * O DE 1MS X O VALOR PASSADO bit mulplr,bit H_byte,F H_byte,F L_byte,F ; End of macro ; Begin macro

; DELAY DE 1MS ; RETORNA

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * AJUSTE DECIMAL * * W [HEX] = CENTENA [DEC] : DEZENA [DEC] ; UNIDADE [DEC] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ESTA ROTINA RECEBE UM ARGUMENTO PASSADO PELO WORK E RETORNA NAS VARI VEIS CENTENA, DEZENA E UNIDADE O N MERO BCD CORRESPOND NTE AO PAR METRO PASSADO. AUX UNIDADE DEZENA CENTENA AUX,F STATUS,Z UNIDADE,F UNIDADE,W 0X0A STATUS,Z $+3 UNIDADE DEZENA,F DEZENA,W 0X0A STATUS,Z $+3 DEZENA CENTENA,F AUX,F $-.14 ; SALVA VALOR A CONVERTER EM AUX

AJUSTE_DECIMAL MOVWF CLRF CLRF CLRF MOVF BTFSC RETURN INCF MOVF XORLW BTFSS GOTO CLRF INCF MOVF XORLW BTFSS GOTO CLRF INCF

; RESETA REGISTRADORES ; ; ; ; VALOR A CONVERTER = 0 ? SIM - RETORNA N O INCREMENTA UNIDADE

; ; ; ; ;

UNIDADE = 10d ? N O SIM RESETA UNIDADE INCREMENTA DEZENA

; ; ; ; ;

DEZENA = 10d ? N O SIM RESETA DEZENA INCREMENTA CENTENA

; move the multiplicand to W reg. ; Clear carry bit in the status Reg.

DECFSZ GOTO RETURN

; FIM DA CONVERS O ? ; N O - VOLTA P/ CONTINUAR CONVERS O ; SIM

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA PARA MOSTRAR A ROTA O DO VENTILADOR NO LCD * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA ATUALIZA O VALOR DAS ROTA ES POR SEGUNDO DO VENTILADOR NO LCD. MOSTRA_RPS_LCD BCF BCF MOVLW CALL BSF MOVF MOVWF MOVF MOVWF CLRF MOVLW MOVWF CALL MOVF MOSTRA_RPS RS 0XC7 ESCREVE RS CONT_VENT_HIGH,W ACCbHI CONT_VENT_LOW,W ACCbLO ACCaHI .7 ACCaLO D_divF ACCbLO,W Pgina 6 ; LIMPA FLAG DE ATUALIZA ; ; ; ; O DA RPS

; * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA DE DELAY (DE 1MS AT ; * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA UMA ROTINA DE DELAY VARI VEL, COM DURA ; EM WORK (W). DELAY_MS MOVWF MOVLW MOVWF CLRWDT DECFSZ GOTO DECFSZ GOTO TEMPO1 .250 TEMPO0 TEMPO0,F $-2 TEMPO1,F $-6

SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 7 SELECIONA O DISPLAY P/ DADOS

; CARREGA TEMPO1 (UNIDADES DE MS) ; CARREGA TEMPO0 (P/ CONTAR 1MS) ; ; ; ; ; ; LIMPA WDT (PERDE TEMPO) FIM DE TEMPO0 ? N O - VOLTA 2 INSTRU ES SIM - PASSOU-SE 1MS FIM DE TEMPO1 ? N O - VOLTA 6 INSTRU ES Pgina 5

; CARREGA ACCb COM VALOR DO CONTADOR

; CARREGA ACCa COM N MERO DE PALHETAS ; DO VENTILADOR ; CHAMA ROTINA DE DIVIS O

CALL MOVF ADDLW CALL MOVF ADDLW CALL MOVF ADDLW CALL RETURN ; ; ; ; ;

AJUSTE_DECIMAL CENTENA,W 0X30 ESCREVE DEZENA,W 0X30 ESCREVE UNIDADE,W 0X30 ESCREVE

asm2-e10 ; FAZ O AJUSTE DECIMAL DO RESULTADO ; (ROTA ES POR SEGUNDO) ; CONVERTE CENTENA EM ASCII ; ESCREVE VALOR NO LCD ; CONVERTE DEZENA EM ASCII ; ESCREVE VALOR NO LCD

asm2-e10 MOVLW MOVWF B'11011011' OPTION_REG ; ; ; ; ; ; CONFIGURA OPTIONS PULL-UPs DESABILITADOS INTER. NA BORDA DE SUBIDA DO RB0 TIMER0 INCREM. PELO CICLO DE M QUINA WDT - 1:8 TIMER - 1:1

MOVLW MOVWF ; CONVERTE UNIDADE EM ASCII ; ESCREVE VALOR NO LCD ; RETORNA MOVLW MOVWF MOVLW MOVWF

B'01000000' INTCON

; CONFIGURA INTERRUP ES ; HABILITA INTER. DE PERIF RICOS ; CONFIGURA INTER. DE PERIF RICOS ; HABILITA A INTERRUP O DE TMR2 ; ; ; ; ; ; ; ; ; ; ; ; ; CONFIGURA CONVERSOR A/D RA0, RA1 E RA3 COMO ANAL GICO RA2, RA4 E RA5 COMO I/O DIGITAL PORTE COMO I/O DIGITAL JUSTIFICADO ESQUERDA 8 BITS EM ADRESH E 2 BITS EM ADRESL Vref+ = VDD (+5V) Vref- = GND ( 0V) CONFIGURA USART HABILITA TX MODO ASSINCRONO TRANSMISS O DE 8 BITS HIGH SPEED BAUD RATE

B'00000010' PIE1 B'00000100' ADCON1

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ROTINA PARA MOSTRAR A TEMPERATURA NO LCD * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ESTA ROTINA CONSULTA UMA TABELA P/ CONVERTER O VALOR DO CANAL A/D DO SENSOR DE TEMPERATURA EM GRAUS CELSIUS, MOSTRA ESTE NO LCD E TRANSMITE PELA USART. ; LIMPA FLAG DE ATUALIZA O DA TEMP.

MOSTRA_TEMP_LCD BCF MOSTRA_TEMP CALL MOVWF CALL BCF MOVLW CALL BSF MOVF ADDLW CALL MOVF ADDLW CALL MOVF ADDLW CALL MOVF BANK1 BTFSS GOTO BANK0 MOVWF RETURN TABELA_TEMPERATURA TEMP_CELSIUS AJUSTE_DECIMAL RS 0XCB ESCREVE RS CENTENA,W 0X30 ESCREVE DEZENA,W 0X30 ESCREVE UNIDADE,W 0X30 ESCREVE TEMP_CELSIUS,W TXSTA,TRMT $-1 TXREG

; CONVERTE A/D EM GRAUS CELSIUS ; SALVA VALOR EM TEMP_CELSIUS ; FAZ O AJUSTE DECIMAL ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 11 SELECIONA O DISPLAY P/ DADOS

MOVLW MOVWF

B'00100100' TXSTA

MOVLW MOVWF ; CONVERTE CENTENA EM ASCII ; ESCREVE VALOR NO LCD ; CONVERTE DEZENA EM ASCII ; ESCREVE VALOR NO LCD BANK0 ; CONVERTE UNIDADE EM ASCII ; ESCREVE VALOR NO LCD ; ; ; ; ; ; ; ; ; CARREGA EM WORK A TEMPERATURA ALTERA P/ BANCO 1 DA RAM O BUFFER DE TX EST VAZIO ? N O - AGUARDA ESVAZIAR SIM - VOLTA P/ BANCO 0 DA RAM CARREGA TXREG COM O VALOR DO WORK TRANSMITE A TEMPERATURA EM GRAUS CELSIUS PELA USART RETORNA * * * * * * * * * * * * E SOFTWARE * * * * * * * * * * * * * MICROCONTROLADOR E AS ROTINA INICIALIZA A MOVLW MOVWF MOVLW MOVWF

.25 SPBRG .249 PR2

; ACERTA BAUD RATE -> 9600bps ; CONFIGURA PER ODO DO PWM ; T=((PR2)+1)*4*Tosc*TMR2 Prescale ; T=((249)+1)*4*250ns*4 ; T=1,000ms -> 1.000Hz = 1KHz ; SELECIONA BANCO 0 DA RAM

B'10010000' RCSTA

; ; ; ; ; ; ; ; ;

CONFIGURA USART HABILITA RX RECEP O DE 8 BITS RECEP O CONT NUA DESABILITA ADDRESS DETECT CONFIGURA CONVERSOR A/D VELOCIDADE -> Fosc/8 CANAL 0 M DULO LIGADO

MOVLW MOVWF

B'01000001' ADCON0

; * * * * * * * * * * * * * * * * * * * * * * * * * * ; * CONFIGURA ES INICIAIS DE HARDWARE ; * * * * * * * * * * * * * * * * * * * * * * * * * * ; NESTA ROTINA S O INICIALIZADAS AS PORTAS DE I/O DO ; CONFIGURA ES DOS REGISTRADORES ESPECIAIS (SFR). A ; M QUINA E AGUARDA O ESTOURO DO WDT. CONFIG_ CLRF CLRF CLRF CLRF CLRF BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF B'11111111' TRISA B'11111111' TRISB B'10111001' TRISC B'00000000' TRISD B'00000100' TRISE PORTA PORTB PORTC PORTD PORTE

CLRF CLRF MOVLW MOVWF

TMR1L TMR1H B'00000111' T1CON

; ZERA CONTADOR DO TMR1 ; ; ; ; ; ; ; ; ; CONFIGURA TMR1 PRESCALE DE 1:1 TMR1 INCREM. PELO PINO T1CKI (RC0) N O SINCRONIZADO COM CLOCK INTERNO CONTADOR HABILITADO CONFIGURA TMR2 TMR2 HABILITADO POSTSCALE 1:10 PRESCALE 1:4

; GARANTE TODAS AS SA DAS EM ZERO MOVLW MOVWF ; SELECIONA BANCO 1 DA RAM ; CONFIGURA I/O DO PORTA ; CONFIGURA I/O DO PORTB ; CONFIGURA I/O DO PORTC MOVLW MOVWF ; CONFIGURA I/O DO PORTD ; CONFIGURA I/O DO PORTE Pgina 7 ; ; ; B'00001111' CCP1CON CLRF MOVLW MOVWF CLRF CCPR2L B'00001111' CCP2CON CCPR1L B'01001101' T2CON

; ZERA PWM DO CCP2 (RC1 - VENTILADOR) ; CONFIGURA CCP2 P/ PWM ; ZERA PWM DO CCP1 (RC2 - AQUECEDOR) ; CONFIGURA CCP1 P/ PWM

AS INSTRU ES A SEGUIR FAZEM COM QUE O PROGRAMA TRAVE QUANDO HOUVER UM RESET OU POWER-UP, MAS PASSE DIRETO SE O RESET FOR POR WDT. DESTA FORMA, SEMPRE QUE O PIC LIGADO, O PROGRAMA TRAVA, AGUARDA UM ESTOURO DE WDT Pgina 8

asm2-e10 E COME A NOVAMENTE. ISTO EVITA PROBLEMAS NO START-UP DO PIC. BTFSC GOTO STATUS,NOT_TO $ ; RESET POR ESTOURO DE WATCHDOG TIMER ? ; N O - AGUARDA ESTOURO DO WDT ; SIM

asm2-e10 CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL BCF MOVLW CALL BSF MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL BCF MOVLW CALL BSF MOVLW CALL MOVLW CALL MOVLW CALL BCF MOVLW CALL BSF MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL ESCREVE 'P' ESCREVE 'S' ESCREVE ' ' ESCREVE 'T' ESCREVE 'E' ESCREVE 'M' ESCREVE 'P' ESCREVE '.' ESCREVE RS 0XC1 ESCREVE RS '0' ESCREVE '0' ESCREVE '0' ESCREVE '%' ESCREVE RS 0XC7 ESCREVE RS '0' ESCREVE '0' ESCREVE '0' ESCREVE RS 0XCB ESCREVE RS '0' ESCREVE '0' ESCREVE '0' ESCREVE 0XDF ESCREVE 'C' ESCREVE ; ; ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 7 SELECIONA O DISPLAY P/ DADOS COMANDOS PARA ESCREVER AS LETRAS DE "000 C" ; ; ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 7 SELECIONA O DISPLAY P/ DADOS COMANDOS PARA ESCREVER AS LETRAS DE "000" ; ; ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 1 SELECIONA O DISPLAY P/ DADOS COMANDOS PARA ESCREVER AS LETRAS DE "000%"

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * INICIALIZA O DA RAM * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA IR LIMPAR TODA A RAM DO BANCO 0, INDO DE 0X20 A 0X7F MOVLW MOVWF LIMPA_RAM CLRF INCF MOVF XORLW BTFSS GOTO ; ; ; ; ; 0X20 FSR INDF FSR,F FSR,W 0X80 STATUS,Z LIMPA_RAM ; APONTA O ENDERE AMENTO INDIRETO PARA ; A PRIMEIRA POSI O DA RAM ; LIMPA A POSI O ; INCREMENTA O PONTEIRO P/ A PR X. POS. ; ; ; ; COMPARA O PONTEIRO COM A LT. POS. +1 J LIMPOU TODAS AS POSI ES? N O - LIMPA A PR XIMA POSI O SIM * * * * * * * * * * * * * * DISPLAY * * * * * * * * * * * * * * * DE 8 VIAS, DISPLAY PARA 2 DIREITA.

* * * * * * * * * * * * * * * * * * * * * * * * * CONFIGURA ES INICIAIS DO * * * * * * * * * * * * * * * * * * * * * * * * ESTA ROTINA INICIALIZA O DISPLAY P/ COMUNICA O LINHAS, CURSOR APAGADO E DESLOCAMENTO DO CURSOR

INICIALIZACAO_DISPLAY BCF RS MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL 0X30 ESCREVE .3 DELAY_MS 0X30 ESCREVE 0X30 ESCREVE B'00111000' ESCREVE B'00000001' ESCREVE .1 DELAY_MS B'00001100' ESCREVE B'00000110' ESCREVE

; SELECIONA O DISPLAY P/ COMANDOS ; ESCREVE COMANDO 0X30 PARA ; INICIALIZA O ; DELAY DE 3MS (EXIGIDO PELO DISPLAY) ; ESCREVE COMANDO 0X30 PARA ; INICIALIZA O ; ESCREVE COMANDO 0X30 PARA ; INICIALIZA O ; ESCREVE COMANDO PARA ; INTERFACE DE 8 VIAS DE DADOS ; ESCREVE COMANDO PARA ; LIMPAR TODO O DISPLAY ; DELAY DE 1MS ; ESCREVE COMANDO PARA ; LIGAR O DISPLAY SEM CURSOR ; ESCREVE COMANDO PARA INCREM. ; AUTOM TICO DIREITA

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * ROTINA DE ESCRITA DA TELA PRINCIPAL * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ESTA ROTINA ESCREVE A TELA PRINCIPAL DO PROGRAMA, COM AS FRASES: ; LINHA 1 - "AQUEC. RPS TEMP." ; LINHA 2 - " 000% 000 000 C" MOVLW CALL BSF MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW 0X80 ESCREVE RS 'A' ESCREVE 'Q' ESCREVE 'U' ESCREVE 'E' ESCREVE 'C' ESCREVE '.' ESCREVE ' ' ESCREVE 'R' Pgina 9 ; ; ; ; ; COMANDO PARA POSICIONAR O CURSOR LINHA 0 / COLUNA 0 SELECIONA O DISPLAY P/ DADOS COMANDOS PARA ESCREVER AS LETRAS DE "AQUEC. RPS TEMP."

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * LOOP PRINCIPAL * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; A ROTINA PRINCIPAL FICA AGUARDANDO O MOMENTO DE ESCREVER O VALOR DAS ; ROTA ES DO VENTILADOR E A TEMPERATURA NO LCD AL M DE VARRER O TECLADO ; PARA MANIPULAR O VALOR DO PWM. BSF BSF VARRE CLRWDT BTFSC CALL BTFSC CALL MOSTRA_RPS MOSTRA_RPS_LCD MOSTRA_TEMP MOSTRA_TEMP_LCD ; LIMPA WATCHDOG TIMER ; ; ; ; ; ; DEVE MOSTRAR RPS NO LCD ? SIM - CHAMA ROTINA P/ ATUALIZAR RPS N O DEVE MOSTRAR A TEMP. NO LCD ? SIM - CHAMA ROTINA P/ ATUALIZAR TEMP. N O Pgina 10 ADCON0,GO INTCON,GIE ; INICIA CONVERS O A/D ; EXECUTADA APENAS UMA VEZ ; HABILITA FLAG GLOBAL DAS ; INTERRUP ES

BTFSS GOTO BTFSS GOTO BTFSS GOTO BTFSS GOTO MOVLW MOVWF MOVLW MOVWF

BOTAO_0 TRATA_BOTAO_0 BOTAO_1 TRATA_BOTAO_1 BOTAO_2 TRATA_BOTAO_2 BOTAO_3 TRATA_BOTAO_3 FILTRO_TECLA FILTRO_BOTOES .1 TEMPO_TURBO

; ; ; ; ; ; ; ; ; ; ; ;

asm2-e10 O BOT O 0 EST SIM - PULA P/ N O O BOT O 1 EST SIM - PULA P/ N O O BOT O 2 EST SIM - PULA P/ N O O BOT O 3 EST SIM - PULA P/ N O

PRESSIONADO ? TRATA_BOTAO_0 PRESSIONADO ? TRATA_BOTAO_1 PRESSIONADO ? TRATA_BOTAO_2 PRESSIONADO ? TRATA_BOTAO_3

GOTO

VARRE

asm2-e10 ; VOLTA P/ VARREDURA DOS BOT ES

; ************************* TRATAMENTO DO BOT O 1 *************************** TRATA_BOTAO_1 DECFSZ GOTO DECFSZ GOTO MOVLW MOVWF MOVF BTFSS DECF MOVF MOVWF MOVLW MOVWF CALL SWAPF ANDLW IORLW RRF RRF RRF MOVWF RRF MOVWF MOVF CALL FILTRO_BOTOES,F VARRE TEMPO_TURBO,F VARRE TURBO_TECLA TEMPO_TURBO INTENSIDADE_AQUE,F STATUS,Z INTENSIDADE_AQUE,F INTENSIDADE_AQUE,W mulplr .10 mulcnd mpy_F L_byte,W B'00110000' B'00001111' H_byte,F L_byte,F H_byte,F CCP1CON L_byte,W CCPR1L INTENSIDADE_AQUE,W AJUSTE_DECIMAL RS 0XC1 ESCREVE RS CENTENA,W 0X30 ESCREVE DEZENA,W 0X30 ESCREVE UNIDADE,W 0X30 ESCREVE VARRE ; FIM DO FILTRO ? (RUIDO?) ; N O - VOLTA P/ VARRE ; SIM - BOT O PRESSIONADO ; FIM DO TEMPO DE TURBO ? ; N O - VOLTA P/ VARRE ; SIM ; RECARREGA TEMPORIZADOR DO TURBO ; DAS TECLAS ; PODE DECREMENTAR PWM DO AQUECEDOR ? ; SIM - DECREMENTA INTENSIDADE_AQUE ; N O ; CARREGA INTENSIDADE_AQUE NO WORK ; CARREGA WORK EM mulplr ; CARREGA 10d EM mulcnd ; CHAMA ROTINA DE MULTIPLICA O

; CARREGA NO WORK O VALOR DE FILTRO_TECLA ; SALVA EM FILTRO_BOTOES ; RECARREGA FILTRO P/ EVITAR RUIDOS ; CARREGA TEMPO DO TURBO DAS TECLAS ; COM 1 - IGNORA O TURBO A PRIMEIRA ; VEZ QUE A TECLA PRESSIONADA ; VOLTA PARA VARRER TECLADO

GOTO

VARRE

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * TRATAMENTO DOS BOT ES * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ************************* TRATAMENTO DO BOT O 0 *************************** TRATA_BOTAO_0 DECFSZ GOTO DECFSZ GOTO MOVLW MOVWF MOVLW XORWF BTFSS INCF MOVF MOVWF MOVLW MOVWF CALL SWAPF ANDLW IORLW RRF RRF RRF MOVWF RRF MOVWF MOVF CALL BCF MOVLW CALL BSF MOVF ADDLW CALL MOVF ADDLW CALL MOVF ADDLW CALL FILTRO_BOTOES,F VARRE TEMPO_TURBO,F VARRE TURBO_TECLA TEMPO_TURBO .100 INTENSIDADE_AQUE,W STATUS,Z INTENSIDADE_AQUE,F INTENSIDADE_AQUE,W mulplr .10 mulcnd mpy_F L_byte,W B'00110000' B'00001111' H_byte,F L_byte,F H_byte,F CCP1CON L_byte,W CCPR1L INTENSIDADE_AQUE,W AJUSTE_DECIMAL RS 0XC1 ESCREVE RS CENTENA,W 0X30 ESCREVE DEZENA,W 0X30 ESCREVE UNIDADE,W 0X30 ESCREVE ; FIM DO FILTRO ? (RUIDO?) ; N O - VOLTA P/ VARRE ; SIM - BOT O PRESSIONADO ; FIM DO TEMPO DE TURBO ? ; N O - VOLTA P/ VARRE ; SIM ; RECARREGA TEMPORIZADOR DO TURBO ; DAS TECLAS

; ATUALIZA REGISTRADORES DO DUTY CYCLE ; DO M DULO CCP1 - PWM DO AQUECEDOR ; FAZ O AJUSTE DECIMAL DA INTENSIDADE ; DO PWM DO AQUECEDOR ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 1 SELECIONA O DISPLAY P/ DADOS

; PODE INCREMENTAR PWM DO AQUECEDOR ? ; SIM - INCREMENTA INTENSIDADE_AQUE ; N O ; CARREGA INTENSIDADE_AQUE NO WORK ; CARREGA WORK EM mulplr ; CARREGA 10d EM mulcnd ; CHAMA ROTINA DE MULTIPLICA O

BCF MOVLW CALL BSF MOVF ADDLW CALL MOVF ADDLW CALL MOVF ADDLW CALL GOTO

; FAZ AJUSTE ASCII DA CENTENA ; ESCREVE VALOR NO LCD ; FAZ AJUSTE ASCII DA DEZENA ; ESCREVE VALOR NO LCD ; FAZ AJUSTE ASCII DA UNIDADE ; ESCREVE VALOR NO LCD ; VOLTA P/ VARREDURA DOS BOT ES

; ************************* TRATAMENTO DO BOT O 2 *************************** ; ATUALIZA REGISTRADORES DO DUTY CYCLE ; DO M DULO CCP1 - PWM DO AQUECEDOR ; FAZ O AJUSTE DECIMAL DA INTENSIDADE ; DO PWM DO AQUECEDOR ; ; ; ; SELECIONA O DISPLAY P/ COMANDOS COMANDO PARA POSICIONAR O CURSOR LINHA 1 / COLUNA 1 SELECIONA O DISPLAY P/ DADOS TRATA_BOTAO_2 DECFSZ GOTO DECFSZ GOTO MOVLW MOVWF MOVLW XORWF BTFSS INCF MOVF MOVWF ; FAZ AJUSTE ASCII DA UNIDADE ; ESCREVE VALOR NO LCD Pgina 11 MOVLW MOVWF FILTRO_BOTOES,F VARRE TEMPO_TURBO,F VARRE TURBO_TECLA TEMPO_TURBO .100 INTENSIDADE_VENT,W STATUS,Z INTENSIDADE_VENT,F INTENSIDADE_VENT,W mulplr .10 mulcnd ; FIM DO FILTRO ? (RUIDO?) ; N O - VOLTA P/ VARRE ; SIM - BOT O PRESSIONADO ; FIM DO TEMPO DE TURBO ? ; N O - VOLTA P/ VARRE ; SIM ; RECARREGA TEMPORIZADOR DO TURBO ; DAS TECLAS ; PODE INCREMENTAR PWM DO VENTILADOR ? ; SIM - INCREMENTA INTENSIDADE_VENT ; N O ; CARREGA INTENSIDADE_VENT NO WORK ; CARREGA WORK EM mulplr ; CARREGA 10d EM mulcnd Pgina 12

; FAZ AJUSTE ASCII DA CENTENA ; ESCREVE VALOR NO LCD ; FAZ AJUSTE ASCII DA DEZENA ; ESCREVE VALOR NO LCD

asm2-e10 CALL SWAPF ANDLW IORLW RRF RRF RRF MOVWF RRF MOVWF GOTO mpy_F L_byte,W B'00110000' B'00001111' H_byte,F L_byte,F H_byte,F CCP2CON L_byte,W CCPR2L VARRE ; CHAMA ROTINA DE MULTIPLICA O DT DT DT DT DT DT

asm2-e10 065,066,066,067,067,068,068,069,069,070,070,071,071,072,072,073 ;175 073,074,074,075,075,076,076,077,077,078,078,079,079,080,080,081 ;191 081,082,082,083,083,084,084,085,085,086,086,087,087,088,088,089 089,090,090,091,091,092,092,093,093,094,094,095,095,096,096,097 097,098,098,099,099,100,100,101,101,102,102,103,103,104,104,104 105,105,106,106,107,107,108,108,109,109,110,110,111,111,112,112 ;207 ;223 ;239 ;255

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * FIM DO PROGRAMA * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ATUALIZA REGISTRADORES DO DUTY CYCLE ; DO M DULO CCP2 - PWM DO VENTILADOR ; VOLTA P/ VARREDURA DOS BOT ES END ; FIM DO PROGRAMA

; ************************* TRATAMENTO DO BOT O 3 *************************** TRATA_BOTAO_3 DECFSZ GOTO DECFSZ GOTO MOVLW MOVWF MOVF BTFSS DECF MOVF MOVWF MOVLW MOVWF CALL SWAPF ANDLW IORLW RRF RRF RRF MOVWF RRF MOVWF GOTO FILTRO_BOTOES,F VARRE TEMPO_TURBO,F VARRE TURBO_TECLA TEMPO_TURBO INTENSIDADE_VENT,F STATUS,Z INTENSIDADE_VENT,F INTENSIDADE_VENT,W mulplr .10 mulcnd mpy_F L_byte,W B'00110000' B'00001111' H_byte,F L_byte,F H_byte,F CCP2CON L_byte,W CCPR2L VARRE ; FIM DO FILTRO ? (RUIDO?) ; N O - VOLTA P/ VARRE ; SIM - BOT O PRESSIONADO ; FIM DO TEMPO DE TURBO ? ; N O - VOLTA P/ VARRE ; SIM ; RECARREGA TEMPORIZADOR DO TURBO ; DAS TECLAS ; PODE DECREMENTAR PWM DO VENTILADOR ? ; SIM - DECREMENTA INTENSIDADE_VENT ; N O ; CARREGA INTENSIDADE_VENT NO WORK ; CARREGA WORK EM mulplr ; CARREGA 50d EM mulcnd ; CHAMA ROTINA DE MULTIPLICA O

; ATUALIZA REGISTRADORES DO DUTY CYCLE ; DO M DULO CCP2 - PWM DO VENTILADOR ; VOLTA P/ VARREDURA DOS BOTOES

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * TABELAS DE CONVERSAO P/ TEMPERATURA DO DIODO * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ORG RADIX 0X200 DEC ; POSICIONA O INICIO DA TABELA EM 0X400 ; CONFIGURA RADIX EM DECIMAL

TABELA_TEMPERATURA MOVLW HIGH TABELA_TEMP MOVWF PCLATH MOVLW LOW TABELA_TEMP ADDWF TEMPERATURA,W BTFSC STATUS,C INCF PCLATH,F MOVWF PCL TABELA_TEMP DT DT DT DT DT DT DT DT DT DT

; ; ; ; ; ; ;

ACERTA VALOR DO PCLATH CARREGA NO WORK PARTE BAIXA DO PC SOMA AO DESLOCAMENTO (TEMPERATURA) HOUVE ESTOURO ? SIM - INCREMENTA PCLATH (PARTE ALTA DO PC) MOVE WORK P/ PCL PROVOCA UM SALTO ;15 ;31 ;47 ;63 ;79 ;95 ;111 ;127

000,000,000,000,000,000,000,000,000,000,000,000,000,000,010,000 000,000,000,000,000,000,000,000,000,000,000,000,000,000,001,001 002,002,003,003,004,004,005,005,006,006,007,007,008,008,009,009 010,010,011,011,012,012,013,013,014,014,015,015,016,016,017,017 018,018,019,019,020,020,021,021,022,022,023,023,023,024,024,025 025,026,026,027,027,028,028,029,029,030,030,031,031,032,032,033 033,034,034,035,035,036,036,037,037,038,038,039,039,040,040,041 041,042,042,043,043,044,044,045,045,046,046,047,047,048,048,049

049,050,050,051,051,052,052,053,053,054,054,055,055,056,056,057 ;143 057,058,058,059,059,060,060,061,061,062,062,063,063,064,064,065 ;159 Pgina 13

Pgina 14