Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* TITULO: CONTROLADOR DA SALA INTELIGENTE *
- ;* *
- ;* *
- ;* DESENVOLVIDO PELO GRUPO: *
- ;* => WANDERLEY JOSE ROMUALDO DA SILVA FILHO *
- ;* => BIANCA N. DE SANTA CRUZ OLIVEIRA *
- ;* => EMERSON LIMA *
- ;* VERSÃO: 1.0 DATA:7/11/2018 *
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
- ;* DESCRIÇÃO DO ARQUIVO
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
- ;* CONTROLE DE DA VELOCIDADE DE UM VENTILADOR EM FUNÇÃO
- ;* DA DADOS DO AMBIENTE, ATRAVÉS DE UM SINAL PWM
- ; E CONTROLE DA LUMINOSIDADE ATRAVÉS DE UM LDR
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* 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 S 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
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* 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ÁVEIS AUXILIARES
- AUX2
- AUXILIAR2
- DADOS
- 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' ;VARÍAVEIS PARA COMPARAÇÃO DA DADOS
- TEMP_25 EQU B'00110100'
- TEMP_30 EQU B'00111110'
- ESCURO EQU B'00110010' ;VARÍAVEIS PARA COMPARAÇÃO DA LUMINOSIDADE
- CLARO EQU B'00100111'
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;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
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* 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 ARCOND PORTB,2 ;LED QUE INDICA SE O ARCONDICIONADO ESTA LIGADO
- #DEFINE L1 PORTB,4 ;LUMINÁRIA 1
- #DEFINE L2 PORTB,5 ;LUMINÁRIA 2
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* 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
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- BTFSS PFLAG ;OCORREU UMA INTERRUPÇÃO PELA PARTIDA?
- GOTO SAI_INT ;NÃO. ENTÃO OCORREU OUTRO TIPO DE INTERRUPÇÃO
- BCF PFLAG
- BSF POWER
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* 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 .245 ;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 DADOS FORNECIDA PELO CONVERSOR
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- LIGA_AD ;INICIO DA ROTINA QUE LER A DADOS
- BANK0
- 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 DADOS ;TRANSFERIDO P/VARIÁVEL DADOS
- MOVWF AUX1 ; COM CÓPIA EM AUX1
- MOVWF AUX2 ; COM CÓPIA EM AUX2
- BANK0
- MOVWF PORTD ; APRESENTAR A DADOS NA SAIDA (PORTD)
- RETURN
- ;********* VERIFICAR QUAL A FAIXA DE A DADOS DO AMBIENTE ********
- TESTAR_TEMP
- MOVLW TEMP_20 ;TESTAR SE A DADOS ESTA A 20ºC
- BANK1
- SUBWF DADOS
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A DADOS É MAIOR QUE 20
- GOTO SET_PWM10 ;SE NÃO, SETA PWM 0
- ;SE SIM, TESTA SE É MAIOR QUE 25
- MOVLW TEMP_25 ; CONVERSÃO AD, DA DADOS 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 DADOS É MAIOR QUE 25
- GOTO SET_PWM50 ;SE NÃO, SETA PWM 50
- BANK0
- BSF ARCOND ;LIGA O ARCONDICIONADO
- BANK1
- MOVLW TEMP_30 ;SE SIM, TESTA SE É MAIOR QUE 30
- SUBWF AUX2 ;CONVERSÃO AD DA DADOS MAIOR QUE 30C
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE A DADOS É MAIOR QUE 30
- GOTO SET_PWM75 ;SE NÃO, SETA PWM COM 75%
- MOVLW .230 ;SE SIM, DADOS MAIOR QUE 25, SETA PWM COM 90% E RETORNA
- BANK0
- MOVWF PWM
- RETURN
- SET_PWM10 ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
- BANK0
- MOVLW .25
- MOVWF PWM
- BCF ARCOND
- RETURN
- SET_PWM50 ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
- BANK0
- MOVLW .128
- MOVWF PWM
- BCF ARCOND
- RETURN
- SET_PWM75 ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
- BANK0
- MOVLW .192
- MOVWF PWM
- RETURN
- TESTAR_LUM
- MOVLW CLARO ;TESTA SE ESTA CLARO
- BANK1
- SUBWF DADOS
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE ESTA CLARO
- GOTO DESLIGA_LUM ;SE SIM, DESLIGA TODAS AS LUMINARIAS
- ;SE NÃO, TESTA SE ESTA ESCURO
- MOVLW ESCURO ;MOVE A VÁRIÁVEL ESCURO PARA O TESTE
- SUBWF AUX1 ;AUX 1 TAMBÉM GUARDA O VALOR DA ULTIMA CONVERSÃO
- BTFSS CARRY ;VERIFICA SE HOUVE CARRY INDICANDO QUE ESTA ESCURO
- GOTO LIGA_L1 ;SE NÃO, SÓ LIGA L1
- BANK0
- BSF L1 ;SE SIM, LIGA TODAS AS LUMINÁRIAS
- BSF L2
- RETURN
- DESLIGA_LUM ;DESIGA TODAS AS LUMINÁRIAS
- BANK0
- BCF L1
- BCF L2
- RETURN
- LIGA_L1 ;LIGA APENAS A LUMINÁRIA L1
- BANK0
- BSF L1
- BCF L2
- RETURN
- ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* INICIO DO PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;CONFIGURAÇÕES DE OPERAÇÃO DO MICROCONTROLADOR
- INICIO
- BANK1 ;ALTERA PARA O BANCO 1
- MOVLW B'00111111' ;IN: RA0,RA1,RA2,RA3,RA4
- MOVWF TRISA ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA A
- MOVLW B'00000001' ;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'10010000'
- MOVWF INTCON ;DEFINE OPÇÕES DE INTERRUPÇÃO
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;CONFIGURAÇÃO DO CONVERSOR AD. PAG.:127. DATASHEET
- BANK1
- MOVLW B'10001110' ; 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
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* INICIALIZAÇÃO DAS VARIÁVEIS *
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- CALL LIMPA_TUDO ;CONDIÇÕES INICIAIS
- MAIN
- TESTAR_PARTIDA
- SLEEP ;ESPERAR PATIDA SER ATIVADA
- NOP ; SEGUE O PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* ROTINA PRINCIPAL
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- LOOP
- CALL LIGA_AD ;LER DADOS DIRETAMENTE DO CONVERSOR
- CALL TESTAR_TEMP ;VERIFICAR A FAIXA DA DADOS LIDA
- BSF ADCON0,3 ;ALTERA O ADC PARA LER RB1
- CALL DELAY ;AGUARDA 1 SEGUNDO PARA A PRÓXIMA CONVERSÃO
- CALL LIGA_AD
- CALL TESTAR_LUM ;VERIFICAR A FAIXA DA DADOS LIDA
- CALL DELAY ;AGUARDA 1 SEGUNDO PARA A PRÓXIMA CONVERSÃO
- BCF ADCON0,3 ;ALTERA O ADC PARA LER RB0
- GOTO LOOP
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- ;* FIM DO PROGRAMA
- ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement