7. Técnicas de Programação Professor: Vlademir de Oliveira Disciplina: Microcontroladores e DSP Técnicas de Programação 7.1 Fluxograma Definições Início/Fim Sub-rotinas Tomada de decisão Terminação Técnicas de Programação 7.1 Fluxograma Exercícios Ex.1: Testa um botão e acende um LED no display de 7-segmentos. Ex.2: Testa um botão e mostra o número ‘2’ no display de 7-segmentos. Ex.3: A cada botão pressionado mostra um número diferente no display DS1. Ex.4: Os botões acionando displays diferentes, DS1, DS2, ... A seguir a resolução dos exercícios. Técnicas de Programação 7.1 Fluxograma Ex.1: Testa um botão e acende um LED no display de 7-segmentos. Início Testa Botão Botão Press? Sim Obs.: O fluxograma pode também incluir um bloco que representa as configurações iniciais. Não Configurações Iniciais: RAM, Portas, Timers, etc Apaga LED Acende LED Técnicas de Programação 7.1 Fluxograma Sub-rotinas São empregadas quando uma rotina será usada várias vezes em um programa, como as funções das linguagens de alto nível. Ex.: ... CALL Sub-rotina1 MOVWF PORTD ... Sub-rotina1 ... RETURN Obs.: A sub-rotina pode passar um valor e retornar um valor. Técnicas de Programação 7.1 Fluxograma Ex.2: Testa um botão e mostra o número ‘2’ no display de 7-segmentos. Início Testa Botão Botão Press? Sim Escreve 2 no display Não Apaga display Obs.: Quando o botão estiver pressionado o programa chama uma sub-rotina para escrever números no display. Técnicas de Programação 7.1 Fluxograma Ex.3: A cada botão pressionado mostra um número diferente no display DS1. Início Resolução: Nesse programa os botões são usados para mostrar números em um dos displays de uma forma bem simples. Para esse exemplo, os botões acionarão apenas 4 números diferentes no display. Testa Botão Botão1 Press? Não Botão2 Press? Não Botão3 Press? Não Botão4 Press? Sim Sim Sim Sim Escreve 1 no display Escreve 2 no display Escreve 3 no display Escreve 4 no display Técnicas de Programação Não Apaga display 7.1 Fluxograma Ex.4: Os botões acionando displays diferentes, DS1, DS2, ... Início Resolução: Nesse programa cada botão aciona um display, por exemplo, BT1 aciona DS1 e BT2 aciona DS2. Para esse exemplo BT1 faz aparecer o número 0 em DS1 e BT2 o número 0 em DS2. Testa Botão Botão1 Press? Não Botão2 Press? Sim Sim Aciona DS1 Escreve 0 Aciona DS2 Escreve 0 Não Desliga DS1 e DS2 Apaga PORTD Técnicas de Programação Obs.: Existe mais de uma forma de implementar esse programa. 7.2 Princípios Básicos Atribuição de valores Ex.: MOVLW .100 MOVWF PORTA ; atribuição usando W CLRF BSF BSF BSF PORTA PORTA, 6 PORTA, 5 PORTA, 2 ;atribuição sem alterar o conteúdo de W Nas duas formas PORTA=100d. Técnicas de Programação 7.2 Princípios Básicos Atribuição de valores Ex.: TESTE EQU 0x20; declara uma variável ... MOVLW 0x64 MOVWF TESTE ; atribuição de valor para a variável declarada Técnicas de Programação 7.2 Princípios Básicos Comparação de valores Serão apresentados alguns métodos de comparação de registradores para uso no PIC. Ex.1: (Usando XORWF) MOVF TEMP, W ; (TEMP) → (W) XORWF PORTB, W ; compara usando o XORWF BTFSC ; testa a flag de zero ‘Z’ STATUS, Z XOR A B Y 0 0 0 0 1 1 1 0 1 1 1 0 Se Z =1, todos os bits são iguais Técnicas de Programação 7.2 Princípios Básicos Comparação de valores Ex.2: (Usando SUBWF) VAR1 VAR2 EQU EQU ... MOVF SUBWF 0x20 0x21 VAR1, W VAR2, W ; (VAR1) → (W) ; ( f ) – (W) → (W) Operação C Z W=F 1 1 W<F 1 0 Se C = 1, o resultado foi maior que 0; W>F 0 0 Se C = 0, o resultado foi menor que 0; Se Z = 1, os valores subtraídos são iguais; Técnicas de Programação 7.2 Princípios Básicos Comparação de valores Ex.3: (Usando ADDLW) MOVF ADDLW BTFSS GOTO BTFSS GOTO GOTO COUNT, W .106 STATUS, C MENOR STATUS, Z MAIOR IGUAL ; ; ; ; ; ; (COUNT) → (W) compara COUNT com 0x6A testa se houve estouro MENOR → tratamento para COUNT < (256-106) testa se é igual, se COUNT = (256-106) skip se não é igual então COUNT > (256-106) Obs: Usado para testar se COUNT é menor ou maior ou igual a 150; Na técnica soma-se 256-150=106 ao contador. Técnicas de Programação 7.2 Princípios Básicos Comparação de valores Ex.3: (Usando ADDLW) Início Compara COUNT: W = COUNT + 106 C =1? Sim Z = 1? Não GOTO MENOR Não Sim GOTO IGUAL GOTO MAIOR 3 1 2 Técnicas de Programação 7.2 Princípios Básicos Ex.1: Escreva uma rotina que incrementa um contador quando o botão é pressionado e apresenta o resultado no display. Técnicas de Programação