Você está na página 1de 8

UNIVERSIDADE FEDERAL DO CEAR CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELETRICA

LABORATRIO DE MICROPROCESSADORES

MICROCONTROLADORES (PIC16F687) FERRAMENTAS DE DESENVOLVIMENTO

PRTICA 8:

Nome: ADISMAEL DE SOUZA PINHEIRO. Matricula: 0320778. Turma: D.

Fortaleza 21/10/2011

1. Faa uma descrio mais detalhada sobre cada uma das caractersticas listadas na terceira pgina da folha de dados (Datasheet) do PIC16F687. Informaes encontradas na terceira pgina do datasheet do PIC16F687:

Alto-desempenho RISC CPU Possui 35 instrues para serem utilizadas no seu programa fonte. Velocidade de operao: oscilador de 20 MHz/entrada de clock; um tempo estimado de 200 ns para cada instruo. Oito nveis de pilha para hardware; diversos modos de endereamento: direto, indireto e relativo. Caractersticas especiais: Faixa de frequncias selecionveis de 8 MHz a 32 MHz. Faixa de operao de 2,0V a 5,5V. Modo sleep para economia de energia. Um conjunto de 17 pinos que podem ter configurao input ou output e um pino mestre exclusivo de entrada (pino mestre multiplexed input/clear). Possui conversor analgico digital, contador como o Timer0 e o Timer1 e a possibilidade de comunicao serial. Vrias outras caractersticas;
2. Apresente o programa modificado desenvolvido (comentado em detalhes e com a simulao). #INCLUDE <P16F687.INC> ;_CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON ;&_XT_OSC ; ENTRADAS E SAIDAS: ;========================================== #DEFINE BOTAO1 PORTC,5 ; DEFINE A PORTC,5 DE PORTA COMO BOTAO1 #DEFINE LED1 PORTA,2; DEFINE A PORTA,2 COMO LED1 #DEFINE BOTAO2 PORTC,0; DEFINE A PORTC,0 DE PORTA COMO BOTAO2 #DEFINE LED2 PORTB,5; DEFINE A PORTB,5 COMO LED2 ;========================================== ; Definicoes de Variveis: ver mapa de memria do PIC16F628A na pg. 16 do datasheet. ;========================================== at_x EQU 0x70 ; USA POSIO DE MEMRIA DO ENDEREO 0X70 COM NOME AT_X at_tmp1 EQU 0x71;...DO ENDEREO 0X71 COM NOME AT_X at_tmp2 EQU 0x72;...DO ENDEREO 0X72 COM NOME AT_X ;========================================== ;VETOR DE RESET ORG 0 ; GOTO INICIO ; DESVIA PARA INICIO ORG 0x04 RETFIE ; RETORNO DA ROTINA DE TRATAMENTO ;========================================== INICIO ; LABEL INICIO

BSF STATUS,RP0 ; ACESSO AO BANCO 1 DE MEMRIA MOVLW 0x00 ; ZERA O REG. W MOVWF TRISA ; CONFIGURA PORTA COMO OUTPUT ;========================================== MOVLW 00000000b ; CONFIGURA PORTB COMO OUTPUT MOVWF TRISB ; ;========================================== MOVLW 0XFF ; CONFIGURA PORTC COMO INPUT MOVWF TRISC ; MOVLW 10000000b ; DESABILITA PULL-UP MOVWF OPTION_REG; ;========================================== MOVLW 00000000b ; DESABILITA TRATAMENTO DE INTERRUPO MOVWF INTCON ;========================================== BCF STATUS,RP0;VOLTA AO BANCO ZERO ;========================================== VERIFICABOTAO2: ;LABEL QUE DESVIA O FLUXO DO PROGRAMA QUANDO BOTAO2 ;PRESSIONADO BTFSC BOTAO2 GOTO MAIN1 ;========================================== MAIN ; LABEL PRINCIPAL ;========================================== BCF LED1 ;LIMPA PORTA BSF LED2 ;SET PROTB,5 MOVLW 0x20 ; W = tempo de atraso CALL atraso ; chama a funcao atraso BTFSC BOTAO1 ; TESTA O BIT DO BOTAO1 BSF LED1 ;SET PORTA,2 BTFSC BOTAO1 BCF LED2 ; CLEAR PORTB,5 MOVLW 0x20 ; W = tempo de atraso CALL atraso ; chama a funcao atraso ;========================================== GOTO VERIFICABOTAO2 ;DESVIO PARA INICIO DA LABEL VERIFIABOTAO2 MAIN1 BCF LED1 BCF LED2 MOVLW 0x80 ; W = tempo de atraso ,DADO POR 0X08 CALL atraso; chama a funcao atraso BTFSC BOTAO1 ; TESTA O BIT DO BOTAO1 E PULA PROXIMA INSTRUO SE BIT=0 BSF LED1 BTFSC BOTAO1 BCF LED2 MOVLW 0x08 ; W = tempo de atraso ,DADO POR 0X08

