Sei sulla pagina 1di 4

UFPI - UNIVERSIDADE FEDERAL DO PIAU

CURSO DE ENGENHARIA ELTRICA


LABORAT. DE MICROCONTROLADORES
Prof. Msc. Francisco Everton Ucha Reis

PRTICA 2 Acende LED com boto e familiarizao do


conjunto de instrues em Assembly.
Objetivos
- Explorar a funcionalidade da porta B;
- Familiarizar-se com o conjunto de instrues em assembly.

Procedimentos
A partir do exemplo dado na aula anterior, faa o que se pede:
I. Modifique o programa do exemplo dado para acender um LED, da seguinte forma:
enquanto o boto estiver pressionado, o LED apaga e quando liberado o LED acende. O
LED dever ser ligado no pino RB7, lembrando que o resistor no boto de pull-down.
II. Faa a mesma coisa, sendo que agora utilizado o resistor de pull-up da porta B.
III. A partir do item anterior, faa um programa para comutar o estado do LED, toda vez que o
boto for pressionado, voltando a comutar o estado do LED, somente quando o boto for
liberado e pressionado novamente.
IV. Utilizando o depurador MPLAB SIM, execute o programa abaixo e preencha a tabela:
Tabela 1 - Programa para anlise.

Contedo de: F W Flag Z Flag C


BCF STATUS, RP1
BSF STATUS, RP0
BCF STATUS, RP0
CLRF 0x20
INCF 0x20
COMF 0x20, F
COMF 0x20, W
MOVLW D9
ADDWF 0x20, F
ANDWF 0x20
DECF 0x20, F
DECFSZ 0x20, F
INCF 0x20, F
INCFSZ 0x20, F
IORWF 0x20, F
IORWF 0x20, W
MOVF 0x20, F

MOVF 0x20, W
RLF 0x20, F
RRF 0x20, F
SUBWF 0x20, F
SUBWF 0x20, W
MOVLW HFE
MOVWF 0x20
SWAPF 0x20
MOVLW D255
XORWF 0x20, F
ADDLW D1
ADDLW D3
ANDLW D253
IORLW D255
MOVLW H0F
SUBLW D20
XORLW D15
BTFSC 0x20, 0
BTFSS 0x20, 1
CLRW
CALL ROTINA
GOTO DORMIR
ROTINA NOP
CLRWDT
RETLW D10
DORMIR SLEEP
END

Questionrio
Execute o programa que se segue na tabela abaixo e responda:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

#include <p16f877a.inc>
#define constante D'2'
#define file 0x20
movlw constante ; w = 2
subwf file,w ; file - w -> w
;testar se a operao de subtrao acima deu zero
btfsc STATUS,Z
goto igual ;igual
diferente:
igual:

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

movlw constante
incf file
decf file
incf file,1
decf file,1
incf file, w
decf file, w
bcf STATUS, RP0
bcf STATUS, RP1
movf file, W

#define a 0x24
#define b 0x25
#define c 0x26
movf b,W
addwf a,W
movwf c
clrf c
incfsz c
decfsz c
nop
zero: incf c
incf c
decf c
;comparar se x >=50
#define x 0x27
movf x,W
sublw 50 ; W= 50 - W
btfss STATUS, C ;
goto menor
goto maior_ig
menor:
maior_ig:
movlw .1
movwf a
rrf a
rlf a

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

swapf a
movf a,W
andlw 0xef
movwf a
bsf a,0
bcf a,0
iorlw 0x80
xorlw 0x81
movwf a
movwf 0xA0
nop
end

1. Verifique se h diferena entre a instruo da linha 18 com a da linha 21. O que acontece ao
trmino dessa instruo. Idem para a instruo da linha 19 com a da linha 22.
2. O resultado das instrues nas linhas 24 e 25 o mesmo das instrues das linhas 21 e 22
respectivamente? Qual a diferena?
3. A partir da linha 33 a 39 responda. Qual operao realizada entre a varivel "a" e "b"? Onde
o resultado da operao armazenado?
4. Na linha 48, qual o valor de C. Explique por que esse valor.
5. Qual o valor de "a" ao trmino da instruo da linha 64, da linha 68 e da linha 75.
6. Explique porque o contedo do registrador 0xA0 no modificado. Dica: Veja as linhas 27 e
28 do programa.

Questo desafio
Faa um programa para ler o estado do boto e acionar o LED no mesmo pino. O esquema do
hardware necessrio apresentado na figura a seguir. Obs: Considere que a entrada no pino RB1
do tipo TTL.

Potrebbero piacerti anche