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