Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* TITULO: MODELO (ACIONADOR DE AÇÃO PROGRAMÁVEL) *
- ;* *
- ;* *
- ;* DESENVOLVIDO PELO GRUPO: *
- ;* => GABRIEL MELO *
- ;* => JONATAS VICENTE *
- ;* => *
- ;* VERSÃO: 1.0 DATA:19/11/2018 *
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
- ;* DESCRIÇÃO DO ARQUIVO
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
- ;* CONTROLE DA VELOCIDADE DE UM VENTILADOR EM FUNÇÃO
- ;* DA TEMPERATURA DO AMBIENTE, ATRAVÉS DE UM SINAL PWM
- ;
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* ARQUIVOS DE DEFINIÇÕES
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- #INCLUDE <P16F877A.INC> ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A
- __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* PAGINAÇÃO DE MEMÓRIA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DE COMANDOS PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
- #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK 0 DE MEMÓRIA
- #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK 1 DE MEMÓRIA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* DEFINIÇÕES GERAIS E FLAGS
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ; MNEMÔNICOS PARA ACESSO A BITS DE REGISTRADORES ESPECIAIS#DEFINE
- #DEFINE TFLAG INTCON, TMR0IF ;FLAG DE ESTOURO DO TIMER 0
- #DEFINE PFLAG INTCON, INTF ;FLAG DE INTERRUPÇÃO EM RB0
- #DEFINE CONV ADCON0,2 ;BIT QUE CONTROLA O INICIO/FIM DA CONVERSÃO
- #DEFINE PWM CCPR1L ;VARIAVEL COMPRIMENTO DO PULSO DO PWM
- #DEFINE CARRY STATUS,C ;FLAG QUE INDICA CARRY OUT
- #DEFINE TEMP ADRESL ;VARIÁVEL QUE GUARDA PARTE DA CONVERSÃO
- ;IMPORTANTE
- ;CHECAR AS DEFINIÇÕES ABAIXO QUE SÃO REFERENTES AO PIC16F628A
- #DEFINE TMHAB INTCON, TMROIE ;HABILITA A INTERRUPÇÃO DO TIMER
- #DEFINE PRESENCA_FLAG INTCON, RBIF ;FLAG SINALIZADOR DE INT DE RB4_RB7
- #DEFINE HGINT INTCON, GIE ;HABILITACAO GERAL
- #DEFINE HINTE INTCON, INTE ;HABILITACAO DA INT EXTERN
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* VARIÁVEIS
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DO BLOCO DE VARIÁVEIS
- CBLOCK 0x20 ;ENDEREÇO INICIAL DA MÉMORIA DO USUÁRIO
- W_TEMP ;REGISTROS TEMPORÁRIOS PARA USO JUNTO AS
- STATUS_TEMP ;INTERRUPÇÕES
- AUX1 ;VARIÁVEL TEMPORÁRIA
- AUXILIAR2
- TEMPERATURA
- LUMINOSIDADE
- AUX2
- ENDC ;FIM DE BLOCO DE VARIÁVEIS
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* CONSTANTES
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;DEFINIÇÃO DAS CONSTANTES UTILIZADAS NO PROGRAMA
- ;BASE DE TEMPO DO TIMER SERÁ DE 10HZ. O DELAY CALCULADO USANDO A
- ;EXPRESSÃO: D=((CONTMAX - N)*PRESCALER)/F;
- ; D= DELAY DESEJADO EM SEGUNDO, N= CONSTANTE A SER COLOCADO TIMER
- ;F= FREQUENCIA DO OSCILADOR EXERNO EM HERTZ , CONTMAX = 256 PARA TMR0
- DELAY_1S EQU .246 ;DELAY DE 1 SEGUNDO COM F=10HZ
- DELAY_2S EQU .236 ;DELAY DE 2 SEGUNDOS COM F=10HZ
- TEMP_20 EQU B'00101001'
- TEMP_25 EQU B'00110100'
- SOMBRA EQU B'00110100'
- ESCURO EQU B'00101001'
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;PARA ESCREVER EM HEXA: 0x1F
- ;PARA ESCREVER EM DECIMAL: .132
- ;PARA ESCREVER EM BINÁRIO: B'10010000'
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* ENTRADAS
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA
- #DEFINE PARTIDA PORTB,0 ;BOTÃO DE PARTIDA
- #DEFINE PRESENCA PORTB,4
- #DEFINE LDR PORTA,1
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* SAÍDAS +
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
- #DEFINE POWER PORTB,1 ;INDICA QUE O PIC ESTA LIGADO
- #DEFINE LUMINARIA1 PORTB,2
- #DEFINE LUMINARIA2 PORTB,3
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* VETOR DE RESET
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ORG 0x00 ;ENDEREÇO INICIAL DE PROCESSAMENTO
- GOTO INICIO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* INÍCIO DA INTERRUPÇÃO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ORG 0x04 ;ENDEREÇO INICIAL DA INTERRUPÇÃO
- MOVWF W_TEMP ;COPIA W PARA W_TEMP
- SWAPF STATUS,W
- MOVWF STATUS_TEMP ;COPIA STATUS PARA STATUS_TEMP
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* ROTINA DE ATENDIMENTO DA INTERRUPÇÃO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- BTFSC PFLAG ;OCORREU UMA INTERRUPÇÃO PELA PARTIDA?
- GOTO TRATA_PFLAG ;TRATA INTERRUPÇÃO DE PFLAG
- BTFSC PRESENCA
- GOTO TRATA_PRESENCA_FLAG
- BANK0
- MOVLW .0
- MOVWF PWM
- BCF LUMINARIA1
- BCF LUMINARIA2
- SLEEP
- GOTO SAI_INT
- TRATA_PFLAG
- BCF PFLAG
- BSF POWER
- GOTO SAI_INT
- TRATA_PRESENCA_FLAG
- BCF PRESENCA_FLAG
- GOTO SAI_INT
- TRATA_PRESENCA
- GOTO CHECAR_LUMINOSIDADE
- RETURN
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* SAÍDA DA INTERRUPÇÃO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- SAI_INT
- SWAPF STATUS_TEMP,W
- MOVWF STATUS ;MOVE STATUS_TEMP PARA STATUS
- SWAPF W_TEMP,W ;MOVE W_TEMP PARA W
- RETFIE
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* DEFINIÇÃO DE ROTINAS E SUB-ROTINAS:
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- LIMPA_TUDO ;CONDIÇÕES INICIAIS
- CLRF PORTA ;ZERAR PORTA A
- CLRF PORTB ;ZERAR PORTA B
- CLRF PORTC ;ZERAR PORTA C
- BANK0
- MOVLW .0 ; INICIAR PWM EM ZERO
- MOVWF PWM
- RETURN
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- DELAY ;ROTINA DE 1 SEGUNDOS
- CLRF TMR0
- BCF TFLAG ;LIMPA O FLAG DE ESTOURO DE CONTAGEM DO TMR0
- MOVLW .254 ;MOVE O VALOR DE DELAY DE 1 SEG PARA W
- MOVWF TMR0 ;MOVE O VALOR DE DELAY DE 1 SEG PARA TMR0
- DELAY1
- BTFSS TFLAG ;A CONTAGEM DE 1 SEGUNDO TERMINOU?
- GOTO DELAY1 ;NÃO, VOLTA PARA TESTAR
- RETURN
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ; LEITURA DA TEMPERATURA FORNECIDA PELO CONVERSOR
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- LER_LDR
- BANK0
- MOVLW B'10001101'
- MOVWF ADCON0
- BSF CONV ;INICIA CONVERSÃO
- BTFSC CONV ;TESTA FIM DA CONVERSÃO
- GOTO $-1 ;SE NÃO TERMINOU, VOLTA A TESTAR
- BANK1
- MOVF TEMP, W ;RESULTADO DA CONVERSÃO EM W E,
- MOVWF LUMINOSIDADE ;TRANSFERIDO P/VARIÁVEL LUMINOSIDADE
- MOVWF AUX2 ; COM CÓPIA EM AUX2
- BANK0
- RETURN
- LER_TEMP ;INICIO DA ROTINA QUE LER A TEMPERATURA
- BANK0
- MOVLW B'10000101'
- MOVWF ADCON0
- BSF CONV ;INICIA CONVERSÃO
- BTFSC CONV ;TESTA FIM DA CONVERSÃO
- GOTO $-1 ;SE NÃO TERMINOU, VOLTA A TESTAR
- BANK1
- MOVF TEMP, W ;RESULTADO DA CONVERSÃO EM W E,
- MOVWF TEMPERATURA ;TRANSFERIDO P/VARIÁVEL TEMPERATURA
- MOVWF AUX1 ; COM CÓPIA EM AUX1
- BANK0
- RETURN
- ;********* VERIFICAR QUAL A FAIXA DE A TEMPERATURA DO AMBIENTE ********
- TESTAR_TEMP
- MOVLW TEMP_20 ;TESTAR SE A TEMPERATURA ESTA A 20ºC
- BANK1
- SUBWF TEMPERATURA
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A TEMPERATURA É MAIOR QUE 20
- GOTO SET_PWM0 ;SE NÃO, SETA PWM 0
- ;SE SIM, TESTA SE É MAIOR QUE 25
- MOVLW TEMP_25 ; CONVERSÃO AD, DA TEMPERATURA DE 25ºC
- SUBWF AUX1 ;AUX 1 TAMBÉM GUARDA O VALOR DA ULTIMA CONVERSÃO
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A TEMPERATURA É MAIOR QUE 25
- GOTO SET_PWM50 ;SE NÃO, SETA PWM 50
- MOVLW .240 ;SE SIM, TEMPERATURA MAIOR QUE 25, SETA PWM COM 90% E RETORNA
- BANK0
- MOVWF PWM
- RETURN
- SET_PWM0
- BANK0
- MOVLW .0
- MOVWF PWM
- RETURN
- SET_PWM50
- BANK0
- MOVLW .128
- MOVWF PWM
- RETURN
- CHECAR_LUMINOSIDADE
- BTFSS PRESENCA
- GOTO TESTAR_PARTIDA
- MOVLW SOMBRA ;TESTAR SE A TEMPERATURA ESTA A 20ºC
- BANK1
- SUBWF LUMINOSIDADE
- BTFSC CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A TEMPERATURA É MAIOR QUE 20
- GOTO LUMINARIA_OFF
- MOVLW ESCURO ;CONVERSÃO AD, DA TEMPERATURA DE 25ºC
- SUBWF AUX2 ;AUX 1 TAMBÉM GUARDA O VALOR DA ULTIMA CONVERSÃO
- BTFSC CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A TEMPERATURA É MAIOR QUE 25
- GOTO LUMINARIA_PARCIAL ;SE NÃO, SETA PWM 50
- GOTO LUMINARIA_TOTAL
- LUMINARIA_OFF
- BANK0
- BCF LUMINARIA1
- BCF LUMINARIA2
- RETURN
- LUMINARIA_PARCIAL
- BANK0
- BSF LUMINARIA1
- BCF LUMINARIA2
- RETURN
- LUMINARIA_TOTAL
- BANK0
- BSF LUMINARIA1
- BSF LUMINARIA2
- RETURN
- NINGUEM
- CALL LIMPA_TUDO
- GOTO TESTAR_PARTIDA
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* INICIO DO PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;CONFIGURAÇÕES DE OPERAÇÃO DO MICROCONTROLADOR
- INICIO
- BANK1 ;ALTERA PARA O BANCO 1
- MOVLW B'00010011' ;IN: RA0,RA1,RA2,RA3,RA4
- MOVWF TRISA ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA A
- MOVLW B'00010001' ;IN:RB0. OUT:RB1,RB2,RB3,RB4,RB5,RB6,RB7
- MOVWF TRISB ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA B
- MOVLW B'00000000'
- MOVWF TRISC ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA C
- MOVLW B'00000000'
- MOVWF TRISD ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA D
- MOVLW B'11101000' ;HABILITA CLOCK EXTERNO
- MOVWF OPTION_REG ;DEFINE OPÇÕES DE OPERAÇÃO
- ;PRESCALER DE 1:1
- MOVLW B'10011001'
- MOVWF INTCON ;DEFINE OPÇÕES DE INTERRUPÇÃO
- ;RB0, RB4-7
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;CONFIGURAÇÃO DO CONVERSOR AD. PAG.:127. DATASHEET
- BANK1
- MOVLW B'10000100' ; JUSTIFICATIVA A DIREITA E
- MOVWF ADCON1 ; UMA ENTRADA ANALÓGICA: RB0
- BANK0 ;ALTERA PARA O BANCO 0
- MOVLW B'00000101' ;CANAL 0, E
- ;CONVERSAO EM ANDAMENTO ATIVADA
- MOVWF ADCON0
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;CONFIGURAÇÃO DO PWM
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- BSF T2CON,TMR2ON ;ATIVA O TIMER 2 QUE é O CLOCK DO PWM
- MOVLW B'00001100' ;ATIVAR O PWM E COLOCA O DOIS BITS MENOS
- ;SIGNIFICATVOS DO PWM PARA 00
- ;O PWM TEM 10 BITS ONDE OS OUTROS ESTÃO EM CCPR1L
- MOVWF CCP1CON ;MODO DESLIGADO
- BSF T1CON,0 ; TMR1 LIGADO ; TMR1 LIGADO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* INICIALIZAÇÃO DAS VARIÁVEIS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- CALL LIMPA_TUDO ;CONDIÇÕES INICIAIS
- MAIN
- TESTAR_PARTIDA
- BANK0
- MOVLW .0
- MOVWF PWM
- BCF LUMINARIA1
- BCF LUMINARIA2
- SLEEP ;ESPERAR PATIDA SER ATIVADA
- NOP ; SEGUE O PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* ROTINA PRINCIPAL
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- LOOP
- CALL LER_TEMP ; LER TEMPERATURA DIRETAMENTE DO CONVERSOR
- CALL LER_LDR
- CALL TESTAR_TEMP ; VERIFICAR A FAIXA DA TEMPERATURA LIDA
- CALL CHECAR_LUMINOSIDADE
- CALL DELAY
- GOTO LOOP
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* FIM DO PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement