Buscar

relatorio_lab6

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
 
 
Universidade Federal de Mato Grosso 
Faculdade de Arquitetura, Tecnologia e Engenharia 
Departamento de Engenharia Elétrica 
Laboratório de Eletrônica Geral II 
 
 
 
 
 
 
 
 
Laboratório 6 
RTC utilizando o temporizador TMR0 e Interrupções 
 
 
 
Engenharia Elétrica 
Docente: Prof. Nicolás Eusebio Cortez Ledesma 
Discente: Bárbara Morais Gianesini 
Turma: N1 
Data da realização do laboratório: 19 de Fevereiro de 2016 
 
 
 
 
 
 
 
 
 
 
 
 
 
2 
 
 
 
 
 
1. Objetivos 
 
 Entender os procedimentos para projetar aplicações que necessitam executar 
processos recorrentes, baseados em um relógio de tempo real (RTC) e interrupções 
geradas pelo transbordo (overflow) do módulo temporizador TMR0 do microcontrolador 
PIC. 
 
 
2. Atividades 
 
Em um novo projeto, escreva as mudanças necessárias em relação ao programa dado em 
sala para implementar um relógio de tempo real (RTC). Utilizar a variável ‘min’ para contar os 
minutos e a variável ‘horas’ para contar as horas. 
 
a) Mude o código do programa principal para mostrar nos displays o valor que representa 
o segundo do RTC. 
 
b) Mude o código do programa principal para mostrar nos displays o valor que representa 
o minuto do RTC. 
 
c) Mude o código do programa principal para mostrar nos displays o valor que representa 
as horas do RTC. 
 
O código para implementação de um relógio de tempo real está descrito na página 3. Como 
serão usados os 2 displays de 7 segmentos da placa de desenvolvimento para mostrar os 
valores dos segundos, ou dos minutos, ou das horas contadas pelo relógio, o programador 
deverá escolher qual desses três valores ele deseja expor nos displays. Isso pode ser feito 
por meio das linhas em negrito do código do programa (página 3). O programador deverá 
escolher entre a linha dos segundos, minutos ou horas e depois “comentar” as outras duas 
linhas, de modo que somente o valor escolhido por ele seja enviado aos pinos dos displays. 
Essa lógica foi utilizada para facilitar a utilização do código e o seu reaproveitamento. 
Como usamos somente dois displays de 7 segmentos, não conseguimos mostrar os dígitos 
dos segundos, minutos e horas ao mesmo tempo, e por isso devemos fazer a escolha quando 
geramos o arquivo .hex e programamos o microcontrolador. Por outro lado, se desejarmos 
implementar o mesmo relógio usando um display LCD, poderemos mostrar tanto os segundos 
como os minutos e as horas, e como o nosso código já está preparado para armazenar esses 
valores, deverão ser feitas poucas mudanças para utilizar o código com o LCD. 
Durante o desenvolvimento do código, houveram algumas dificuldades quanto á 
implementação da lógica para incrementar os dígitos das dezenas. Isso ocorreu pois o valor 
“carregado” não estava sendo apagado a cada vez que o segundo/minuto/hora era enviado 
para processamento da casa da unidade e dezena que seriam mostradas no display 7 
segmentos. 
 
3 
 
 list p =16f877a 
 #include <p16f877a.inc> 
 __CONFIG H'3F32' 
 
 cblock 0x20 
 unidade 
 dezena 
 contador1 
 contador2 
 endc 
 
 #define K_uni PORTA,5 
 #define K_dez PORTC,1 
 org 0x00 
 goto inicio 
 org 0x04 
 goto ISR 
 
;rotina de interupcao 
ISR 
cblock 
 FATOR 
 seg ;segundos 
 min ;minutos 
 horas ;horas 
 w_temp 
 status_temp 
 display_temp 
 endc 
 
 movwf w_temp 
 movfw STATUS 
 movwf status_temp 
 btfss INTCON, T0IF 
 goto fim_isr 
 
isr_tmr0 
 movlw d'39' 
 movwf TMR0 
 incf FATOR, F 
 movf FATOR, W 
 xorlw d'90' 
 btfss STATUS,Z 
 goto fim_isr 
 clrf FATOR 
 incf seg,F 
 
 movlw .60 
 xorwf seg, 0 
 btfss STATUS, Z 
 goto skip_changes 
 clrf seg 
 incf min, F 
 movlw .60 
 xorwf min, 0 
 btfss STATUS, Z 
 goto skip_changes 
 clrf min 
 incf horas, F 
 
 movlw .24 
 xorwf horas,0 
 btfss STATUS, Z 
 goto skip_changes 
 clrf horas 
 
skip_changes: 
 movfw seg ;segundos 
 movfw min ; minutos 
 movfw horas ; horas 
 movwf display_temp 
 clrf unidade 
 clrf dezena 
 
;passou 1s 
 
loop: 
 movlw .10 
 subwf display_temp,0 
 btfss STATUS,C 
 goto acha_unidade 
 incf dezena, F 
 movlw .10 
 subwf display_temp,F 
 goto loop 
 
acha_unidade: 
 movfw display_temp 
 movwf unidade 
 
fim_isr: 
 bcf INTCON,T0IF 
 movfw status_temp 
 movwf STATUS 
 swapf w_temp,F 
 swapf w_temp,W 
 retfie 
 
;programa principal 
inicio: 
 bcf K_uni 
 bcf K_dez 
 clrf PORTD 
 bsf STATUS, RP0 
 movlw 0x07 
 ;presc=256 
 movwf OPTION_REG 
 bcf TRISA,5 
 bcf TRISC,1 
 clrf TRISD 
 bcf STATUS, RP0 
 
; para mostrar info no display 
 clrf unidade 
 clrf dezena 
 clrf seg 
 clrf min 
 clrf horas 
 clrf FATOR 
 movlw d'39' 
 movwf TMR0 
 
;ativa interrupcoes 
 bsf INTCON, T0IE 
 bsf INTCON,GIE 
 
mostra_disp: 
 movfw unidade 
 call conv_7seg 
 bcf K_dez 
 movwf PORTD 
 bsf K_uni 
 call ret5ms 
 movfw dezena 
 call conv_7seg 
 bcf K_uni 
 movwf PORTD 
 bsf K_dez 
 call ret5ms 
 goto mostra_disp 
 
conv_7seg: 
 addwf PCL, f 
 retlw B'00111111' ;0 
 retlw B'00000110' ;1 
 retlw B'01011011' ;2 
 retlw B'01001111' ;3 
 retlw B'01100110' ;4 
 retlw B'01101101' ;5 
 retlw B'01111101' ;6 
 retlw B'00000111' ;7 
 retlw B'01111111' ;8 
 retlw B'01101111' ;9 
 
ret5ms: 
 movlw D'117' 
 movwf contador1 
 movlw D'33' 
 movwf contador2 
 decfsz contador1,1 
 goto $-1 
 decfsz contador2,1 
 goto $-3 
 return 
 end 
4

Continue navegando