You are on page 1of 10

SENAI Curso Microcontroladores 8051

TPICOS IMPORTANTES EM PROGRAMAO


Um algoritmo constitui-se nas ordens para que o microcontrolador faa o que se deseja e pode ser representado por um fluxograma. a partir do fluxograma que desenvolvemos um programa. O desenvolvimento do programa feito usando-se um software, no nosso caso, o RIDE 51. Ao transformarmos um fluxograma em programa importante compreender a relao entre algoritmo, representao no fluxograma e o desenvolvimento de um programa. Neste tpico abordaremos alguns aspectos importantes usados no desenvolvimento de um programa como pilha, rotinas, subrotinas, repeties, decises e a relao que possuem com os algoritmos e com a representao em fluxograma.

Pilha
uma estrutura de dados do tipo LIFO (Last-In-First-Out) utilizada para armazenamento temporrio de dados e endereos. O nome pilha porque o ltimo dado colocado o primeiro a ser retirado. O registro SP (Stack Pointer) do 8051 um ponteiro que indica o topo da pilha (endereo do ltimo dado a ser colocado na pilha). O SP um registrador de oito bits localizado no SFR, com endereo 81H. O valor colocado na pilha incrementado quando se usa a instruo PUSH e decrementado quando se usa a instruo POP. Na pilha so armazenados os endereos de retorno, de interrupes e subrotinas. Se na pilha forem colocados mais dados do que os que sero retirados ou vice-versa ela se desequilibra. Alm disso, a regio de memria destinada pilha limitada e se houver mais dados do que o espao de memria ela estoura sua capacidade. Vamos ver, a seguir, um exemplo do uso de pilha no microcontrolador 8051: PUSH ACC PUSH-PSW PUSH-DPL PUSH-DPH POP-DPH POP-DPL POP-PSW POP-ACC ; guarda o contedo Acc na memria interna do MC8051 ; guarda o contedo do Registrador PSW na memria do MC8051 ; guarda o contedo do Registrador DPL na memria do MC8051 ; guarda o contedo do Registrador DPH na memria do MC8051 { ... } ; restaura o contedo DPH que estava na memria interna do MC8051 ; restaura o contedo DPL que estava na memria interna do MC8051 ; restaura o contedo PSW que estava na memria interna do MC8051 ; restaura o contedo ACC que estava na memria interna do MC8051

Subrotinas
Como vimos, a subrotina um recurso de programao muito til quando uma seqncia de aes bastante utilizada dentro de um programa. A subrotina comporta-se de modo semelhante

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

ao das interrupes. A diferena que as sub-rotinas so solicitadas por software e no possuem endereos de desvio fixos. Vamos ver a seguir um exemplo de subrotina: Problema: Num seqencial de Leds, cada Led acender seqencialmente num perodo de 1 segundo. Observe, a seguir, um esquema eltrico de um seqencial de leds:

Veja a animao do sequencial de leds (Animao 1) que est disponvel na pgina de Contedo. O algoritmo ser; Inicio Acender Led Temporizar 1 segundo Apagar Led Voltar ao incio

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

FLUXOGRAMA
incio

MOV

A,#00000001B

A=01

LOOP:

MOV

P2,A

P2=A acende o led

CALL TEMPO

sub-rotina de tempo de 1 segudo

RL

roda o contedo do acumulador para esquerda

SJMP

LOOP

Aps o fluxograma usa-se as instrues para realizar o programa. Vamos ilustrar aqui para voc acompanhar o processo. As instrues do software sero estudadas em breve. ROTINA ASSEMBLY $include(REG51.inc) LOOP: MOV P2,A CALL TEMPO RL A ; inclui no programa assembly o arquivo (REG51.inc) ; move o contedo de A para porta P2, ou seja acende o ; primeiro LED L1 ; chama a subrotina de tempo de 1 segundo ; roda o valor do acumulador a esquerda, ou seja A ; deslocado de uma posio a esquerda ; salta para Label Loop ; move para o registrador R5 o valor 255. ; move para o registrador R6 o valor 255. ; move para o registrador R7 o valor 7. ; decrementa R5 e salta para o label SALTO1 se o mesmo no ; for zero ; move para o registrador R5 o valor 255. ; decrementa R6 e salta para o label SALTO1 se o mesmo no ; for zero ; move para o registrador R6 o valor 255. ; decrementa R7 e salta para o label SALTO1 se o mesmo no ; for zero ; retorno de sub rotina MOV A, #00000001B ; carrega o valor 00000001 binrio no acumulador

