Академический Документы
Профессиональный Документы
Культура Документы
Sistemas Digitais II
(Documento em verso Draft ainda em elaborao)
Resumo
Introduo
Vrios tipos de arquitectura
Os microcontroladores PIC
PIC16F84
Jan 20
Diagrama de blocos
Memria de programa
Memria de dados
Recursos auxiliares
Pinagem
Circuito de teste
Programao
Memria
ALU e W
PC e Stack
Portos
Timer
Introduo
Estrutura de um computador
Jan 20
Introduo
Microcontrolador
Jan 20
Processador vs Microcontrolador
Jan 20
Processador vs Microcontrolador
Jan 20
CISC vs RISC
Jan 20
Jan 20
Jan 20
Arquitectura de Harvard
Jan 20
10
Princeton Vs Harvard
Jan 20
11
Micro-coded vs Hard-coded
Jan 20
12
Fabricantes de microcontroladores
Fabricantes
Jan 20
13
Famlia
Exec./instru
o
N de
instrues
PIC12CXXX
Gama an
(bsica e mdia
de 8 pinos)
1000ns/4Mhz;
10 Mhz
33/35 instrues
PIC16C5X
Gama bsica
200ns / 20Mhz
33 inst. de 12
bits
PIC16CXXX
Gama mdia
200ns / 20 Mhz
35 inst. de 14
bits
PIC17CXXX
Gama alta
120 ns / 33Mhz
58 inst. de 16
bits
PIC18CXXX
Gama
melhorada
10 MIPS / 40
Mhz
77 inst. de 16
bits
Jan 20
14
Gama de Microcontroladores
Jan 20
15
Jan 20
16
Execuo de instrues
Jan 20
17
Execuo de instrues
Relao entre o sinal de clock e o ciclo de instruo:
Jan 20
18
PIC16F84
Jan 20
19
Jan 20
20
CPU
Jan 20
21
CPU
Jan 20
22
CPU
Jan 20
23
ALU
destinados a desenvolver as
funes de clculo e manipulao
de dados durante a execuo de um
programa
Jan 20
24
ALU
Operao
Operao equivalente
Mover
Adio
Subtraco
Negao
Incremento
Adio a 1
Decremento
AND
OR
XOR
Complemento
Shift Left
Shift Right
Jan 20
25
Registo Status
Flags:
Zero
0
Carry (C) Fica a 1 quando o resultado
da operao maior do que 255
Digit Carry (DC) Fica a 1 quando o
nibble menos significativo maior do
que 15 aps uma operao aritmtica
(adio ou subtraco)
Jan 20
26
Organizao da memria
Jan 20
27
Endereamento de Bancos
Jan 20
File address
BANCO 0
BANCO 1
File address
INDF
INDF
80
TMR0
OPTION
81
PCL
PCL
82
STATUS
STATUS
83
FSR
FSR
84
PORT A
TRIS A
85
PORT B
TRIS B
86
87
EEDATA
EECON1
88
EEADR
EECON2
89
0A
PCLATH
PCLATH
8A
0B
INTCON
INTCON
8B
0C
68 registos
Mapeado
8C
de utilizao
(acesso)
geral
Banco 0
(SRAM)
4F
CF
50
D0
28
FF
Program Counter
Jan 20
29
Stack
Jan 20
30
Memria de programa
Memria de programa
Jan 20
31
Memria de dados
Memria de dados
RAM
Jan 20
32
Recursos auxiliares
Recursos auxiliares
Jan 20
Temporizadores
Watch-dog
Proteco de falha de alimentao (Brown out)
Estado de repouso e baixo consumo (Sleep mode)
Conversor A/D
Conversor D/A
Comparador analgico
Modulador por largura de impulsos (PWM)
Portas de entradas e sadas digitais
Portas de comunicao
Interrupes
In-circuit serial programming
33
Jan 20
34
O Timer
Jan 20
O registo TMR0 um
contador, ou seja um
registo particular, no
qual o seu contedo
incrementado com uma
cadncia regular e
programada
directamente pelo
hardware do PIC. Na
prtica, a diferena de
outro registro, que o
TMR0 no mantm
inalterado o seu valor,
incrementando-o
continuamente
35
Jan 20
36
Jan 20
37
Jan 20
38
Jan 20
Nos
microcontroladores
que tm estas
possibilidades podem
converter sinais
analgicos em
digitais e vice-versa
39
Jan 20
40
Jan 20
41
Jan 20
Todos os microcontroladores
possuem alguns pinos como
linhas de entrada e sada digitais
de dados
Normalmente estas linhas esto
agrupadas de oito em oito
formando portas
Estas linhas digitais podem ser
configuradas como sendo de
entrada ou como sendo de sada
colocando 1 ou 0 no bit
correspondente ao registo
destinado sua configurao
42
Jan 20
43
Jan 20
44
Jan 20
45
Jan 20
46
Jan 20
47
Jan 20
48
Pinagem
PIC16F84 (PDIP, SOIC)
Jan 20
49
Pinagem
1
RA2
uma linha de I/O programvel em entrada ou sada da unidade.
Corresponde ao BIT 2 da PORTA A.
RA3
uma linha de I/O programvel em entrada ou sada da unidade.
Corresponde ao BIT 3 da PORTA A.
RA4 / RTCC
um pino multi funo que pode ser programado como uma linha
normal de I/O ou como linha de clock para entrada em sentido ao
contador RTCC.
Se programada como linha de I/O corresponde ao BIT 4 da PORTA A
ao contrrio de outra linha de I/O, quando esta linha funciona como
sada, trabalha em colector aberto.
Jan 20
50
Pinagem
4
MCLR / VPP
Em condio normal de funcionamento desenvolve a funo de Master
CLeaR ou seja Reset estar activo a nvel 0. Pode ser conectado a um
circuito de reset externo ou simplesmente conectando-o ao positivo da
alimentao.
Quando o PIC for colocado em Program Mode ser utilizado como
entrada para a tenso de programao Vpp.
Jan 20
VSS
o pino que vai conectado ao negativo da tenso de alimentao.
51
Pinagem
6
RB0
uma linha de I/O programvel em entrada ou em sada.
Corresponde ao BIT 0 da PORTA B e pode ser programada para gerar
interrupo.
RB1
uma linha de I/O programvel em entrada ou em sada.
Corresponde ao BIT 1 da PORTA B.
RB2
uma linha de I/O programvel em entrada ou em sada.
Corresponde ao BIT 2 da PORTA B.
Jan 20
52
Pinagem
10
11
12
13
Jan 20
53
Pinagem
14
VDD
o terminal positivo de alimentao do PIC.
em todas as trs verses disponveis do PIC16F84 (comercial, industrial
e automotiva) a tenso pode assumir um valor que vai de um mnimo
de 2.0 volts a um mximo de 6.0 volts.
15
OSC2 / CLKOUT
um pino de ligao no caso de se utilizar um cristal de quartzo para
gerar o clock. E como sada de clock caso for aplicado um oscilador RC
externo.
16
OSC1 / CLKIN
um pino de ligao para o caso de se utilizar um cristal de quartzo ou
um circuito RC para gerar o clock. E tambm como entrada caso
utilizemos um oscilador externo.
Jan 20
54
Pinagem
17
RA0
uma linha de I/O programvel em entrada ou sada.
Corresponde ao BIT 0 da PORTA A.
18
RA1
uma linha de I/O programvel em entrada ou sada.
Corresponde ao BIT 1 da PORTA A
Jan 20
55
Oscilador
Oscilador
Frequncia
RC (Resistor/Capacitor)
HS (High Speed Crystal/Resonator)
4 MHz 20 MHz
XT (Crystal/Resonator)
0 200 KHz
Jan 20
56
Oscilador
Modo
XT
HS
LP
XT
HS
RC
Jan 20
Freq.
Osc1/C1
Osc2/C2
455 kHz
47 - 100 pF
47 - 100 pF
2.0 MHz
15 - 33 pF
15 - 33 pF
4.0 MHz
15 - 33 pF
15 - 33 pF
8.0 MHz
15 - 33 pF
15 - 33 pF
10.0 MHz
15 - 33 pF
15 - 33 pF
32 kHz
68 - 100 pF
68 - 100 pF
200 kHz
15 - 33 pF
15 - 33 pF
100 kHz
100 - 150 pF
100 - 150 pF
2 MHz
15 - 33 pF
15 - 33 pF
4 MHz
15 - 33 pF
15 - 33 pF
4 MHz
15 - 33 pF
15 - 33 pF
20 MHz
15 - 33 pF
15 - 33 pF
5 k Rext 100 k
57
Programao e utilizao
Jan 20
58
Jan 20
59
Jan 20
60
Jan 20
Bit Value
TMR0 Rate
WDT Rate
000
001
010
011
100
101
110
111
1:2
1:4
1:8
1 : 16
1 : 32
1 : 64
1 : 128
1 : 256
1:1
1:2
1:4
1:8
1 : 16
1 : 32
1 : 64
1 : 128
61
Jan 20
62
Jan 20
63
Jan 20
64
Instrues
Sintaxe
Descrio Microchip
Operao equivalente
ADDLW k
W=W+k
ADDWF f,d
Add W and f
ANDLW k
W = W AND k
ANDWF f,d
AND W with f
BCF f,b
Bit Clear f
f(b) = 0
BSF f,b
Bit Set f
f(b) = 1
BTFSC f,b
BTFSS f,b
CALL k
Subroutine Call
CLRF f
Clear f
f=0
CLRW
Clear W Register
W=0
CLRWDT
Watchdog timer = 0
COMF f,d
Complement f
DECF f,d
Decrement f
Decrement f, Skip if 0
d = f -1 (onde d pode ser W ou f) se d = 0 salta
JanDECFSZ
20 f,d
PICmicro
Microcontroladores
- Jos Carlos F
65
Instrues
Sintaxe
Descrio Microchip
Operao equivalente
GOTO k
Go to address
INCF f,d
Increment f
INCFSZ f,d
Increment f, Skip if 0
IORLW k
W = W OR k
IORWF f,d
Inclusive OR W with f
MOVLW k
Move literal to W
W=k
MOVF f,d
Move f
MOVWF f
Move W to f
f=W
NOP
No Operation
Nenhuma operao
OPTION
OPTION = W
RETFIE
RETLW k
Return Literal to W
RETURN
RLF f,d
66
Instrues
Sintaxe
Descrio Microchip
Operao equivalente
SLEEP
SUBLW k
W=k-W
SUBWF f,d
Subtract W from f
SWAPF f
Swap f
TRIS f
TRIS di f = W
XORLW k
W = W XOR k
XORWF f,d
Exclusive OR W with f
Jan 20
67
Instrues - ADDLW
ADDLW
Soma um literal a W
Sintaxe:
[label] ADDLW k
Operandos: 0
k
255
Operao: :
(W) + (k)==> (W)
Flags afectadas: C, DC, Z
Cdigo OP:
11 111x kkkk kkkk
Descrio: Soma o contedo do registo W e k, guardando o resultado
em W.
Exemplo:
ADDLW 0xC2
Antes: W = 0x17
Depois: W = 0xD9
Jan 20
68
Instrues - ADDWF
ADDWF
W + F
Sintaxe:
[label] ADDWF f,d
Operandos: d
[0,1], 0
f
127
Operao:
(W) + (f) ==> (dest)
Flags afectadas: C, DC, Z
Cdigo OP:
00 0111 dfff ffff
Descrio: Soma o contedo do registo W com o registo f. Se d 0,
o resultado armazena-se em W, Se d 1 armazena-se em f.
Exemplo:
ADDWF REG,0
Jan 20
69
Instrues - ANDLW
ANDLW
W AND literal
Sintaxe:
[label] ANDLW k
Operandos: 0
k
255
Operao: :
(W) AND (k)==> (W)
Flags afectadas:
Z
Cdigo OP:
11 1001 kkkk kkkk
Descrio: Realiza a operao lgica AND entre o contedo do
registo W e k, guardando o resultado em W.
Exemplo:
ADDLW 0xC2
Antes: W = 0x17
Depois: W = 0xD9
Jan 20
70
Instrues - BCF
BCF
Apaga um bit
Sintaxe:
[label] BCF f,b
Operandos: 0
f
127, 0
b
7
Operao: :
0 ==> (f<b>)
Flags afectadas: nenhum
Cdigo OP:
01 00bb bfff ffff
Descrio: Apaga o bit b do registo f
Exemplo: :
BCF REG,7
Jan 20
71
Instrues - BSF
BSF
Activa um bit
Sintaxe:
[label] BSF f,b
Operandos: 0
f
127, , 0
Operao: 1 ==> (f<b>)
Flags afectadas: nenhum
Cdigo OP:
01 01bb bfff
ffff
Exemplo:
BSF REG,7
Jan 20
72
Instrues - BTFSC
BTFSC
Sintaxe:
[label] BTFSC f,d
Operandos: d
[0,1], 0
f
127
Operao:
Salto Se (f<b>) = 0
Flags afectadas: nenhum
Cdigo OP:
01 10bb bfff ffff
Descrio: Se o bit b do registo f 0, salta uma instruo e
continua com a execuo. Em caso de salto, ocupar dois ciclos
de relgio.
Exemplo:
Jan 20
BTFSC REG,6
GOTO NO_ES_0
SI_ES_0 instruo
NO_ES_0 instruo
73
Instrues - BTFSS
BTFSS
Sintaxe:
[label] BTFSS f,d
Operandos: d
[0,1], 0
f
127
Operao:
Salto Se (f<b>) = 1
Flags afectadas: nenhum
Cdigo OP:
01 11bb bfff ffff
Descrio: Se o bit b do registo f 1, salta uma instruo e
continua com a execuo. Em caso de salto, ocupar dois ciclos
de relgio.
Exemplo:
Jan 20
BTFSS REG,6
GOTO NO_ES_0
SI_ES_0 instruo
NO_ES_0 instruo
74
Instrues - CALL
CALL
Sintaxe:
[label] CALL k
Operandos: 0
k
2047
Operao:
PC ==> pilha; k ==> PC
Flags afectadas: nenhum
Cdigo OP:
10 0kkk kkkk kkkk
Descrio: Salta para uma subrotina. A parte baixa de k
carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de
relgio.
Exemplo: ORIGEM CALL DESTINO
Antes: PC = ORIGEM
Depois: PC = DESTINO
Jan 20
75
Instrues - CLRF
CLRF
Apaga um registo
Sintaxe:
[label] CLRF f
Operandos: 0
f
127
Operao: :
0x00 ==> (f), 1 ==> Z
Flags afectadas: Z
Cdigo OP:
00 0001 1fff ffff
Descrio: O registo f carregado com 0x00. A flag Z activada.
Exemplo: :
CLRF REG
Jan 20
76
Instrues - CLRW
CLRW Apaga o registo W
Sintaxe:
[label] CLRW
Operandos: nenhum
Operao: :
0x00 ==> W, 1 ==> Z
Flags afectadas: Z
Cdigo OP:
00 0001 0xxx xxxx
Descrio: O registo de trabalho W carregado com 0x00. A flag Z
activada.
Exemplo: :
CLRW
Antes: W = 0x5A
Depois: W = 0x00, Z = 1
Jan 20
77
Instrues - CLRWDT
CLRWDT
Apaga o WDT
Sintaxe:
[label] CLRWDT
Operandos: nenhum
Operao: 0x00 ==> WDT, 1 ==> /TO
1 ==> /PD
Flags afectadas:
/TO, /PD
Cdigo OP:
00 0000 0110 0100
Descrio: Esta instruo apaga tanto o WDT como o seu preescaler.
Os bits /TO e /PD do registo de estado so colocados a 1.
Exemplo: :
CLRWDT
Depois: Contador WDT = 0,
Preescales WDT = 0,
/TO = 1, /PD = 1
Jan 20
78
Instrues - COMF
COMF
Complemento de f
Sintaxe:
[label] COMF f,d
Operandos: d
[0,1], 0
f
127
Operao: :
(/ f), 1 ==> (dest)
Flags afectadas: Z
Cdigo OP:
00 1001 dfff ffff
Descrio: O registo f complementado. A flag Z activada se o
resultado 0. Se d 0 o resultado armazenado em W. Se d 1
armazenado em f.
Exemplo: :
COMF REG,0
Jan 20
79
Instrues - DECF
DECF
Decremento de f
Sintaxe:
[label] DECF f,d
Operandos: d
[0,1], 0
f
127
Operao: :
(f ) - 1 ==> (dest)
Flags afectadas:
Z
Cdigo OP:
00 0011 dfff ffff
Descrio: Decrementa contedo de f. Se d 0, o resultado
armazenado em W, Se d 1 armazenado em f.
Exemplo: :
DECF CONT,1
Jan 20
80
Instrues - DECFSZ
DECFSZ Decremento e salta se 0
Sintaxe:
[label] DECFSZ f,d
Operandos: d
[0,1], 0
f
127
Operao:
(f) -1 ==> d; Salto Se R=0
Flags afectadas: nenhum
Cdigo OP:
00 1011 dfff ffff
Descrio: Decrementa o contedo do registo f. Se d 0, o
resultado armazenado em W. Se d 1 armazenado em f. Se o
resultado 0 salta uma instruo e ocuparia 2 ciclos.
Exemplo:
DECFSZ REG,0
GOTO NO_ES_0
SI_ES_0 instruo
NO_ES_0 Salta instruo anterior
Jan 20
81
Instrues - GOTO
GOTO
Salto incondicional
Sintaxe:
[label] GOTO k
Operandos: 0
k
2047
Operao:
k ==> PC <8:0>
Flags afectadas: nenhum
Cdigo OP:
10 1kkk kkkk kkkk
Descrio: Trata-se de um salto incondicional. A parte baixa de k
carregada em PCL, e a alta em PCLATCH. Ocupa 2 ciclos de
relgio.
Exemplo: ORIGEM GOTO DESTINO
Antes: PC = ORIGEM
Depois: PC = DESTINO
Jan 20
82
Instrues - INCF
INCF
Incremento de f
Sintaxe:
[label] INCF f,d
Operandos: d
[0,1], 0
f
127
Operao: :
(f ) + 1 ==> (dest)
Flags afectadas:
Z
Cdigo OP:
00 1010 dfff ffff
Descrio: Incrementa o contedo de f. Se d 0, o resultado
armazenado em W. Se d 1 armazenado em f.
Exemplo: :
INCF CONT,1
Jan 20
83
Instrues - INCFSZ
INCFSZ Incremento e salta se 0
Sintaxe:
[label] INCFSZ f,d
Operandos: d
[0,1], 0
f
127
Operao:
(f) -1 ==> d; Salto Se R=0
Flags afectadas: nenhum
Cdigo OP:
00 1111 dfff ffff
Descrio: Incrementa o contedo do registo f. Se d 0, o
resultado armazenado em W. Se d 1 armazenado em f. Se o
resultado 0 salta a instruo seguinte, em cujo caso
demoraria 2 ciclos.
Exemplo:
INCFSC REG,0
GOTO NO_ES_0
SI_ES_0 instruo
NO_ES_0 Salta instruo anterior
Jan 20
84
Instrues - IORLW
IORLW
W OR literal
Sintaxe:
[label] IORLW k
Operandos: 0
k
255
Operao: :
(W) OR (k)==> (W)
Flags afectadas:
Z
Cdigo OP:
11 1000 kkkk kkkk
Descrio: Realiza a operao lgica OR entre o contedo do
registo W e k, guardando o resultado em W.
Exemplo:
IORLW 0x35
Antes: W = 0x9A
Depois: W = 0xBF
Jan 20
85
Instrues - IORLWF
IORWF
W OR F
Sintaxe:
[label] IORWF f,d
Operandos: d
[0,1], 0
f
127
Operao: (W) OR (f) ==> (dest)
Flags afectadas:
Z
Cdigo OP:
00 0100 dfff ffff
Descrio: Realiza a operao lgica OR entre os registos W e f.
Se d 0, o resultado armazenado em W. Se d 1 armazenado
em f.
Exemplo: :
IORWF REG,0
Jan 20
86
Instrues - MOVLW
MOVLW
Carregar literal em W
Sintaxe:
[label] MOVLW f
Operandos: 0
f
255
Operao:
(k) ==> (W)
Flags afectadas: nenhum
Cdigo OP:
11 00xx kkkk kkkk
Descrio: O literal k passa ao registo W.
Exemplo:
MOVLW 0x5A
Jan 20
87
Instrues - MOVF
MOVF
Mover f para W
Sintaxe:
[label] MOVF f,d
Operandos: d
[0,1], 0
f
127
Operao:
(f) ==> (dest)
Flags afectadas: Z
Cdigo OP:
00 1000 dfff ffff
Descrio: O contedo do registo f movido para o destino
dependendo de d. Se d 0, o resultado armazenado em W. Se d
1 armazenado em f. Quando d 1 permite verificar o
registo, j que afecta a Z.
Exemplo:
MOVF REG,0
Depois: W = REG
Jan 20
88
Instrues - MOVWF
MOVWF
Mover W para f
Sintaxe:
[label] MOVWF f
Operandos: 0
f
127
Operao:
W ==> (f)
Flags afectadas: nenhum
Cdigo OP:
00 0000 1fff ffff
Descrio: O contedo do registo W passa para o registo f.
Exemplo:
MOVWF REG,0
Jan 20
89
Instrues - NOP
NOP
No operao
Sintaxe:
[label] NOP
Operandos: nenhum
Operao: No operar
Flags afectadas:
nenhum
Cdigo OP:
00 0000 0xx0
0000
Exemplo:
Jan 20
NOP
90
Instrues - RETFIE
RETFIE regresso de
interrupo
Sintaxe:
[label] RETFIE
Operandos: nenhum
Operao: :
1 ==> GIE; TOS==>PC
Flags afectadas:
nenhum
Cdigo OP:
00 0000 0000 1001
Descrio: o PC carregado com o contedo de cima da pilha (TOS):
direco de regresso. Consome 2 ciclos. As interrupes voltam
a ser habilitadas.
Exemplo: :
RETFIE
Depois: PC = direco de regresso
GIE = 1
Jan 20
91
Instrues - RETLW
RETLW
Sintaxe:
[label] RETLW k
Operandos: 0
k
255
Operao: :
(k)==> (W); TOS==>PC
Flags afectadas:
nenhum
Cdigo OP:
11 01xx kkkk kkkk
Descrio: O registo W carregado com a constante k. O PC
carregado com o contedo de cima da pilha (TOS): direco de
regresso. Consome 2 ciclos.
Exemplo: :
RETLW 0x37
Depois: PC = direco de regresso
W = 0x37
Jan 20
92
Instrues - RETURN
RETURN regresso de rotina
Sintaxe:
[label] RETURN
Operandos: nenhum
Operao: :
TOS ==> PC
Flags afectadas:
nenhum
Cdigo OP:
00 0000 0000
1000
RETURN
Jan 20
93
Instrues - RLF
RLF
Sintaxe:
[label] RLF f,d
Operandos: d
[0,1], 0
f
127
Operao: Rotao a a esquerda
Flags afectadas: C
Cdigo OP:
00 1101 dfff ffff
Descrio: O contedo de f rodado para a esquerda. O bit de
menor peso de f passa para o carry (C), e o carry colocado no
de maior peso. Se d 0, o resultado armazenado em W. Se d
1 armazenado em f.
Exemplo:
RLF REG,0
Jan 20
94
Instrues - RRF
RRF
Sintaxe:
[label] RRF f,d
Operandos: d
[0,1], 0
f
127
Operao: Rotao a a direita
Flags afectadas: C
Cdigo OP:
00 1100 dfff ffff
Descrio: O contedo de f rodado para a direita. O bit de menos
peso de f passa para o carry (C), e o carry colocado no de
maior peso. Se d 0, o resultado armazenado em W. Se d 1
armazenado em f.
Exemplo:
RRF REG,0
Jan 20
95
Instrues - SLEEP
SLEEP Modo baixo consumo
Sintaxe:
[label] SLEEP
Operandos: nenhum
Operao: 0x00==>WDT, 1 ==> / TO
0 ==> WDT Preescaler, 0 ==> / PD
Flags afectadas:
/ PD, / TO
Cdigo OP:
00 0000 0110 0011
Descrio: O bit de energia colocado a 0, e a 1 o de descanso. O
WDT e o seu preescaler so apagados. o micro pra o oscilador,
ficando adormecido.
Exemplo: :
SLEEP
Preescales WDT = 0,
/TO = 1, /PD = 1
Jan 20
96
Instrues - SUBLW
SUBLW
Subtrai W ao literal
Sintaxe:
Operandos: 0
k
Operao:
( k )
Flags afectadas: Z,
Cdigo OP:
11
Descrio: Mediante
de W subtrado
Exemplos:
[label] SUBLW k
255
- (W) ==> (W)
C, DC
110x kkkk kkkk
o mtodo do complemento para dois o contedo
ao literal. O resultado armazenado em W.
SUBLW
0x02
Jan 20
97
Instrues - SUBLWF
SUBWF
Subtrai W ao f
Sintaxe:
[label] SUBWF f,d
Operandos: d
[0,1], 0
f
127
Operao:
( f ) - (W )==> (dest)
Flags afectadas: C, DC, Z
Cdigo OP:
00 0010 dfff ffff
Descrio: Mediante o mtodo do complemento para dois o contedo
de W subtrado ao de f. Se d 0, o resultado armazenado em
W. Se d 1 armazenado em f.
Exemplos:
SUBWF REG,1
Antes: REG = 0x03, W = 0x02, C = ?
Depois:REG=0x01, W = 0x4F, C=1
Antes: REG = 0x02, W = 0x02, C = ?
Depois:REG=0x00, W =0x02, C= 1
Antes: REG= 0x01, W= 0x02, C= ?
Depois:REG=0xFF, W=0x02, C= 0
(Resultado negativo)
Jan 20
98
Instrues - SWAPF
SWAPF
Troca de f
Sintaxe:
[label] SWAPF f,d
Operandos: d
[0,1], 0
f
127
Operao: :
(f <3: 0>) (f <7:4>)
Flags afectadas:
nenhum
Cdigo OP:
00 1110 dfff ffff
Descrio: Os 4 bits de maior peso e os 4 de menor so trocados.
Se d 0, o resultado armazenado em W. Se d 1 armazenado
em f.
Exemplo:
SWAPF REG,0
Jan 20
99
Instrues - XORLW
XORLW
W XOR literal
Sintaxe:
[label] XORLW k
Operandos: 0
k
255
Operao: :
(W) XOR (k)==> (W)
Flags afectadas:
Z
Cdigo OP:
11 1010 kkkk kkkk
Descrio: Realiza a operao lgica XOR entre o contedo do
registo W e k, guardando o resultado em W.
Exemplo: :
XORLW 0xAF
Antes: W = 0xB5
Depois: W = 0x1A
Jan 20
100
Instrues - XORLW
XORWF
W XOR F
Sintaxe:
[label] XORWF f,d
Operandos: d
[0,1], 0
f
127
Operao: (W) XOR (f) ==> (dest)
Flags afectadas:
Z
Cdigo OP:
00 0110 dfff ffff
Descrio: Realiza a operao lgica XOR entre os registos W e f.
Se d 0, o resultado armazenado em W. Se d 1 armazenado
em f.
Exemplo: :
XORWF REG,0
Jan 20
101
Programa Walk.asm
Jan 20
102
Programa Walk.asm
;
;
;
;
;
;
;
;
;
;
WALK.ASM
To use this program connect four LEDs from each of RB0-RB7 to ground
via four 470 ohm resistors. The LEDs are illuminated one at time in
a to-and-fro pattern.
The illumination rate is more or less independent of the PIC clock
frequency and configuration although this program assumes an RC
oscillator. The program includes the __CONFIG, __IDLOCS and DE
directives (mostly just to show how they can be used). The program
can be used unchanged on any 16X8X device.
LIST
P=16F84
ERRORLEVEL
-302
;SUPPRESS BANK SELECTION MESSAGES
__CONFIG
3FF5H
;XT OSC, WATCHDOG
__IDLOCS
1234
;
PORTB
TRISB
OPTREG
STATUS
CARRY
RP0
MSB
;
Jan 20
EQU
EQU
EQU
EQU
EQU
EQU
EQU
6
86H
81H
3
0
5
3
103
Programa Walk.asm
LEFT
RIGHT
CLRF
BSF
CLRF
MOVLW
MOVWF
BCF
INCF
BCF
SLEEP
RLF
BTFSS
GOTO
SLEEP
RRF
BTFSS
GOTO
GOTO
PORTB
STATUS,RP0
TRISB
0AH
OPTREG
STATUS,RP0
PORTB,F
STATUS,CARRY
PORTB,F
PORTB,MSB
LEFT
PORTB,F
PORTB,0
RIGHT
LEFT
;
ORG
2100H
DE
END
Jan 20
104
Porta Srie
Jan 20
105
Jan 20
Nome do
pino
25 pinos
9 pinos
Direco
I/O
TxD
RxD
Gnd
RTS
CTS
DTR
20
DSR
RI
22
DCD
106
Porta Srie
Jan 20
107
Jan 20
Nome do registo
Transmitter Holding
Register/Receiver Character
Buffer/LSB Divisor Latch
Scratchpad Register
108
Porta Srie
Jan 20
Velocidade=1,8432
Mhz/(16*Divisor )
Velocidade
Divisor
110 bps
0x0417
300 bps
0x0180
600 bps
0x00C0
1200 bps
0x0060
2400 bps
0x0030
9600 bps
0x000C
19200 bps
0x0006
115200 bps
0x0001
109
Circuitos
Jan 20
110
Circuitos
Jan 20
111
Bibliografia
Jan 20
112