Advertisement
Guest User

Untitled

a guest
Nov 29th, 2018
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 15.42 KB | None | 0 0
  1. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  2. ;*        TITULO: CONTROLADOR DA SALA INTELIGENTE                            *
  3. ;*                                                                                                                                            *
  4. ;*                                                                                                                   *
  5. ;*      DESENVOLVIDO PELO GRUPO:                                                                  *
  6. ;*   =>     WANDERLEY JOSE ROMUALDO DA SILVA FILHO                                                                                              *
  7. ;*   =>     BIANCA N. DE SANTA CRUZ OLIVEIRA                                                                                                              *
  8. ;*   =>     EMERSON LIMA                                                                                                            *
  9. ;*      VERSÃO: 1.0                             DATA:7/11/2018                                                            *
  10. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
  11. ;*                      DESCRIÇÃO DO ARQUIVO                                                                        
  12. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * **
  13. ;* CONTROLE DE  DA VELOCIDADE DE  UM VENTILADOR   EM FUNÇÃO                  
  14. ;* DA DADOS DO AMBIENTE, ATRAVÉS DE UM   SINAL PWM                      
  15. ;  E CONTROLE DA LUMINOSIDADE ATRAVÉS DE UM LDR                                                                                                                                            
  16. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  17. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  18. ;*                     ARQUIVOS DE DEFINIÇÕES                                                                      
  19. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  20.  
  21. #INCLUDE <P16F877A.INC>     ;ARQUIVO PADRÃO MICROCHIP PARA 16F628A
  22.  __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _HS_OSC
  23. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  24. ;*                    PAGINAÇÃO DE MEMÓRIA                                                                        
  25. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  26. ;DEFINIÇÃO DE COMANDOS  PARA ALTERAÇÃO DA PÁGINA DE MEMÓRIA
  27.  
  28. #DEFINE BANK0   BCF STATUS,RP0  ;SETA BANK 0 DE MEMÓRIA
  29. #DEFINE BANK1   BSF STATUS,RP0  ;SETA BANK 1 DE MEMÓRIA
  30. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  31. ;*                          DEFINIÇÕES GERAIS E FLAGS                              
  32. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  33. ; MNEMÔNICOS PARA ACESSO A BITS DE REGISTRADORES ESPECIAIS#DEFINE
  34. #DEFINE TFLAG INTCON,   TMR0IF  ;FLAG  DE ESTOURO DO TIMER 0
  35. #DEFINE PFLAG INTCON,   INTF        ;FLAG S DE INTERRUPÇÃO EM RB0
  36. #DEFINE CONV ADCON0,2                   ;BIT QUE CONTROLA O INICIO/FIM DA CONVERSÃO
  37. #DEFINE PWM CCPR1L                     ;VARIAVEL COMPRIMENTO DO PULSO DO PWM
  38. #DEFINE CARRY   STATUS,C              ;FLAG QUE INDICA  CARRY OUT
  39. #DEFINE TEMP    ADRESL            ;VARIÁVEL QUE GUARDA PARTE DA CONVERSÃO
  40. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  41. ;*                             VARIÁVEIS                                                              
  42. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  43. ;DEFINIÇÃO DO BLOCO DE VARIÁVEIS
  44.     CBLOCK 0x20                 ;ENDEREÇO INICIAL DA MÉMORIA DO USUÁRIO
  45.         W_TEMP                  ;REGISTROS TEMPORÁRIOS PARA USO JUNTO AS
  46.         STATUS_TEMP         ;INTERRUPÇÕES
  47.                                
  48.         AUX1                          ;VARIÁVEIS AUXILIARES
  49.         AUX2                           
  50.         AUXILIAR2
  51.         DADOS
  52.     ENDC                            ;FIM DE BLOCO DE VARIÁVEIS
  53. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  54.  
  55. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  56. ;*                              CONSTANTES                                                   
  57. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  58. ;DEFINIÇÃO DAS CONSTANTES UTILIZADAS NO PROGRAMA
  59. ;BASE DE TEMPO DO TIMER SERÁ DE 10HZ. O DELAY CALCULADO USANDO A
  60. ;EXPRESSÃO: D=((CONTMAX - N)*PRESCALER)/F;
  61. ; D= DELAY DESEJADO EM SEGUNDO, N= CONSTANTE A SER COLOCADO TIMER
  62. ;F= FREQUENCIA DO OSCILADOR EXERNO EM HERTZ , CONTMAX = 256 PARA TMR0
  63.  
  64. DELAY_1S    EQU .246        ;DELAY DE 1 SEGUNDO COM F=10HZ
  65. DELAY_2S    EQU .236        ;DELAY DE 2 SEGUNDOS COM F=10HZ
  66. TEMP_20 EQU B'00101001'     ;VARÍAVEIS PARA COMPARAÇÃO DA DADOS
  67. TEMP_25 EQU B'00110100'
  68. TEMP_30 EQU B'00111110'
  69. ESCURO  EQU B'00110010'     ;VARÍAVEIS PARA COMPARAÇÃO DA LUMINOSIDADE
  70. CLARO   EQU B'00100111'
  71. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *  
  72.  
  73.     ;PARA ESCREVER EM HEXA: 0x1F
  74.     ;PARA ESCREVER EM DECIMAL: .132
  75.     ;PARA ESCREVER EM BINÁRIO: B'10010000'
  76.  
  77. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  78. ;*                           ENTRADAS                                                                                          
  79. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  80. ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA
  81.  
  82. #DEFINE     PARTIDA     PORTB,0  ;BOTÃO DE PARTIDA
  83. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  84. ;*                           SAÍDAS                                                                                                 +
  85. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  86. ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA
  87.  
  88. #DEFINE     POWER        PORTB,1  ;INDICA QUE O PIC ESTA LIGADO
  89. #DEFINE     ARCOND       PORTB,2  ;LED QUE INDICA SE O ARCONDICIONADO ESTA LIGADO
  90. #DEFINE     L1           PORTB,4  ;LUMINÁRIA 1
  91. #DEFINE     L2           PORTB,5  ;LUMINÁRIA 2
  92. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  93. ;*                       VETOR DE RESET                                                                                    
  94. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  95.  
  96.     ORG 0x00            ;ENDEREÇO INICIAL DE PROCESSAMENTO
  97.     GOTO    INICIO
  98. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  99. ;*                       INÍCIO DA INTERRUPÇÃO                                              
  100. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  101.     ORG     0x04                    ;ENDEREÇO INICIAL DA INTERRUPÇÃO
  102.     MOVWF   W_TEMP              ;COPIA W PARA W_TEMP
  103.     SWAPF   STATUS,W   
  104.     MOVWF   STATUS_TEMP     ;COPIA STATUS PARA STATUS_TEMP
  105.  
  106. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  107. ;*                  ROTINA DE ATENDIMENTO DA INTERRUPÇÃO                       
  108. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  109.     BTFSS         PFLAG         ;OCORREU UMA INTERRUPÇÃO PELA  PARTIDA?
  110.     GOTO          SAI_INT          ;NÃO. ENTÃO OCORREU OUTRO TIPO DE INTERRUPÇÃO
  111.     BCF       PFLAG
  112.     BSF       POWER
  113.    
  114. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  115. ;*                          SAÍDA DA INTERRUPÇÃO                                              
  116. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  117. SAI_INT
  118.     SWAPF       STATUS_TEMP,W
  119.     MOVWF   STATUS      ;MOVE STATUS_TEMP PARA STATUS
  120.     SWAPF      W_TEMP,W ;MOVE W_TEMP PARA W
  121.     RETFIE 
  122. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  123. ;*    DEFINIÇÃO DE ROTINAS E SUB-ROTINAS:                                                          
  124. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  125. LIMPA_TUDO              ;CONDIÇÕES INICIAIS
  126.     CLRF    PORTA       ;ZERAR PORTA A
  127.     CLRF    PORTB       ;ZERAR PORTA B
  128.     CLRF    PORTC       ;ZERAR PORTA C
  129. BANK0                            
  130.     MOVLW .0                    ; INICIAR PWM EM ZERO  
  131.     MOVWF PWM
  132.     RETURN
  133. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  134. DELAY                       ;ROTINA DE 1 SEGUNDOS
  135.       CLRF              TMR0        ;
  136.     BCF           TFLAG     ;LIMPA O FLAG DE ESTOURO DE CONTAGEM DO TMR0
  137.     MOVLW   .245                ;MOVE O VALOR DE DELAY DE 1 SEG PARA W
  138.     MOVWF      TMR0     ;MOVE O VALOR DE DELAY DE 1 SEG PARA TMR0
  139. DELAY1 
  140.     BTFSS  TFLAG               ;A CONTAGEM DE 1 SEGUNDO TERMINOU?
  141.     GOTO    DELAY1            ;NÃO, VOLTA PARA TESTAR
  142.     RETURN
  143.    
  144. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  145. ;               LEITURA DA DADOS FORNECIDA PELO CONVERSOR
  146. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  147. LIGA_AD                               ;INICIO DA ROTINA QUE LER A DADOS
  148.     BANK0
  149.     BSF     CONV         ;INICIA CONVERSÃO
  150.     BTFSC   CONV             ;TESTA FIM DA CONVERSÃO
  151.     GOTO    $-1              ;SE NÃO TERMINOU, VOLTA A TESTAR
  152.    
  153. BANK1
  154.     MOVF         TEMP, W            ;RESULTADO DA CONVERSÃO  EM  W E,
  155.     MOVWF  DADOS                    ;TRANSFERIDO P/VARIÁVEL DADOS
  156.     MOVWF  AUX1                     ; COM CÓPIA EM AUX1
  157.     MOVWF  AUX2                     ; COM CÓPIA EM AUX2
  158.     BANK0
  159.     MOVWF   PORTD       ; APRESENTAR A DADOS NA SAIDA  (PORTD)
  160. RETURN
  161.  
  162. ;*********  VERIFICAR QUAL A FAIXA DE A DADOS DO AMBIENTE ********
  163.  
  164. TESTAR_TEMP
  165.     MOVLW   TEMP_20     ;TESTAR SE A DADOS ESTA A  20ºC
  166.     BANK1
  167.     SUBWF   DADOS
  168.     BTFSS        CARRY          ;VERIFICA SE HOUVE CARRY INDICANDO QUE A DADOS É MAIOR QUE 20
  169.     GOTO         SET_PWM10      ;SE NÃO, SETA PWM 0
  170.                                 ;SE SIM, TESTA SE É MAIOR QUE 25
  171.     MOVLW  TEMP_25      ; CONVERSÃO AD, DA DADOS DE 25ºC
  172.     SUBWF    AUX1           ;AUX 1 TAMBÉM GUARDA O VALOR DA ULTIMA CONVERSÃO
  173.     BTFSS        CARRY          ;VERIFICA SE HOUVE CARRY INDICANDO QUE A DADOS É MAIOR QUE 25
  174.     GOTO      SET_PWM50 ;SE NÃO, SETA PWM 50
  175.     BANK0
  176.     BSF     ARCOND              ;LIGA O ARCONDICIONADO
  177.     BANK1
  178.     MOVLW   TEMP_30             ;SE SIM, TESTA SE É MAIOR QUE 30
  179.     SUBWF   AUX2                ;CONVERSÃO AD DA DADOS MAIOR QUE 30C
  180.     BTFSS   CARRY               ;VERIFICA SE HOUVE CARRY INDICANDO QUE A DADOS É MAIOR QUE 30
  181.     GOTO    SET_PWM75           ;SE NÃO, SETA PWM COM 75%
  182.     MOVLW   .230            ;SE SIM, DADOS MAIOR QUE 25, SETA PWM COM 90% E RETORNA                
  183.     BANK0
  184.     MOVWF   PWM
  185.     RETURN
  186.    
  187. SET_PWM10                       ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
  188.     BANK0
  189.     MOVLW .25
  190.     MOVWF PWM
  191.     BCF   ARCOND
  192. RETURN
  193.    
  194. SET_PWM50                       ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
  195.     BANK0
  196.     MOVLW .128
  197.     MOVWF PWM
  198.     BCF   ARCOND   
  199. RETURN 
  200. SET_PWM75                       ;CONFIGURA O PWM PRA 10% DE DUTY CYCLE
  201.     BANK0
  202.     MOVLW   .192
  203.     MOVWF PWM
  204. RETURN
  205.  
  206. TESTAR_LUM
  207.     MOVLW   CLARO               ;TESTA SE ESTA CLARO
  208.     BANK1
  209.     SUBWF   DADOS
  210.     BTFSS        CARRY          ;VERIFICA SE HOUVE CARRY INDICANDO QUE ESTA CLARO
  211.     GOTO         DESLIGA_LUM    ;SE SIM, DESLIGA TODAS AS LUMINARIAS
  212.                                 ;SE NÃO, TESTA SE ESTA ESCURO
  213.     MOVLW  ESCURO               ;MOVE A VÁRIÁVEL ESCURO PARA O TESTE
  214.     SUBWF    AUX1               ;AUX 1 TAMBÉM GUARDA O VALOR DA ULTIMA CONVERSÃO
  215.     BTFSS        CARRY          ;VERIFICA SE HOUVE CARRY INDICANDO QUE ESTA ESCURO
  216.     GOTO      LIGA_L1           ;SE NÃO, SÓ LIGA L1
  217.  
  218.     BANK0
  219.     BSF     L1                  ;SE SIM, LIGA TODAS AS LUMINÁRIAS
  220.     BSF     L2
  221.     RETURN
  222.    
  223. DESLIGA_LUM                     ;DESIGA TODAS AS LUMINÁRIAS
  224.     BANK0
  225.     BCF     L1
  226.     BCF     L2
  227. RETURN
  228.    
  229. LIGA_L1                         ;LIGA APENAS A LUMINÁRIA L1
  230.     BANK0  
  231.     BSF     L1
  232.     BCF     L2
  233. RETURN 
  234.  
  235. ;;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  236. ;*                     INICIO DO PROGRAMA                                                                              
  237. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  238.  
  239. ;CONFIGURAÇÕES DE OPERAÇÃO DO MICROCONTROLADOR
  240.    
  241. INICIO
  242.     BANK1                                 ;ALTERA PARA O BANCO 1
  243.     MOVLW   B'00111111'      ;IN: RA0,RA1,RA2,RA3,RA4
  244.     MOVWF   TRISA            ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA A
  245.    
  246.     MOVLW   B'00000001'      ;IN:RB0.  OUT:RB1,RB2,RB3,RB4,RB5,RB6,RB7
  247.     MOVWF   TRISB            ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA B
  248.    
  249.     MOVLW   B'00000000'    
  250.     MOVWF   TRISC            ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA C
  251.    
  252.     MOVLW   B'00000000'    
  253.     MOVWF   TRISD            ;CONFIGURA ENTRADAS E SAÍDAS DA PORTA D
  254.                                
  255.     MOVLW   B'11101000'      ;HABILITA CLOCK EXTERNO
  256.     MOVWF   OPTION_REG   ;DEFINE OPÇÕES DE OPERAÇÃO
  257.                                                       ;PRESCALER DE 1:1
  258.  
  259.     MOVLW   B'10010000'
  260.     MOVWF   INTCON               ;DEFINE OPÇÕES DE INTERRUPÇÃO
  261.                                
  262. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  263. ;CONFIGURAÇÃO DO CONVERSOR AD. PAG.:127. DATASHEET
  264.     BANK1
  265.     MOVLW   B'10001110'     ; JUSTIFICATIVA A DIREITA  E
  266.     MOVWF   ADCON1           ; UMA ENTRADA ANALÓGICA: RB0
  267.    
  268.     BANK0                           ;ALTERA PARA O BANCO 0 
  269.     MOVLW   B'00000101'     ;CANAL 0, E
  270.                                 ;CONVERSAO  EM ANDAMENTO ATIVADA
  271.     MOVWF   ADCON0
  272. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *    
  273. ;CONFIGURAÇÃO DO PWM
  274. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  275.     BSF     T2CON,TMR2ON    ;ATIVA O TIMER 2 QUE é O CLOCK DO PWM     
  276.    
  277.     MOVLW B'00001100'           ;ATIVAR O PWM E COLOCA O DOIS BITS MENOS
  278.                             ;SIGNIFICATVOS DO PWM PARA 00
  279.                             ;O PWM TEM 10 BITS ONDE OS OUTROS ESTÃO EM CCPR1L
  280.     MOVWF   CCP1CON  ;MODO DESLIGADO
  281.     BSF     T1CON,0    ; TMR1 LIGADO
  282.  
  283. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  284.  
  285. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  286. ;*                     INICIALIZAÇÃO DAS VARIÁVEIS                                                           *
  287. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  288.     CALL    LIMPA_TUDO        ;CONDIÇÕES INICIAIS
  289.  
  290. MAIN   
  291.  
  292. TESTAR_PARTIDA
  293.     SLEEP                                  ;ESPERAR PATIDA SER ATIVADA
  294.     NOP                                      ; SEGUE O PROGRAMA
  295.    
  296. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  297. ;*                     ROTINA PRINCIPAL                                                                                  
  298. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *  
  299. LOOP
  300.     CALL    LIGA_AD         ;LER DADOS  DIRETAMENTE DO CONVERSOR
  301.     CALL    TESTAR_TEMP     ;VERIFICAR A FAIXA DA DADOS LIDA
  302.     BSF     ADCON0,3        ;ALTERA O ADC PARA LER RB1
  303.     CALL    DELAY           ;AGUARDA 1 SEGUNDO PARA A PRÓXIMA CONVERSÃO
  304.     CALL    LIGA_AD        
  305.     CALL    TESTAR_LUM     ;VERIFICAR A FAIXA DA DADOS LIDA
  306.     CALL    DELAY          ;AGUARDA 1 SEGUNDO PARA A PRÓXIMA CONVERSÃO
  307.     BCF     ADCON0,3       ;ALTERA O ADC PARA LER RB0
  308.     GOTO LOOP
  309.    
  310. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  311. ;*                       FIM DO PROGRAMA                                                                              
  312.    
  313. ;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * *
  314. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement