Transcript
UNIVERSIDADE FEDERAL DO CEARÁ DEPARTAMENTO DE ENGENHARIA ELÉTRICA MICROPROCESSADORES
Prática 09 Microcontroladores (PIC16F687) Ferramentas de Desenvolvimento
Professor:
Tobias
Bancada:
Jeymyson Alves de Sousa
338887
José Roberto Pereira dos Santos
336371
Fortaleza, 29 de janeiro de 2013
PROGRAMA 1 – LED Piscando List p=16f628 INCLUDE P16F687.INC __CONFIG _BODEN_OFF & _WDT_OFF & _WDT_OFF & _CP_OFF & _PWRTE_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
TEMPO EQU 0X20
;DECLARA O REGISTRADOR POSIÇÃO 20H COMO TEMPO.
DE
USO
GERAL
DA
ORG 0X0000 GOTO INICIO ORG 0X0004 BCF INTCON,T0IF DECFSZ TEMPO,F RETFIE MOVLW D'31' MOVWF TEMPO MOVLW B'10000000' XORWF PORTB,F RETFIE
;TRATAMENTO DE INTERRUPÇÃO. ;CLEAR O FLAG DA INTERRUPÇÃO DO TIMER0. ;DECREMENTA TEMPO E RETORNA ATÉ QUE RESULTADO SEJA ZERO.
O
;FAZ UM XOR DE PORTB COMO W,INVERTENDO ASSIM O BIT7 DE PORTB.
INICIO: BANKSEL TRISB CLRF TRISB
;SELECIONA O BANCO DE TRISB. ;ZERA TRISB DEFININDO-A ASSIM COMO SAÍDA.
MOVLW B'10000111' MOVWF OPTION_REG
;DESABILITA OS RESITORES PULL-UP E DEFINE O PRE-ESCALER COMO 256.
BANKSEL PORTB MOVLW B'10100000' MOVWF INTCON
;VOLTA PRO BANCO ZERO. ;HABILITA A INTERRUPÇAO DO TIMER0 E A CHAVE GERAL DE INTERRUPÇÃO.
MOVLW D'31' MOVWF TEMPO
;MOVE 31 UTILIZADA DESEJADA.
FIM:
;O PROGRAMA FICA NESSE LOOP ATÉ QUE OCORRA UMA INTERRUPÇÃO.
GOTO FIM
PARA TEMPO. A VARIAVEL TEMPO É PARA OBTENÇÃO DA FREQUENCIA
END
Observação A frequência com que ocorre a interrupção do timer 0 é definida por
Assim o tempo que o led passa aceso é:
Para obter-se um tempo maior utilizou-se a variável (tempo=31), obtendo-se um tempo de:
PROGRAMA 2 – LEDS Piscando Alternadamente
INCLUDE P16F687.INC __CONFIG _BODEN_OFF & _WDT_OFF & _WDT_OFF & _CP_OFF & _PWRTE_OFF & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
TEMPO EQU 0X20 ORG
;DEFINE
TEMPO
0X0000
GOTO INICIO ORG 0X0004 BCF INTCON,T0IF DECFSZ TEMPO,F
RETFIE MOVLW D'31' MOVWF TEMPO MOVLW B'11111111' XORWF PORTB,F
;DIRECIONA PARA O INICIO.
;LIMPA T0IF DO REGISTRADOR INTCON ;DECREMENTA A VARIÁVEL TEMPO, RESULTADO EM TEMPO.
COLOCANDO
;RETORNO DA INTERRUPÇÃO ;MOVE PARA W O DECIMAL 31 ;MOVE PARA TEMPO, O CONTEÚDO DE W ;MOVE PARA W O BINÁRIO 11111111 ;FAZ OPERAÇÃO XOR ENTRE W E PORTB, PARA QUE OS LEDS, POSSAM ACENDER ALTERNADAMENTE.
RETFIE
INICIO: BANKSEL TRISB MOVLW B'00111111' MOVWF TRISB
; VAI PARA O BANCO DE TRISB, PARA CONFIGURAR AS ENTRADAS E SAÍDAS DO PORTB. O BINÁRIO 00111111, FAZ COM QUE RB7 E RB6 SEJAM SAÍDA E AS DEMAIS ENTRADAS.
MOVLW B'10000111' MOVWF OPTION_REG
;CONFIGURA OPTION_REG, DESLIGANDO OS RESISTORES PULL-UP, E CARREGANDO O PRESCALER COM 256
BANKSEL PORTB MOVLW B'10100000' MOVWF INTCON
;SELECIONA O BANCO DE PORTB, E HABILITA AS INTERRUPÇÕES GLOBAIS (GIE) E INTERRUPÇÃO DO TIMER0 (T0IE)
MOVLW MOVWF MOVLW MOVWF FIM:
END
D'31' TEMPO B'10000000' PORTB GOTO FIM
;ACENDE UM LED E MANTÉM APAGADO OUTRO, ANTES DA INTERRUPÇÃO ACONTECER, A PARTIR DAI, TRANSCORRIDO O TEMPO ESTIPULADO, O LED ACESO APAGA, ENQUANTO O OUTRO ACENDE.
SIMULAÇÃO NO PROTEUS