You are on page 1of 6

UNIVERSIDADE FEDERAL DE MATO GROSSO

FACULDADE DE ARQUITETURA, ENGENHARIA E TECNOLOGIA


DEPARTAMENTO DE ENGENHARIA ELTRICA
Walter Aguiar Martins Jnior | 2009/2-1-302-039
Professor Nicols Ledesma

Microprocessadores I Laboratrio 07:


PIC 16F877A Assembly Controlando LCD e Timers

10 de agosto de 2016
Cuiab MT
- Fluxograma da rotina de interrupo para o Timer 0
(Exemplo 1)

Fluxograma da rotina de interrupo para o Timer 1 (Exemplo 2)

- Fluxograma da sub-rotina para mostrar o RTC

- Programa do exerccio, em Assembly, comentado:

list
p=16f877a
#include
<p16f877a.inc>
__CONFIG
H'3F32'
ERRORLEVEL -305
ERRORLEVEL -302
cblock 0x20
FATOR
seg
min
hrs
w_temp
status_temp
endc
org
0x00
nop
nop
goto inicio
org
0x04
goto
ISR
#include
"up_mensagens.asm"
; Rotina de interrupo
ISR:
movwf
w_temp
movfw
STATUS
movwf
status_temp
bcf
STATUS,RP0
btfss
INTCON,T0IF
goto
fim_isr
bcf
INTCON,T0IF
isr_tmr0:
movlw
d'39'
movwf
TMR0
incf
FATOR,f
movfw
FATOR
xorlw
.90
btfss
STATUS,Z
goto
fim_isr
; completou 1s, atualiza os contadores
clrf
FATOR
incf
seg,f
movfw
seg
xorlw
.60
btfss
STATUS,Z
goto
fim_isr
clrf
seg
incf
min,f
movfw
min

xorlw
.60
btfss
STATUS,Z
goto
fim_isr
clrf
min
incf
hrs,f
fim_isr:
movfw
status_temp
movwf
STATUS
swapf
w_temp,f
swapf
w_temp,w
retfie
; Programa principal
inicio:
movlw
0xF0
movwf
PORTB
clrf
PORTD
clrf
PORTE
movlw
d'39'
movwf
TMR0
bsf
STATUS,RP0
movlw
B'11110000'
movwf
TRISB
movlw
B'11111000'
movwf
TRISE
movlw
0x0E
movwf
ADCON1
movlw
0x07
movwf
OPTION_REG
bcf
STATUS,RP0
clrf
FATOR
clrf
seg
clrf
min
clrf
hrs
call
inicio_LCD
movlw
LCD_ON_NOCURSOR
call
EnviaCmdLCD
; Envia mensagens para o LCD
call
mens_up
movlw
LCD_Linha_2
call
EnviaCmdLCD
call
mens_rtc
call
delay_1s
bsf
T1CON,TMR1ON
bsf
INTCON,T0IE
bsf
INTCON,GIE
;mostra hh:mm:ss no LCD
movlw
LCD_CLEAR
call
EnviaCmdLCD
movlw
LCD_Linha_1
call
EnviaCmdLCD
call
mens_hora

loop:
call
mostrar_rtc
btfsc
PORTB,4
goto
segundo
btfss
PORTB,4
goto
$-1
incf
hrs,f
movfw
hrs
xorlw
.24
btfsc
STATUS,Z
clrf
hrs
segundo:
btfsc
PORTB,6
goto
minuto
btfss
PORTB,6
goto
$-1
incf
seg,F
movfw
seg
xorlw
.60
btfsc
STATUS,Z
clrf
seg
minuto:
btfsc
PORTB,5
goto
delay
btfss
PORTB,5
goto
$-1
incf
min,f
movfw
min
xorlw
.60
btfsc
STATUS,Z
clrf
min
delay:
call
delay_100ms
goto
loop
; Incluso de bibliotecas
#include
"up_mostrar_rtc.asm"
#include
"up_atrasos.asm"
#include
"up_driver_lcd.asm"
#include
"up_bin8-bcd.asm"
END

You might also like