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

Relatorio09 - Microcontroladores

codigo em assembly de leds piscando alternadamente utilizando timer0

   EMBED


Share

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