25/04/2017
1
125/04/2017
Parte 1IDE
225/04/2017
1. DEFINIÇÃO2. ASSEMBLY3. INSTRUÇÕES PIC16F8774. CONJUNTO DE INSTRUÇÕES5. BITS DE CONFIGURAÇÃO6. 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 seuspróprios editores de texto.
• Os primeiros montadores e compiladores não possuíameditor de texto.
• Era necessário chamar o utilitário IDE na linha de comando(DOS, por exemplo), usando, como argumento, o arquivotexto contendo o programa a ser gravado no dispositivo.
• Editores de texto embutidos em IDE usam cores pra auxiliara 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 eMCU’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, quefacilitam a criação ou edição do programa.
• O IDE converte o programa contendo os pseudocódigospara o programa em linguagem assembler pura.
25/04/2017
2
DEFINIÇÃO1
725/04/2017
Debugger
• As primeiras versões de IDE paragravação de P’s e MCU’s possuíam,apenas, o procedimento de gravação dochip.
• Não era fornecido utilitário para verificaçãode erros básicos na programação.
• Versões atuais fornecem opções para abusca 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ávelem questão.
• Escopo de endereços do chip: Os tamanhos das memórias,das portas, etc, são respeitados. É preciso identificar omodelo do chip.
• Outros.
DEFINIÇÃO1
925/04/2017
Simulador
• No passado, não havia como prever se o programaestava correto ou não.
• A única forma de verificar era por meio da gravaçãodo chip e da execução no próprio chip.
• A gravação pode ser bastante demorada, tornando otrabalho de criação/edição/correção bastante tedioso.
• Posteriormente, foi acrescentado o recurso dasimulação do chip no computador.
• Somente depois de concluídas todas as verificaçõesno simulador é que se parte para a verificação naexecução pelo chip.
DEFINIÇÃO1
1025/04/2017
Compilador
• A inclusão de compilador no IDE permite o uso delinguagens 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 oslimites de endereçamento e os periféricos disponíveis.
DEFINIÇÃO1
1125/04/2017
Compilador
• Compiladores para chips específicos podem ser pacotesde grande valor comercial.
• Há casos nos quais são oferecidos o ambiente deprogramaçã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çãoCó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 PascalDEFINIÇÃ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ônicosASSEMBLY2
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 montageme 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 demontagem possui algumas irrelevâncias (don’t care –X) em alguns bits de algumas instruções.
• Essas irrelevâncias fazem com que a relaçãobiunívoca seja quebrada.
• Geralmente, os montadores substituem asirrelevâncias por zero.
MontagemASSEMBLY2
2425/04/2017
• A conversão do código feito em linguagem assembly para ocódigo em linguagem de máquina é chamado de montagem.
• A conversão do código feito em linguagem de compilação parao código em linguagem de máquina é chamado de compilação.
• Compiladores empregam códigos específicos da próprialinguagem.
• A linguagem de compilação não depende do dispositivoempregado, não usa os seus mnemônicos.
• Compiladores não permitem que o usuário lide com opcodes einstruções de máquina.
• Compiladores, geralmente, não fornecem o código assemblysobre 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.
MontagemASSEMBLY2
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ódigosque não fazem parte do assembly puro, chamados depseudocódigos (diretivas de montagem, comentários, etc).
• Estes pseudocódigos permitem que se utilize nomes nolugar de endereços.
• Endereços podem se referir a registradores, a bits deregistradores e à program memory.
• Estas diretivas tem a função de guiar a criação do códigoa ser montado, de modo que o usuário não precise lidardiretamente com o código assembly, mas, sim, com umcódigo que apresenta algumas características delinguagem de compilação.
• Evitaremos o uso de certas diretivas para proporcionar oaprendizado da linguagem assembler.
PseudocódigosASSEMBLY2
2825/04/2017
• Sabendo qual o modelo do dispositivo, pode-se converter oseu 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 dainstrução e seus argumentos numéricos não fazem parte docó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çõesalém do assembly puro que facilitam aelaboraçã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 seuconjunto próprio de extensões.
• Essas extensões são perdidas no códigodisassembly.
• Cores são usadas para facilitar o desenvolvimentode programas no ambiente assembler.
Código assemblyASSEMBLY2
3225/04/2017
Debuging
Assembly com
extensões
Assembly puro
Conversão feita manualmenteou automaticamente peloambiente de desenvolvimento.
Impossível
Digitação
ASSEMBLY2
3325/04/2017
Debuging
• Tanto o código assembly com extensões como ocódigo assembly puro estão em linguagem humana.
• É na conversão do código assembly com extensõespara o código assembly puro que a verificação deerros é realizada.
• Se o código pôde ser escrito como assembly puro, éporque nenhum erro de sintaxe e de escopo foiencontrado.
• 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
001101101011101001001010101010001010101010000110
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.
001101101011101001001010101010001010101010000110
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 elesabe 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 buscapor erros de sintaxe ou de escopo.
Debugger
ASSEMBLY2
61.JA62.JAE63.JB64.JBE65.JNA66.JNAE67.JNB68.JNBE69.JC70.JNC
3925/04/2017
Mnemônicos P x86-32 (resumido)1. MOV2. XCHG3. STC4. CLC5. CMC6. STD7. CLD8. STI9. CLI10.PUSH11.PUSHF12.PUSHA13.POP14.POPF15.POPA16.CBW17.CWD18.CWDE19.IN20.OUT
21.ADD22.ADC23.SUB24.SBB25.DIV26.IDIV27.MUL28.IMUL29.INC30.DEC31.CMP
38.NEG39.NOT40.AND41.OR42.XOR43.SHL44.SHR
45.NOP46.LEA47.INT
48.CALL49.JMP50.JE51.JZ52.JCXZ53.JP54.JPE55.RET56.JNE57.JNZ58.JECXZ59.JNP60.JPO
Transfer
32.SAL33.SAR34.RCL35.RCR36.ROL37.ROR
Arithmetic Logic Misc
Jumps
JumpsUnsigned
71.JG72.JGE73.JL74.JLE75.JNG76.JNGE77.JNL78.JNLE79.JO80.JNO81.JS82.JNS
JumpsSigned
http://www.jegerlehner.ch/intel/IntelCodeTable.pdf
CISC
ASSEMBLY2
4025/04/2017
Exemplos de P x86-32
1. Intel® Pentium processor2. Intel® Pentium Pro processor3. Intel® Pentium II processor4. Intel® Pentium II Xeon processor5. Intel® Celeron processor6. Intel® Pentium III processor7. Intel® Pentium III Xeon processor8. AdvancedMicroDevices© Athlon processor9. AdvancedMicroDevices© Opteron processor
http://docs.oracle.com/cd/E19253-01/817-5477/817-5477.pdf
CISC
ASSEMBLY2
4125/04/2017
Mnemônicos ARM1. ABS2. ACS3. ADC4. ADD5. ADF6. ADR7. ADRL8. ALIGN9. AND10. ASL11. ASN12. ASR13. ATN14. B15. BIC16. BKPT17. BL18. BLX19. BX20. CDP21. CDP222. CLZ23. CMF24. CMN25. CMP26. CNF27. COS28. DCx29. DVF30. EOR31. EQUx32. EXP33. FABS34. FADD35. FCMP36. FCVTDS37. FCVTSD38. FCPY39. FDIV40. FDV
81. LDRSB82. LDRSH83. LFM84. LGN85. LOG86. LSL87. LSR88. MCR89. MCR290. MCRR91. MLA92. MNF93. MOV94. MRC95. MRC296. MRRC97. MRS98. MSR99. MUF100. MUL101. MVF102. MVN103. NEG104. NOP105. NRM106. OPT107. ORR108. ORR109. PLD110. POL111. POP112. POW113. PUSH114. QADD115. QDADD116. QDSUB117. QSUB118. RDF119. RFC120. RFS
41. FIX42. FLD43. FLDMDB44. FLDMIA45. FLT46. FMAC47. FMDHR48. FMDLR49. FMRDH50. FMRDL51. FML52. FMSC53. FMRS54. FMSR55. FMUL56. FMRX57. FMSTAT58. FMXR59. FNEG60. FNMAC61. FNMSC62. FNMUL63. FRD64. FSITO65. FSQRT66. FST67. FSTMDB68. FSTMIA69. FSUB70. FTOSI71. FTOUI72. FUITO73. LDC74. LDC275. LDF76. LDM77. LDMIA78. LDR79. LDRB80. LDRH
121. RMF122. RND123. ROR124. RPW125. RRX126. RSB127. RSC128. RSF129. SBC130. SFM131. SIN132. SMLA133. SMLAL134. SMLAW135. SMUL136. SMULL137. SMULW138. SQT139. STC140. STC2141. STF142. STM143. STMIA144. STR145. STR146. STRB147. STRH148. STRSB149. STRSH150. SUB151. SUF152. SWI153. SWP154. TAN155. TEQ156. TST157. UMLAL158. UMULL159. URD160. WFC161. WFS
http://ww
w.heyrick.co.uk/assem
bler/qfinder.html
ASSEMBLY2
4225/04/2017
Mnemônicos AVR
1. ADD2. ADC3. SUB4. SUBI5. SBC6. SBCI7. AND8. ANDI9. OR10. ORI11. EOR12. COM13. NEG14. SBR15. CBR16. INC17. DEC18. TST19. CLR20. SER
53. LD54. ST55. MOV56. LDI57. IN58. OUT59. LPM
21. RJMP22. CALL23. RET24. RETI25. CPSE26. CP27. CPC28. CPI29. SBRC30. SBRS31. SBIC32. SBIS33. BRBS34. BRBC35. BREQ36. BRNE37. BRCS38. BRCC39. BRSH40. BRLO41. BRMI42. BRPL43. BRGE44. BRLT45. BRHS46. BRHC47. BRTS48. BRTC49. BRVS50. BRVC51. BRIE52. BRID
60. SBI61. CBI62. LSL63. LSR64. ROL65. ROR66. ASR67. SWAP68. BSET69. BCLR70. BST71. BLD72. SEC73. CLC74. SEM75. CLN76. SEZ77. CLZ78. SEI79. CLI80. SES81. CLS82. SEV83. CLV84. SET85. CLT86. SEH87. CLH88. NOP89. SLEEP90. WDR
http://en.wikipedia.org/w
iki/Atm
el_AV
R_instruction_set
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.tue.nl/~aeb/comp/8051/set8051.htm
l
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 OpCodeINC 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 OpCodeADD 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 OpCodeACALL 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ônicopode ser empregado em várias instruções.
• Em cada uma delas, a sintaxe é diferente.
ASSEMBLY2
4525/04/2017
ACI DCX LXI RPEADC DCX LXI RPOADC DCX MOV RZADD DCX MOV RLCADD DI MOV RRCADI EI MVI RSTANA HLT MVI SBBANA IN NOP SBBANI INR ORA SBICALL INR ORA SHLDCC INX ORI SIMCM INX OUT SPHLCMA INX PCHL STACMC INX POP STAXCMP JMP POP STAXCMP JC POP STCCNC JM POP SUBCNZ JNC PUSH SUBCP JNZ PUSH SUICPE JP PUSH XCHGCPI JPE PUSH XRACPO JPO RAL XRACZ JZ RAR XRIDAA LDA RET XTHLDAD LDAX RCDAD LDAX RIMDAD LHLD RMDAD LXI RNCDCR LXI RNZDCR LXI RP
CISC
http://cdn.cpu-world.com/CPUs/8085/S_Intel-D8085AH-1.jpg
Mnemônicos 8-bit P Intel® 8085ASSEMBLY2
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 radc 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 nadd a,(ii+s) cpl ini ld a,(de) outd rr (ii+s) sub radd 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 nadd ii,pp dec r jp nn ld r,(ii+s) push rr rrc (ii+s) xor rand (hl) dec ss jp c,nn ld r,n push ii rrc rand (ii+s) dec ii jp m,nn ld r1,r2 res b,(hl) rrcaand n di jp nc,nn ld i,a res b,(ii+s) rrdand r djnz s jp nz,nn ld r,a res b,r rst kbit 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,ncall nn ex af,af' jp z,nn ld ss,nn ret nc sbc a,rcall c,nn ex de,hl jr s ld ii,nn ret nz sbc hl,sscall m,nn exx jr c,s ld sp,hl ret p scfcall 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,rcall 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 rccf 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.CALL28.GOTO29.RETLW
23.MOVLW24.IORLW25.ANDLW26.XORLW
4725/04/2017
Mnemônicos PIC® 8-bit baseline19.BCF20.BSF21.BTFSC22.BTFSS
bbbfbbbfbbbfbbbf
ffffffffffffffff
01 0001 0101 1001 11
11 0011 0111 1011 11
kkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkk
10 0110 1k10 00
kkkkkkkkkkkk
kkkkkkkkkkkk
00 0000 0000 0000 00
0000000000000000
0100001000110fff
30.CLRWDT31.OPTION32.SLEEP33.TRIS
1. ADDWF2. ANDWF3. COMF4. DECF5. DECFSZ6. INCF7. INCFSZ8. IORWF9. MOVF10.RLF11.RRF12.SUBWF13.SWAPF14.XORWF15.MOVWF16.CLRF17.NOP18.CLRW
000000000000000000000000000000000000
011101011001001110111010111101001000110111000010111001100000000100000001
dfdfdfdfdfdfdfdfdfdfdfdfdfdf1f1f0000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000
ASSEMBLY2
4825/04/2017
Mnemônicos PIC® 8-bit mid-range19.BCF20.BSF21.BTFSC22.BTFSS
00bb01bb10bb11bb
bfffbfffbfffbfff
ffffffffffffffff
01010101
0000000000000000
0110000000000110
0100100110000011
32.CLRWDT33.RETFIE34.RETURN35.SLEEP
00000000
00xx01xx100010011010110x111x
kkkkkkkkkkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkk
23.MOVLW24.RETLW25.IORLW26.ANDLW27.XORLW28.SUBLW29.ADDLW
11111111111111
0kkk1kkk
kkkkkkkk
kkkkkkkk
30.CALL31.GOTO
1010
1. ADDWF2. ANDWF3. COMF4. DECF5. DECFSZ6. INCF7. INCFSZ8. IORWF9. MOVF10.RLF11.RRF12.SUBWF13.SWAPF14.XORWF15.MOVWF16.CLRF17.NOP18.CLRW
011101011001001110111010111101001000110111000010111001100000000100000001
dfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfff1fff1fff0xx00xxx
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000xxxx
000000000000000000000000000000000000
25/04/2017
9
ASSEMBLY2
4925/04/2017
Mnemônicos PIC® 8-bit e.mid-range19.BCF20.BSF21.BTFSC22.BTFSS
00bb01bb10bb11bb
bfffbfffbfffbfff
ffffffffffffffff
01010101
0000010010001001101011001110
kkkkkkkkkkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkk
23.MOVLW24.RETLW25.IORLW26.ANDLW27.XORLW28.SUBLW29.ADDLW
11111111111111
30.ADDWFC31.ASRF32.LSLF33.LSRF34.SUBWFB
11010111010101101011
dfffdfffdfffdfffdfff
ffffffffffffffffffff
1111111111
1. ADDWF2. ANDWF3. COMF4. DECF5. DECFSZ6. INCF7. INCFSZ8. IORWF9. MOVF10.RLF11.RRF12.SUBWF13.SWAPF14.XORWF15.MOVWF16.CLRF17.NOP18.CLRW
011101011001001110111010111101001000110111000010111001100000000100000001
dfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfffdfff1fff1fff00000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000xx
000000000000000000000000000000000000
ASSEMBLY2
5025/04/2017
Mnemônicos PIC® 8-bit e.mid-range
37.MOVLB38.MOVLP
00000001
001k1kkk
kkkkkkkk
0011
39.BRA40.BRW41.CALLW42.RETFIE43.RETURN44.CLRWDT45.OPTION46.RESET47.SLEEP48.TRIS49.ADDFSR50.MOVIW
51.MOVWI
001k00000000000000000000000000000000000000010000111100001111
kkkk0000000000000000011001100000011001100nkk00010nkk00011nkk
kkkk101110101001100001000010000100110fffkkkk0nmm1nmmkkkkkkkk
110000000000000000001100110011
kkkkkkkk
kkkkkkkk
35.CALL36.GOTO
1010
0kkk1kkk
ASSEMBLY2
5125/04/2017
Quadro comparativoBaseline Mid Range E. M. R.
LSLFLSRF
MOVF MOVF MOVFMOVIWMOVLBMOVLP
MOVLW MOVLW MOVLWMOVWF MOVWF MOVWF
MOVWINOP NOP NOPOPTION OPTION
RESETRETFIE RETFIE
RETLW RETLW RETLWRETURN RETURN
RLF RLF RLFRRF RRF RRFSLEEP SLEEP SLEEP
SUBLW SUBLWSUBWF SUBWF SUBWF
SUBWFBSWAPF SWAPF SWAPFTRIS TRISXORLW XORLW XORLWXORWF XORWF XORWF
Baseline Mid Range E. M. R.ADDFSR
ADDLW ADDLWADDWF ADDWF ADDWF
ADDWFCANDLW ANDLW ANDLWANDWF ANDWF ANDWF
ASRFBCF BCF BCF
BRABRW
BSF BSF BSFBTFSC BTFSC BTFSCBTFSS BTFSS BTFSSCALL CALL CALL
CALLWCLRF CLRF CLRFCLRW CLRW CLRWCLRWDT CLRWDT CLRWDTCOMF COMF COMFDECF DECF DECFDECFSZ DECFSZ DECFSZGOTO GOTO GOTOINCF INCF INCFINCFSZ INCFSZ INCFSZIORLW IORLW IORLWIORWF IORWF IORWF
ASSEMBLY2
5225/04/2017
• Importar um código assembly feitopara um chip e usá-lo em outro tipode chip nem sempre é tarefa fácil.
• Podem ser necessárias alteraçõesem mnemônicos e em faixas devalores para operandos.
• Diferenças ocorrem até mesmodentro da mesma família.
Importação de código
ASSEMBLY2
5325/04/2017
Mnemônicos PIC® 8-bit PIC181. ADDWF2. ADDWFC3. ANDWF4. CLRF5. COMF6. CPFSEQ7. CPFSGT8. CPFSLT9. DECF10.DECFSZ11.DCFSNZ12.INCF13.INCFSZ14.INFSNZ15.IORWF
16.MOVF17.MOVFF18.MOVWF19.MULWF20.NEGF21.RLCF22.RLNCF23.RRCF24.RRNCF25.SETF26.SUBFWB27.SUBWF28.SUBWFB29.SWAPF30.TSTFSZ31.XORWF
32.BCF33.BSF34.BTFSC35.BTFSS36.BTG
37.BC38.BN39.BNC40.BNN41.BNOV42.BNZ43.BOV44.BRA45.BZ46.CALL47.CLRWDT48.DAW
59.ADDLW60.ANDLW61.IORLW62.LFSR63.MOVLB64.MOVLW65.MULLW66.RETLW67.SUBLW68.XORLW
69.TBLRD*70.TBLRD*+71.TBLRD*-72.TBLRD+*73.TBLWT*74.TBLWT*+75.TBLWT*-76.TBLWT+*
49.GOTO50.NOP51.POP52.PUSH53.RCALL54.RESET55.RETFIE56.RETLW57.RETURN58.SLEEP
ASSEMBLY2
5425/04/2017
Mnemônicos PIC24F (ex.:04KA200)1. ADD2. ADDC3. AND4. ASR5. BCLR6. BRA7. BSET8. BSW9. BTG10.BTSC11.BTSS12.BTST13.BTSTS14.CALL15.CLR16.CLRWDT
17.COM18.CP19.CP020.CPB21.CPSEQ22.CPSGT23.CPSLT24.CPSNE25.DAW26.DEC27.DEC228.DISI29.DIV30.FF1L31.FF1R32.GOTO
33.INC34.INC235.IOR36.LNK37.LSR38.MOV39.MUL40.NEG41.NOP42.POP43.PUSH44.PWRSAV45.RCALL46.REPEAT47.RESET48.RETFIE
49.RETLW50.RETURN51.RLC52.RLNC53.RRC54.RRNC55.SE56.SETM57.SL58.SUB59.SUBB60.SUBR61.SUBBR62.SWAP63.TBLRDH64.TBLRDL
65.TBLWTH66.TBLWTL67.ULNK68.XOR69.ZE
25/04/2017
10
ASSEMBLY2
5525/04/2017
Mnemônicos PIC24HJ (ex.:12GP201/202)1. ADD2. ADDC3. AND4. ASR5. BCLR6. BRA7. BSET8. BSW9. BTG10.BTSC11.BTSS12.BTST13.BTSTS14.CALL15.CLR16.CLRWDT
17.COM18.CP19.CP020.CPB21.CPSEQ22.CPSGT23.CPSLT24.CPSNE25.DAW26.DEC27.DEC228.DISI29.DIV30.EXCH31.BFCL32.FF1L
33.FF1R34.GOTO35.INC36.INC237.IOR38.LNK39.LSR40.MOV41.MUL42.NEG43.NOP44.POP45.PUSH46.PWRSAV47.RCALL48.REPEAT
49.RESET50.RETFIE51.RETLW52.RETURN53.RLC54.RLNC55.RRC56.RRNC57.SE58.SETM59.SL60.SUB61.SUBB62.SUBR63.SUBBR64.SWAP
65.TBLRDH66.TBLRDL67.TBLWTH68.TBLWTL69.ULNK70.XOR71.ZE
ASSEMBLY2
5625/04/2017
Mnemônicos PIC24EP (ex.:64GP202)1. ADD2. ADDC3. AND4. ASR5. BCLR6. BRA7. BSET8. BSW9. BTG10.BTSC11.BTSS12.BTST13.BTSTS14.CALL15.CLR16.CLRWDT
17.COM18.CP19.CP020.CPB21.CPSEQ22.CPSGT23.CPSLT24.CPSNE25.DAW26.DEC27.DEC228.DISI29.DIV30.DIVF31.DO32.ED
33.EDAC34.EXCH35.BFCL36.FF1L37.FF1R38.GOTO39.INC40.INC241.IOR42.LAC43.LNK44.LSR45.MAC46.MOV47.MOVPAG48.MOVSAC
49.MYP50.MYP.N51.MSC52.MUL53.NEG54.NOP55.POP56.PUSH57.PWRSAV58.RCALL59.REPEAT60.RESET61.RETFIE62.RETLW63.RETURN64.RLC
65.RLNC66.RRC67.RRNC68.SAC69.SE70.SETM71.SFTAC72.SL73.SUB74.SUBB75.SUBR76.SUBBR77.SWAP78.TBLRDH79.TBLRDL80.TBLWTH
81.TBLWTL82.ULNK83.XOR84.ZE
ASSEMBLY2
5725/04/2017
MIPS32® e MIPS64®
• Copyright © Imagination Technologies Limited. Allrights 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 emqualquer dispositivo de qualquer fabricante.
ASSEMBLY2
5825/04/2017
Mnemônicos PIC32MX (MIPS32) (ex.:64GP202)
http://ww
w.m
ips.com/m
edia/files/MD00565-2B-M
IPS32-QRC-01.01.pdf
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 andANDI Bitwise and immediateBEQ Branch on equalBGEZ Branch on greater than or equal to zeroBGEZAL Branch on greater than or equal to zero and linkBGTZ Branch on greater than zeroBLEZ Branch on less than or equal to zeroBLTZ Branch on less than zeroBLTZAL Branch on less than zero and linkBNE Branch on not equalDIV DivideDIVU Divide unsignedJ JumpJAL Jump and linkJR Jump registerLB Load byteLUI Load upper immediateLW Load wordMFHI Move from HIMFLO Move from LOMULT MultiplyMULTU Multiply unsignedNOOP no operationOR Bitwise orORI Bitwise or immediateSB Store byteSLL Shift left logicalSLLV Shift left logical variableSLT Set on less than (signed)SLTI Set on less than immediate (signed)SLTIU Set on less than immediate unsignedSLTU Set on less than unsignedSRA Shift right arithmeticSRL Shift right logicalSRLV Shift right logical variableSUB SubtractSUBU Subtract unsignedSW Store wordSYSCALL System callXOR Bitwise exclusive orXORI 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 bitsW Working Register / Acumulator 00h até FFh – 8 bitsb Bit Address 0h até 7h – 3 bitsk Constant, 8 bits 00h até FFh – 8 bitsx 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 registradoreslocalizados 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 umapalavra de 8 bits, pois a MCU é de 8 bits.
• O bit address possui 3 bits paraendereç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ãousados 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 ANDWF02 IORWF03 XORWF04 ADDWF05 SUBWF06 COMF07 INCF08 DECF09 INCFSZ10 DECFSZ
11 RLF12 RRF13 SWAPF14 MOVF15 CLRF16 CLRW17 MOVWF18 NOP
W: Work register (accumulator)F: File registerOPCODE<13:12> = 00
INSTRUÇÕES PIC16F8773
6625/04/2017
SUBWFDECFIORWFANDWFXORWFADDWFMOVFCOMFINCFDECFSZRRFRLFSWAPFINCFSZ
416DEC
Bit08Bit09Bit10Bit11
Bit12Bit13
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 Tipo01 SUB WF Aritmética02 DEC F Aritmética03 IOR WF Lógica04 AND WF Lógica05 XOR WF Lógica06 ADD WF Aritmética07 MOV F Movimentação08 COM F Lógica09 INC F Aritmética10 DEC FSZ Aritmética11 RR F Lógica12 RL F Lógica13 SWAPF Lógica14 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.
SUBWFDECFIORWFANDWFXORWFADDWFMOVFCOMFINCFDECFSZRRFRLFSWAPFINCFSZ
0 dseleção file13 12 8 7 6 0
011
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 file13 12 7 6 0
011
Instrução Tipo15 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,d01 ANDWF f,d02 IORWF f,d03 XORWF f,d04 ADDWF f,d05 SUBWF f,d06 COMF f,d07 INCF f,d08 DECF f,d09 INCFSZ f,d10 DECFSZ f,d11 RLF f,d12 RRF f,d13 SWAPF f,d14 MOVF f,d
INSTRUÇÕES PIC16F8773
7125/04/2017
Sintaxe para o tipo 2
1 CLRF f2 CLRW3 MOVWF f4 NOP
INSTRUÇÕES PIC16F8773
7225/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 001 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 001 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 asubstituição total por zero gera códigona 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
24DEC
Bit07Bit08
Bit09Bit10Bit11Bit12Bit13
CS
NOP
MOVWF
CLRW
CLRF
INSTRUÇÕES PIC16F8773
7525/04/2017
1 AND WF2 IOR WF3 XOR WF4 ADD WF5 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 F2 INC F3 DEC F4 INC FSZ5 DEC FSZ6 RL F7 RR F8 SWAP F9 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ãoagrupadas e identificadas pelo destiny.
• Isto se deve ao fato das suas sintaxesserem diferentes.
INSTRUÇÕES PIC16F8773
7825/04/2017
1 CLRW2 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 BCF2 BSF3 BTFSC4 BTFSS
F: File registerOPCODE<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 file13 12 7 6 0
19
INSTRUÇÕES PIC16F8773
8125/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 001 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
24DEC
Bit10Bit11
Bit12Bit13
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,b2 BSF f,b3 BTFSC f,b4 BTFSS f,b
INSTRUÇÕES PIC16F8773
8425/04/2017
1 ADDLW2 ANDLW3 IORLW4 MOVLW5 SUBLW6 XORLW7 RETLW
Família de instruções sobre literais (11)
W: Work register (accumulator)L: Literal ou Constante ou DadoOPCODE<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
111
Família de instruções sobre literais (11)INSTRUÇÕES PIC16F8773
8625/04/2017
Instrução Nibble 3 Nibble 2 Nibble 1 Nibble 001 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 LW2 IOR LW3 XOR LW4 ADD LW5 SUB LW6 MOV LW7 RET LW
Classificação das instruções sobre literais (11)INSTRUÇÕES PIC16F8773
8825/04/2017
416DEC
Bit08Bit09Bit10Bit11
Bit12Bit13
CS
IORANDXOR
MOVLW
RETLW
SUBLW
ADDLW
Lógicas
Aritméticas
Movim
entação
Seleção das instruções sobre literais (11)
INSTRUÇÕES PIC16F8773
8925/04/2017
1 ANDLW k2 IORLW k3 XORLW k4 ADDLW k5 SUBLW k6 MOVLW k7 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 LWIOR LWXOR LWADD LWSUB LWMOV LWRET LW
AND WFIOR WFXOR WFADD WFSUB WFMOV WF
Lógicas
Aritméticas
Movimentação
FileFamília 00
LiteralFamília 11
25/04/2017
16
INSTRUÇÕES PIC16F8773
9125/04/2017
1 CLRWDT2 SLEEP3 RETURN4 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ção13 7 6 0
INSTRUÇÕES PIC16F8773
9325/04/2017
1 GOTO2 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
011
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çãoidentifica 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ção13 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ção13 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
SUBWFDECFIORWFANDWFXORWFADDWFMOVFCOMFINCFDECFSZRRFRLFSWAPFINCFSZ
NOPMOVWFCLRWCLRF
BCFBSFBTFSCBTFSS
ANDLWIORLWXORLWADDLWSUBLWMOVLWRETLW
CLRWDTSLEEPRETURNRETFIE
GOTOCALL
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ção13 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
24DEC
Bit12Bit13
Sobre byte / De controleSobre bitDe desvioSobre literal
INSTRUÇÕES PIC16F8773
10125/04/2017
Instruções de dois ciclos – 2TCY
1 BTFSC2 BTFSS3 DECFSZ4 INCFSZ5 CALL6 GOTO7 RETURN8 RETLW9 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) afetadosAND - - ZIOR - - ZXOR - - ZADD C DC ZSUB C DC ZCLRW - - ZCLRF - - ZCOMF - - ZINCF - - ZDECF - - ZRLF C - ZRRF C - Z
SWAPF - - ZMOVF - - Z
Bits de estadoINSTRUÇÕES PIC16F8773
10425/04/2017
Bits de estado (SR) afetadosADD C DC ZSUB C DC ZRLF C - ZRRF C - Z
Bits de estado
• Nas instruções acima, é preciso considerarque 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 007 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 nasquais se deseja que a execução de um programaleve uma determinada quantidade de tempo.
• O uso do NOP permite aumentar o tempo deexecuçã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 omesmo tempo deexecução nas duaspossibilidades.
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,dSintaxe: 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,dSintaxe: 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,dSintaxe: 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,dSintaxe: 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,dSintaxe: 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 bits
gerando 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 = 0xAESUBLW 0x45 ;W = 0x45 - 0xAEMOVWF 0x23 ;SRAM(0x23) = W
256 + (69 – 174) = 151
W = L – WW = 0x45 – 0xAE
100h + 45h – AEh = 97h
AEh – 45h: C = 145h – AEh: C = 0
• Em subtração negativa, a resposta de 8 bitsrepresenta o resultado adicionado a 100h.
• Para saber o real resultado, é preciso converter ovalor 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: CLRWSintaxe: 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” + 1d=1: “f” = “f” + 1
DECF
d=0: “W” = “f” – 1d=1: “f” = “f” – 1
Sintaxe: INCF f,dSintaxe: 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.
FFhFEh
01h00h
Valor
Z=1
INCF
FFhFEh
01h00h
Valor
Z=1
DECF
CONJUNTO DE INSTRUÇÕES4
12025/04/2017
INCF e DECF
• O bit Z pode ser usado para incrementarou 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 daadiçã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,dSintaxe: 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ção
corresponde 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ção
corresponde 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 RRFcorresponde à 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 RRFcorresponde à 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 umindicativo de número inteiro entre 100h e 1FFh.
• O programa pode interpretar C=1, no início, como umindicativo de número fracionário entre 00,8h e FF,8h.
• Ao usar RLF, C=1 no início deve, obrigatoriamente, serinterpretado como a parte facionária (00,8h).
• Ao usar RRF, C=1 no início deve, obrigatoriamente, serinterpretado como overflow (100h).
• Ao obter C=1 após RLF, deve, obrigatoriamente, serinterpretado como overflow (100h).
• Ao obter C=1 após RRF, deve, obrigatoriamente, serinterpretado 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, paraverificar 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 fSintaxe: 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,bSintaxe: 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,bSintaxe: 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óximainstrução.
• INCFSZ: “Increment f, Skip if Zero”.• DECFSZ: “Decrement f, Skip if Zero”.• Não afetam os bits de estado.
Sintaxe: INCFSZ f,dSintaxe: DECFSZ f,d
INCFSZ
d=0: “W” = “f” + 1d=1: “f” = “f” + 1
DECFSZ
d=0: “W” = “f” – 1d=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 é usadaapós o skipper, a instrução pulada nãonecessariamente é 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 dedispositivos processados a disponibilizar modos deoperaçã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 kSintaxe: 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 CALLCONJUNTO 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çõesrealizadas 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 fluxode informação de 8 bits no máximo.
Ciclo de relógio e de instruçãoCONJUNTO DE INSTRUÇÕES4
14825/04/2017
• Q1: O mnemônico é identificado por meio decircuitos decodificadores baseados nas tabelas demontagem (decode).
• Todas as instruções passam pela etapa dedecodificaçã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ênciados 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 BTFSC2 BTFSS3 DECFSZ4 INCFSZ5 CALL6 GOTO7 RETURN8 RETLW9 RETFIE
Ciclo de relógio e de instruçãoCONJUNTO DE INSTRUÇÕES4
15025/04/2017
• Muitas informações aqui contidas são encontradasnos data sheets fornecidos pela Microchip©.
• Outras informações são omitidas por tratarem-sede segredo industrial e aqui são apresentadascomo 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 file13 12 7 6 0
18
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 literal13 12 7 0
18
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 file13 12 7 6 0
19
CONJUNTO DE INSTRUÇÕES4
15425/04/2017
Instrução Q1 Q2 Q3 Q4
CLRW Decode Nada Nada Grava WCLRF Decode Nada Nada Grava fCLRWDT Decode Nada Nada ReiniciaMOVLW Decode Lê o literal Nada Grava WMOVWF Decode Lê W Nada Grava fMOVF Decode Lê o file Nada Grava dSLEEP Decode Nada Nada SLEEPNOP Decode Nada Nada Nada
• Os ciclos onde nada é realizado poderiamser eliminados para ganhar tempo.
• Isso não é feito a fim de que se mantenhaconstante a frequência de instruções (fCY),o que simplifica o funcionamento da MCU.
• A reiniciação feita por CLRWDT diz respeitoao 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 NadaBTFSS Decode Lê o file TEST NadaINCFSZ Decode Lê o file INC/TEST Grava dDECFSZ Decode Lê o file DEC/TEST Grava d
• Provavelmente o PCH e oPCL são alterados em Q3e em Q4 do segundo TCY.
Ciclo de relógio e de instruçãoCONJUNTO 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 NadaGOTO Decode Lê o k Nada Nada
• Provavelmente, o push do CALL é realizado nosQ1 e Q2 do segundo TCY (visto mais adiante).
• Provavelmente, o PCH e o PCL são gravados nosQ3 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
011
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 NadaRETLW Decode Lê o literal Nada Grava WRETFIE Decode Nada Nada GIE = 0
• Uma hipótese é a de que o PCH e oPCL sejam gravados nos Q3 e Q4 dosegundo TCY.
• Outra hipótese é a de o 13-bit programaddress seja resgatado do stack em Q4por meio do 13-bit address bus.
Ciclo de relógio e de instruçãoCONJUNTO DE INSTRUÇÕES4
15825/04/2017
• Apenas dois ciclos de relógio sãonecessários são usados na gravação doPC nas instruções 2TCY.
• O uso de oito ciclos se deve àmanutenção da sincronia, a preservaçãodo ciclo de instruções.
• Existe a possibilidade de que dois ciclossejam gastos no push e no pop na pinha,porém, por não serem efetuados pelaULA, esses eventos podem ocorrersimultaneamente 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 skipseja sempre realizado.• Condição satisfeita: PC = PC+2.• Condição não satisfeita: PC = PC+1.
• Nos desvios incondicionais, não háesclarecimentos, no data sheet, sobre oque é executado em Q3.
Ciclo de relógio e de instruçãoCONJUNTO 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ção13 12 11 10 9 8 7 6 5 4 3 2 1 0
file address
1 113 12 11 10 9 8 7 6 5 4 3 2 1 0
seleção literal
0 0 0 0 0 0 013 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 = 11111b0 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ãoválidas para toda a família mid-range.
• As opções 10 e 11 dependem do modelo,pois o tamanho da program memorypode variar, sendo 8kwords naPIC16F877.
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, oque, também, impede a cópia do programa.
• A limpeza total do chip (full-erase) reinicia os bits deproteção, os mesmos precisam ser regravados.
• Foram descobertas formas de burlar esta proteção emalguns modelos mais antigos de PIC®, não há garantiasplenas 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 é útilquando se deseja que parte do programaseja configurável pelo usuário.
• Outra possibilidade é a comercialização deuma sub-rotina, que fica na parte protegida,permitindo ao usuário criar seu próprioprograma 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 EEPROMBITS 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 forado ambiente de operação.
• Ideal quando já se sabe que o programafunciona 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 – Permite o 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 maiselevada em operação normal.
• A desabilitação do LVP requer hardwaremais sofisticado quando se usa ICSP™, poisrequer tensão superior para gravar o chip.
• A habilitação do LVP aumenta a chance daPIC® ser gravada acidentalmente.
• A habilitação do LVP simplifica o hardwarequando se usa ICSP™, pois a tensão dealimentaçã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/w p-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