EEL7030 - Microprocessadores
Prof. Raimes Moraes
GpqCom – EEL
UFSC
Microprocessador de Propósito Geral
CPU Micropro cessador de propósito geral
RAM ROM Portas
de I/O Timer InterfaceSerial
Barramento de Dados
Barramento de Endereço
Sem RAM, ROM ou dispositivos de I/O
Vantagem: flexibilidade, sistema expansível ;
Desvantagem: custo, roteamento de placa e dimensões do circuito.
Microcontrolador
Vantagem: menor custo, menor dimensão, rápido desenvolvimento; Desvantagem: baixa flexibilidade, não expansível;
RAM ROM
I/O Port Timer Serial COM Port CPU
CPU + Periféricos
Microcontrolador
Periféricos:
- Portas de entrada e saída
- Interface Serial (CAN, SPI, USB, RF e etc)
- Memórias (ROM, RAM, Flash, XRAM, etc)
- Conversores AD e DA
- Timers
- ...
Família de Microcontrolador: CPU + diferentes periféricos
1. Considerar: consumo, velocidade, capacidade de
memória, número de portas de entrada e saída, timers,
encapsulamento, tamanho, interfaces de comunicação e
demais periféricos necessários a aplicação;
2. Custo e disponibilidade no mercado. Facilidade para
upgrade (grande família)
3. Disponibilidade de ferramentas de desenvolvimento:
•
assemblers, debuggers, compiladores, emuladores,
simuladores, suporte técnico
Escolhendo um Microcontrolador
8051
Características Básicas:
CPU de 8 bits;
endereça 64 Kb de memória de programa externa;
endereça 64 Kb de memória de dados externa;
4 kbytes de memória ROM interna para programas;
128 bytes de memória RAM interna para dados;
4 portas de entrada e saída (8 pinos cada);
5 vetores de interrupção com 2 níveis de prioridade:
2 interrupções externas
2 temporizadores / contadores
1 interface serial
8051
CPU RAM 128 bytes ROM para memória de programa 4 kib 4 Portas de I/O Timer 0 Porta Serial OSC Controle de Interrupções Interrupções Externas Timer 1 Controle de Barramento TxD RxD P0 P2 P1 P3 Endereço/Dados Entradas do contadorPinos
do
8051
Organização da Memória
EA=0 EXTERNAL 0000h EA=1 INTERNAL PSEN EXTERNAL FFFFh: XXXXh: XXXXh: = 2000h (8052) 1000h (8051) 4000h 8000h EXTERNAL 0000h: FFFFh: INTERNAL RAM 00h: FFh: SFR REGISTERS REGISTERS ADD RAM M E M Ó RIA DE PROGRAMA M E M Ó RIA DE D A DOSRESET
ADD REGISTERS just in devices with 256 bytes of RAM
Alguns uC da família 8051 da Atmel
Device Flash(KiB) USB EEPROM (kiB) (Bytes)RAM F.max (MHz) PinsI/O UART Timers ADC AT89C5115 16 -- 2 512 40 20 1 2 Yes AT89C5130A-M 16 Yes 1 1280 48 18/34 Yes Yes --AT89C5131A-L 32 Yes 1 1280 48 18/34 Yes Yes --AT89C5131A-M 32 Yes 1 1280 48 18/34 Yes Yes --AT89C5132 64 Yes -- 2304 20 44 Yes Yes Yes AT89C51AC2 32 -- 2 1280 40 34 1 3 Yes AT89C51AC3 64 -- 2 2304 60 32 1 3 Yes AT89C51CC01 32 -- 2 1280 40 34 1 2 Yes AT89C51CC02 16 -- 2 512 40 20 1 1 Yes AT89C51CC03 64 -- 2 2304 40 34/37 1 2 Yes AT89C51ED2 64 -- 2 2048 60 32 1 3 --AT89C51IC2 32 -- -- 1280 60 34 1 3 --AT89C51ID2 64 -- 2 2048 60 32 1 3 --AT89C51RB2 16 -- -- 1280 60 32 1 3 --AT89C51RC 32 -- -- 512 33 32 1 3 --AT89C51RC2 32 -- -- 1280 60 32 1 3
--Conexão do 8051 com Memória de Programa
Externa
date
ADDR
OE
INSTR
EPROM
80C51BH
P1
P3
P2
P0
PSEN
Latch
ALE
G
EA
74HC373 date ADDR OE INSTR EPROM 80C51BH P1 P3 P2 P0 PSEN Latch ALE G EA 74HC373 Interface do 8051 Com Memória de Programa Externadate ADDR OE INSTR EPROM 80C51BH P1 P3 P2 P0 PSEN Latch ALE G EA 74HC373
Exemplo de Leitura da Memória
de Programa Externa
date ADDR OE INSTR EPROM 80C51BH P1 P3 P2 P0 PSEN Latch ALE G EA 74HC373 ADDR RD DATA RAM ADDR DECODER CE WR CE RD WR Interface do 8051 Com Memória de Programa e Dados ExternasRegistradores
CY PSW.7 Carry flag
AC PSW.6 Auxiliary carry flag
F0 PSW.5 Definido pelo usuário
RS1 PSW.4 Bit 1 do seletor de Register Bank
RS0 PSW.3 Bit 0 do seletor de Register Bank
OV PSW.2 Overflow flag
F1 PSW.1
Definido pelo usuário
P PSW.0 Flag de paridade. 1 = impar,
PSW - Program Status Word - Bit Addressable
CY AC F0 RS1 RS0 OV F1 P 0 7 6 5 4 3 2 1 D0H MOV A, Rn MOV A, direct MOV A,@Ri MOV A,#data MOV DPTR,#data16 Rn - registrador R0 a R7 do banco correntemente selecionado.direct - endereçamento direto, ou seja, direct é o endereço de uma posição de memória RAM interna.
@Ri - endereçamento indireto a uma posição de memória RAM interna Ri=R0 ou R1
#data - endereçamento imediato, onde data é uma constante de 8 bits incluída no corpo da instrução.
#data16 - endereçamento imediato, onde data é uma constante de 16 bits incluida no
corpo da instrução.
Mnemônicos
Organização da Memória
EA=0 EXTERNAL 0000h EA=1 INTERNAL PSEN EXTERNAL FFFFh: XXXXh: XXXXh: = 2000h (8052) 1000h (8051) 4000h 8000h EXTERNAL 0000h: FFFFh: INTERNAL RAM 00h: FFh: SFR REGISTERS REGISTERS ADD RAM M E M Ó RIA DE PROGRAMA M E M Ó RIA DE D A DOSRESET
ADD REGISTERS just in devices with 256 bytes of RAM MOVX @DPTR,A
RAM INTERNA
00h:
FFh:
SFR
REGISTERS
MEMÓRIA
8052
Organização da RAM Interna
Organização da RAM Interna
Organização da RAM
Interna
20h 2Fh 30h 7Fh 18h 1Fh 17h 10h 0Fh 08h00h 07h Reset Value ofStack Pointer 4 Banks of 8 registers R0 - R7 11 10 01 00 Bit-Addressable Space
Acessible by Direct and Indirect Adressing Low 128 bytes of Internal RAM
Special Function Registers
SUBROTINA
Exemplo
PILHA END. DADO
SP 07H SP+1 08H 0DH [PC LSB] SP+1 09H 00H [PC MSB]
1 Salva atual PC (000Dh) na pilha. (O PC é atualizado ao obter o código da instrução CALL da memória); 2 Sobrescreve PC com endereço da
subrotina; (PC = 2028H) 3 Executa subrotina;
4 Retorna à instrução que se segue ao CALL no programa principal (instrução RET).
5 OBS: O SP é inicializado com o valor 07 quando o microprocessador é energizado/resetado END. CÓDIGO 000A CALL 2028H 000D MOV A,B
Mnemônicos para SUBROTINA
LCALL: Especifica endereço de 16 bits. A instrução possui 3 bytes (opcode + 16 bits de endereço). Endereço de destino em qualquer lugar da memória (64 kiB).ACALL: Especifica endereço de 11 bits. A instrução possui 2 bytes (opcode + 11 bits de endereço). Endereço de destino distante em até 2k (2^11).
Mnemônicos para Desvio
LJMP: Especifica endereço de 16 bits. A instrução possui 3 bytes (opcode + 16 bits de endereço).
AJMP: Especifica endereço de 11 bits. A instrução possui 3 bytes (opcode + 116 bits de endereço).
SJMP: Especifica off-set (-128 to +127) a ser somado ao PC para acessar a próxima instrução. A instrução possui 2 bytes (opcode + offset).
Mnemônico
Descrição
JZ <rel addr>
Salta se A = 0
JNZ <rel addr>
Salta se A != 0
JC <rel addr>
Salta se C = 1
JNC <rel addr>
Salta se C != 1
JB <bit>, <rel addr>
Salta se bit = 1
JNB <bit>,<rel addr>
Salta se bit != 1
JBC <bit>, <rel addr>
Salta se bit =1, limpa bit
Mnemônicos para Desvio
Mnemônico
Descrição
CJNE A, direct, <rel addr> Compara A e memória. Salta se não igual
CJNE A, #data <rel addr> Compara A e dado. Salta se não igual
CJNE Rn, #data <rel addr> Compara Rn e dado. Salta se não igual
CJNE @Rn, #data <rel addr> Compara Rn e memória. Salta se não igual
DJNZ Rn, <rel addr> Decrementa Rn e salta se não zero
DJNZ direct, <rel addr> Decrementa memória e salta se não zero
Mnemônicos para Desvio
ORG 0000H
MOV R1,#3
MOV R3,#4
INC @R1
MOV A,@R1
MOV DPTR,#MENS
MOVC A,@A+DPTR
MOV DPTR,#20H
MOVX @DPTR,A
SJMP $
MENS:
DB '124567890ABCDE'
END
EA ES ET1 EX1 EX0
External interrupt 0 enable Timer 0 interrupt enable ET0
Serial interface interrupt enable
sable all interrupts
IE - Interrupt Enable Register - Bit Addressable 0
7 6 5 4 3 2 1
External interrupt 1 enable Timer 1 interrupt enable
A8H
Fontes de Interrupção
EA ES ET1 EX1 EX0
External interrupt 0 enable Timer 0 interrupt enable ET0
Serial interface interrupt enable
sable all interrupts
IE - Interrupt Enable Register - Bit Addressable 0
7 6 5 4 3 2 1
External interrupt 1 enable Timer 1 interrupt enable
A8H
Fontes de Interrupção
As interrupcões externas INT0 e INT1 podem ser ativadas
por nível ou borda.
Depende dos bits IT0 e IT1 do registrador TCON.
Os flags que identificam ocorrência destas interrupcões
externas são os flags IE0 e IE1 de TCON.
Interrupções Externas
Temporizadores / Contadores
Registradores
LSB
MSB
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
88H
TCON
IEx - External Interrupt flag.
Setado pelo hardware quando interrupção detectada.
Apagada pelo software qdo salta para o tratador int.
ITx - Interrupt control bit. 1 => borda de descida
0 => nível lógico baixo
Temporizadores / Contadores
Registradores
LSB
MSB
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
88H
TCON
MOV A,TCON
ORL A,#00000101B; habilita INTs por borda
MOV TCON,A
Interrupções
PS PT1 PX1 PX0
External interrupt 0 priority Timer 0 interrupt priority PT0
Serial interface
IP - Interrupt Priority Register - Bit
Addressable
07 6 5 4 3 2 1
External interrupt 1 priority Timer 1 interrupt priority
B8H
interrupt priority bit
Interrupções
PS PT1 PX1 PX0
External interrupt 0 priority Timer 0 interrupt priority PT0
Serial interface
IP - Interrupt Priority Register - Bit
Addressable
07 6 5 4 3 2 1
External interrupt 1 priority Timer 1 interrupt priority
B8H
interrupt priority bit
MOV IP,#00000100B;
prioridade INT1 superior às demais
Faça um programa que aceite int0 (acionada por
borda). Qdo a int0 for solicitada, escrever na
porta P1, caractere por caractere, a cadeia de 16
caracteres: ‘Microcontrolador’.
reset equ 00h
ltint0 equ 03h ; local tratador state equ 20h
org reset ;PC=0 depois de reset jmp inicio
org ltint0 jmp handler inicio:
mov ie,#10000001b ; habilita int mov tcon,#00000001b ; borda mov state,#0h ;inicialização mov r0,# state
mov dptr,#tabela mov r1,#0
volta: cjne @r0,#1,volta mov state,#0h mov a,r1 movc a,@a+dptr mov p1,a inc r1 cjne r1,#16,volta jmp $
handler: mov state,#1h reti tabela: db 'Microcontrolador' end
Temporizadores / Contadores
Modos 0 e 1
GATE INTx PIN TRx OSC /12 C/T=0 C/T=1 CONTROL TLx (5 bits) THx (8 bits) TFx INTERRUPT (8 bits) Tx PIN overflowGATE C/T
M1 M0
GATE C/T
M1 M0
TIMER 1
TIMER 0
LSB
MSB
89H
TMOD
Programação dos Timers
1) Habilitar interrupções dos timers (EA, ETx)2) Especificar o modo de funcionamento dos timers (TMOD) 3) Especificar intervalo de contagem (THx e TLx) 4) Disparar contador (setb TRx)
5) Não esquecer tratadores para os timers nos seus devidos endereços.
OBS: É possível testar, freqüentemente, se houve encerramento da contagem sem necessidade de habilitar interrupções (polling dos flags TFx) em programas mais dedicados.
Exemplo: Faça um programa que escreva na porta P1, a cadeia de 16 caracteres: ‘Microcontrolador’ à taxa de 10 kiB/s ( (1/10000) = 100 us)
reset equ 0h
ltmr0 equ 0bh ; local tratador state equ 20h
org reset ;PC=0 depois de reset jmp inicio
org ltmr0 jmp handler inicio:
mov ie,#10000010b ; habilita mov tmod,#01h ; modo 1 mov th0,#0ffh
mov tl0,#09ch mov state,#0h ;inicialização mov r0,# state
mov dptr,#tabela mov r1,#0 setb tr0
volta: cjne @r0,#1,volta mov th0,#0ffh mov tl0,#09ch mov state,#0h mov a,r1 movc a,@a+dptr mov p1,a inc r1 cjne r1,#16,volta jmp $
handler : mov state,#1h reti tabela: db 'Microcontrolador' end
Temporizadores / Contadores
Modos 2
GATE INTx PIN TRx OSC /12 C/T=0 C/T=1 CONTROL TLx THx (8 bits) TFx INTERRUPT (8 bits) Tx PIN overflowGATE C/T
M1 M0
GATE C/T
M1 M0
TIMER 1
TIMER 0
LSB
MSB
89H
TMOD
Temporizadores / Contadores
Modos 3
GATE INT0 PIN TR0 OSC /12 C/T=0 C/T=1 CONTROL TL0 TF0 INTERRUPT (8 bits) T0 PIN overflow TH0 (8 bits) TF1 INTERRUPT overflow CONTROL TR1 INT1 PIN GATE C/T=0 C/T=1 CONTROL TL1 T1 PIN 0 se modo 3 para timer 1 TH1 No modo 3,Timer 0 implementa dois contadores de 8 bits. TR1 e TF1 são redirecionados para o Timer 0 (TH0)
No modo 3,
Timer 1 cessa contagem (o mesmo que TR1=0). Se fora do modo 3, pode ser usado pela serial
Transmissão Serial
EIA RS-232C: padrão industrial para a comunicação serial de dados binários entre um DTE (terminal de dados) e um DCE (comunicador de dados).
Transmissão Serial
Foi largamente utilizado em PCs, estando ainda presente em muitos equipamentos.
Níveis Lógicos EIA RS-232C
(Electronics Industries Association)
•Tamanho máximo do cabo: 15 metros •Velocidade de transmissão: 1Mbits/s
DB25
1
2
3
4
5
6
7
8
20
22
Signal Name
CD
Chassis Ground
TD
Transmit Data
RD
Receive Data
RTS
Request To Send
CTS
Clear To Send
DSR Data Set Ready
SG
Signal Ground
DCD Data Carrier Detect
DTR Data Terminal Ready
RI
Ring Indicator
Direction
-DTE DCE
DTE DCE
DTE DCE
DTE DCE
DTE DCE
-DTE DCE
DTE DCE
DTE DCE
DB9
2
3
7
8
6
5
1
4
9
Pin
DTE Conector MachoConexões
Ideal
Mínimo
Handshaking
• Troca de sinais para estabelecer comunicação
condicional
• Processo
– Transmissor ativa RTS
– Receptor detecta CTS por interrupção ou
polling
– Receptor ativa RTS
– Transmissor aguarda CTS
– Transmissor envia dados
SM0 SM1 SM2 REN TB8 RB8 RI
Received interrupt Set by hardware when reception finish except if SM2 =1
Transmited interrupt Mode 2 and 3 is de 9bits. Mode 1 is the stop bit if SM2=0 In mode 2 and 3 is the 9 bit TI
Enable signal reception
Enable multiprocessor
00 mode 0 Mode Select
SCON - Serial Port Control Register - Bit Addressable 0
7 6 5 4 3 2 1
cleared by software
In mode 0 RB8 is not used that will be tranmitted
comunication in modes 2 and 3 In mode 1 if SM2=1 RI flag will be set if a valid stop bit is received In mode 0 SM2 should be 0 01 mode 1 10 mode 2 11 mode 3 98H Cleared by software
SM0 SM1 MODO TIPO BITS TAXA
0 0 0 SÍNCRONO - HD 8 Fclock/12 0 1 1 ASSÍNCRONO – FD 10 Variável 1 0 2 ASSÍNCRONO - FD 11 Fclock/32 ou /64 1 1 3 ASSÍNCRONO - FD 11 Variável
Modos de Programação
Full duplex (FD): dados são (ou podem ser) transmitidos e
recebidos simultaneamente por ambos os dispositivos
conectados, requerendo para tal, conexões adequadas
Full Duplex
• SM2: Habilita comunicação serial com múltiplos
processadores nos modos 2 e 3.
• Nestes modos, se SM2 for colocado em 1, Rl
não será setado a menos que o nono bit
recebido (RB8) seja 0.
• Desta forma, é possível que um dispotivo acesse
vários 8051 em um mesmo barramento e peça para
um deles modificar SM2 para que estabeleça
comunicação apenas com o mesmo para TB8=1.
--- Timer 1 ---
Baud Rate Fosc SMOD C/T Mode Reload Value Mode 0 Max: 1 MHz 12 MHz X X X X Mode 2 Max: 375K 12 MHz 1 X X X Modes 1, 3: 62.5K 12 MHz 1 0 2 FFH 19.2K 11.059 MHz 1 0 2 FDH 9.6K 11.059 MHz 0 0 2 FDH 4.8K 11.059 MHz 0 0 2 FAH 2.4K 11.059 MHz 0 0 2 F4H 1.2K 11.059 MHz 0 0 2 E8H 137.5K 11.986 MHz 0 0 2 1DH 110K 6 MHz 0 0 2 72H 110K 12 MHz 0 0 1 FEEBH Modo 2 => BR= [ ( 2^SMOD ) / 64 ] x f osc
Modo 1 e 3 => Timer 1 em modo de auto carregamento (auto-load /TMOD = 20H). Neste caso, a baud rate é dada por:
BR= [ ( 2^SMOD ) / 32 ] x { f osc / [ 12 x (256 - TH1) ] }
Programação Baud Rate
OSC. CLOCK.GEN.
PD IDL INTERRUPT SERIAL PORT TIMER BLOCKS CPU xtal2 xtal1 GF1 GF2 IDL
Idle mode bit. Setting this bit activate idle mode
Power Down bit. Setting this bit activate power down PD
PCON - Power Control Register
0 7 6 5 4 3 2 1
General purpose flag bit SMOD
General purpose flag bit
87H
Para sair de Idle: por uma interrupção que esteja habilitada ou por Reset. Por interrupção: vai para o tratador e após RETI , continua de onde parou. Por Reset: continua de onde parou.
Para sair de Power Down - Somente por Reset (não altera RAM).
Organização Pinos da Porta P1
8051
D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X TB1 TB2⌦
P0.x
Escrevendo “1” em Pino P1.X
D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X8051
2. output pin is Vcc 1. write a 1 to the pin1 0 output 1 TB1 TB2 D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus M1 P1.X pin P1.X
8051 IC
2. output pin is ground 1. write a 0 to the pin0 1 output 0 TB1 TB2
Escrevendo “0” em Pino P1.X
D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU busM1 P1.X pin P1.X 8051 IC 2. MOV A,P1 external pin=High 1. write a 1 to the pin MOV
P1,#0FFH
1
0
3. Read pin=1 Read latch=0 Write to latch=1
1
TB1 TB2
D Q Clk Q Vcc Load(L1) Read latch Read pin Write to latch Internal CPU bus
M1 P1.X pin P1.X 8051 2. MOV A,P1 external pin=Low 1. write a 1 to the pin
MOV P1,#0FFH
1
0
3. Read pin=1 Read latch=0 Write to latch=1
0
TB1 TB2
Lendo “0” em Pino P1.X
Lendo do Latch de Porta
Algumas instruções fazem a leitura do Pino (TB1) e outros da saída do Latch (TB2)
Instruções que leêm do latch (“lê-modifica-escreve”). Exemplos:
ANL AND lógico ex. ANL P1,A
ORL OR lógico ex. ORL P2,A
XRL XOR lógico ex. XRL P3,A
CPL complementa bit ex. CPL P3.0
INC incremento ex. INC P2
DEC decrementa ex. DEC P2
DJNZ decrementa e salta se não zero ex. DJNZ P3,LABEL MOV PX.Y,C move bit de carry para bit Y da Port X
CLR PX.Y limpa bit Y da Port X SET PX.Y seta bit Y da Port X