Você está na página 1de 17

list p=16f877 ; list directive to define processor

#include <p16f877.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC &
_WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF

ORG 0x000 ; processor reset vector


clrf PCLATH ; ensure page bits are cleared
goto main ; go to beginning of program

ORG 0x004 ; interrupt vector location

movwf w_temp ; save off current W register contents


movf STATUS,w ; move status register into W register

FURG/CCC
03133 - ELETRÔNICA DIGITAL

MICROCONTROLADOR PIC16F877A
Programação em Linguagem Assembly

Prof. Claudio D. Mello Jr.


Definições
Assembly → Linguagem de programação (µCs e µPs)

Assembler → Programa que realiza a tradução do programa


em assembly para linguagem de máquina (0s e 1s).

Fluxo da programação de um microcontrolador (PIC)

Código absoluto
Fluxo da programação de um microcontrolador (PIC)

Geração de código realocável


Representação de constantes em assembly (PIC)

Tipo Formato Exemplo


B’dígitos binários’ ou B’10010110’
Binário
b’dígitos binários’ b’10010110’
D’dígitos decimais’ ou D’19’
Decimal
.dígitos decimais .19
H’dígitos hexadecimais ou H’5A’
Hexadecimal
0xdígitos hexadecimais 0x5A
A’Caracter’ A’C’
ASCII
‘Caracter’ ‘C’
Elementos da linguagem Assembly:

• Labels
Palavra que designa uma linha ou trecho de um programa
Deve iniciar por uma letra ou “_” (underline)

Deve iniciar na primeira coluna e ter comprimento máx. de 32 caracteres

• Instruções
São específicas para cada família de µC;
Sintaxe definida

• Operandos (Argumentos)
São os elementos das instruções a serem executadas
Podem ser registradores, constantes ou variáveis
• Diretivas
São comandos do programa tradutor/montador (assembler)
São utilizados para controlar o assembler: sua entrada, saída e alocação de dados
(configuração).

• Comentários
Inseridos pelo programador, devem colocados após as instruções e iniciados por “;”
Programa exemplo contendo os elementos básicos do Assembly

p16F877.inc
Mapa da memória do
PIC16F877A (Dados)
Diretivas do Assembler (PIC)

Há seis tipos de diretivas:

• Diretivas de controle → Determinam como o programa é “montado” (Assembled)

• Diretivas Condicionais do Assembly → Permitem atribuir condicionalidade na “montagem”


do programa. Definem que código irá ser “assembled”.

• Diretivas de Dados → Controlam a alocação da memória e como os dados podem ser referenciados

• Diretivas de Listagem → Controlam o formato do arquivo de listagem do Assembler

• Diretivas de Macro → Controlam a execução e a alocação dos dados na definição das macros

• Diretivas para Arquivo Objeto → Usadas na criação de arquivos objetos


Diretivas de Controle

#define ; Define a Text Substitution Label


#include ; Include Additional Source File
#undefine ; Delete a Substitution Label
constant ; Declare Symbol Constant
end ; End Program Block
equ ; Define an Assembler Constant
org ; Set Program Origin
processor ; Set Processor Type
radix ; Specify Default Radix
set ; Define an Assembler Variable
variable ; Declare Symbol Variable
Diretivas Condicionais:

else ; Begin Alternative Assembly Block to IF Conditional


endif ; End Conditional Assembly Block
endw ; End a While Loop
if ; Begin Conditionally Assembled Code Block
ifdef ; Execute If Symbol has Been Defined
ifndef ; Execute If Symbol has not Been Defined
while ; Perform Loop While Condition is True
Diretivas de Dados:

__badram ; Identify Unimplemented RAM


__badrom ; Identify Unimplemented ROM
__config ; Set Processor Configuration Bits
config ; Set Processor Configuration Bits (PIC18 MCUs)
__idlocs ; Set Processor ID Locations
__maxram ; Define Maximum RAM Location
__maxrom ; Define Maximum ROM Location
cblock ; Define a Block of Constants
da ; Store Strings in Program Memory (PIC12/16 MCUs)
data ; Create Numeric and Text Data
db ; Declare Data of One Byte
de ; Declare EEPROM Data Byte
dt ; Define Table (PIC12/16 MCUs)
dw ; Declare Data of One Word
endc ; End an Automatic Constant Block
fill ; Specify Program Memory Fill Value
res ; Reserve Memory
Diretivas de Listagem:

error ; Issue an Error Message


errorlevel ; Set Message Level
list ; Listing Options
messg ; Create User Defined Message
nolist ; Turn off Listing Output
page ; Insert Listing Page Eject
space ; Insert Blank Listing Lines
subtitle ; Specify Program Subtitle
title ; Specify Program Title
Diretivas de Macro:

endm ; End a Macro Definition


exitm ; Exit from a Macro
expand ; Expand Macro Listing
local ; Declare Local Macro Variable
macro ; Declare Macro Definition
noexpand ; Turn off Macro Expansion
Diretivas para Arquivo Objeto:

access_ovr - Begin an Object File Overlay Section in Access RAM (PIC18 MCUs)
bankisel - Generate Indirect Bank Selecting Code (PIC12/16 MCUs)
Banksel - Generate Bank Selecting Code
code - Begin an Object File Code Section
code_pack - Begin an Object File Packed Code Section (PIC18 MCUs)
extern - Declare an Externally Defined Label
global - Export a Label
idata - Begin an Object File Initialized Data Section
idata_acs - Begin an Object File Initialized Data Section in Access RAM
(PIC18 MCUs)
pagesel - Generate Page Selecting Code (PIC10/12/16 MCUs)
pageselw - Generate Page Selecting Code Using WREG Commands
(PIC10/12/16 MCUs)
udata - Begin an Object File Uninitialized Data Section
udata_acs - Begin an Object File Access Uninitialized Data Section (PIC18
MCUs)
udata_ovr - Begin an Object File Overlayed Uninitialized Data Section
udata_shr - Begin an Object File Shared Uninitialized Data Section (PIC12/16
MCUs)
Diretiva macro

Declara a definição de uma macro.

Uma macro é uma seqüência de instruções que pode ser inserida no código fonte
assembly. Deve ser definida antes do seu uso.

Sintaxe: label macro [arg 1, ..., arg n]

Uma macro pode chamar uma outra macro ou a si própria (recursividade).


Número máximo de macros aninhadas (nested) é 16.
Número máximo de argumentos é definido pelo tamanho da linha de código fonte
(200 caracteres), após label e macro.
Embora possa ser definida em outro programa (include), cada chamada da macro
equivale a inserção do código equivalente, ocupando memória de programa.
Circuito mínimo para
utilização do 16F877A