Você está na página 1de 47

Mestrado Integrado em Eng.

Electrónica Industrial e
Computadores

Instruction Set

Microcontroladores
2º Ano – A04
Acumulador
• O registo de trabalho do microcontrolador é o Acumulador. O Acc é usado, por defeito, em
muitas instruções: ADD A,#30; SUBB A,R0; INC A; CLR A …
• No entanto o acumulador, tal como os restantes registos (excepção R0-R7) está mapeado
em memória na área dos SFRs (Special Function Registers) – memória de dados interna
posições 80h a FFh (acesso directo)
• O nome do registo é ACC, é endereçável ao bit e o seu endereço é o 0E0h

REG51F380.H
• As instruções MOV A,#30; INC A; MOV A,R1 são idênticas a MOV ACC,#30; INC ACC e
MOV ACC,R1
• Reparar no entanto que utilizarmos ACC estamos a indicar na mneumónica da instrução um
endereço directo da memória de dados (0E0h). Ao fazê-lo, estas instruções ocupam mais
bytes na memória de código e necessitam de mais ciclos máquina para serem executadas;
• Para executarmos instruções booleanas sobre o acumulador temos de utilizar o seu
endereço e o operador: SETB ACC.7; JB ACC.0,LOOP
• Reparar que ACC.7 é traduzido para 0E0h.7 o que equivale ao endereço de bit 0E7h
– Os primeiros 128 bits estão na área endereçável ao bit (D:20H-2FH), os segundos 128 bits estão reservados a
registos (SFRs) endereçáveis ao bit.

Microcontroladores - 2019/20 - Jorge Cabral A04-2


