Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
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).
– 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
• Instruções lógicas
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
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
CJNE
; 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
• 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;
• 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.
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 …
• 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
• 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