O código abaixo, para microcontroladores PIC, foi escrito com a inteção inicial de apenas exibir dígitos em 4 displays de sete segmentos multiplexados através de 4 transistores. Entretanto, o código foi expandido para ter as seguintes funcionalidades:
Cada instrução da família mid-range tem 14 bits divididos entre um OPCODE, que especifica o tipo de instrução, e um ou mais operandos. Neste artigo, comentaremos as instruções relacionadas à movimentação de dados.
Power-on reset é um pulso aplicado ao sinal /MCLR quando uma subida no sinal de alimentação Vdd é detectado (geralmente, Vdd é um sinal tipo rampa) para que o microcontrolador se inicie corretamente de maneira estável.
A seguinte função para a família de microcontroladores PIC16 controla a exibição de 4 dígitos decimais em 4 displays de 7 segmentos multiplexados através de transistores e um decodificador BCD para 7 segmentos. O número a ser exibido deve estar contindo em digitos_low (dois dígitos BCD) e digitos_high (dois dígitos BCD mais significativos). Esta função utiliza a função mostra1digito.
A função abaixo demonstra uma maneira muito simples de obter atrasos de microsegundos com um microcontrolador da família PIC16 com cristal de 20Mhz. Devido à base de tempo muito pequena, utilizou-se apenas um loop que decrementa o variável delay invés de utilizar um timer. Para atrasos de microsegundos, veja a função delay_ms que também utiliza a variável delay e o TMR1.
Se você é novo no mundo dos microcontroladores em geral, você deve estar se questionando se o recurso Watchdog Timer dos microcontroladores PIC tem realmente alguma utilidade. Afinal, quem gostaria de ter o microcontrolador reiniciado, em determinadas circunstâncias, periodicamente?
A seguinte função para a família de microcontroladores PIC16 exibe um dígito BCD em um dos 4 displays de sete segmentos multiplexados através de transistores. A posição do dígito é especificado pela variável mostra1_posicao_7seg. Os 4 bits menos significativos de PORT_DISPLAY_7SEGMENTOS referem-se aos dados e os 4 bits mais significativos, ao número (posição) do display em relação ao conjunto de 4 displays.
A função toBCD16 funciona de maneira similar a função toBCD8. O algoritmo de conversão consiste na divisão sucessiva por 1000, por 100, por 10 e o número restante é o próprio dígito das unidades. O código abaixo é destinado a conversão de 4 dígitos (de 0000 até 9999). O código-fonte deve funcionar em qualquer PIC da família PIC16 sem nenhuma alteração.
A rotina de conversão de números hexadecimais para BCD de 8 bits em assembly é uma rotina simples que consiste em sucessivas subtrações por .10 (0xA) para contagem das dezenas. Após a obtenção do dígito das dezenas, tem-se o dígito das unidades (o número restante das subtrações). Essa rotina pode ser utilizada para a exibição de 2 números em displays de 7 segmentos.
Programming and Customizing the PIC Microcontroller
Terceira edição
Autor: Myke Predko
Ano da publicação: 2008
1261 páginas