25/04/2017
1
125/04/2017
Parte 1
IDE
225/04/2017
1. DEFINIÇÃO
2. ASSEMBLY
3. INSTRUÇÕES PIC16F877
4. CONJUNTO DE INSTRUÇÕES
5. BITS DE CONFIGURAÇÃO
6. LITERATURA
DEFINIÇÃO1
325/04/2017
DEFINIÇÃO
DEFINIÇÃO1
425/04/2017
• Editor de texto para entrada do código.
• Debugging do código.
• Simulador de dispositivo.
• Assembler (montador).
• Compilador.
• Outros itens (opcionais).
Componentes
DEFINIÇÃO1
525/04/2017
Editor de texto
• Os montadores e compiladores atuais possuem seus
próprios editores de texto.
• Os primeiros montadores e compiladores não possuíam
editor de texto.
• Era necessário chamar o utilitário IDE na linha de comando
(DOS, por exemplo), usando, como argumento, o arquivo
texto contendo o programa a ser gravado no dispositivo.
• Editores de texto embutidos em IDE usam cores pra auxiliar
a criação ou edição do programa.
DEFINIÇÃO1
625/04/2017
Assembler
• As primeiras versões de IDE para gravação de P’s e
MCU’s permitiam, apenas, o uso dos códigos binários
(opcodes).
• Versões de IDE para gravação de P’s e MCU’s permitiam,
apenas, o uso dos códigos Assembler.
• Versões atuais permitem o uso de pseudocódigos, que
facilitam a criação ou edição do programa.
• O IDE converte o programa contendo os pseudocódigos
para o programa em linguagem assembler pura.
25/04/2017
2
DEFINIÇÃO1
725/04/2017
Debugger
• As primeiras versões de IDE para
gravação de P’s e MCU’s possuíam,
apenas, o procedimento de gravação do
chip.
• Não era fornecido utilitário para verificação
de erros básicos na programação.
• Versões atuais fornecem opções para a
busca por erros básicos.
DEFINIÇÃO1
825/04/2017
Debugger
• Estrutura: O texto é reconhecido como um programa.
• Sintaxe: Os mnemônicos, códigos e números estão corretos.
• Escopo de variáveis: Nenhum número é maior do que a
maior capacidade de representação para o tipo de variável
em questão.
• Escopo de endereços do chip: Os tamanhos das memórias,
das portas, etc, são respeitados. É preciso identificar o
modelo do chip.
• Outros.
DEFINIÇÃO1
925/04/2017
Simulador
• No passado, não havia como prever se o programa
estava correto ou não.
• A única forma de verificar era por meio da gravação
do chip e da execução no próprio chip.
• A gravação pode ser bastante demorada, tornando o
trabalho de criação/edição/correção bastante tedioso.
• Posteriormente, foi acrescentado o recurso da
simulação do chip no computador.
• Somente depois de concluídas todas as verificações
no simulador é que se parte para a verificação na
execução pelo chip.
DEFINIÇÃO1
1025/04/2017
Compilador
• A inclusão de compilador no IDE permite o uso de
linguagens de alto nível.
• Estas linguagens são mais compreensíveis ao ser humano.
• Qualquer linguagem de alto nível pode ser usada em
qualquer chip.
• A vantagem do uso de um compilador específico para o
modelo de chip em questão é que o debugger observa os
limites de endereçamento e os periféricos disponíveis.
DEFINIÇÃO1
1125/04/2017
Compilador
• Compiladores para chips específicos podem ser pacotes
de grande valor comercial.
• Há casos nos quais são oferecidos o ambiente de
programação em linguagem de alto nível e, como brinde,
recebe-se o kit com o módulo gravador, junto com o chip.
DEFINIÇÃO1
1225/04/2017
Ciclo de desenvolvimento
25/04/2017
3
DEFINIÇÃO1
1325/04/2017
Compilação
Código em linguagem C
Código em
linguagem de máquina
DEFINIÇÃO1
1425/04/2017
Exemplo de compilador C para PIC®
DEFINIÇÃO1
1525/04/2017
Compiladores C, Basic e Pascal
DEFINIÇÃO1
1625/04/2017
Compilador de alto nível
DEFINIÇÃO1
1725/04/2017
Linguagem
• A linguagem de compilação não depende do chip.
• Qualquer linguagem de compilação pode ser usada para
qualquer MCU, desde que haja compilador compatível.
• Um compilador usa uma linguagem específica pra um
chip específico.
ASSEMBLY2
1825/04/2017
ASSEMBLY
25/04/2017
4
ASSEMBLY2
1925/04/2017
• Linguagem de máquina: O dispositivo entende.
• Linguagem humana: O ser humano entende.
Linguagens
• Linguagem de máquina: Zeros e uns.
• Linguagem humana: Palavras e números.
• Assembly: Mnemônicos e números hexadecimais.
• Linguagem de máquina: Montado.
• Linguagem humana: Não montado.
ASSEMBLY2
2025/04/2017
• “To Assemble”:Montar, organizar, reunir.
• Assembler: Linguagem de montagem.
• Assembly: Código de montagem (não montado).
• Disassembly: Assembly obtido a partir do código montado.
• Assembly é a linguagem humana de mais baixo nível.
• Assembly depende do P, da MCU ou da DSP usada.
Definição
ASSEMBLY2
2125/04/2017
• Mnemônicos são palavras fáceis de entender.
• Mnemônicos usam, apenas, letras.
• As letras devem ser maiúsculas.
• Mnemônicos são palavras curtas.
• Os mnemônicos são específicos para o dispositivo.
• Dispositivos diferentes podem usar mnemônicos diferentes.
• Os mnemônicos são digitados pelo programador.
• Cada instrução recebe um mnemônico.
• Disassembly: Assembly obtido a partir do código montado.
• Preferencialmente, usar fonte courier new.
Mnemônicos
ASSEMBLY2
2225/04/2017
• É a conversão da linguagem de montagem (assembler)
para linguagem de máquina.
• É a conversão do código assembly para o código montado.
• Código montado é o código binário.
• A linguagem de montagem (assembler) usa:
• Mnemônicos de instrução.
• Parâmetros numéricos para as instruções.
• A linguagem de máquina usa bits.
Montagem
ASSEMBLY2
2325/04/2017
• A relação entre o código em linguagem de montagem
e o código em linguagem de máquina é biunívoca.
• A relação entre a instrução e seu opcode é
biunívoca.
• Em alguns dispositivos processadores, a tabela de
montagem possui algumas irrelevâncias (don’t care –
X) em alguns bits de algumas instruções.
• Essas irrelevâncias fazem com que a relação
biunívoca seja quebrada.
• Geralmente, os montadores substituem as
irrelevâncias por zero.
Montagem
ASSEMBLY2
2425/04/2017
• A conversão do código feito em linguagem assembly para o
código em linguagem de máquina é chamado de montagem.
• A conversão do código feito em linguagem de compilação para
o código em linguagem de máquina é chamado de compilação.
• Compiladores empregam códigos específicos da própria
linguagem.
• A linguagem de compilação não depende do dispositivo
empregado, não usa os seus mnemônicos.
• Compiladores não permitem que o usuário lide com opcodes e
instruções de máquina.
• Compiladores, geralmente, não fornecem o código assembly
sobre o qual a montagem foi realizada.
• Compiladores podem ser de baixo nível e de alto nível.
Linguagem de compilação
25/04/2017
5
ASSEMBLY2
2525/04/2017
• A compilação é feita pelo compilador (Basic, Pascal, C, C++,
Delphy, Java, etc).
• A montagem é feita pelo montador (assembler).
• O programa editor de assembly pode ser constituído de um
simples editor de textos.
• O programa montador consiste de um programa separado do
editor assembly e alguns montadores não possuem o editor,
o arquivo texto é carregado como parâmetro da montagem.
Montagem
ASSEMBLY2
2625/04/2017
• Cada dispositivo necessita ter seu próprio montador.
• Dispositivos diferentes podem ter montadores compatíveis.
• Para aumentar a compatibilidade entre programas, os P’s
são agrupados em famílias com montadores compatíveis.
• Exemplos:
• IA32 ou i386 ou x86-32 (32 bits).
• IA32-EM64T ou x86-64 (64 bits).
Montagem
ASSEMBLY2
2725/04/2017
• Alguns editores assembly permitem a inclusão de códigos
que não fazem parte do assembly puro, chamados de
pseudocódigos (diretivas de montagem, comentários, etc).
• Estes pseudocódigos permitem que se utilize nomes no
lugar de endereços.
• Endereços podem se referir a registradores, a bits de
registradores e à program memory.
• Estas diretivas tem a função de guiar a criação do código
a ser montado, de modo que o usuário não precise lidar
diretamente com o código assembly, mas, sim, com um
código que apresenta algumas características de
linguagem de compilação.
• Evitaremos o uso de certas diretivas para proporcionar o
aprendizado da linguagem assembler.
Pseudocódigos
ASSEMBLY2
2825/04/2017
• Sabendo qual o modelo do dispositivo, pode-se converter o
seu código de máquina em código de montagem.
• Esta operação é chamada de desmontagem (disassembly).
• O código desmontado somente pode ser obtido usando o
assembly puro, sem os recursos adicionais do montador.
Desmontagem
ASSEMBLY2
2925/04/2017
• Uma e, somente, uma instrução por linha.
• A instrução começa pelo mnemônico.
• O mnemônico é uma palavra, não contém números.
• O mnemônico usa somente letras maiúsculas.
• Após o mnemônico, vem os argumentos da instrução.
• Os argumentos são numéricos.
• Os números são hexadecimais.
• Pode haver zero, um ou dois argumentos.
Código assembly puroEstrutura
ASSEMBLY2
3025/04/2017
• Qualquer outra informação que não seja o mnemônico da
instrução e seus argumentos numéricos não fazem parte do
código assembly puro.
• O código assembly puro pode ser obtido no disassembly.
• O disassembly fornece, apenas, o código assembly puro.
• Informações adicionais não podem ser obtidas no disassembly.
• A relação entre o código disassembly e o código montado é
biunívoca.
Código assembly puro
25/04/2017
6
ASSEMBLY2
3125/04/2017
• O código assembly pode conter outras informações
além do assembly puro que facilitam a
elaboração/compreensão do programa.
• Estas extensões facilitam a elaboração do programa.
• Essas extensões podem ser diretivas de
programação, variáveis, constantes, etc.
• Essas extensões são específicas do fabricante do
programa montador. Cada fabricante pode ter o seu
conjunto próprio de extensões.
• Essas extensões são perdidas no código
disassembly.
• Cores são usadas para facilitar o desenvolvimento
de programas no ambiente assembler.
Código assembly
ASSEMBLY2
3225/04/2017
Debuging
Assembly com
extensões
Assembly puro
Conversão feita manualmente
ou automaticamente pelo
ambiente de desenvolvimento.
Impossível
Digitação
ASSEMBLY2
3325/04/2017
Debuging
• Tanto o código assembly com extensões como o
código assembly puro estão em linguagem humana.
• É na conversão do código assembly com extensões
para o código assembly puro que a verificação de
erros é realizada.
• Se o código pôde ser escrito como assembly puro, é
porque nenhum erro de sintaxe e de escopo foi
encontrado.
• Uma vez “debugado”, o código já pode ser montado.
ASSEMBLY2
3425/04/2017
Ambiente assembler
Assembly com
extensões
Assembly puro
Linguagem de máquina
Montagem
Desmontagem
Chip
Programação
Leitura
Usuário
Automático
001101101011
101001001010
101010001010
101010000110
ASSEMBLY2
3525/04/2017
Ambiente assembler
Editor de texto ou de
hipertexto
DebuggerMontador
Gravador do chip
ASSEMBLY2
3625/04/2017
Ambiente compiler
Linguagem de alto nível
Linguagem de montagem
Linguagem de máquina Chip
Montagem
Desmontagem
Programação
Leitura
Compilação
Usuário
A parte em vermelho geralmente não é disponibilizada.
001101101011
101001001010
101010001010
101010000110
25/04/2017
7
ASSEMBLY2
3725/04/2017
• Sintaxe:
• Mnemônico de instrução inválido.
• Escopo:
• Dado inválido.
• Endereço inválido.
• Parâmetro inválido.
• Erro em parâmetros além do assembly puro.
DebuggerTipos de erro
ASSEMBLY2
3825/04/2017
• O debugger realiza a descoberta de erros porque ele
sabe qual o modelo de P/MCU/DSP a ser usado.
• É preciso definir o modelo do dispositivo.
• É preciso que o montador seja compatível com o modelo.
• O montador compatível possui todos os parâmetros
necessários do dispositivo para que seja feita a busca
por erros de sintaxe ou de escopo.
Debugger
ASSEMBLY2
61.JA
62.JAE
63.JB
64.JBE
65.JNA
66.JNAE
67.JNB
68.JNBE
69.JC
70.JNC
3925/04/2017
Mnemônicos P x86-32 (resumido)1. MOV
2. XCHG
3. STC
4. CLC
5. CMC
6. STD
7. CLD
8. STI
9. CLI
10.PUSH
11.PUSHF
12.PUSHA
13.POP
14.POPF
15.POPA
16.CBW
17.CWD
18.CWDE
19.IN
20.OUT
21.ADD
22.ADC
23.SUB
24.SBB
25.DIV
26.IDIV
27.MUL
28.IMUL
29.INC
30.DEC
31.CMP
38.NEG
39.NOT
40.AND
41.OR
42.XOR
43.SHL
44.SHR
45.NOP
46.LEA
47.INT
48.CALL
49.JMP
50.JE
51.JZ
52.JCXZ
53.JP
54.JPE
55.RET
56.JNE
57.JNZ
58.JECXZ
59.JNP
60.JPO
Transfer
32.SAL
33.SAR
34.RCL
35.RCR
36.ROL
37.ROR
Arithmetic Logic Misc
Jumps
Jumps
Unsigned
71.JG
72.JGE
73.JL
74.JLE
75.JNG
76.JNGE
77.JNL
78.JNLE
79.JO
80.JNO
81.JS
82.JNS
Jumps
Signed
http://www.jegerlehner.ch/intel/IntelCodeTable.pdf
CISC
ASSEMBLY2
4025/04/2017
Exemplos de P x86-32
1. Intel® Pentium processor
2. Intel® Pentium Pro processor
3. Intel® Pentium II processor
4. Intel® Pentium II Xeon processor
5. Intel® Celeron processor
6. Intel® Pentium III processor
7. Intel® Pentium III Xeon processor
8. AdvancedMicroDevices© Athlon processor
9. AdvancedMicroDevices© Opteron processor
http://docs.oracle.com/cd/E19253-01/817-5477/817-5477.pdf
CISC
ASSEMBLY2
4125/04/2017
Mnemônicos ARM1. ABS
2. ACS
3. ADC
4. ADD
5. ADF
6. ADR
7. ADRL
8. ALIGN
9. AND
10. ASL
11. ASN
12. ASR
13. ATN
14. B
15. BIC
16. BKPT
17. BL
18. BLX
19. BX
20. CDP
21. CDP2
22. CLZ
23. CMF
24. CMN
25. CMP
26. CNF
27. COS
28. DCx
29. DVF
30. EOR
31. EQUx
32. EXP
33. FABS
34. FADD
35. FCMP
36. FCVTDS
37. FCVTSD
38. FCPY
39. FDIV
40. FDV
81. LDRSB
82. LDRSH
83. LFM
84. LGN
85. LOG
86. LSL
87. LSR
88. MCR
89. MCR2
90. MCRR
91. MLA
92. MNF
93. MOV
94. MRC
95. MRC2
96. MRRC
97. MRS
98. MSR
99. MUF
100. MUL
101. MVF
102. MVN
103. NEG
104. NOP
105. NRM
106. OPT
107. ORR
108. ORR
109. PLD
110. POL
111. POP
112. POW
113. PUSH
114. QADD
115. QDADD
116. QDSUB
117. QSUB
118. RDF
119. RFC
120. RFS
41. FIX
42. FLD
43. FLDMDB
44. FLDMIA
45. FLT
46. FMAC
47. FMDHR
48. FMDLR
49. FMRDH
50. FMRDL
51. FML
52. FMSC
53. FMRS
54. FMSR
55. FMUL
56. FMRX
57. FMSTAT
58. FMXR
59. FNEG
60. FNMAC
61. FNMSC
62. FNMUL
63. FRD
64. FSITO
65. FSQRT
66. FST
67. FSTMDB
68. FSTMIA
69. FSUB
70. FTOSI
71. FTOUI
72. FUITO
73. LDC
74. LDC2
75. LDF
76. LDM
77. LDMIA
78. LDR
79. LDRB
80. LDRH
121. RMF
122. RND
123. ROR
124. RPW
125. RRX
126. RSB
127. RSC
128. RSF
129. SBC
130. SFM
131. SIN
132. SMLA
133. SMLAL
134. SMLAW
135. SMUL
136. SMULL
137. SMULW
138. SQT
139. STC
140. STC2
141. STF
142. STM
143. STMIA
144. STR
145. STR
146. STRB
147. STRH
148. STRSB
149. STRSH
150. SUB
151. SUF
152. SWI
153. SWP
154. TAN
155. TEQ
156. TST
157. UMLAL
158. UMULL
159. URD
160. WFC
161. WFS
http
://ww
w.h
eyric
k.co.u
k/ass
em
ble
r/qfin
der.htm
l
ASSEMBLY2
4225/04/2017
Mnemônicos AVR
1. ADD
2. ADC
3. SUB
4. SUBI
5. SBC
6. SBCI
7. AND
8. ANDI
9. OR
10. ORI
11. EOR
12. COM
13. NEG
14. SBR
15. CBR
16. INC
17. DEC
18. TST
19. CLR
20. SER
53. LD
54. ST
55. MOV
56. LDI
57. IN
58. OUT
59. LPM
21. RJMP
22. CALL
23. RET
24. RETI
25. CPSE
26. CP
27. CPC
28. CPI
29. SBRC
30. SBRS
31. SBIC
32. SBIS
33. BRBS
34. BRBC
35. BREQ
36. BRNE
37. BRCS
38. BRCC
39. BRSH
40. BRLO
41. BRMI
42. BRPL
43. BRGE
44. BRLT
45. BRHS
46. BRHC
47. BRTS
48. BRTC
49. BRVS
50. BRVC
51. BRIE
52. BRID
60. SBI
61. CBI
62. LSL
63. LSR
64. ROL
65. ROR
66. ASR
67. SWAP
68. BSET
69. BCLR
70. BST
71. BLD
72. SEC
73. CLC
74. SEM
75. CLN
76. SEZ
77. CLZ
78. SEI
79. CLI
80. SES
81. CLS
82. SEV
83. CLV
84. SET
85. CLT
86. SEH
87. CLH
88. NOP
89. SLEEP
90. WDR
http
://en.w
ikipedia
.org
/wiki/A
tmel_
AV
R_in
stru
ctio
n_se
t
Aritmética
Desvio
Transferência
Sobre bits
25/04/2017
8
ASSEMBLY2
4325/04/2017
Mnemônicos 8-bit MCU Intel® 8051
http
://ww
w.w
in.tu
e.n
l/~aeb/co
mp/8
051/s
et8
051.h
tml
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
0x00 NOP AJMP LJMP RR INC INC INC INC INC INC INC INC INC INC INC INC
0x10 JBC ACALL LCALL RRC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC DEC
0x20 JB AJMP RET RL ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD
0x30 JNB ACALL RETI RLC ADDC ADDC ADDC ADDC ADDC ADDC ADDC ADDC ADDC ADDC ADDC ADDC
0x40 JC AJMP ORL ORL ORL ORL ORL ORL ORL ORL ORL ORL ORL ORL ORL ORL
0x50 JNC ACALL ANL ANL ANL ANL ANL ANL ANL ANL ANL ANL ANL ANL ANL ANL
0x60 JZ AJMP XRL XRL XRL XRL XRL XRL XRL XRL XRL XRL XRL XRL XRL XRL
0x70 JNZ ACALL ORL JMP MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
0x80 SJMP AJMP ANL MOVC DIV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
0x90 MOV ACALL MOV MOVC SUBB SUBB SUBB SUBB SUBB SUBB SUBB SUBB SUBB SUBB SUBB SUBB
0xa0 ORL AJMP MOV INC MUL ? MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
0xb0 ANL ACALL CPL CPL CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE CJNE
0xc0 PUSH AJMP CLR CLR SWAP XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH XCH
0xd0 POP ACALL SETB SETB DA DJNZ XCHD XCHD DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ DJNZ
0xe0 MOVX AJMP MOVX MOVX CLR MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
0xf0 MOVX ACALL MOVX MOVX CPL MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
ASSEMBLY2
4425/04/2017
Instructions OpCode
INC A 0x04
INC iram addr 0x05
INC @R0 0x06
INC @R1 0x07
INC R0 0x08
INC R1 0x09
INC R2 0x0A
INC R3 0x0B
INC R4 0x0C
INC R5 0x0D
INC R6 0x0E
INC R7 0x0F
INC DPTR 0xA3
Instructions OpCode
ADD A,#data 0x24
ADD A,iram addr 0x25
ADD A,@R0 0x26
ADD A,@R1 0x27
ADD A,R0 0x28
ADD A,R1 0x29
ADD A,R2 0x2A
ADD A,R3 0x2B
ADD A,R4 0x2C
ADD A,R5 0x2D
ADD A,R6 0x2E
ADD A,R7 0x2F
Instructions OpCode
ACALL page0 0x11
ACALL page1 0x31
ACALL page2 0x51
ACALL page3 0x71
ACALL page4 0x91
ACALL page5 0xB1
ACALL page6 0xD1
ACALL page7 0xF1
http://www.win.tue.nl/~aeb/comp/8051/set8051.html
Mnemônicos 8-bit MCU Intel® 8051
• Em arquitetura CISC, um mesmo mnemônico
pode ser empregado em várias instruções.
• Em cada uma delas, a sintaxe é diferente.
ASSEMBLY2
4525/04/2017
ACI DCX LXI RPE
ADC DCX LXI RPO
ADC DCX MOV RZ
ADD DCX MOV RLC
ADD DI MOV RRC
ADI EI MVI RST
ANA HLT MVI SBB
ANA IN NOP SBB
ANI INR ORA SBI
CALL INR ORA SHLD
CC INX ORI SIM
CM INX OUT SPHL
CMA INX PCHL STA
CMC INX POP STAX
CMP JMP POP STAX
CMP JC POP STC
CNC JM POP SUB
CNZ JNC PUSH SUB
CP JNZ PUSH SUI
CPE JP PUSH XCHG
CPI JPE PUSH XRA
CPO JPO RAL XRA
CZ JZ RAR XRI
DAA LDA RET XTHL
DAD LDAX RC
DAD LDAX RIM
DAD LHLD RM
DAD LXI RNC
DCR LXI RNZ
DCR LXI RP
CISC
http://cdn.cpu-world.com/CPUs/8085/S_Intel-D8085AH-1.jpg
Mnemônicos 8-bit P Intel® 8085
ASSEMBLY2
4625/04/2017
Mnemônicos 8-bit P Intel® 8080 e Zilog® Z80adc a,(hl) cp n inc (ii+s) ld (hl),n or n rlc (hl) srl (hl)
adc a,(ii+s) cp r inc r ld (hl),r or r rlc (ii+s) srl (ii+s)
adc a,n cpd inc ss ld (ii+s),n otdr rlc r srl r
adc a,r cpdr inc ii ld (ii+s),r otir rlca sub (hl)
adc hl,ss cpi ind ld a,(nn) out (n),a rld sub (ii+s)
add a,(hl) cpir indr ld a,(bc) out (c),r rr (hl) sub n
add a,(ii+s) cpl ini ld a,(de) outd rr (ii+s) sub r
add a,n daa inir ld a,i outi rr r xor (hl)
add a,r dec (hl) jp (hl) ld a,r pop rr rra xor (ii+s)
add hl,ss dec (ii+s) jp (ii) ld r,(hl) pop ii rrc (hl) xor n
add ii,pp dec r jp nn ld r,(ii+s) push rr rrc (ii+s) xor r
and (hl) dec ss jp c,nn ld r,n push ii rrc r
and (ii+s) dec ii jp m,nn ld r1,r2 res b,(hl) rrca
and n di jp nc,nn ld i,a res b,(ii+s) rrd
and r djnz s jp nz,nn ld r,a res b,r rst k
bit b,(hl) ei jp p,nn ld ss,(nn) ret sbc a,(hl)
bit b,(ii+s) ex (sp),hl jp pe,nn ld hl,(nn) ret c sbc a,(ii+s)
bit b,r ex (sp),ii jp po,nn ld ii,(nn) ret m sbc a,n
call nn ex af,af' jp z,nn ld ss,nn ret nc sbc a,r
call c,nn ex de,hl jr s ld ii,nn ret nz sbc hl,ss
call m,nn exx jr c,s ld sp,hl ret p scf
call nc,nn halt jr nc,s ld sp,ii ret pe set b,(hl)
call nz,nn (HALT) jr nz,s ldd ret po set b,(ii+s)
call p,nn im 0 jr z,s lddr ret z set b,r
call pe,nn im 1 ld (nn),a ldi reti sla (hl)
call po,nn im 2 ld (nn),ss ldir retn sla (ii+s)
call z,nn in a,(n) ld (nn),hl neg rl (hl) sla r
ccf in r,(c) ld (nn),ii nop rl (ii+s) sra (hl)
cp (hl) *1 ld (bc),a or (hl) rl r sra (ii+s)
cp (ii+s) inc (hl) ld (de),a or (ii+s) rla sra r
http://www.angelfire.com/art2/unicorndreams/msx/Z80R800A.html
ASSEMBLY2
27.CALL
28.GOTO
29.RETLW
23.MOVLW
24.IORLW
25.ANDLW
26.XORLW
4725/04/2017
Mnemônicos PIC® 8-bit baseline19.BCF
20.BSF
21.BTFSC
22.BTFSS
bbbf
bbbf
bbbf
bbbf
ffff
ffff
ffff
ffff
01 00
01 01
01 10
01 11
11 00
11 01
11 10
11 11
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
10 01
10 1k
10 00
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
00 00
00 00
00 00
00 00
0000
0000
0000
0000
0100
0010
0011
0fff
30.CLRWDT
31.OPTION
32.SLEEP
33.TRIS
1. ADDWF
2. ANDWF
3. COMF
4. DECF
5. DECFSZ
6. INCF
7. INCFSZ
8. IORWF
9. MOVF
10.RLF
11.RRF
12.SUBWF
13.SWAPF
14.XORWF
15.MOVWF
16.CLRF
17.NOP
18.CLRW
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
0111
0101
1001
0011
1011
1010
1111
0100
1000
1101
1100
0010
1110
0110
0000
0001
0000
0001
df
df
df
df
df
df
df
df
df
df
df
df
df
df
1f
1f
00
00
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
0000
0000
ASSEMBLY2
4825/04/2017
Mnemônicos PIC® 8-bit mid-range19.BCF
20.BSF
21.BTFSC
22.BTFSS
00bb
01bb
10bb
11bb
bfff
bfff
bfff
bfff
ffff
ffff
ffff
ffff
01
01
01
01
0000
0000
0000
0000
0110
0000
0000
0110
0100
1001
1000
0011
32.CLRWDT
33.RETFIE
34.RETURN
35.SLEEP
00
00
00
00
00xx
01xx
1000
1001
1010
110x
111x
kkkk
kkkk
kkkk
kkkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
23.MOVLW
24.RETLW
25.IORLW
26.ANDLW
27.XORLW
28.SUBLW
29.ADDLW
11
11
11
11
11
11
11
0kkk
1kkk
kkkk
kkkk
kkkk
kkkk
30.CALL
31.GOTO
10
10
1. ADDWF
2. ANDWF
3. COMF
4. DECF
5. DECFSZ
6. INCF
7. INCFSZ
8. IORWF
9. MOVF
10.RLF
11.RRF
12.SUBWF
13.SWAPF
14.XORWF
15.MOVWF
16.CLRF
17.NOP
18.CLRW
0111
0101
1001
0011
1011
1010
1111
0100
1000
1101
1100
0010
1110
0110
0000
0001
0000
0001
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
1fff
1fff
0xx0
0xxx
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
0000
xxxx
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
25/04/2017
9
ASSEMBLY2
4925/04/2017
Mnemônicos PIC® 8-bit e.mid-range19.BCF
20.BSF
21.BTFSC
22.BTFSS
00bb
01bb
10bb
11bb
bfff
bfff
bfff
bfff
ffff
ffff
ffff
ffff
01
01
01
01
0000
0100
1000
1001
1010
1100
1110
kkkk
kkkk
kkkk
kkkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
kkkk
23.MOVLW
24.RETLW
25.IORLW
26.ANDLW
27.XORLW
28.SUBLW
29.ADDLW
11
11
11
11
11
11
11
30.ADDWFC
31.ASRF
32.LSLF
33.LSRF
34.SUBWFB
1101
0111
0101
0110
1011
dfff
dfff
dfff
dfff
dfff
ffff
ffff
ffff
ffff
ffff
11
11
11
11
11
1. ADDWF
2. ANDWF
3. COMF
4. DECF
5. DECFSZ
6. INCF
7. INCFSZ
8. IORWF
9. MOVF
10.RLF
11.RRF
12.SUBWF
13.SWAPF
14.XORWF
15.MOVWF
16.CLRF
17.NOP
18.CLRW
0111
0101
1001
0011
1011
1010
1111
0100
1000
1101
1100
0010
1110
0110
0000
0001
0000
0001
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
dfff
1fff
1fff
0000
0000
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
0000
00xx
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
ASSEMBLY2
5025/04/2017
Mnemônicos PIC® 8-bit e.mid-range
37.MOVLB
38.MOVLP
0000
0001
001k
1kkk
kkkk
kkkk
00
11
39.BRA
40.BRW
41.CALLW
42.RETFIE
43.RETURN
44.CLRWDT
45.OPTION
46.RESET
47.SLEEP
48.TRIS
49.ADDFSR
50.MOVIW
51.MOVWI
001k
0000
0000
0000
0000
0000
0000
0000
0000
0000
0001
0000
1111
0000
1111
kkkk
0000
0000
0000
0000
0110
0110
0000
0110
0110
0nkk
0001
0nkk
0001
1nkk
kkkk
1011
1010
1001
1000
0100
0010
0001
0011
0fff
kkkk
0nmm
1nmm
kkkk
kkkk
11
00
00
00
00
00
00
00
00
00
11
00
11
00
11
kkkk
kkkk
kkkk
kkkk
35.CALL
36.GOTO
10
10
0kkk
1kkk
ASSEMBLY2
5125/04/2017
Quadro comparativoBaseline Mid Range E. M. R.
LSLF
LSRF
MOVF MOVF MOVF
MOVIW
MOVLB
MOVLP
MOVLW MOVLW MOVLW
MOVWF MOVWF MOVWF
MOVWI
NOP NOP NOP
OPTION OPTION
RESET
RETFIE RETFIE
RETLW RETLW RETLW
RETURN RETURN
RLF RLF RLF
RRF RRF RRF
SLEEP SLEEP SLEEP
SUBLW SUBLW
SUBWF SUBWF SUBWF
SUBWFB
SWAPF SWAPF SWAPF
TRIS TRIS
XORLW XORLW XORLW
XORWF XORWF XORWF
Baseline Mid Range E. M. R.ADDFSR
ADDLW ADDLW
ADDWF ADDWF ADDWF
ADDWFC
ANDLW ANDLW ANDLW
ANDWF ANDWF ANDWF
ASRF
BCF BCF BCF
BRA
BRW
BSF BSF BSF
BTFSC BTFSC BTFSC
BTFSS BTFSS BTFSS
CALL CALL CALL
CALLW
CLRF CLRF CLRF
CLRW CLRW CLRW
CLRWDT CLRWDT CLRWDT
COMF COMF COMF
DECF DECF DECF
DECFSZ DECFSZ DECFSZ
GOTO GOTO GOTO
INCF INCF INCF
INCFSZ INCFSZ INCFSZ
IORLW IORLW IORLW
IORWF IORWF IORWF
ASSEMBLY2
5225/04/2017
• Importar um código assembly feito
para um chip e usá-lo em outro tipo
de chip nem sempre é tarefa fácil.
• Podem ser necessárias alterações
em mnemônicos e em faixas de
valores para operandos.
• Diferenças ocorrem até mesmo
dentro da mesma família.
Importação de código
ASSEMBLY2
5325/04/2017
Mnemônicos PIC® 8-bit PIC181. ADDWF
2. ADDWFC
3. ANDWF
4. CLRF
5. COMF
6. CPFSEQ
7. CPFSGT
8. CPFSLT
9. DECF
10.DECFSZ
11.DCFSNZ
12.INCF
13.INCFSZ
14.INFSNZ
15.IORWF
16.MOVF
17.MOVFF
18.MOVWF
19.MULWF
20.NEGF
21.RLCF
22.RLNCF
23.RRCF
24.RRNCF
25.SETF
26.SUBFWB
27.SUBWF
28.SUBWFB
29.SWAPF
30.TSTFSZ
31.XORWF
32.BCF
33.BSF
34.BTFSC
35.BTFSS
36.BTG
37.BC
38.BN
39.BNC
40.BNN
41.BNOV
42.BNZ
43.BOV
44.BRA
45.BZ
46.CALL
47.CLRWDT
48.DAW
59.ADDLW
60.ANDLW
61.IORLW
62.LFSR
63.MOVLB
64.MOVLW
65.MULLW
66.RETLW
67.SUBLW
68.XORLW
69.TBLRD*
70.TBLRD*+
71.TBLRD*-
72.TBLRD+*
73.TBLWT*
74.TBLWT*+
75.TBLWT*-
76.TBLWT+*
49.GOTO
50.NOP
51.POP
52.PUSH
53.RCALL
54.RESET
55.RETFIE
56.RETLW
57.RETURN
58.SLEEP
ASSEMBLY2
5425/04/2017
Mnemônicos PIC24F (ex.:04KA200)1. ADD
2. ADDC
3. AND
4. ASR
5. BCLR
6. BRA
7. BSET
8. BSW
9. BTG
10.BTSC
11.BTSS
12.BTST
13.BTSTS
14.CALL
15.CLR
16.CLRWDT
17.COM
18.CP
19.CP0
20.CPB
21.CPSEQ
22.CPSGT
23.CPSLT
24.CPSNE
25.DAW
26.DEC
27.DEC2
28.DISI
29.DIV
30.FF1L
31.FF1R
32.GOTO
33.INC
34.INC2
35.IOR
36.LNK
37.LSR
38.MOV
39.MUL
40.NEG
41.NOP
42.POP
43.PUSH
44.PWRSAV
45.RCALL
46.REPEAT
47.RESET
48.RETFIE
49.RETLW
50.RETURN
51.RLC
52.RLNC
53.RRC
54.RRNC
55.SE
56.SETM
57.SL
58.SUB
59.SUBB
60.SUBR
61.SUBBR
62.SWAP
63.TBLRDH
64.TBLRDL
65.TBLWTH
66.TBLWTL
67.ULNK
68.XOR
69.ZE
25/04/2017
10
ASSEMBLY2
5525/04/2017
Mnemônicos PIC24HJ (ex.:12GP201/202)1. ADD
2. ADDC
3. AND
4. ASR
5. BCLR
6. BRA
7. BSET
8. BSW
9. BTG
10.BTSC
11.BTSS
12.BTST
13.BTSTS
14.CALL
15.CLR
16.CLRWDT
17.COM
18.CP
19.CP0
20.CPB
21.CPSEQ
22.CPSGT
23.CPSLT
24.CPSNE
25.DAW
26.DEC
27.DEC2
28.DISI
29.DIV
30.EXCH
31.BFCL
32.FF1L
33.FF1R
34.GOTO
35.INC
36.INC2
37.IOR
38.LNK
39.LSR
40.MOV
41.MUL
42.NEG
43.NOP
44.POP
45.PUSH
46.PWRSAV
47.RCALL
48.REPEAT
49.RESET
50.RETFIE
51.RETLW
52.RETURN
53.RLC
54.RLNC
55.RRC
56.RRNC
57.SE
58.SETM
59.SL
60.SUB
61.SUBB
62.SUBR
63.SUBBR
64.SWAP
65.TBLRDH
66.TBLRDL
67.TBLWTH
68.TBLWTL
69.ULNK
70.XOR
71.ZE
ASSEMBLY2
5625/04/2017
Mnemônicos PIC24EP (ex.:64GP202)1. ADD
2. ADDC
3. AND
4. ASR
5. BCLR
6. BRA
7. BSET
8. BSW
9. BTG
10.BTSC
11.BTSS
12.BTST
13.BTSTS
14.CALL
15.CLR
16.CLRWDT
17.COM
18.CP
19.CP0
20.CPB
21.CPSEQ
22.CPSGT
23.CPSLT
24.CPSNE
25.DAW
26.DEC
27.DEC2
28.DISI
29.DIV
30.DIVF
31.DO
32.ED
33.EDAC
34.EXCH
35.BFCL
36.FF1L
37.FF1R
38.GOTO
39.INC
40.INC2
41.IOR
42.LAC
43.LNK
44.LSR
45.MAC
46.MOV
47.MOVPAG
48.MOVSAC
49.MYP
50.MYP.N
51.MSC
52.MUL
53.NEG
54.NOP
55.POP
56.PUSH
57.PWRSAV
58.RCALL
59.REPEAT
60.RESET
61.RETFIE
62.RETLW
63.RETURN
64.RLC
65.RLNC
66.RRC
67.RRNC
68.SAC
69.SE
70.SETM
71.SFTAC
72.SL
73.SUB
74.SUBB
75.SUBR
76.SUBBR
77.SWAP
78.TBLRDH
79.TBLRDL
80.TBLWTH
81.TBLWTL
82.ULNK
83.XOR
84.ZE
ASSEMBLY2
5725/04/2017
MIPS32® e MIPS64®
• Copyright © Imagination Technologies Limited. All
rights reserved.
• Microprocessor without Interlocked Pipeline Stages.
• microMIPS®: Códigos comprimidos.
• Arquitetura RISC.
• Disponível para MCU´s e DSP´s.
• Os conjuntos de instruções, sua arquitetura e
códigos estão disponíveis para implementação em
qualquer dispositivo de qualquer fabricante.
ASSEMBLY2
5825/04/2017
Mnemônicos PIC32MX (MIPS32) (ex.:64GP202)
http
://ww
w.m
ips.c
om
/media
/files/M
D00565-2
B-M
IPS
32-Q
RC
-01.0
1.p
df
ASSEMBLY2
5925/04/2017
Mnemônicos MIPS64®ADD Add (with overflow)
ADDI Add immediate (with overflow)
ADDIU Add immediate unsigned (no overflow)
ADDU Add unsigned (no overflow)
AND Bitwise and
ANDI Bitwise and immediate
BEQ Branch on equal
BGEZ Branch on greater than or equal to zero
BGEZAL Branch on greater than or equal to zero and link
BGTZ Branch on greater than zero
BLEZ Branch on less than or equal to zero
BLTZ Branch on less than zero
BLTZAL Branch on less than zero and link
BNE Branch on not equal
DIV Divide
DIVU Divide unsigned
J Jump
JAL Jump and link
JR Jump register
LB Load byte
LUI Load upper immediate
LW Load word
MFHI Move from HI
MFLO Move from LO
MULT Multiply
MULTU Multiply unsigned
NOOP no operation
OR Bitwise or
ORI Bitwise or immediate
SB Store byte
SLL Shift left logical
SLLV Shift left logical variable
SLT Set on less than (signed)
SLTI Set on less than immediate (signed)
SLTIU Set on less than immediate unsigned
SLTU Set on less than unsigned
SRA Shift right arithmetic
SRL Shift right logical
SRLV Shift right logical variable
SUB Subtract
SUBU Subtract unsigned
SW Store word
SYSCALL System call
XOR Bitwise exclusive or
XORI Bitwise exclusive or immediate
INSTRUÇÕES PIC16F8773
INSTRUÇÕES PIC16F877
6025/04/2017
25/04/2017
11
INSTRUÇÕES PIC16F8773
• PIC16F877
• O MPLAB® monta os bits não usados como “zero”.
• Um opcode com bits não usados em “um” não é
apresentado na coluna “disassembly”.
• Zeros à esquerda não podem ser omitidos.
6125/04/2017
f Register File Adress* 00h até 7Fh – 7 bits
W Working Register / Acumulator 00h até FFh – 8 bits
b Bit Address 0h até 7h – 3 bits
k Constant, 8 bits 00h até FFh – 8 bits
x Don´t Care (bit não usado)
d Destination 0h até 1h – 1 bit
PC Program Counter** 000h até 7FFh – 11 bits
Siglas
* São 9 bits no total.
** São 13 bits no total.
INSTRUÇÕES PIC16F8773
6225/04/2017
Siglas
• O file é um registrador localizado na SRAM.
• A palavra “f” é de 8 bits porque a MCU é de 8 bits.
• O endereço “f” é de 7 bits porque cada banco da SRAM é
formado por 7 bits.
• “W” é um registrador de 8 bits, tal como os registradores
localizados no file registers.
• Sempre um dos argumentos da ULA é o acumulador.
• Em outros P´s, o registrador “W” é chamado de “A”.
• Em P´s de 16 bits, o acumulador é dividido em “AH” e “AL”.
INSTRUÇÕES PIC16F8773
6325/04/2017
Siglas
• O bit address seleciona um bit em uma
palavra de 8 bits, pois a MCU é de 8 bits.
• O bit address possui 3 bits para
endereçar as 8 posições.
• A constante é um número de 8 bits,
proveniente do barramento de dados, de 8 bits.
INSTRUÇÕES PIC16F8773
6425/04/2017
Categorias
• Os dois bits mais significativos do opcode são
usados na identificação da família da instrução.
• OPCODE<13:12>.
• Cada família possui uma estrutura para o
opcode.
INSTRUÇÕES PIC16F8773
6525/04/2017
Família de instruções sobre bytes (00)
01 ANDWF
02 IORWF
03 XORWF
04 ADDWF
05 SUBWF
06 COMF
07 INCF
08 DECF
09 INCFSZ
10 DECFSZ
11 RLF
12 RRF
13 SWAPF
14 MOVF
15 CLRF
16 CLRW
17 MOVWF
18 NOP
W: Work register (accumulator)
F: File register
OPCODE<13:12> = 00
INSTRUÇÕES PIC16F8773
6625/04/2017
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
416
DEC
Bit08
Bit09
Bit10
Bit11
Bit12
Bit13
CS
Bit07
NOP
MOVWF
CLRW
CLRF
d
Seleção das instruções sobre bytes (00)
25/04/2017
12
INSTRUÇÕES PIC16F8773
6725/04/2017
Instrução Tipo
01 SUB WF Aritmética
02 DEC F Aritmética
03 IOR WF Lógica
04 AND WF Lógica
05 XOR WF Lógica
06 ADD WF Aritmética
07 MOV F Movimentação
08 COM F Lógica
09 INC F Aritmética
10 DEC FSZ Aritmética
11 RR F Lógica
12 RL F Lógica
13 SWAPF Lógica
14 INC FSZ Aritmética
Classificação – Tipo 1 (00)
INSTRUÇÕES PIC16F8773
6825/04/2017
Estrutura da instrução sobre bytes – Tipo 1 (00)
• 4 bits para seleção da operação, OPCODE<11:8>.
• f: Endereço do registrador que contém um dos
argumentos, OPCODE<6:0>.
• d: OPCODE<7>.
• Definição do registrador que conterá o resultado.
• d = 0: O resultado é enviado para W.
• d = 1: O resultado é enviado para file.
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
0 dseleção file
13 12 8 7 6 0
0
11
INSTRUÇÕES PIC16F8773
6925/04/2017
Estrutura da instrução sobre bytes – tipo 2 (00)
• 5 bits para seleção da operação, OPCODE<11:7>.
• f: Endereço do registrador que contém um dos
argumentos, OPCODE<6:0>.
NOP
MOVWF
CLRW
CLRF 0 seleção file
13 12 7 6 0
0
11
Instrução Tipo
15 NOP -
16 MOV WF Movimentação
17 CLR W Lógica/Aritmética
18 CLR F Lógica/Aritmética
INSTRUÇÕES PIC16F8773
7025/04/2017
Sintaxe para o tipo 1 – f,d
01 ANDWF f,d
02 IORWF f,d
03 XORWF f,d
04 ADDWF f,d
05 SUBWF f,d
06 COMF f,d
07 INCF f,d
08 DECF f,d
09 INCFSZ f,d
10 DECFSZ f,d
11 RLF f,d
12 RRF f,d
13 SWAPF f,d
14 MOVF f,d
INSTRUÇÕES PIC16F8773
7125/04/2017
Sintaxe para o tipo 2
1 CLRF f
2 CLRW
3 MOVWF f
4 NOP
INSTRUÇÕES PIC16F8773
7225/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 SUB WF 00b 0010b (02d) dfff ffff
02 DEC F 00b 0011b (03d) dfff ffff
03 IOR WF 00b 0100b (04d) dfff ffff
04 AND WF 00b 0101b (05d) dfff ffff
05 XOR WF 00b 0110b (06d) dfff ffff
06 ADD WF 00b 0111b (07d) dfff ffff
07 MOV F 00b 1000b (08d) dfff ffff
08 COM F 00b 1001b (09d) dfff ffff
09 INC F 00b 1010b (10d) dfff ffff
10 DEC FSZ 00b 1011b (11d) dfff ffff
11 RR F 00b 1100b (12d) dfff ffff
12 RL F 00b 1101b (13d) dfff ffff
13 SWAPF 00b 1110b (14d) dfff ffff
14 INC FSZ 00b 1111b (15d) dfff ffff
Códigos para o tipo 1
Seleção da função
7-bit file addressFamília
25/04/2017
13
INSTRUÇÕES PIC16F8773
7325/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 NOP 00b 0000b (00d) 0xx0 0000
02 MOV WF 00b 0000b (00d) 1fff ffff
03 CLR W 00b 0001b (01d) 0xxx xxxx
04 CLR F 00b 0001b (01d) 1fff ffff
Seleção da
função
Família Bit 7
Códigos para o tipo 2
• Onde existe irrelevância, somente a
substituição total por zero gera código
na coluna disassembly do MPLAB™.
• Na programação pelo MPASM™,
todas as irrelevâncias valem zero.
INSTRUÇÕES PIC16F8773
7425/04/2017
Seleção das funções do tipo 2
24
DEC
Bit07
Bit08
Bit09
Bit10
Bit11
Bit12
Bit13
CS
NOP
MOVWF
CLRW
CLRF
INSTRUÇÕES PIC16F8773
7525/04/2017
1 AND WF
2 IOR WF
3 XOR WF
4 ADD WF
5 SUB WF
Operações de dois operandos com bytes
• 0 f 127 (7 bits)
• Se d=0: “W” = “f” op “W”
• Se d=1: “f” = “f” op “W”
INSTRUÇÕES PIC16F8773
7625/04/2017
1 COM F
2 INC F
3 DEC F
4 INC FSZ
5 DEC FSZ
6 RL F
7 RR F
8 SWAP F
9 MOV F
Operações de um operando com bytes
• 0 f 127 (7 bits)
• Se d=0: “W” = op “f”
• Se d=1: “f” = op “f”
INSTRUÇÕES PIC16F8773
7725/04/2017
1 CLR W (sem operandos)
2 CLR F (um operando)
Operações diferentes com bytes
• 0 f 127 (7 bits)
• Se bit7=0: CLRW “W” = op “W”
• Se bit7=1: CLRF “f” = op “f”
• As duas instruções clear não são
agrupadas e identificadas pelo destiny.
• Isto se deve ao fato das suas sintaxes
serem diferentes.
INSTRUÇÕES PIC16F8773
7825/04/2017
1 CLRW
2 NOP
Operações com bytes sem operandos
25/04/2017
14
INSTRUÇÕES PIC16F8773
7925/04/2017
Família de instruções sobre bytes sobre bits (01)
1 BCF
2 BSF
3 BTFSC
4 BTFSS
F: File register
OPCODE<13:12> = 01
INSTRUÇÕES PIC16F8773
8025/04/2017
• 2 bits para seleção da operação, OPCODE<11:10>.
• b: Campo de bits OPCODE<9:7>.
• Seleciona quais sofrerão a ação.
• f: Endereço do registrador que contém os bits, OPCODE<6:0>.
Estrutura das instruções sobre bits (01)
0 bitseleção file
13 12 7 6 0
1
9
INSTRUÇÕES PIC16F8773
8125/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 BC F 01 00bb bfff ffff
02 BS F 01 01bb bfff ffff
03 BT FSC 01 10bb bfff ffff
04 BT FSS 01 11bb bfff ffff
7-bit file address
Seleção da função
Seleção do bit
Família
Código das instruções sobre bits (01)
INSTRUÇÕES PIC16F8773
8225/04/2017
24
DEC
Bit10
Bit11
Bit12
Bit13
CS
BCF
BSF
BTFSC
BTFSS
Seleção das instruções sobre bits (01)
INSTRUÇÕES PIC16F8773
8325/04/2017
Sintaxe das instruções sobre bits (01)
1 BCF f,b
2 BSF f,b
3 BTFSC f,b
4 BTFSS f,b
INSTRUÇÕES PIC16F8773
8425/04/2017
1 ADDLW
2 ANDLW
3 IORLW
4 MOVLW
5 SUBLW
6 XORLW
7 RETLW
Família de instruções sobre literais (11)
W: Work register (accumulator)
L: Literal ou Constante ou Dado
OPCODE<13:12> = 11
25/04/2017
15
INSTRUÇÕES PIC16F8773
8525/04/2017
• 4 bits para seleção da operação, OPCODE<11:8>.
• k: Número de 8 bits.
• “k” representa o número (literal) que será operado com “W”.
1 seleção k (literal)
13 12 8 7 0
1
11
Família de instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
8625/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 MOV LW 11 00xx kkkk kkkk
02 RET LW 11 01xx kkkk kkkk
03 IOR LW 11 1000 kkkk kkkk
04 AND LW 11 1001 kkkk kkkk
05 XOR LW 11 1010 kkkk kkkk
- 11 1011 xxxx xxxx
06 SUB LW 11 110x kkkk kkkk
07 ADD LW 11 111x kkkk kkkk
8-bit Constant
Seleção da função
Família
Código das instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
8725/04/2017
• A literal (L) é operada com o acumulador (W).
• O resultado é salvo no acumulador (W).
Lógicas
Aritméticas
Movimentação
1 AND LW
2 IOR LW
3 XOR LW
4 ADD LW
5 SUB LW
6 MOV LW
7 RET LW
Classificação das instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
8825/04/2017
416
DEC
Bit08
Bit09
Bit10
Bit11
Bit12
Bit13
CS
IOR
AND
XOR
MOVLW
RETLW
SUBLW
ADDLW
Lógicas
Aritméticas
Mo
vim
enta
çã
o
Seleção das instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
8925/04/2017
1 ANDLW k
2 IORLW k
3 XORLW k
4 ADDLW k
5 SUBLW k
6 MOVLW k
7 RETLW k
• 0 k 255
• “W” = “k” op “W”
Sintaxe das instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
9025/04/2017
Sobre bytes e sobre literais
AND LW
IOR LW
XOR LW
ADD LW
SUB LW
MOV LW
RET LW
AND WF
IOR WF
XOR WF
ADD WF
SUB WF
MOV WF
Lógicas
Aritméticas
Movimentação
File
Família 00
Literal
Família 11
25/04/2017
16
INSTRUÇÕES PIC16F8773
9125/04/2017
1 CLRWDT
2 SLEEP
3 RETURN
4 RETFIE
• Os bits de identificação desta família também são 00.
• OPCODE<13:12> = 00
Família de instruções de controle (00)
INSTRUÇÕES PIC16F8773
9225/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 RETURN 00 0000 0000 1000
02 RETFIE 00 0000 0000 1001
03 SLEEP 00 0000 0110 0011
04 CLRWDT 00 0000 0110 0100
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 NOP 00 0000 0xx0 0000
03 MOVWF 00 0000 1fff ffff
Apesar de parecidos, estes códigos não são confundidos com NOP e MOVWF.
Família
Código das instruções de controle (00)
00_0000_0 seleção
13 7 6 0
INSTRUÇÕES PIC16F8773
9325/04/2017
1 GOTO
2 CALL
Família de instruções de desvio (10)
INSTRUÇÕES PIC16F8773
• 1 bit para seleção da operação, OPCODE<11>.
• k: Número de 11 bits OPCODE<10:0>.
• Instruções: CALL ou GOTO; instruções de desvio.
• CALL e GOTO atuam sobre a program flash.
• “k” representa o endereço dentro da página da flash.
• Cada página possui 11 bits de endereço.
9425/04/2017
Estrutura das instruções de desvio (10)
1 sel k (literal)
13 12 10 0
0
11
INSTRUÇÕES PIC16F8773
9525/04/2017
De desvio (10)Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 CALL 10 0kkk kkkk kkkk
02 GOTO 10 1kkk kkkk kkkk
11-bit Constant
• “k” representa o endereço dentro da página da flash.
• “k” contém os bits do endereço, OPCODE<10:0>.
• “k” seleciona alinha na página da flash.
• Cada página possui 11 bits de endereço.
Família
Seleção
INSTRUÇÕES PIC16F8773
9625/04/2017
Nibble 3
• O terceiro nibble da instrução
identifica a família da instrução.
• OPCODE<13:12>.
• 00b: Sobre byte (tipos 1 e 2)
• 00b: De controle
• 01b: Sobre bit
• 10b: De desvio
• 11b: Sobre literal
25/04/2017
17
INSTRUÇÕES PIC16F8773
9725/04/2017
Padrões de estrutura de opcode
d0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção file address
0 0 seleção
13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 1
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção
1 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
program addresssel.
10
13 12 11 10 6 5 4 3 2 1 09 8 7
sel. bit addr. file address
Tipo 1
Tipo 2
Sobre bit
Sobre literal
De controle
De desvio
Sobre byte
INSTRUÇÕES PIC16F8773
9825/04/2017
Padrões de estrutura de opcode
d0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 00
seleção file address
0 0 seleção
13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 1
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção
1 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
program addresssel.
10
13 12 11 10 6 5 4 3 2 1 09 8 7
sel. bit addr. file address
SUBWF
DECF
IORWF
ANDWF
XORWF
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
NOP
MOVWF
CLRW
CLRF
BCF
BSF
BTFSC
BTFSS
ANDLW
IORLW
XORLW
ADDLW
SUBLW
MOVLW
RETLW
CLRWDT
SLEEP
RETURN
RETFIE
GOTO
CALL
INSTRUÇÕES PIC16F8773
9925/04/2017
Padrões de estrutura de opcode
d0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção file address
0 0 seleção
13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 1
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção
1 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
program addresssel.
10
13 12 11 10 6 5 4 3 2 1 09 8 7
sel. bit addr. file address
Dois
argumentos
Um
argumento
Sem
argumento
INSTRUÇÕES PIC16F8773
10025/04/2017
Seleção das cinco famílias
24
DEC
Bit12
Bit13
Sobre byte / De controle
Sobre bit
De desvio
Sobre literal
INSTRUÇÕES PIC16F8773
10125/04/2017
Instruções de dois ciclos – 2TCY
1 BTFSC
2 BTFSS
3 DECFSZ
4 INCFSZ
5 CALL
6 GOTO
7 RETURN
8 RETLW
9 RETFIE
Condicional
Desvio
INSTRUÇÕES PIC16F8773
10225/04/2017
Instruções não usadas
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
01 OPTION 00 0000 0110 0010
02 TRIS 00 0000 0110 0fff
• Não há proteção contra opcode inválido no chip.
• Um opcode inválido leva a uma ação inesperada.
25/04/2017
18
INSTRUÇÕES PIC16F8773
10325/04/2017
Bits de estado (SR) afetados
AND - - ZIOR - - ZXOR - - ZADD C DC ZSUB C DC ZCLRW - - ZCLRF - - ZCOMF - - ZINCF - - ZDECF - - ZRLF C - ZRRF C - ZSWAPF - - ZMOVF - - Z
Bits de estado
INSTRUÇÕES PIC16F8773
10425/04/2017
Bits de estado (SR) afetados
ADD C DC ZSUB C DC ZRLF C - ZRRF C - Z
Bits de estado
• Nas instruções acima, é preciso considerar
que a resposta é uma palavra de 9 bits.
• A calculadora deve ser configurada para 9 bits.
• Nas demais operações, a calculadora deve ser
configurada para 8 bits.
INSTRUÇÕES PIC16F8773
10525/04/2017
Instrução 3FFFh
• Quando a program memoy está
apagada, todos os seus bits valem “1”.
• Todos os 8k opcodes valem 3FFFh.
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 0
07 ADD LW 11 111x kkkk kkkk
• x = 1
• Como x=1, o código não aparece na coluna disassembly.
• ADDLW ffh
• Esta instrução equivale a SUBLW 01h
• O acumulador é decrementado uma unidade.
CONJUNTO DE INSTRUÇÕES4
10625/04/2017
CONJUNTO DE INSTRUÇÕES
CONJUNTO DE INSTRUÇÕES4
10725/04/2017
NOP
• No Operation.
• Não afeta os bits de estado.
Sintaxe: NOP
• O NOP é usado, principalmente, em situações nas
quais se deseja que a execução de um programa
leve uma determinada quantidade de tempo.
• O uso do NOP permite aumentar o tempo de
execução do programa.
CONJUNTO DE INSTRUÇÕES4
10825/04/2017
NOP – Exemplo de aplicação
Programa
principal
Rotina 1
Rotina 2
Mais curta do que Rotina 1
Programa
principal
Teste
condicional
NOP’s
• O programa leva o
mesmo tempo de
execução nas duas
possibilidades.
25/04/2017
19
CONJUNTO DE INSTRUÇÕES4
10925/04/2017
ANDWF e ANDLW
ANDLW
“W” = “k” AND “W”
ANDWF
d=0: “W” = “f” AND “W”
d=1: “f” = “f” AND “W”
• “E” lógico.
• Afetam o bit de estado “Z”.
Sintaxe: ANDWF f,d
Sintaxe: ANDLW k
CONJUNTO DE INSTRUÇÕES4
11025/04/2017
IORWF e IORLW
IORLW
“W” = “k” IOR “W”
IORWF
d=0: “W” = “f” IOR “W”
d=1: “f” = “f” IOR “W”
• “OU” lógico.
• Afetam o bit de estado “Z”.
Sintaxe: IORWF f,d
Sintaxe: IORLW k
CONJUNTO DE INSTRUÇÕES4
11125/04/2017
XORWF e XORLW
XORLW
“W” = “k” XOR “W”
XORWF
d=0: “W” = “f” XOR “W”
d=1: “f” = “f” XOR “W”
• “OU exclusivo” lógico.
• Afetam o bit de estado “Z”.
Sintaxe: XORWF f,d
Sintaxe: XORLW k
CONJUNTO DE INSTRUÇÕES4
11225/04/2017
ADDWF e ADDLW
ADDLW
“W” = “k” ADD “W”
ADDWF
d=0: “W” = “f” ADD “W”
d=1: “f” = “f” ADD “W”
• Adição aritmética.
• Afetam os bits de estado “Z”, “C” e “DC”.
Sintaxe: ADDWF f,d
Sintaxe: ADDLW k
CONJUNTO DE INSTRUÇÕES4
11325/04/2017
SUBWF e SUBLW
SUBLW
“W” = “k” SUB “W” (W=l – W)
SUBWF
d=0: “W” = “f” SUB “W” (W=f–W )
d=1: “f” = “f” SUB “W” (f=f–W )
• Subtração aritmética.
• Afetam os bits de estado “Z”, “C” e “DC”.
Sintaxe: SUBWF f,d
Sintaxe: SUBLW k
• A subtração não é comutativa.
• f ou L é o minuendo.
• W é o subtraendo.
CONJUNTO DE INSTRUÇÕES4
11425/04/2017
ADD e SUB
• O bit C pode ser considerado o nono bit do resultado.
• ADD permite adicionar dois números de 8 bitsgerando um número de nove bits (000h a 1FFh).
• Em ADD, o bit C representa o nono bit do resultado.
• SUB permite subtrair dois números de 8 bits gerando
um número de nove bits.
• Em SUB, o bit C representa o sinal
• C=1: Resposta positiva.
• C=0: Resposta negativa.
25/04/2017
20
CONJUNTO DE INSTRUÇÕES4
11525/04/2017
Subtração negativa
MOVLW 0xae ;W = 0xAE
SUBLW 0x45 ;W = 0x45 - 0xAE
MOVWF 0x23 ;SRAM(0x23) = W
256 + (69 – 174) = 151
W = L – WW = 0x45 – 0xAE
100h + 45h – AEh = 97h
AEh – 45h: C = 1
45h – AEh: C = 0
• Em subtração negativa, a resposta de 8 bitsrepresenta o resultado adicionado a 100h.
• Para saber o real resultado, é preciso converter o
valor fornecido para a base decimal e subtrair 256.
CONJUNTO DE INSTRUÇÕES4
11625/04/2017
CLRW e CLRF
• CLRW: Apaga o conteúdo de “W”.
• CLRF: Apaga o conteúdo de “f”.
• Afetam o bit de estado “Z”.
CLRF
“f” = 00h
“Z” = 1
CLRW
“W” = 00h
“Z” = 1
Sintaxe: CLRW
Sintaxe: CLRF f
CONJUNTO DE INSTRUÇÕES4
11725/04/2017
COMF
• Complementa o conteúdo de “f”.
• Afeta o bit de estado “Z”.
d=0: “W” = /“f”
d=1: “f” = /“f”
Sintaxe: COMF f,d
• O conteúdo de “f” é complementado bit a bit.
• Equivale a fazer 0xFF – “f”
CONJUNTO DE INSTRUÇÕES4
11825/04/2017
INCF e DECF
• INCF: Incrementa o conteúdo de “f”.
• DECF: Decrementa o conteúdo de “f”.
• Afetam o bit de estado “Z”.
INCF
d=0: “W” = “f” + 1
d=1: “f” = “f” + 1
DECF
d=0: “W” = “f” – 1
d=1: “f” = “f” – 1
Sintaxe: INCF f,d
Sintaxe: DECF f,d
CONJUNTO DE INSTRUÇÕES4
11925/04/2017
INCF e DECF• INCF e DECF são cíclicos.
• Quando 0xFF é atingido, INC produz 0x00.
• Quando 0x00 é atingido, DEC produz 0xFF.
• O bit “C” não é afetado.
FFh
FEh
01h
00h
Valor
Z=1
INCF
FFh
FEh
01h
00h
Valor
Z=1
DECF
CONJUNTO DE INSTRUÇÕES4
12025/04/2017
INCF e DECF
• O bit Z pode ser usado para incrementar
ou decrementar palavras de mais de 8 bits.
• O bit Z é somado ao high byte.
• O INCF é efetuado sobre o low byte.
• Para cada INCF, é efetuada a adição de Z
com o high byte.
• Em cada overflow do low byte, Z = 1, o
high byte sofre um incremento por meio da
adição.
25/04/2017
21
CONJUNTO DE INSTRUÇÕES4
12125/04/2017
RLF e RRF
• RLF: Gira o conteúdo de “f” para a esquerda.
• RRF: Gira o conteúdo de “f” para a direita.
• Afetam o bit de estado “C”.
RLF
d=0: “W” = RL “f”
d=1: “f” = RL “f”
RRF
d=0: “W” = RR “f”
d=1: “f” = RR “f”
Sintaxe: RLF f,d
Sintaxe: RRF f,d
O carry (C) está
incluído (9 bits).
CONJUNTO DE INSTRUÇÕES4
12225/04/2017
RLF – C=0• Configurando, inicialmente, C=0, a instrução RLF corresponde
à multiplicação de um número inteiro de 8 bits por 2.
• É possível multiplicar por 2 números na faixa de 0 a 255 (00h
a FFh).
• O valor resultante do bit C indica a ocorrência de um overflow.
• Em caso de overflow, o resultado da multiplicaçãocorresponde ao valor do registrador adicionado a 256 (100h).
• O máximo operando que não gera overflow é 127 (7Fh), que,
multiplicado por 2, resulta em 254 (0FEh).
• O mínimo operando que gera overflow é 128 (80h), que,
multiplicado por 2, resulta em 256 (100h).
• O máximo operando é 255 (FFh), que, multiplicado por 2,
resulta em 510 (1FEh).
Vide exemplos
CONJUNTO DE INSTRUÇÕES4
12325/04/2017
RLF – C=1
• Configurando, inicialmente, C=1, a instrução RLF corresponde
à multiplicação de um número de 9 bits (fracionário) por 2.
• É possível multiplicar por 2 números na faixa de 0 a 255,5(00,0h a FF,8h).
• O valor resultante do bit C indica a ocorrência de um overflow.
• Em caso de overflow, o resultado da multiplicaçãocorresponde ao valor do registrador adicionado a 256 (100h).
• O máximo operando que não gera overflow é 127,5 (7F,8h),
que, multiplicado por 2, resulta em 255 (0FFh).
• O mínimo operando que gera overflow é 128,5 (80,8h), que,
multiplicado por 2, resulta em 257 (101h).
• O máximo operando é 255,5 (FF,8h), que, multiplicado por 2,
resulta em 511 (1FFh).
Vide exemplos
CONJUNTO DE INSTRUÇÕES4
12425/04/2017
RRF – C=0
• Configurando, inicialmente, C=0, a instrução RRF
corresponde à divisão de um número inteiro de 8 bits por 2.
• É possível dividir números na faixa de 0 a 255 (00h a FFh).
• O valor resultante do bit C indica a ocorrência de um bit
fracionário se o operando era ímpar (0,8h).
• O máximo operando é 255 (FFh), que, dividido por 2,
resulta em 127,5 (7F,8h).
Vide exemplos
CONJUNTO DE INSTRUÇÕES4
12525/04/2017
RRF – C=1
• Configurando, inicialmente, C=1, a instrução RRF
corresponde à divisão de um número inteiro de 9 bits por 2.
• É possível dividir números na faixa de 0 a 511 (000h a 1FFh).
• O valor resultante do bit C indica a ocorrência de um bit
fracionário se o operando era ímpar (0,8h).
• O máximo operando é 511 (1FFh), que, dividido por 2, resulta
em 255,5 (FF,8h).
Vide exemplos
CONJUNTO DE INSTRUÇÕES4
12625/04/2017
O significado do carry em RLF e RRF
• O programa pode interpretar C=1, no início, como um
indicativo de número inteiro entre 100h e 1FFh.
• O programa pode interpretar C=1, no início, como um
indicativo de número fracionário entre 00,8h e FF,8h.
• Ao usar RLF, C=1 no início deve, obrigatoriamente, ser
interpretado como a parte facionária (00,8h).
• Ao usar RRF, C=1 no início deve, obrigatoriamente, ser
interpretado como overflow (100h).
• Ao obter C=1 após RLF, deve, obrigatoriamente, ser
interpretado como overflow (100h).
• Ao obter C=1 após RRF, deve, obrigatoriamente, ser
interpretado a parte facionária (00,8h).
25/04/2017
22
CONJUNTO DE INSTRUÇÕES4
12725/04/2017
SWAPF
• Permuta os nibbles do conteúdo de “f”.
• Afeta o bit de estado “Z”.
d=0: “W” = SWAP “f”
d=1: “f” = SWAP “f”
Sintaxe: SWAPF f,d
CONJUNTO DE INSTRUÇÕES4
12825/04/2017
SWAPF
• Útil para fazer uma comunicação paralela de quatro
bits sobre palavras de oito bits.
• Isto permite economia no hardware de comunicação.
• Primeiramente, o nibble menos significativo é
enviado.
• O SWAPF é executado.
• O nibble mais significativo é enviado.
• A frequência da comunicação cai abaixo da metade,pois tempo é perdido na execução de SWAPF.
CONJUNTO DE INSTRUÇÕES4
12925/04/2017
MOVF
• Copia o conteúdo de “f”.
• Afeta o bit de estado “Z”.
d=0: “W” = “f”
d=1: “f” = “f”
Sintaxe: MOVF f,d
• A opção “f” = “f” é usada, por exemplo, para
verificar se o conteúdo de “f” é zero.
• Se for zero, Z=1.
CONJUNTO DE INSTRUÇÕES4
13025/04/2017
MOVF
• A opção mais usada é aquela onde d=0b.
• Nesta situação, o MPLAB® permite o uso de
uma notação simplificada.
• MOVF f,d = MOVFW f.
• Esta simplificação pode ser usada somente
se o montador em uso é o MPLAB®.
• Esta notação simplificada não aparece nos
datasheets dos chips.
• O MPLAB® converte, automaticamente, a
notação simplificada para a notação correta.
CONJUNTO DE INSTRUÇÕES4
13125/04/2017
MOVWF e MOVLW
MOVLW
LW
“W” = “k”
MOVWF
WF
“f” = “W”
• MOVWF: Copia o conteúdo de “W” para “f”.
• MOVLW: Copia o conteúdo de “k” para “W”.
• Não afetam os bits de estado.
Sintaxe: MOVWF f
Sintaxe: MOVLW k
CONJUNTO DE INSTRUÇÕES4
13225/04/2017
MOVFW, MOFWF e MOVLW
MOVFW
MOVWF
MOVLW
25/04/2017
23
CONJUNTO DE INSTRUÇÕES4
13325/04/2017
BCF e BSF
• 0d f 127d
• 0h f 7Fh
• 0d b 7d
• 000b b 111b
• BCF: O bit “b” no registrador “f” vira zero (clear, reset).
• BSF: O bit “b” no registrador “f” vira um (set).
• Não afetam os bits de estado.
Sintaxe: BCF f,b
Sintaxe: BSF f,b
CONJUNTO DE INSTRUÇÕES4
13425/04/2017
BTFSC e BTFSS
• Instruções condicionais.
• Analisam o bit “b” no registrador “f”.
• BTFSC: Pula a próxima instrução se “b” é zero.
• BTFSS: Pula a próxima instrução se “b” é um.
• BTFSC: “Bit Test f, Skip if Clear”.
• BTFSS: “Bit Test f, Skip if Set”.
• Não afetam os bits de estado.
Sintaxe: BTFSC f,b
Sintaxe: BTFSS f,b
CONJUNTO DE INSTRUÇÕES4
13525/04/2017
INCFSZ e DECFSZ
• Instruções condicionais.
• Realizam INC ou DEC.
• Analisa o resultado.
• Se o resultado é zero,
pula a próxima
instrução.
• INCFSZ: “Increment f, Skip if Zero”.
• DECFSZ: “Decrement f, Skip if Zero”.
• Não afetam os bits de estado.
Sintaxe: INCFSZ f,d
Sintaxe: DECFSZ f,d
INCFSZ
d=0: “W” = “f” + 1
d=1: “f” = “f” + 1
DECFSZ
d=0: “W” = “f” – 1
d=1: “f” = “f” – 1
CONJUNTO DE INSTRUÇÕES4
13625/04/2017
INCFSZ e DECFSZ
• Usados em estruturas de repetição (laços).
• Um registrador é usado como variável de contagem.
• Em cada repetição, INCFSZ ou DECFSZ é
realizado.
• Se a variável atingiu o valor zero, o ciclo de
repetições é finalizado.
CONJUNTO DE INSTRUÇÕES4
13725/04/2017
Sobre BTFSC, BTFSS, INCFSZ e DECFSZ
• Skippers.
• Instruções condicionais permitem alterar o
próximo valor do PC.
• Estas instruções consomem o dobro do tempo.
• Este tipo de instrução é chamada de 2TCY.
• Se não houver skip: PC = PC+1.
• Se houver skip: PC = PC+2.
• A instrução pulada é aquela que segue o skipper
na program memory. Se a diretiva ORG é usada
após o skipper, a instrução pulada não
necessariamente é aquela que segue a diretiva.
CONJUNTO DE INSTRUÇÕES4
13825/04/2017
CLRWDT
• Não usa argumentos.
• Não afeta os bits de estado.
• Previne que a MCU reinicie por suspeita de
travamento.
• A reiniciação da MCU por suspeita de
travamento é uma ferramenta de segurança.
• Este comando reinicia o temporizador
analógico WDT.
• Este comando não é necessário se o WDT
está desabilitado.
• Este assunto será apresentado mais adiante.
Sintaxe: CLRWDT
25/04/2017
24
CONJUNTO DE INSTRUÇÕES4
13925/04/2017
SLEEP
• Não usa argumentos.
• Não afeta os bits de estado.
• Coloca a MCU em modo de baixo consumo de energia.
• O modo de baixo consumo é chamado de power down.
• Por causa da preocupação com a ecologia, normas
regulamentadoras tem obrigado fabricantes de
dispositivos processados a disponibilizar modos de
operação em economia de energia elétrica.
• Este assunto será apresentado mais adiante.
Sintaxe: SLEEP
CONJUNTO DE INSTRUÇÕES4
14025/04/2017
RETURN
• Não usa argumentos.
• Não afeta os bits de estado.
• Return from subroutine.
• Return: Retornar da sub-rotina.
• Este assunto será apresentado mais adiante.
Sintaxe: RETURN
CONJUNTO DE INSTRUÇÕES4
14125/04/2017
RETLW
• Não usa argumentos.
• Não afeta os bits de estado.
• Return with Literal in W.
• Coloca a constante “k” no registrador “W”.
• “W” = “k”
• É uma mistura de RETURN e MOVLW.
Sintaxe: RETLW k
CONJUNTO DE INSTRUÇÕES4
14225/04/2017
RETFIESintaxe: RETFIE
• Não usa argumentos.
• Não afeta os bits de estado.
• Return From Interrup.
• Retornar da interrupção.
• Útil quando a sub-rotina é chamada pela interrupção.
• Este assunto será apresentado mais adiante.
CONJUNTO DE INSTRUÇÕES4
14325/04/2017
Sintaxe: GOTO k
Sintaxe: CALL k
• Nas outras instruções, “k” usa 8 bits (dado).
• Em GOTO e em CALL, “k” usa 11 bits (flash).
• 0d k 2047d
• 000h k 7FFh
• “k” indica um endereço na página da flash.
• “k” indica o endereço da sub-rotina.
• Não afetam os bits de estado.
GOTO e CALL
CONJUNTO DE INSTRUÇÕES4
14425/04/2017
• GOTO: Desvio sem retorno.
• CALL: Desvio com retorno.
• Para que haja retorno, é preciso saber o
endereço de origem.
• GOTO pode ser usado na maioria das situações.
• CALL é necessário em situações específicas.
• Este assunto será apresentado mais adiante.
GOTO e CALL
25/04/2017
25
CONJUNTO DE INSTRUÇÕES4
14525/04/2017
Tempo
• Instruction Cycle: Tempo para executar uma instrução.
• Clock Input: Entrada de relógio (externo)
• Instruction Cycle TCY = 200ns (5MHz máximo)
• Clock Input = TOSC = 50ns (20MHz máximo)
• 200ns = 450ns
• 1 ciclo de instrução: 4 períodos de relógio.
• O oscilador externo é obtido por meio de cristal ou RC.
CONJUNTO DE INSTRUÇÕES4
14625/04/2017
Ciclo de relógio e de instrução
Instrução 1 Instrução 2 Instrução 3
• A sensibilidade é na borda de descida.
• Exemplo para 3 instruções 1TCY.
CONJUNTO DE INSTRUÇÕES4
14725/04/2017
• Q1: Decodificação da instrução.
• Q2: Leitura do dado da instrução.
• Q3: Processamento da instrução.
• Q4: Escrita do dado resultante.
• Todas as etapas representam operações
realizadas pela ULA através do data bus.
• Como se trata de uma MCU de 8 bits,
ULA, W e data bus são de 8 bits.
• Todas as etapas implicam em um fluxo
de informação de 8 bits no máximo.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
14825/04/2017
• Q1: O mnemônico é identificado por meio de
circuitos decodificadores baseados nas tabelas de
montagem (decode).
• Todas as instruções passam pela etapa de
decodificação.
• As etapas Q2, Q3 e Q4 nem sempre são usadas.
• Quando uma etapa não é usada, nenhuma
atividade é realizada a fim de que a frequência
dos ciclos de instrução seja mantida constante.
Ciclo de relógio e de instrução
• Q1: Leitura de 6 bits.
• Q2: Leitura de 8 bits.
• Q4: Escrita de 8 bits.
CONJUNTO DE INSTRUÇÕES4
14925/04/2017
• Todas as instruções usam um ciclo (TCY).
• Exceções:
• Teste condicional.
• Alteração no PC através de uma instrução.
• Nas exceções, a instrução usa 2 ciclos.
• 2TCY = 400ns (mínimo).
1 BTFSC
2 BTFSS
3 DECFSZ
4 INCFSZ
5 CALL
6 GOTO
7 RETURN
8 RETLW
9 RETFIE
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
15025/04/2017
• Muitas informações aqui contidas são encontradas
nos data sheets fornecidos pela Microchip©.
• Outras informações são omitidas por tratarem-se
de segredo industrial e aqui são apresentadas
como uma suposição para fins didáticos.
Informação
25/04/2017
26
CONJUNTO DE INSTRUÇÕES4
15125/04/2017
Instrução Q1 Q2 Q3 Q4
ANDWF Decode Lê o file AND W Grava d
IORWF Decode Lê o file IOR W Grava d
XORWF Decode Lê o file XOR W Grava d
ADDWF Decode Lê o file ADD W Grava d
SUBWF Decode Lê o file SUB W Grava d
COMF Decode Lê o file COM Grava d
INCF Decode Lê o file INC Grava d
DECF Decode Lê o file DEC Grava d
RRF Decode Lê o file RR Grava d
RLF Decode Lê o file RL Grava d
SWAPF Decode Lê o file SWAP Grava d
Ciclo de relógio e de instrução
Q2 8-bit dataQ1 6-bit decode
0 dseleção file
13 12 7 6 0
1
8
CONJUNTO DE INSTRUÇÕES4
15225/04/2017
Instrução Q1 Q2 Q3 Q4
ANDLW Decode Lê o literal AND W Grava W
IORLW Decode Lê o literal IOR W Grava W
XORLW Decode Lê o literal XOR W Grava W
ADDLW Decode Lê o literal ADD W Grava W
SUBLW Decode Lê o literal SUB W Grava W
Ciclo de relógio e de instrução
Q2 8-bit dataQ1 6-bit decode
1 seleção literal
13 12 7 0
1
8
CONJUNTO DE INSTRUÇÕES4
15325/04/2017
Instrução Q1 Q2 Q3 Q4
BCF Decode Lê o file BC Grava f
BSF Decode Lê o file BS Grava f
Ciclo de relógio e de instrução
Q2 8-bit dataQ1 6-bit decode
0 bitsel file
13 12 7 6 0
1
9
CONJUNTO DE INSTRUÇÕES4
15425/04/2017
Instrução Q1 Q2 Q3 Q4
CLRW Decode Nada Nada Grava W
CLRF Decode Nada Nada Grava f
CLRWDT Decode Nada Nada Reinicia
MOVLW Decode Lê o literal Nada Grava W
MOVWF Decode Lê W Nada Grava f
MOVF Decode Lê o file Nada Grava d
SLEEP Decode Nada Nada SLEEP
NOP Decode Nada Nada Nada
• Os ciclos onde nada é realizado poderiam
ser eliminados para ganhar tempo.
• Isso não é feito a fim de que se mantenha
constante a frequência de instruções (fCY),
o que simplifica o funcionamento da MCU.
• A reiniciação feita por CLRWDT diz respeito
ao temporizador WDT.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
15525/04/2017
Instrução Q1 Q2 Q3 Q4
Se houver skip, o PC é escrito nesta etapa.
Q1 Q2 Q3 Q4
BTFSC Decode Lê o file TEST Nada
BTFSS Decode Lê o file TEST Nada
INCFSZ Decode Lê o file INC/TEST Grava d
DECFSZ Decode Lê o file DEC/TEST Grava d
• Provavelmente o PCH e o
PCL são alterados em Q3
e em Q4 do segundo TCY.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
15625/04/2017
Instrução Q1 Q2 Q3 Q4
PC é escrito nesta etapa.
Q1 Q2 Q3 Q4
CALL Decode Lê o k Nada Nada
GOTO Decode Lê o k Nada Nada
• Provavelmente, o push do CALL é realizado nos
Q1 e Q2 do segundo TCY (visto mais adiante).
• Provavelmente, o PCH e o PCL são gravados nos
Q3 e Q4 do segundo TCY.
• Como k supera 8 bits, provavelmente o PC<10:8>
é lido no Q1, junto com os bits 11 a 13 (suposição).
1 sel k (literal)
13 12 10 0
0
11
Q2 8-bit dataQ1 6-bit decode
Ciclo de relógio e de instrução
25/04/2017
27
CONJUNTO DE INSTRUÇÕES4
15725/04/2017
Instrução Q1 Q2 Q3 Q4
PC é escrito nesta etapa.
Q1 Q2 Q3 Q4
RETURN Decode Nada Nada Nada
RETLW Decode Lê o literal Nada Grava W
RETFIE Decode Nada Nada GIE = 0
• Uma hipótese é a de que o PCH e oPCL sejam gravados nos Q3 e Q4 do
segundo TCY.
• Outra hipótese é a de o 13-bit program
address seja resgatado do stack em Q4
por meio do 13-bit address bus.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
15825/04/2017
• Apenas dois ciclos de relógio são
necessários são usados na gravação do
PC nas instruções 2TCY.
• O uso de oito ciclos se deve à
manutenção da sincronia, a preservação
do ciclo de instruções.
• Existe a possibilidade de que dois ciclos
sejam gastos no push e no pop na pinha,
porém, por não serem efetuados pela
ULA, esses eventos podem ocorrer
simultaneamente a outras ações da ULA.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
15925/04/2017
• No caso das instruções condicionais,
existe a possibilidade de que o skip
seja sempre realizado.
• Condição satisfeita: PC = PC+2.
• Condição nãosatisfeita: PC = PC+1.
• Nos desvios incondicionais, não há
esclarecimentos, no data sheet, sobre o
que é executado em Q3.
Ciclo de relógio e de instrução
CONJUNTO DE INSTRUÇÕES4
16025/04/2017
Padrões de estrutura de opcode
d0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção file address
0 0 seleção
13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 1
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção
1 0
13 12 11 10 9 8 7 6 5 4 3 2 1 0
program addresssel.
10
13 12 11 10 6 5 4 3 2 1 09 8 7
sel. bit addr. file address
Q2 8-bit dataQ1 6-bit decode
BITS DE CONFIGURAÇÃO5
16125/04/2017
BITS DE CONFIGURAÇÃO
BITS DE CONFIGURAÇÃO5
16225/04/2017
• Configuration Bits
• Selecionam as configurações da PIC®.
• Palavra de configuração (configuration word): 14 bits.
• Programação em lógica negativa.
• Bit não programado (ativado): 0
• Bit programado (desativado): 1
• A palavra de configuração é gravada na flash.
• Endereço: 2007h.
• Esta posição não pertence à program memory (até 1FFFh).
• Esta posição somente pode ser acessada na programação.
Definição
25/04/2017
28
BITS DE CONFIGURAÇÃO5
16325/04/2017
Formação da palavra
• A configuração padrão é todos os bits desabilitados.
• 11 1111 1111 1111h
• Essa configuração é gravada ao realizar o full erase.
BITS DE CONFIGURAÇÃO5
16425/04/2017
Campos
1.FOSC Oscillator Selection bits.
2.WDTE Watchdog Timer Enable bit.
3.PWRTE Power-up Timer Enable bit.
4.CP FLASH Program Memory Code Protection bits.
5.BOREN Brown-out Reset Enable bit.
6.LVP Low Voltage In-Circuit Serial Programming Enable bits.
7.CPD Data EE Memory Code Protection bit.
8.WRT FLASH Program Memory Write Enable bit.
BITS DE CONFIGURAÇÃO5
16525/04/2017
Configuração da proteção da FLASH
• Campo: CP
• FLASH Program Memory Code Protection bits.
• Bits de proteção da FLASH.
• Bits 13, 12, 5, 4.
• Mnemônicos: CP1 (13 e 5) e CP0 (12 e 4) (Code Protection).
• Para que haja proteção os bits de mesmo nome devem ser
iguais.
CP1 CP0 Proteção Palavras Explicação1 1 Sem 0 Nada1 0 1F00h a 1FFFh 256 PCH = 11111b
0 1 1000h a 1FFFh 4k 2ª metade0 0 0000h a 1FFFh 8k Tudo
BITS DE CONFIGURAÇÃO5
16625/04/2017
Configuração da proteção da FLASH
• As opções 11 (nada) e 00 (tudo) são
válidas para toda a família mid-range.
• As opções 10 e 11 dependem do modelo,
pois o tamanho da program memory
pode variar, sendo 8kwords na
PIC16F877.
CP1 CP0 Palavras Explicação1 1 0 Nada0 0 8k Tudo
BITS DE CONFIGURAÇÃO5
16725/04/2017
Configuração da proteção da FLASH
• A proteção serve para que o programa esteja imune a
cópias não autorizadas.
• O segredo do programa criado pelo fornecedor do
produto está protegido.
• A única possibilidade para alteração do programa é por
meio da reiniciação de todas as memórias do CHIP, o
que, também, impede a cópia do programa.
• A limpeza total do chip (full-erase) reinicia os bits de
proteção, os mesmos precisam ser regravados.
• Foram descobertas formas de burlar esta proteção em
alguns modelos mais antigos de PIC®, não há garantias
plenas de que o programa esteja totalmente protegido.
BITS DE CONFIGURAÇÃO5
16825/04/2017
Configuração da proteção da FLASH
• A possibilidade de proteção parcial é útil
quando se deseja que parte do programa
seja configurável pelo usuário.
• Outra possibilidade é a comercialização de
uma sub-rotina, que fica na parte protegida,
permitindo ao usuário criar seu próprio
programa usando a sub-rotina adquirida.
25/04/2017
29
BITS DE CONFIGURAÇÃO5
16925/04/2017
• Permite proteção contra leitura da EEPROM (data memory).
• A proteção serve para que os dados estejam imunes a cópias.
• O segredo da informação está protegido.
• A alteração dos dados na EEPROM protegida pode ser feita
por meio da reiniciação de todas as memórias do chip.
• Outra forma é apagando toda a EEPROM.
• A limpeza total do chip (full-erase) reinicia os bits de proteção.
Configuração da proteção da EEPROM
BITS DE CONFIGURAÇÃO5
17025/04/2017
• Campo: CPD.
• Também chamado de PD em outros modelos.
• Data EE Memory Code Protection.
• Bit 8.
• 1: EEPROM sem proteção.
• 0: EEPROM com proteção.
• Independente de CP1 e CP0.
• Este assunto será apresentado mais adiante.
Configuração da proteção da EEPROM
BITS DE CONFIGURAÇÃO5
17125/04/2017
Oscilador
• Bits 1 e 0.
• Mnemônicos: FOSC1 e FOSC0.
• Outros modelos também possuem o bit FOSC2.
• Este assunto será apresentado mais adiante.
FOSC1 FOSC0 Oscilador Significado1 1 RC Resistor / Capacitor1 0 HS High Speed Crystal / Resonator0 1 XT Crystal / Resonator0 0 LP Low Power Crystal
BITS DE CONFIGURAÇÃO5
17225/04/2017
• In-Circuit Serial Programming.
• O ICSP™ permite a gravação do chip
após a montagem do produto.
• O ICSP™ dispensa o uso de um
módulo gravador de PIC®.
• Isto permite a atualização de firmware.
• O ICSP™ é o ideal na produção do
software, junto ao protótipo.
ICSP™
BITS DE CONFIGURAÇÃO5
17325/04/2017
Módulo gravador de PIC®
• É o contrário de ICSP™, a PIC® é gravada fora
do ambiente de operação.
• Ideal quando já se sabe que o programa
funciona e não se deseja realizar alterações.
• Ideal quando se deseja gravar várias unidades.
• Há opções para gravação em lotes.
BITS DE CONFIGURAÇÃO5
17425/04/2017
• Campo: WRT.
• FLASH Program Memory Write Enable.
• Bit 9.
• 1: Desabilitado – Impede o uso do ICSP™.
• 0: Habilitado – Permiteo uso do ICSP™.
• Não impede a leitura das memórias internas.
ICSP™
25/04/2017
30
BITS DE CONFIGURAÇÃO5
17525/04/2017
• Campo: LVP.
• Low-Voltage Programming.
• Um ICSP™ que não requer uma tensão de alimentação
mais elevada do que a usada na execução dos programas.
• Bit 7.
• 0: Desabilitado: Exige tensão mais alta na programação.
• 1: Habilitado: Dispensa tensão mais alta na programação.
ICSP™
BITS DE CONFIGURAÇÃO5
17625/04/2017
• A desabilitação do LVP dá mais segurança à
PIC®, pois jamais recebe tensão mais
elevada em operação normal.
• A desabilitação do LVP requer hardware
mais sofisticado quando se usa ICSP™, pois
requer tensão superior para gravar o chip.
• A habilitação do LVP aumenta a chance da
PIC® ser gravada acidentalmente.
• A habilitação do LVP simplifica o hardware
quando se usa ICSP™, pois a tensão de
alimentação é sempre a mesma.
ICSP™
BITS DE CONFIGURAÇÃO5
17725/04/2017
DEBUG
• Campo: DEBUG.
• In-Circuit Debugger Mode.
• Permite a depuração pelo MPLAB®.
• Bit 11.
• 1: Desabilitado.
• 0: Habilitado.
BITS DE CONFIGURAÇÃO5
17825/04/2017
• Quando habilitado, usa os pinos:
• PGC – Programming Clock – Pino 39 DIP.
• PGD – Programming Data – Pino 40 DIP.
• Usado com o MPLAB® ICD.
DEBUG
BITS DE CONFIGURAÇÃO5
17925/04/2017
Outros bits
• 6: BODEN – Brown-out Reset Enable bit.
• 3: /PWRTE – Power-up Timer Enable bit.
• 2: WDTE – Watchdog Timer Enable bit.
• Serão apresentados mais adiante.
BITS DE CONFIGURAÇÃO5
18025/04/2017
Módulo grav. de PIC® com ICSP™/PICkit2™
http://www.futurlec.com/Pictures/PIC_Programmer_600.jpg
25/04/2017
31
BITS DE CONFIGURAÇÃO5
18125/04/2017
http://img1.mlstatic.com/gravador-pic-usb-pickit2-zif-prograd-profissional-mplab-nfe_MLB-O-2926282907_072012.jpg
Módulo grav. de PIC® com ICSP™/PICkit2™
BITS DE CONFIGURAÇÃO5
18225/04/2017
Módulo gravador de MCU Atmel
http://www.programmerkit.com/wp-content/uploads/2011/10/programmer.jpg
BITS DE CONFIGURAÇÃO5
18325/04/2017
Módulo gravador de memórias
http://images.batronix.com/products/programmer/BX/USBChipProgrammer-xl.jpg
LITERATURA6
18425/04/2017
LITERATURA
LITERATURA6
18525/04/2017
MPLAB
LITERATURA6
18625/04/2017
• MPASM MPLINK MPLIB User's Guide.
• MPASM user's guide with MPLINK and MPLIB.
• MPLAB IDE User's Guide.
• PIC16F87X Data Sheet.
• PICmicro Mid-Range MCU Family Reference Manual.
Microchip©
25/04/2017
32
LITERATURA6
18725/04/2017
• PEREIRA, F. Microcontroladores PIC, Técnicas Avançadas.
2a Edição. Editora Érica, 2002.
• PEREIRA, F. Microcontroladores PIC – Programação em C.
7a Edição. Editora Érica, 2010.
Outros
Top Related