CALL atraso GOTO VERIFICABOTAO2 ;DESVIO PARA INICIO DA LABEL VERIFICABOTAO2 GOTO MAIN ;DESVIO PARA INICIO DA LABEL MAIN ;========================================== atraso movwf at_x ;MVOE O VALOR DE W PARA at_x movlw 0x80 ;MOVE O VALOR 8OH PARA W at1: movwf at_tmp1 ;MVOE O VALOR DE W PARA at_tmp1 at2: movwf at_tmp2 ;MVOE O VALOR DE W PARA at_tmp2 at3: decfsz at_tmp2 ;DECREMENTA at_tmp2,PULA PROXIMA INSTRUO SE at_tmp2=0 goto at3 decfsz at_tmp1 ;DECREMENTA at_tmp1,PULA PROXIMA INSTRUO SE at_tmp1=0 goto at2 decfsz at_x ;DECREMENTA at_x,PULA PROXIMA INSTRUO SE at_x=0 goto at1 return ; VOLTA OA PONTO ONDE A SUB-ROTINA atraso FOI CHAMADA ;========================================== ;========================================== END ; FIM DO PROGRAMA ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, CIRCUITO:

RESULTADOS:

O grfico acima mostra o que acontece com a onda no momento em que o boto 1 pressionado.

O grfico acima mostra o que acontece com a onda no momento em que solta-se o boto 2. 3. Desenvolva um programa utilizando o mesmo PIC listado anteriormente que escreva em uma das portas do microcontrolador as palavras necessrias para girar um motor de passo nos dois sentidos, sendo este controlado por meio de uma chave. Mostre o cdigo comentado, a explicao detalhada do programa e a simulao feita no PROTEUS.

A dia inicial desse programa e gerar a sequncia que gira o motor no sentido horrio no pinos defenidos como sada no PIC16F687. Posteriormente,quando um boto pressionado, gerada a sequncia que gira o motor no sentido anti-horrio.

CASO 1 1 2 3 4 CASO 2 1 2 3 4

PORTA 00010000 00100000 01000000 10000000 PORTA 10000000 01000000 00100000 00010000

INICIO ; LABEL INICIO BSF STATUS,RP0 ; ACESSO AO BANCO 1 DE MEMRIA MOVLW 0x00 ; ZERA O REG. W MOVWF TRISA ; CONFIGURA PORTA COMO OUTPUT ;========================================== ;MOVLW 00000000b ; CONFIGURA PORTB COMO OUTPUT ;MOVWF TRISB ; ;========================================== MOVLW 0XFF ; CONFIGURA PORTC COMO INPUT MOVWF TRISC ; MOVLW 10000000b ; DESABILITA PULL-UP MOVWF OPTION_REG; ;========================================== MOVLW 00000000b ; DESABILITA TRATAMENTO DE INTERRUPO MOVWF INTCON ;========================================== BCF STATUS,RP0;VOLTA AO BANCO ZERO ;========================================== VERIFIABOTAO: ; LABEL QUE DESVIA O FLUXO DO PROGRAMA QUANDO BOTAO2 PRESSIONADO BTFSC BOTAO GOTO MAIN1 ;========================================== MAIN ; LABEL PRINCIPAL .... FAR O MOTOR GIRAR NO SENTIDO HORRIO MOVLW B'00010000' ; PARA LIGAR BOBINA 1 MOVWF PORTA MOVLW B'00001000' CALL atraso MOVLW B'00100000' ;PARA LIGAR BOBINA 2 MOVWF PORTA MOVLW B'00001000' CALL atraso

MOVLW B'01000000' ;PARA LIGAR BOBINA 3 MOVWF PORTA MOVLW B'00001000' CALL atraso MOVLW B'10000000'; PARA LIGAR BOBINA 4 MOVWF PORTA MOVLW B'00001000' CALL atraso GOTO VERIFIABOTAO ;DESVIO PARA INICIO DA LABEL VERIFIABOTAO ;========================================== MAIN1 ; LABEL PRINCIPAL 1 .... FAR O MOTOR GIRAR NO SENTIDO ANTI-HORRIO MOVLW B'10000000'PARA LIGAR BOBINA 4 MOVWF PORTA MOVLW B'00001000' CALL atraso MOVLW B'01000000'PARA LIGAR BOBINA 3 MOVWF PORTA MOVLW B'00001000' CALL atraso MOVLW B'001000000'PARA LIGAR BOBINA 2 MOVWF PORTA MOVLW B'00001000' CALL atraso MOVLW B'000100000'PARA LIGAR BOBINA 1 MOVWF PORTA MOVLW B'00001000' CALL atraso GOTO VERIFIABOTAO ;DESVIO PARA INICIO DA LABEL VERIFIABOTAO;========================================== atraso movwf at_x ;MVOE O VALOR DE W PARA at_x movlw 0x80 ;MOVE O VALOR 8OH PARA W at1: movwf at_tmp1 ;MVOE O VALOR DE W PARA at_tmp1 at2: movwf at_tmp2 ;MVOE O VALOR DE W PARA at_tmp2 at3: decfsz at_tmp2 ;DECREMENTA at_tmp2,PULA PROXIMA INSTRUO SE at_tmp2=0 goto at3 decfsz at_tmp1;;DECREMENTA at_tmp1,PULA PROXIMA INSTRUO SE at_tmp1=0 goto at2 decfsz at_x;;DECREMENTA at_x,PULA PROXIMA INSTRUO SE at_x=0 goto at1 return ; VOLTA OA PONTO ONDE A SUB-ROTINA atraso FOI CHAMADA ;========================================== ;========================================== END ; FIM DO PROGRAMA ;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

RESULTADOS:

Você também pode gostar