Capítulo 4 Fluxograma e programação em “Assembly” aplicados a família de microntroladores MCS-51 da Intel Prentice Hall Microcontroladores 8051 1 Capítulo 4 Estratégias de elaboração de programas Fluxogramas Programas Simples: Nome do programa Definição das condições iniciais Processamento Figura 5: Representação típica de um fluxograma de uma rotina de um programa simples. Definição da saída do resultado Fim do programa Prentice Hall Microcontroladores 8051 2 Capítulo 4 Nome do programa Definição das condições iniciais Processamento Figura 6: Representação típica de um fluxograma de uma rotina de um programa com loop. sim: a condição foi satisfeira Bloco de tomada de decisão (?). Teste de uma variável. não: a condição não foi satisfeita Se o teste for falso: processamento de certas informações (toma-se decisão) Controle do loop Definição da saída do resultado Fim do programa Prentice Hall Microcontroladores 8051 3 Capítulo 4 Exemplo de um programa simples: Endereço RAM Interna Conteúdo 45h XXh + 5Ah YYh 6Dh SOMA (A) (45h) (R0) (5Ah) (A) (A) + (R0) (6Dh) (A) FIM Prentice Hall Programa Fonte MOV A,45h MOV R0,5Ah ADD A,R0 MOV 6Dh,A Figura 8: Programa de adição usando a instrução ADD A,Rn. Microcontroladores 8051 4 Capítulo 4 SOMA (A) (45h) (A) (A) + (5Ah) (6Dh) (A) Programa Fonte MOV A,45h ADD A,5Ah MOV 6Dh,A FIM Figura 9: Programa de adição usando a instrução ADD A,direct. SOMA Programa Fonte (A) (45h) (R0) #5Ah (A) (A) + ((R0)) (6Dh) (A) MOV A,45h MOV R0,#5Ah ADD A,@R0 MOV 6Dh,A FIM Prentice Hall Figura 10: Programa de adição usando a instrução ADD A,@Ri. Microcontroladores 8051 5 Capítulo 4 Exemplo de programa com loop: endereço inicial endereço final Endereço RAM Interna Conteúdo 60h : : 7Ah 7Bh XXh : : YYh qte de ns < 38h 1Bh elementos a serem analisados Figura 11: Desenho em forma de rascunho para ajudar no entendimento do que está sendo solicitado. Prentice Hall Microcontroladores 8051 6 Capítulo 4 Num < 38h (R0)#60h (R1)#1Bh (7BH)#00h Figura 12: Fluxograma que calcula a quantidade de números menores que 38h de um buffer de memória. (C)#0b (A)((R0)) (A)(A)-(C)-#38h S (C)=0 ? [(A)#38h ?] N (7Bh)(7Bh)+1 (R0)(R0)+1 (R1)(R1)-1 (R1)0 ? S N Prentice Hall Microcontroladores 8051 FIM 7 Capítulo 4 ; Inicio do programa que calcula a qte de elementos < #38h MOV R0,#60h ;Endereço inicial do buffer de memória MOV R1,#1Bh ;Quantidades de elementos do buffer de memória MOV 7Bh,#00 ;Zera o contador que armazena a qte de num < #38h ADR2: CLR C ;Limpa o conteúdo do carry-bit MOV A,@R0 ;Armazena no (A) um elemento do buffer SUBB A,#38h ;Subtrai o (A) da constante #38h e define o flag (C) JNC ADR1 ;Se (C)=0 (A>=#38h) => (PC)=ADR1 [não soma um no (7Ah)] INC 7Bh ;Se (C)=1 (A<#38h), soma um no (7Bh) ADR1: INC R0 ;Aponta para a próxima posição de memória a ser analisada DJNZ R1,ADR2 ;Se a qte de elementos a serem analisadas é 0, então salta para ADR2 END ;Termina o programa se (R1)=0. Prentice Hall Microcontroladores 8051 8