Mneumónicas
• Podem utilizar o Acumulador por defeito;
• O símbolo # é utilizado para identificar um valor constante;
• A mneumónica MOV A,#0FFh ocupa dois bytes na
memória de código, o 1º byte é o opcode que codifica a
instrução de mover para o acumulador um valor constante
de 8-bit e o 2º é a constante (#data ou #immediate);
• Estas mneumónicas afectam as flags Paridade (P) e Zero
(Z) microcontrolador
• A mneumónica MOV A,30h ocupa dois bytes na memória
de código, o 1º byte é o opcode que codifica a instrução de
mover para o acumulador o conteúdo do endereço da
memória de dados de acesso directo identificado pelo 2º
byte. Ou seja, direct é um endereço da memória de dados
onde o CPU pode ir ler um dos operandos ou escrever o
resultado;
• Como todos os SFRs têm um nome para tornar mais
simples a sua identificação é possível usarmos MOV A,P0
• P0 é um endereço na área dos SFR - memória de dados
interna de acesso directo (D:80h a 0FFh)

Microcontroladores - 2019/20 - Jorge Cabral A04-3


Mneumónicas
• As mneumónicas são as instruções que implementam o programa a executar pelo
microcontrolador;
• Cada mneumónica corresponde a um opcode único;
• O assemblador traduz todas as mneumónicas de um ficheiro assembly para
opcodes;
• Os fabricantes disponibilizam ferramentas para “gravar/flashar” na memória de
código todos os opcodes que implementam o programa;
• Todos os opcodes são armazenados na memória de código/programa (C:0000h-
0FFFFh);
• Esta memória é apenas de leitura;
• O CPU do microcontrolador utiliza um registo de propósito especial de 16-bit, o PC,
para endereçar esta memória. O PC aponta (tem sempre o endereço) da próxima
instrução/opcode a executar.

Microcontroladores - 2019/20 - Jorge Cabral A04-4


Mneumónicas
PSW (D:0D0H - endereçável ao bit)
Bit 7 6 5 4 3 2 1 0
Nome Cy AC F0 RS1 RS0 OV F1 P
Reset 0 0 0 0 0 0 0 0

Cy Carry Flag
Colocado a um quando o resultado da última operação
aritmética resultou num carry (adição) ou num borrow
• Ao serem executadas pelo CPU (subtracção). Colocado a 0 por todas as outras operações
AC Auxiliary Carry Flag
as instruções afectam as suas Colocado a um quando o resultado da última operação
flags de estado; aritmética resultou num carry (adição) ou num borrow
(subtracção) para o nibble mais significativo. Colocado a 0 por
• Uma flag (bandeira) é um bit que F0
todas as outras operações aritméticas.
User Flag 0
sinaliza ou indica um determinado Flag de propósito geral para utilização pelo programador
(controlo de software)
evento; RS[1:0] Register Select Bank

• Estas flags podem/devem ser Estes bits definem qual o banco de registos que é usado
durante o acessos aos registos R0 a R7
utilizadas no controlo de fluxo de OV Overflow Flag
Este bit é colocado a 1 se:
execução do programa pelo Uma instrução ADD, ADDC ou SUBB provoca do bit de sinal
A instrução MUL resulta num overflow (>255)
programador; A instrução DIV provoca condição dividir por 0

• O registo Program Status Word F1


Colocada a 0 em todos os outros casos pelas mesmas instruções
User Flag 1
(PSW endereço 0D0h SFR) Flag de propósito geral para utilização pelo programador
(controlo de software)
armazena estas flags. P Parity Flag
Este bit é colocado a um se a soma dos 8 bits do acumulador
for ímpar é colocado a zero se a soma for par. Ou seja, se o
número de 1's no acumulador for ímpar P é colocado a 1
Microcontroladores - 2019/20 - Jorge Cabral A04-5
Organização da memória de dados

1. Os primeiros (lower) 128 bytes da RAM interna podem ser acedidos directa ou indirectamente;
2. Os SFRs só podem ser acedidos por endereçamento directo;
3. Os segundos (upper) 128 bytes da RAM interna só podem ser acedidos indirectamente;
4. 4 kBytes de memória externa estão implementados in-chip (C8051F388) e são acedidos
indirectamente usando a instrução MOVX (bits 3 e 2 do EMI0CF controlam os modos para o
C8051F388).

Microcontroladores - 2019/20 - Jorge Cabral A04-6


DATA (00h:7Fh)
• Registos de trabalho (R0..R7)
– Banco 0: 00h:07h
– Banco 1: 08h:0Fh
– Banco 2: 10h:17h
– Banco 3: 18h:1Fh
• Selecção de banco
– Bits RS0 (bit 3) e RS1 (bit 4) do registo PSW
• Zona endereçável ao bit
– DATA - 20h:2Fh
– Processamento booleano
• Uso Geral
– DATA – 30h:7Fh
• Endereçamento directo e indirecto

Microcontroladores - 2019/20 - Jorge Cabral A04-7


Modos de endereçamento

• Existem 4 bancos de registos, estando


apenas um activo num dado instante

– Os bits 3 e 4 (RS0 e RS1) do registo PSW


(endereço 0D0h do SFR) especificam qual o
banco que está activo;
– MOV PSW, #000 11 000B activa o banco 3

• Os bancos de registo ocupam os


primeiros 32 bytes da RAM interna;

Microcontroladores - 2019/20 - Jorge Cabral A04-8


DATA (20h:2Fh) - BIT
• Zona endereçável ao bit
– Operações booleanas;
– Nota:
esta zona da DATA é endereçável ao byte (16 bytes)
e ao bit (128 bits)

– MOV A,2AH ;Acumulador armazena bits 50h:57h


– SETB 2AH ;Bit 2Ah é colocado a um

– Instruções:
• MOV C,bit MOV bit,C
• CLR bit SETB bit
• CPL bit ANL C,bit ANL C,/bit
• JB bit,addr JNB bit,addr

Microcontroladores - 2019/20 - Jorge Cabral A04-9


DATA (80h:FFh)
• Duas zonas distintas nos mesmos endereços

Selecção da área de memória SFR ou IDATA feita pelo modo de


endereçamento:

– Endereçamento Directo - SFR


• Acesso aos periféricos internos através dos SFRs
• Alguns dos SFRs são endereçáveis ao bit

– Endereçamento Indirecto - IDATA


• Área de propósito geral
• Útil para colocar a stack

Microcontroladores - 2019/20 - Jorge Cabral A04-10


SFR – DATA – 80h:FFh
• Special Function Registers – SFRs
• Registos Aritméticos:
– Acumulador: A ou Acc
– Registo B
– Registo de Estado: PSW
• Apontadores:
– Apontador da Stack
– Apontador de Dados: DPTR
• DPH – MSB de DPTR
• DPL – LSB de DPTR
• Portos de E/S
– P0, P1, P2 e P3
• Sistema de Interrupções
– IE e IP
• Comunicações série RS-232
– SCON e SBUF
• Power Managment:
– PCON

Microcontroladores - 2019/20 - Jorge Cabral A04-11


SFR – Silicon Labs C8051F388

A área endereçável ao bit tem 128 bits (20h-2Fh)


Sobram 128 bits que podem ser endereçados:
- as instruções booleanas estão desenhadas
para identificar o bit usando um byte apenas
- consultando a secção 11 do datasheet:

- sobram apenas 16 bytes (128 bits)


endereçáveis que foram colocados no SFR
- esses 16 bytes são os da coluna assinalada
- os endereços iniciam-se com o endereço do
byte, ou seja, P0.0=80h; P0.7=87h; IE.0=A0h
e IE.7=Afh

No SFR estão mapeados todos os registos que


permitem controlar o microcontrolador e os seus
periféricos com a excepção dos registos internos
auxiliares e de controlo necessários à operação
do CPU e ALU, por exemplo PC e IR.

Microcontroladores - 2019/20 - Jorge Cabral A04-12


Acesso indirecto

• O acesso indirecto à memória de dados interna é realizado


recorrendo a apontadores. Ou seja, é utilizado um registo
onde está armazenado o endereço ao qual pretendemos
aceder;
• As mneumónicas que permitem o acesso indirecto à
memória de dados regra geral utilizam o registo R0 ou o R1;
• Se no registo R0 estiver armazenado o valor 30h e no
registo A o valor 0AAh, a instrução MOV @R0,A armazena
na posição 30h da memória interna de acesso indirecto o
valor 0AAh;

Microcontroladores - 2019/20 - Jorge Cabral A04-13


Instruções e operandos
• As instruções do processador são armazenadas na
forma de “opcodes” na memória de código (memória de
programa) (CODE ou XCODE) do processador;

• A cada instrução está associado um “opcode” único;

• O PC tem o endereço da memória de código onde está


armazenado o próximo “opcode” a ser executado;

• Esse “opcode” é lido para o IR (Instruction Register) e


processado pelo CPU;
• O 8051 lê sempre pelo menos um byte da memória de
programa interna. No caso da memória de programa
externa (XCODE) lê sempre 2 bytes.
• O tamanho das instruções pode ser de 1-, 2- ou 3-byte;
Microcontroladores - 2019/20 - Jorge Cabral A04-14
Instruções e operandos
• As instruções do processador operam sobre dados
(operandos);
• Os operandos podem ser de entrada (dados de entrada:
input) ou de saída (resultado: output);

• O segundo (e em alguns casos o 3º) byte lido da


memória de programa corresponde ao operando de
entrada da instrução;

• A versatilidade na programação de um processador


encontra-se na diversidade de instruções (operações) e
na forma como os operandos de entrada e de saída são
obtidos (modos de endereçamento).

Microcontroladores - 2019/20 - Jorge Cabral A04-15


Conjunto de Instruções
• Tipos de instrução
– O 8051 possui 5 grupos funcionais de instruções:
• Instruções aritméticas

• Instruções lógicas

• Instruções de transferência de dados

• Instruções para a manipulação de variáveis booleanas

• Instruções de controlo de fluxo de execução

Microcontroladores - 2019/20 - Jorge Cabral A04-16


Instruções Aritméticas

Microcontroladores - 2019/20 - Jorge Cabral A04-17


Instruções Aritméticas

Microcontroladores - 2019/20 - Jorge Cabral A04-18


Conjunto de Instruções
• Instruções aritméticas
– Quase todas as instruções são executadas em um
ou dois ciclos máquina, exceptuando:
• MUL AB (4 ciclos)
• DIV AB (8 ciclos)

– Ao usá-las deve-se prestar atenção à forma como:


• A instrução afecta o registo de estado (PSW);
• O comportamento da instrução é afectado pelo estado do
registo PSW;

– Ver datasheet Tabela 11.1 (pg 77)


Microcontroladores - 2019/20 - Jorge Cabral A04-19
Conjunto de Instruções
• Instruções aritméticas
SUBB A, Rn Deve ser explicitamente
Exemplos: inicializado a zero caso o
Bytes: 1 valor seja desconhecido
R7 = R7 – R6 Cycles: 1
MOV A, R7
Encoding: 10011rrr
CLR C
SUBB A, R6 Operation (A) (A) – (C) – (Rn)
MOV R7, A

Decrementar DPTR
DEC DPL ; decrementa o LSB do DPTR
MOV R7, DPL ; guarda o resultado em R7
CJNE R7, #0FFH, SKIP ; verifica se houve underflow para 0FFH
DEC DPH ; caso contrário decrementa o MSB do
DPTR
SKIP: ... Microcontroladores - 2019/20 - Jorge Cabral A04-20
Instruções Lógicas

Microcontroladores - 2019/20 - Jorge Cabral A04-21


Instruções Lógicas

Microcontroladores - 2019/20 - Jorge Cabral A04-22


Conjunto de Instruções
• Instruções lógicas
– As instruções lógicas que usam o acumulador são
executados em 1 ou 2 ciclos máquina;
• As de 3 ciclos são as que ocupam 3 bytes: ANL directo,#data

– Todas as instruções lógicas podem manipular


directamente (endereçamento directo) qualquer byte
da memória interna;
– As instruções e-lógico, ou-lógico, ou-exclusivo-
lógico e negação-lógica podem manipular tanto
bytes como bits;

Microcontroladores - 2019/20 - Jorge Cabral A04-23


Conjunto de Instruções
• Instruções lógicas

Exemplo:
– Converter binário em A para BCD
< 10010
MOV B, #10 ; carregar B com o divisor da base decimal
DIV AB ; dividir o número no acumulador por 10
; deixa em A a parte inteira da divisão e em B o resto
SWAP A ; mover o dígito das dezenas para o nibble mais
; significativo do acumulador
ANL A,#0F0H ; linha seguinte podia ser ORL?
ADD A, B ; adiciona ao valor no acumulador (dígito das
; dezenas) o dígito das unidades
Microcontroladores - 2019/20 - Jorge Cabral A04-24
Instruções Transferência de Dados

Microcontroladores - 2019/20 - Jorge Cabral A04-25


Transferência de Dados

Microcontroladores - 2019/20 - Jorge Cabral A04-26


Transferência de Dados

Microcontroladores - 2019/20 - Jorge Cabral A04-27


Conjunto de Instruções
• Instruções de transferência de dados
– As instruções de “transferência” de dados demoram
1, 2 ou 3 ciclos máquina;
– A movimentação de dados entre a memória interna
e externa realiza-se através de endereçamento
indirecto.
– Todas as movimentações que operam na memória
externa são executadas em 3 ciclos máquina.
• Usam o acumulador como fonte ou destino
– O strobe de leitura/escrita (pinos externos de /RD e
/WD) são activados apenas durante a execução da
instrução MOVX.

Microcontroladores - 2019/20 - Jorge Cabral A04-28


Conjunto de Instruções
• Instruções de transferência de dados
– Exemplo: Movimentação de dados a partir da memória externa
• Fonte de dados: endereços 10F4H e 10F5H (memória externa).
• Destino dos dados: registos R6 e R7, respectivamente.

MOV DPTR, #10F4H ; inicializa o apontador de dados de 16 bit com


; o menor endereço fonte (3 bytes, 3 ciclos).
MOVX A, @DPTR ; lê o dado apontado pelo apontador de dados de
; 16 bits e coloca-o no acumulador (1 byte, 3 ciclos)
MOV R6, A ; transfere o dado lido do acumulador para R6 (1b, 1c)
INC DPTR ; aponta para o próximo endereço fonte (10F5H)
MOVX A, @DPTR ; lê o dado apontado pelo apontador de dados de
; 16 bits e coloca-o no acumulador
MOV R7, A ; transfere o 2º dado lido do acumulador para R7

Microcontroladores - 2019/20 - Jorge Cabral A04-29


Conjunto de Instruções
• Instruções de transferência de dados
– A instrução MOV R1,R2 não existe!
– Uma maneira de a implementar seria:
MOV A,R2
MOV R1,A
– No entanto os registos estão implementados em memória. Portanto
podemos:
MOV R1,2 ; 2 é o endereço de R2 (banco 0) na memória RAM interna
– Ou seja, podemos sempre utilizar o endereço directo do registo com
que pretendemos utilizar.
ACC (0E0h) - Acumulador
– Para não estarmos dependentes do banco:
USING 0 ; indicar qual o banco que estamos a usar
MOV R1,AR2 ; AR2 é o endereço de R2 na memória RAM interna no
; banco seleccionado pela directiva USING

Microcontroladores - 2019/20 - Jorge Cabral A04-30


Instruções Booleanas

Microcontroladores - 2019/20 - Jorge Cabral A04-31


Instruções Booleanas

Microcontroladores - 2019/20 - Jorge Cabral A04-32


Conjunto de Instruções
• Instruções Booleanas
– Nas instruções booleanas, o carry funciona como o
“Acumulador”;
– Quando é utilizado um bit da memória de dados, esse bit
reside na área endereçável ao bit (20h a 2Fh - se tiver um
endereço entre 00h e 7Fh) ou pertence a um SFR endereçável
ao bit, endereços superiores a 80h (P0.0);
– Há instruções de salto condicional que se baseiam no estado
do bit carry (JC e JNC) ou de um bit da memória de dados
interna (JB, JNB e JBC):
– Exemplo:
MOV C,P2.4
ANL C,/P2.5
JNC CONTINUA
SETB P1.7
CONTINUA:

Microcontroladores - 2019/20 - Jorge Cabral A04-33
Instruções de “Salto”

CJNE

Compare and Jump Not Equal


Microcontroladores - 2019/20 - Jorge Cabral A04-34
Controlo de fluxo de execução

Microcontroladores - 2019/20 - Jorge Cabral A04-35


Conjunto de Instruções
• Instruções de salto
– As instruções de salto permitem alterar a sequência normal de execução das
instruções por parte do CPU;
– A instrução “JMP addr” pode ser utilizada pelo programador, mas na realidade
será utilizada uma de três instruções: SJMP, AJMP ou LJMP;
– Qualquer que seja a instrução seleccionada o programador tem de fornecer ao
assembler o endereço do destino do salto do mesmo modo: através de um
endereço (recomenda-se a utilização de etiquetas ou labels;
– A instrução JMP @A+DPTR permite implementar tabelas de saltos. O endereço
de destino é calculado em tempo de execução e depende do valor presente no
Acumulador e no DPTR:
SWITCH_ACC:
MOV DPTR,#CASEJUMP
RL A
JMP @A+DPTR
CASEJUMP:
AJMP CASE0
AJMP CASE1
AJMP CASE2 Microcontroladores - 2019/20 - Jorge Cabral A04-36
Conjunto de Instruções
• Invocação de subrotinas

– A instrução “CALL addr” pode ser utilizada pelo programador, mas na


realidade será utilizada uma de duas instruções: ACALL ou LCALL;
– Qualquer que seja a instrução seleccionada o programador tem de
fornecer ao assembler o endereço da subrotina do mesmo modo: através
de um etiqueta ou de um endereço de 16-bit, o assemblador coloca o
endereço no formato correcto;
– Para retornar da subrotina e continuar a execução na instrução seguinte
à instrução CALL (invocação da rotina), tem de ser utilizada a instrução
RET;
– O endereço da instrução seguinte, que é o conteúdo do PC, é
armazenado na memória de dados (na Stack);

Microcontroladores - 2019/20 - Jorge Cabral A04-37


Conjunto de Instruções
• Saltos condicionais

– Alteração do fluxo de execução, em tempo de execução, com base no


valor de uma variável (posição de memória), um registo ou de um bit;
– Reparar que não existe o bit Z (zero) no registo PSW. As instruções JZ e
JNZ testam o valor do acumulador directamente;
– A instrução DJNZ é utilizada para controlo de loops:
MOV R3,#8D
MOV A,#1
CTRLOOP:
MOV P1,A
RL A
DJNZ R3,CTRLOOP

– A instrução CJNE pode também ser utilizada para controlo de loops, no
entanto a principal utilização é nas comparações “maior que, menor que”.
Os dois bytes dos operandos são utilizados, o bit carry é colocado a 1 se
o primeiro operando for menor que o segundo.

Microcontroladores - 2019/20 - Jorge Cabral A04-38


Conjunto de Instruções
• LOOPS

– Para utilizarmos o Acumulador temos de recorrer ao seu endereço (ACC):


MOV A,#10 3/5
CTRLOOP:
CPL P1.0
DJNZ ACC,CTRLOOP

– Podemos utilizar a instrução CJNE, mas será necessário recorrer às


instruções INC ou DEC
CLR A 4/6
CTRLOOP:
CPL P1.0
INC A
CJNE A,#10,CTRLOOP

Microcontroladores - 2019/20 - Jorge Cabral A04-39


Conjunto de Instruções

IF … THEN … ELSE … END IF


3
CJNE A,#’S’,IF_ELSE 4/6

; if(A==‘S’)
MOV P1,#0
JMP END_IF
IF_ELSE:
; if(A!=‘S’)
; notar que ainda se pode testar se A>’S’ (ou se A<‘S’) testando o bit Carry
MOV P1,#0FFH
END_IF:

• CJNE Rn,#data,rel
• CJNE @Ri,#data,rel
• CJNE A,directo,rel

Microcontroladores - 2019/20 - Jorge Cabral A04-40


Port Input/Output
GPIO – General Purpose Input/Output - Pinos de um porto de entrada/saída (I/O) de um microcontrolador;
Porto de I/O – Registo que contém as latches que armazenam o estado de cada um dos pinos do porto.
Mapeado em memória na área do SFR (P0:80H, P1:90H, P2:0A0H, P3:0B0H, P4:0C7H).

Diagrama de blocos Port I/O


Página 147 datasheet
Microcontroladores - 2019/20 - Jorge Cabral A04-41
Port I/O – Digital Crossbar
• Os recursos do microcontrolador (digitais e analógicos) estão disponíveis através de 40
pinos de I/O;

• Cada um dos pinos de cada porto pode ser configurado como GPIO ou como pino de
entrada analógico;

• É possível configurar todas as funções, sendo que o único limite é o número de pinos
disponíveis;

• A configuração flexível dos recursos é conseguida através do Priority Crossbar Decoder;

• O Crossbar atribui a configuração pretendida para os pinos através do Priority Decoder


(registos XBR0, XBR1 e XBR2 do SFR). O hardware (células) de cada um dos pinos
podem ser configurados em push-pull ou em colector aberto (open-drain) usando os
registos Port Output Mode (PnMDOUT onde n=0…4, consoante o porto);

• O registo PnMDIN permite configurar o pino como I/O digital ou como entrada analógica;

• Para garantir que o consumo de energia é mínimo a Crossbar está desligada após o
Reset, ou seja, é necessário ligar o Crossbar para utilizar os pinos de I/O.

Microcontroladores - 2019/20 - Jorge Cabral A04-42


Hardware - GPIO
P0 a P3 (80H;90H…0B0H)
Endereçáveis ao bit e ao byte
P4 (C7H)
Endereçável ao byte apenas
PORT 2
– P2 – SFR (endereço 0A0H) – endereçável ao bit;

MOV P2,#0AAH
; instruções apenas em registos endereçáveis ao bit
SETB P2.0 ;pino 0 do Porto 2 ou bit 0 do P2
CLR P2.1
CPL P2.2
– Há instruções que lêem o pino e outras que lêem a latch
– As instruções que lêem a latch são as “read-modify-write”, como
ANL P2,A; JBC P2.1; INC P2 …

Microcontroladores - 2019/20 - Jorge Cabral A04-43


Hardware GPIO

Microcontroladores - 2019/20 - Jorge Cabral A04-44


GPIO KISS (keep it simple, stupid)

PB1 e PB2 (P0.6 e P0.7) como inputs digitais


e P2 como outputs digitais
;como queremos digital não é necessário alterar P0MDIN e P2MDIN (por reset)
;para as entradas digitais o pino deve estar como open-drain (high-Z)
;para tal bits 7 e 6 de P0MDOUT a 0 que é o valor após reset
;logo não é necessário alterar valor de P0MDOUT
;colocar Port Output a 1 -> high-Z (ver tabela slide 30)
SETB P0.6
SETB P0.7
;P2 como saídas
;ou seja, P2MDOUT (push-pull ver tabel slide 30)
MOV P2MDOUT,# 0FFH
;após reset, todo o P2 está a 1 => LEDs desligados
;activar a XBAR (XBARE=CrossBAREnable)
MOV XBR1,#40H ; bit 6 de XBR1 é XBARE
MOV PCA0MD,#0 ; desligar o WatchDog

Microcontroladores - 2019/20 - Jorge Cabral A04-45


Características eléctricas

• Portos de Entrada/Saída
VOL – tensão de saída nível lógico baixo VOH – tensão de saída nível lógico alto

Em condições de regime permanente (não transitórias), IOL deve ser


externamente limitada de modo a garantir:
IOL máxima por pino de porto: 25mA
IOL máxima por porto (8-bit): 100mA
IOL total máxima para todos os pinos de saída: 71mA

Microcontroladores - 2019/20 - Jorge Cabral A04-46


TPC

• Problema:
– Com base no estado (pressionado ou não) dos dois botões de pressão PB1 e
PB2 (P3.3 e P3.5), escrever no display de 7-segmentos os caracteres 0 a 3
com base nos possíveis estados dos botões de pressão. Usar instruções
booleanas – slide 15.
• Hardware: Kit8051USB

Segmento Porto

A P1.0
B P1.1
C P1.2
D P1.3
E P1.4
F P1.5
G P1.6
DP P1.7
Microcontroladores - 2019/20 - Jorge Cabral A04-47

Você também pode gostar