SJMP LOOP TEMPO: MOV R5,#255 MOV R6,#255 MOV R7,#7 SALTO1: DJNZ R5,SALTO1 MOV R5,#255 DJNZ R6,SALTO1 MOV R6,#255 DJNZ R7,SALTO1 RET

; a funo da sub-rotina abaixo levar 1 segundo para ser executada

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

Decises
Ifelse (se - seno)
So estruturas de programao que permitem desviar o fluxo de execuo de um programa conforme o estado (falso ou verdadeiro) de determinadas condies. Tais estados so reportados ao software atravs dos flags existentes no registro PSW do 8051. O flag mais importante existente no microcontrolador 8051 o CY (carry).
Endereo de bit Nomes: PSW Funo D7 CY D6 AC D5 F0 D4 RS1 D3 RS0 D2 0V D1 D0 P PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 END : D0H (Byte)

Obs: A instruo SUBB que propicia as condies para teste de decises como segue abaixo: SUBB A,Rn

Se Rn = A, ou seja subtrado Rn de A e o resultado do Acumulador for zero, significa que so iguais. Se Rn > A, ou seja na subtrao de A por Rn a flag de Carry afetada; Se a flag Carry estiver com o nvel lgico 1 significa que Rn maior que A. Se Rn < A, ou seja na subtrao de A por Rn a flag de Carry afetada. Se a flag Carry estiver com o nvel lgico 0 significa que Rn menor que A.

Exemplo 01:
Observe o programa a seguir. um programa que testa o contedo de R0 com o contedo do Acc. Se R0 = Acc ento R1 =0 se R0 > Acc ento R1=1 se R0 < Acc ento R1=2. Vamos inicialmente apresentar o fluxograma que representa o algoritmo deste problema.

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

incio

SUBB A,R0

Sim

R0=ACC No R0 > ACC No Sim

R1=0 igual

R1=2 menor

R1=1 maior

fim

Vamos ver, a seguir, o programa deste fluxograma.

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

ROTINA ASSEMBLY $include(REG51.inc) INICIO: SUBB A,R0 JZ ; inclui no programa assembly o arquivo (REG51.inc) ; o acumulador subtrado de R0, dependendo do resultado ; determinar qual instruo de Salto que ser executado

IGUAL ; se o contedo do acumulador for zero significa que A igual ao ; contedo de R0 ento salta para o label IGUAL, se no segue para ; prxima instruo MAIOR ; se a flag de carry for nvel lgico 1, significa que o contedo de R0 ; maior que o contedo do acumulador assim saltando para label ; MAIOR, se no segue para prxima instruo ; sendo o contedo de R0 menor que o contedo do acumulador ser ; carregado o valor 2 no registrador R1 significando a condio de ; menor ; salta para o fim do programa ; sendo o contedo de R0 maior que o contedo do acumulador ser ; carregado o valor 1 no registrador R1 significando a condio de ; maior. ; salta para o fim do programa ; sendo o contedo de R0 igual ao contedo do acumulador ser ; carregado o valor 0 no registrador R1 significando a condio de ; igual ; salta para o fim do programa, ou seja, o programa fica parado nesse ; ponto

JC

MENOR: MOV R1,#2

SJMP FIM MAIOR: MOV R1,#1

SJMP FIM IGUAL: MOV R1,#0

FIM:

SJMP FIM

Exemplo 02:
Agora vamos modificar um pouco o exemplo 1. O teste feito no registrador R0 deve ser sinalizado com leds nas portas de sada do MC8051. Observe o esquema a seguir:

Veja a animao do registrador (Animao 2) que est disponvel na sesso de Contedo.


Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao 6

SENAI Curso Microcontroladores 8051

FLUXOGRAMA

incio

apaga todos os leds P2=00H

R0=05 A=10

SUBB A,R0

Sim

R0=ACC No R0 < ACC No Sim

P2.0=1 acende led igual

P2.1=1 acende led menor

P2.2=1 acende led maior

fim

