Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ***************************************
  2. ; PROJETO 2 - MICROCOMPUTADORES         *
  3. ;                                       *
  4. ; MCU: PIC16F877A   CLOCK: 4MHZ         *
  5. ;                                       *
  6. ; AUTORES: DAVID RIFF DE F. TENORIO     *
  7. ;          DIEGO MAIA HAMILTON          *
  8. ;                                       *
  9. ; VERSAO: 1.0 (COM INTERRUPÇÃO)         *
  10. ; DATA: NOVEMBRO DE 2018                *
  11. ; ***************************************
  12.  
  13. #INCLUDE <P16F628A.INC>
  14.  
  15.     LIST        P=16F877A
  16.  
  17. ; --- FUSE BITS ---
  18.     __CONFIG     _BOREN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON
  19.  
  20. ; --- PAGINACAO DE MEMORIA ---
  21. BANK0   MACRO
  22.         BCF     STATUS, RP0
  23.         BCF     STATUS, RP1
  24.         ENDM
  25.  
  26. BANK1   MACRO
  27.         BSF     STATUS, RP0
  28.         BCF     STATUS, RP1
  29.         ENDM
  30.  
  31. BANK2   MACRO
  32.         BCF     STATUS, RP0
  33.         BSF     STATUS, RP1
  34.         ENDM
  35.  
  36. BANK3   MACRO
  37.         BSF     STATUS, RP0
  38.         BSF     STATUS, RP1
  39.         ENDM              
  40.  
  41. ; --- CONSTANTES ---
  42. DELAY_1S    EQU     D'246'
  43.  
  44. ; --- ENTRADAS ---
  45. #DEFINE     PRESENCA        PORTB, RB0   ; ENTRADA DIGITAL COM INTERRUPCAO
  46. #DEFINE     TEMPERATURA     PORTA, RA0   ; ENTRADA ANALOGICA
  47. #DEFINE     LUMINOSIDADE    PORTA, RA1   ; ENTRADA ANALOGICA
  48. #DEFINE     PARTIDA         PORTB, RB1   ; ENTRADA DIGITAL
  49.  
  50. ; --- SAIDAS ---
  51. #DEFINE     VENTILADOR      PORTC, RC0   ; SAIDA PWM
  52. #DEFINE     ARCONDICIONADO  PORTB, RB2   ; DIGITAL
  53. #DEFINE     LUZ1            PORTB, RB3   ; DIGITAL
  54. #DEFINE     LUZ2            PORTB, RB4   ; DIGITAL
  55. #DEFINE     ON              PORTB, RB5   ; DIGITAL
  56.  
  57. ; --- DEFINICOES GERAIS ---
  58. #DEFINE     THAB        INTCON, TOIE     ; HABILITA INTERRUPCAO
  59. #DEFINE     TFLAG       INTCON, T0IF     ; TIMER OVERFLOW
  60. #DEFINE     EXTFLAG     INTCON, INTF     ; INTERRUPCAO EXTERNA
  61. #DEFINE     RFLAG       INTCON, RBIF     ; INTERRUPCAO DE MUDANCA DE ESTADO RB4 - RB7
  62. #DEFINE     ZERO        STATUS, Z        ; RESULTADO DA ULTIMA OPERACAO FOI 0
  63. #DEFINE     PWM_VAL     CCPR1L           ; COMPRIMENTO DO PULSO DO PWM
  64. #DEFINE     START_CONV  ADCON0,2         ; BIT DE CONTROLE DA CONVERSÃO A/D
  65.  
  66.  
  67. ; --- REGISTRADORES DE USO GERAL ---
  68.     CBLOCK 0X20
  69.  
  70.     ENDC
  71.  
  72. ; --- VETOR DE RESET ---
  73.     ORG         H'0000'                 ; ORIGEM NO ENDERECO 0 DE MEMORIA
  74.     GOTO        SETUP                   ; DESVIA DO VETOR DE INTERRUPCAO
  75.  
  76. ; --- VETOR DE INTERRUPCAO ---           
  77.     ORG         H'0004'
  78.  
  79. ; --- SALVA CONTEXTO ---
  80.     MOVWF       W_TEMP                  ; COPIA O CONTE�DO DE WORK PARA W_TEMP
  81.     SWAPF       STATUS, W                ; MOVE O CONTE�DO DE STATUS COM OS NIBBLES INVERTIDOS PARA W
  82.     BANK0                               ; SELECIONA O BANCO 0 DE MEM�RIA
  83.     MOVWF       STATUS_TEMP             ; COPIA O CONTE�DO DE STATUS COM OS NIBBLES INVERTIDOS PARA STATUS_TEMP
  84.  
  85. ; --- TRATAMENTO DA ISR ---
  86.  
  87. ; --- RECUPERACAO DE CONTEXTO ---
  88. EXIT_ISR:
  89.     SWAPF       STATUS_TEMP, W_TEMP      ; COPIA EM W O CONTEÚDO DE STATUS_TEMP COM OS NIBBLES INVERTIDOS
  90.     MOVWF       STATUS                  ; RECUPERANDO O CONTEÚDO DE STATUS
  91.     SWAPF       W_TEMP, F                ; W_TEMP = W_TEMP COM OS NIBBLES INVERTIDOS
  92.     SWAPF       W_TEMP, W                ; RECUPERA O CONTEÚDO DE WORK
  93.  
  94.     RETFIE
  95.  
  96. ; --- SUBROTINAS ---
  97.  
  98.  
  99. ; --- PROGRAMA PRINCIPAL ---
  100. SETUP:
  101.     ; -- CONFIGURAÇÃO DO CONVERSOR A/D --
  102.     BANKSEL     PORTA                   ; SELECIONA BANK0
  103.     CLRF        PORTA                   ; LIMPA OS OUTPUTS NA PORTA
  104.     BANKSEL     ADCON1                  ; SELECIONA O BANK1
  105.     MOVLW       B'10000100'             ; CONFIGURA RA<1:0> COMO ENTRADAS ANALOGICAS, VDD/VSS COMO REFERENCIA
  106.                                         ; CONFIGURA FOSC/2
  107.                                         ; CONFIGURA JUSTIFICADO A DIREITA
  108.     MOVWF       ADCON1
  109.     BANKSEL     TRISA
  110.     MOVLW       0x03                    ; CONFIGURA RA<1:0> COMO INPUTS
  111.     MOVWF       TRISA            
  112.  
  113.     BANKSEL     ADCON0
  114.     CLRF        ADCON0                  ; CONFIGURA FOSC/2              
  115.  
  116.     ; -- CONFIGURAÇÃO DO PWM --
  117.     BANKSEL     T1CON
  118.     MOVLW       B'00001001'             ; ATIVA TIMER1, CLOCK INTERNO (FOSC/4), SEM PRESCALER
  119.     MOVWF       T1CON
  120.     MOVLW       B'00001100'             ; CONFIGURA 2 LSB DO DUTY CYCLE DO PWM PARA 0
  121.                                         ; CONFIGURA TIMER 1 NO MODO PWM
  122.     MOVWF       CCP1CON
  123.  
  124.     ; -- CONFIGURAÇÃO DE I/O --
  125.     BANKSEL     PORTB                   ; SELECIONA BANK0
  126.     CLRF        PORTB                   ; LIMPA SAIDAS EM PORTB
  127.     BANKSEL     TRISB
  128.     MOVLW       0x03
  129.     MOVWF       TRISB                   ; CONFIGURA RB<1:0> COMO INPUTS
  130.  
  131.     BANKSEL     INTCON
  132.     MOVLW       0x00
  133.     MOVWF       INTCON                  ; INICIA COM TODAS AS INTERRUPCOES DESATIVADAS
  134.  
  135.     BANKSEL     PORTC
  136.     CLRF        PORTC
  137.     BANKSEL     TRISC
  138.     CLRF        TRISC                   ; CONFIGURA RC0 COMO OUTPUT
  139.  
  140. ROTINA_TESTE:
  141.     BANKSEL     ADCON0
  142.     BSF         START_CONV              ; INICIA CONVERSÃO
  143.     BTFSC       START_CONV              ; TESTA FIM DE CONVERSÃO
  144.     GOTO        $-1                     ; ESPERA FIM DE CONVERSÃO
  145.     BANKSEL     ADRESL
  146.     MOVF        ADRESL, W               ; MOVE RESULTADO DA CONVERSÃO PARA W
  147.     BANKSEL     CCPR1L
  148.     MOVWF       CCPR1L                  ; SETA PWM PARA RESULTADO DA CONVERSÃO
  149.    
  150.     GOTO ROTINA_TESTE
  151.  
  152.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement