Microcontroladores - Programação Assembly do 8051

Propaganda
Sistemas
Embarcados:
Microcontroladores
Prof. Protásio
Laboratório de Microengenharia/DEE/CEAR/UFPB
Programação
Assembly
8051
Programação Assembly
▪ Ferramentas de simulação
▪ MCU 8051 IDE v1.4.7
▪ An open source IDE for MCS-51 based microcontrollers for
POSIX Systems, this software is licenced under the GNU GPL v2
licence.
▪ Download at http://mcu8051ide.sourceforge.net
▪ Proteus 8.0
▪ Ferramenta para o design de projetos eletrônicos baseado em
SPICE.
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
3
MCU 8051 IDE
▪ Execute o MCU 8051 IDE
▪ Criação de Projeto
▪ Project -> New
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
4
MCU 8051 IDE
▪ Execute o MCU 8051 IDE
▪ Criação de Projeto
▪ Project -> New
▪ Digite um nome para o projeto
▪ Indique a pasta que será salvo o
projeto
▪ Defina o processador
▪ Finalize
▪ OBS:
▪ Em “Select MCU”, pode-se obter
informações gerais sobre a CPU
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
5
MCU 8051 IDE
Área de edição de código
Simulador
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
6
MCU 8051 IDE
▪ Na área de edição de código, insira o seguinte código:
;****************************************
;*** PROGRAMA PISCA LED ******
;****************************************
INICIO:
ORG
LJMP
0000H
INICIO
ORG
CPL
MOV
DJNZ
0030H
P2.0
R0,#50
R0,$
SJMP
INICIO
END
; Diretiva que informa ao montador o endereço da próxima instrução
; Pula para o endereço (rótulo) "INICIO"
; Complementa o estado do bit 0 da porta P2
; Move o valor 50 em decimal para o registrador R0
; Decrementa o valor em R0 e pula para "$"(mesmo endereço) se for
; diferente de zero
; Pula para o endereço "INICIO"
; Diretiva que informa ao montador o FIM DO PROGRAMA
▪ Após, salve o código
▪ File  Save
▪ Monte o código
▪ Tools  compile ou F11
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
7
MCU 8051 IDE
O arquivo .hex é o que de fato
deve ser transferido ao
microcontrolador
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
8
MCU 8051 IDE – Iniciando a simulação
▪ Simulator  Start/Shutdown ou F2
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
A linha verde indica
“onde” está a simulação
9
MCU 8051 IDE – Simulação passo-a-passo
▪ Simulator  Step ou F7
▪ Executa a instrução corrente e pula para próxima
instrução
▪ Abaixo ver-se que a instrução LJMP INICIO foi executada
▪ Ou seja, foi realizado o pulo para o endereço INICIO
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
10
MCU 8051 IDE – Simulação passo-a-passo
▪ Próximo F7
▪ Executa CPL P2.0
▪ Observe que o valor de P2 muda
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
11
MCU 8051 IDE – Simulação passo-a-passo
▪ Próximo F7
▪ Executa MOV
R0,#50
▪ Observe que a RAM de Dados é modificada
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
12
MCU 8051 IDE – Simulação passo-a-passo
▪ Próximo F7
▪ Executa DJNZ
R0,$
▪ Observe que o valor em R0 é decrementado
▪ Observe que o “ponteiro” (linha verde) continua
no mesmo lugar.
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
13
MCU 8051 IDE – Simulação passo-a-passo
▪ Próximos 50 clicks em F7
▪ Executa a instrução DJNZ
R0,$
▪ Loop
50x
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
14
MCU 8051 IDE – Simulação passo-a-passo
▪ Próximo F7
▪ Executa JMP
INICIO
▪ Volta ao endereço INICIO
▪ Próximo F7
▪ Executa CPL
P2.0
▪ E continua o laço INFINITO
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
15
MCU 8051 IDE
▪ Programa: a cada 50 interações, o estado do bit
0 da porta 2 é modificado
▪ Se um LED for ligado a este pino, então este piscará
▪ Questão?
▪ Qual a frequência em que o LED piscará?
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
16
Cálculo da execução do programa
▪ Considerando um cristal de 12MHz
▪ Período de clock (Tc) = 83,3 ns  1/12MHz
▪ Ciclo de Instrução (Ti) = 1 µs  83,3 ns * 12
Instrução
Número de Ciclos de
Instrução por instrução
Número de Ciclos de
Instrução por loop
CPL P2.0
1
1
MOV R0, #50
1
1
DJNZ R0,$
2
2*50
SJMP INICIO
2
2
▪ Tempo de execução do loop (TL) = (1+1+2*50+2)* 1 µs = 104 µs
▪ Assim, o LED ficará ON por 104 µs e OFF por 104 µs
▪ Frequência de Oscilação do LED = 1/(2*TL) ≈ 4,8 kHz
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
17
Cálculo da execução do programa
▪ Qual a frequência caso o valor de inicial de R0
seja 250?
▪ Qual a frequência do LED caso o programa seja
modificado para o abaixo:
INICIO:
LOOP:
ORG
LJMP
0000H
INICIO
; Diretiva que informa ao montador o endereço da próxima instrução
; Pula para o endereço (rótulo) "INICIO"
ORG
CPL
MOV
MOV
DJNZ
DJNZ
SJMP
0030H
P2.0
R0,#250
R1,#250
R0,$
R1,LOOP
INICIO
; Complementa o estado do bit 0 da porta P2
; Move o valor 250 em decimal para o registrador R0
; Move o valor 250 em decimal para o registrador R1
; Decrementa o valor em R0 e pula para LOOP se for diferente de zero
; Decrementa o valor em R1 e pula para LOOP se for diferente de zero
; Pula para o endereço "INICIO"
END
; Diretiva que informa ao montador o FIM DO PROGRAMA
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
18
Inserção de breakpoints
▪ Compile o programa anterior e execute-o passo
a passo (???).
▪ Para executar um trecho de programa de uma
vez, pode-se inserir breakpoint.
▪ Click acima da numeração da linha desejada para
inserção de um breakpoint
▪ Para executar até o breakpoint
▪ Simulator  Run ou F9
▪ Observe o tempo de execução
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
19
Arquivo de listagem
▪ Contem informações sobre o código montado e
código montado.
▪ File  Open
▪ Filter = Code listing (*.lst)
▪ PISCA_LED.lst
Código de Máquina
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
20
Arquivo *.hex
▪ Contém o código de máquina que será gravado
no microcontrolador
▪ File  Open
▪ Filter = All files (*)
▪ PISCA_LED.hex
▪ Arquivo PISCA_LED.hex
:03000000020030CB
:0C003000B2A078FA79FAD8FED9FC80F46E
:00000001FF
Start code:
character em ASCII “:”
Byte count: Número de bytes do código
Address:
Endereço inicial da sequência de bytes de código
Record type: Valor entre 00 e 05 que especifica o tipo de campo de dado
Data:
Exemplos
- 00 indica que campo de dados (instruções)
- 01 indica fim de arquivo. Em geral, o
endereço especificado é 0000
Sequência de bytes de código
Checksum: Byte de detecção de erro
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
21
Simulação no Proteus
▪ Monte o circuito abaixo no Proteus e rode o
código visto
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
22
Exemplos de circuitos com o 8051
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
23
Exemplos de circuitos com o 8051
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
24
Tarefas
▪ Utilizando o MCU 8051 IDE e/ou o Proteus,
monte os seguintes circuitos:
▪ Contador de eventos (use uma chave para emular o
evento) em que o número de evento em binário
apareça em 8 LED.
▪ Contador de eventos (use uma chave para emular o
evento) em que o número de evento em decimal
apareça em 1 display de 7 segmentos.
▪ Cronômetro com mostrador de minutos e segundos.
▪ Sistema de verificação de senha via teclado numérico
(keypad) 9x9.
▪ Se senha ok, LED on.
▪ Se senha incorreta, LED off e ALARME.
Prof. Protásio / Laboratório de Microengenharia/DEE/CEAR/UFPB
25
Download