PROGRAMA ASSEMBLY $include(REG51.inc) INICIO: MOV A,#10 MOV R0,#05 SUBB A,R0 JZ IGUAL ; inclui no programa assembly o arquivo (REG51.inc) ; carrega o valor 10 no acumulador ; carrega o valor 5 em R0 ; o acumulador subtrado de R0, dependendo do resultado ; determinar qual instruo de Salto ser executada ; se o contedo do acumulador for zero, significa que A igual ao ; contedo de R0 ento salta para o label IGUAL, se no segue para ; prxima instruo ; se a flag de carry for nvel lgico 1, significa que contedo de R0 ; maior que o contedo do acumulador e assim saltando para label ; MAIOR, se no segue para prxima instruo ; sendo o contedo de R0 menor que o contedo do acumulador, ; ser setado a porta P2.1 ligando o led menor ; salta para o fim do programa ; sendo o contedo de R0 menor que o contedo do acumulador, ; ser setado a porta P2.2 ligando o led maior ; salta para o fim do programa ; sendo o contedo de R0 igual ao contedo do acumulador, ser ; setado a porta P2.1 ligando o led igual ; salta para o fim do programa ou seja o programa fica parado nesse ; ponto
7

MOV P2,#00H ; zera a porta P2 ou seja apaga todos os LEDs

JC

MAIOR

MENOR: SETB P2.1 SJMP FIM MAIOR: SETB P2.2 SJMP FIM IGUAL: FIM: SETB P2.0 SJMP FIM

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

Repeties

FOR (DE-AT) WHILE (ENQUANTO), DO-WHILE (FAA-ENQUANTO)

As repeties so estruturas de programao que permitem a repetio (Loop) de um conjunto de aes enquanto determinada condio for verdadeira. Essas estruturas verificam a condio antes da execuo das aes ou depois de j terem executado pelo menos uma vez as aes dentro do loop. No exemplo, a seguir o programa realizar uma operao de repetio, ou seja repetir o programa 10 vezes. MOV Acc,#10 REPETE : DEC {.........} Acc ; carrega A com valor 10; ; um programa qualquer que ser repetido N vezes. ; decremeta o acumulador ou seja A=A-1

JNZ REPETE ; se o acumulador no for zero salta para o label REPETE O programa ir realizar a mesma operao 10 vezes, ou seja, at que o registrador Acc seja igual a zero. Neste outro exemplo faremos um contador de 0 at 100, utilizando a porta P2.1 do microcontrolador para incrementar a contagem e chegando a contagem em 100 acenderemos um LED que est ligado Porta P2.0, como mostra a figura a seguir

Veja a animao do contador (Animao 3) que est disponvel na sesso de Contedo.

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

Observe que a instruo CJNE A,#data, rel propicia as condies para teste de comparao como segue :

CJNE A, #data, rel - Compara o contedo de A e salta para o endereo definido no programa se no for igual ao valor de data.

FLUXOGRAMA

incio

apaga o led L1

A=0

No

P2.1=0 Sim

incrementa A

A=100 Sim

No

P2.0=1 acende led

fim

PROGRAMA ASSEMBLY $include(REG51.inc) CLR MOV TESTE_BOTAO: JB P2.0 A,#00H P2.1, TESTE_BOTAO ; inclui no programa assembly o arquivo ; (REG51.inc) ; apaga o led L1 ; carrega o acumulador com o valor zero ; testa a porta P2.1, se no for nvel lgico ; zero salta para label TESTE_BOTAO, se ; for vai para o prximo passo ; incrementa A

INC

CJNE A, #100, TESTE_BOTAO ; compara e salta se A no for igual ao valor ; 100, se for segue para o prximo passo SETB P2.0 FIM: SJMP FIM ; acende o led L1 ; salta para o label Fim, ou seja, o programa ; fica parado nesse ponto

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

SENAI Curso Microcontroladores 8051

Bibliografia

Microcontrolador AVR Autor Leonardo Marcilio Schunk e Aldo Luppi Editora rica Z80 software Vol II - Autor Luiz Benedito Cypriano Editora rica Microncontrolador 8051 detalhado Autor Denys E. C. Nicolosi Editora rica Aplicaes com microcontrolador 8051 Autor Vidal Pereira da Silva Jr. Editora rica Linguagem Assembly 8088/8086 Autor Tamio Shimizu e Aldo Arthur Belardi Editora Atlas 8086/8088 sotfware Vol 1 Autor Jos Antonio D. de Carvalho e Rogelio F. Roha Editora rica Arquitetura dos microcontroladores modernos : Ricardo Zelenovsky e Alexandre Mendona Microcontrolador 8051 - Alessandro de Souza e Vagner dos Santos

Unidade 2 Programao dos microcontroladores 8051 Texto base Segunda parte Tpicos importantes em programao

1 0

You might also like