Preview only show first 10 pages with watermark. For full document please download

Relatorio08 - Microcontroladores

código em assembly para fazer dois led piscarem alternadamente com controle de frequência

   EMBED

  • Rating

  • Date

    December 2018
  • Size

    576.6KB
  • Views

    2,656
  • Categories


Share

Transcript

UNIVERSIDADE FEDERAL DO CEARÁ DEPARTAMENTO DE ENGENHARIA ELÉTRICA MICROPROCESSADORES Prática 08 Microcontroladores (PIC16F687) Professor: Tobias Bancada: Jeymyson Alves de Sousa 338887 José Roberto Pereira dos Santos 336371 Registradores com finalidades específicas Registrador Descrição PORTA Utilizado para o acesso aos pinos do PORTA, localizado no banco 1 e 3. PORTB Utilizado para o acesso aos pinos do PORTB, localizado no banco 1. PORTC Utilizado para o acesso aos pinos do PORTC. TRISA TRISB TRISC Localizado no banco de memória 1, é utilizado para configurar os pinos da PORTA como I/O. 0 para saída e 1 para entrada. Localizado no banco de memória 1, é utilizado para configurar os pinos da PORTB. É utilizado para configurar os pinos da PORTC. Utilizado para verificação de estado geral do processador, nele fica armazenado STATUS flag C, DC e Z, além dos flags TO e PD relativos ao watchdog e modo sleep respectivamente. Também nesse registrador encontramos os bits de seleção de banco, RP0 e RP1. Ele está presente em todos os bancos. Utilizado para configurar algumas funções internas do PIC ( Prescaler, timer0, OPTION_REG resistores Pull-UP, bordas de interrupção e clock). Localizado em todos os bancos. INTCON Utilizado para controlar interrupções no PIC, está presente em todos os bancos. Programa 1 – dois leds piscando alternadamente #INCLUDE ;_CONFIG_BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ; ENTRADAS #DEFINE BOTAO1 PORTC,5; #DEFINE BOTAO2 PORTC,4 ;SAIDAS #DEFINE LED1 PORTA,0 #DEFINE LED2 PORTB,4 ;VARIAVEIS DE CONTROLE DE TEMPO AT_X EQU 0x70 AT_TMP1 EQU 0x71 AT_TMP2 EQU 0x72 COMP EQU 0X73 ; VETOR DE RESET ORG 0 GOTO INICIO ORG 0X04 RETFIE ;DEFINE O BIT 5 DE PORTC COMO BOTAO1. ;DEFINE O REGISTRADOR DO ENDEREÇO 70H COMO AT_X. ;UTILIZADO PARA DESVIAR INICIAIS QUE SÃO RESERVADOS. DOS ENDEREÇOS INICIO BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISA ;SETA O BIT RP0 DE STATUS SELECIONANDO O BANK1. ;CONFIGURA TODOS OS BITS DE PORTA COMO SAIDA. MOVLW B'00000000' MOVWF TRISB ;CONFIGURA TODOS OS BITS DE PORTB COMO SAIDA. MOVLW 0XFF MOVWF TRISC ;CONFIGURA ENTRADA. TODOS OS BITS DE PORTC COMO MOVLW B'10000000' MOVWF OPTION_REG MOVLW B'00000000' MOVWF INTCON BCF STATUS,RP0 ;CLEAR RP0, SELECIONA O BANK0. MAIN MOVLW D'10' BCF LED1 BSF LED2 BTFSS BOTAO1 BCF LED2 BTFSS BOTAO2 CALL ATRASO_2 MOVWF COMP DECFSZ COMP,F CALL ATRASO_1 ;ASCENDE LED1 ;APAGA LED2 ;BOTAO1 ESTÁ APERTADO? ;SIM, ASCENDE LED2. ;NÃO. BOTAO2 ESTÁ APERTADO? ;SIM, CHAMA ATRASO_2 (ROTINA PARA FREQUENCIA DE 5HZ). ;NÃO, SEGUE O CODIGO. ;ESSA LÓGICA UTILIZANDO A VARIAVEL COMP FAZ COM QUE APENAS UMA DAS ROTINAS DE CONTROLE DE TEMPO SEJA EXECUTADA. BTFSC BOTAO1 CALL PISCA BTFSS BOTAO2 CALL ATRASO_2 MOVWF COMP DECFSZ COMP,F CALL ATRASO_1 ;BOTAO1 ESTÁ APERTADO? ;NÃO, CHAMA ROTINA PISCA. ;SIM, SEGUE O PROGRAMA. ;BOTAO2 ESTA APERTADO? ;SIM, CHAMA A ROTINA ATRASO_2. ;NÃO,SEGUE O PROGRAMA E CHAMA ATRASO_1. A ROTINA GOTO MAIN ;REINICIA O PROGRAMA. ;ROTINAS ATRASO_1 MOVLW D'100' MOVWF AT_X MOVLW D'100' ;TEMPO PARA FREQUENCIA DE 1HZ, OU SEJA T=1S. ESSE TEMPO É OBTIDO APROXIMADAMENTE ATRAVES DA FÓRMULA. AT1: AT2: AT3: MOVWF AT_TMP1 MOVWF AT_TMP2 DECFSZ AT_TMP2 GOTO AT3 DECFSZ AT_TMP1 GOTO AT2 DECFSZ AT_X GOTO AT1 RETLW D'1' ATRASO_2 MOVLW D'25' MOVWF AT_X MOVLW D'100' AT4: AT5: AT6: T= AT_X*AT_TMP1*ATMP2*1µS ;DEFININFO AT_X=AT_TMP1=AT_TMP2=100, SE: T=100*100*100*1µ=1S OBTEM- ;RETORNO DA FUNÇÃO COM 1 EM W, ESSE VALOR É USADO PARA COMPARAR SE ATRASO_1 FOI EXECUTADO E SE SIM EVITAR QUE ATRASO_2 SEJA EXECUTADO. ;ROTINA PARA FREQUENCIA DE 5KHZ, T=0.25S. ;PARA OBTER ESSE TEMPO UTILIZOU-SE AT_X=25, AT_TMP1=AT_TMP2=100. MOVWF AT_TMP1 MOVWF AT_TMP2 DECFSZ AT_TMP2 GOTO AT6 DECFSZ AT_TMP1 GOTO AT5 DECFSZ AT_X GOTO AT4 RETLW D'1' PISCA BSF LED1 BCF LED2 MOVLW .10 RETURN END ;ESSA ROTINA INVERTE OS ESTADOS DE LED1 E LED2, ASSIM, APAGA LED1 E ASCENDE LED2. Esquemático programa1 utilizando o Proteus Botão PISCA/CONG desabilitado, então os leds piscam alternadamente na frequência determinada pelo botão FREQ (5Hz se o botão estiver habilitado e 1Hz no caso contrario). Enquanto botão PISCA/CONGELA estiver habilitado, os dois leds permanecem acesos, independente do botão FREQ.