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.