Você está na página 1de 20

MICROCONTROLADORES

Douglas Campos de Souza


Aplicações das
interrupções
em microcon-
troladores
OBJETIVOS DE APRENDIZAGEM

Ao final deste texto, você deve apresentar os seguintes aprendizados:


>> Identificar registros das interrupções nos microcontroladores.
>> Demonstrar o uso de interrupções externas.
>> Descrever o funcionamento de interrupções internas.

Introdução
Uma interrupção é um mecanismo que permite que um evento externo suspenda
temporariamente a execução normal do programa, forçando a execução de uma
sub-rotina específica, com certa escala de prioridade. Após a conclusão da sub-
-rotina do serviço de interrupção, o programa principal continua do ponto em
que foi interrompido. Esse processo é o passo a passo mais comum dentro do
contexto de interrupções em sistemas microcontrolados, possibilitando que várias
aplicações sejam implementadas.
2 Aplicações das interrupções em microcontroladores

Neste capítulo, você verá como funcionam as interrupções dentro de um


microcontrolador. Além disso, verá quais registradores estão envolvidos nesse
processo, bem como quais aplicações práticas podem ser implementadas por
meio de interrupções externas e internas.

Registros das interrupções em sistemas


microcontrolados
Uma interrupção é um sinal — geralmente chamado de evento de solicitação
de interrupção — para que a unidade de processamento do sistema micro-
controlado comece a executar um código diferente, código este que é escrito
para responder à causa da interrupção. O tempo entre a geração da solicitação
de interrupção e a entrada do ISR (do inglês interrupt service rotine [sistema
acionado por interrupção]) é chamado de latência de interrupção; quanto
menor a latência, mais rápida será a interrupção (LIPOVSKI, 1999). A unidade
processadora (CPU) do microcontrolador lembrará do local da próxima ins-
trução que seria executada, armazenando esse endereço em um registro ou
memória local, e, então, passará diretamente para o código designado pelo
programador para essa interrupção específica, conforme a Figura 1.

Figura 1. Evento de interrupção em um sistema microcontrolado.

Como é possível observar na Figura 1, além de salvar o endereço da pró-


xima instrução, muitas vezes, a CPU do microcontrolador salvará o registro
de status do processador e desativará outras interrupções. Além disso, na
maioria dos casos, ela limpa automaticamente a solicitação de interrupção que
acionou a entrada ISR, para impedir que uma única solicitação de interrupção
Aplicações das interrupções em microcontroladores 3

faça o ISR ser inserido várias vezes. Ocasionalmente, dependendo do tipo


de interrupção e do modelo do microcontrolador, será necessário o código
do usuário no ISR para limpar explicitamente a solicitação de interrupção.
Um microcontrolador é projetado para responder a várias fontes diferentes
de interrupção, e cada fonte pode ter um código específico escrito pelo usu-
ário, o qual é executado quando essa interrupção é acionada (BALL, 2001). O
código que é executado para uma interrupção é chamado de rotina de serviço
de interrupção (ISR). Durante o processo normal de execução do programa
principal, o contador desse programa, chamado de PC (program counter), passa
de uma instrução para a seguinte e, quando a interrupção é acionada, termina
subitamente em alguma área totalmente diferente dentro do programa (o ponto
de entrada do ISR). Então, quando o ISR estiver completo, o PC repentinamente
volta para a próxima instrução, como se nada tivesse acontecido.
As interrupções estão sempre desativadas após um comando RESET (i.e.,
reinicializar e apagar todos os registros de memória) no microcontrolador.
Na verdade, elas são duplamente desativadas, uma vez que cada fonte de
interrupção individual — bits ES (habilita interrupção serial), ET1 (habilita
interrupção timer 1), EX1 (habilita interrupção externa1), ET0 (habilita inter-
rupção timer 0) e EX0 (habilita interrupção externa0) — está desativada, bem
como o sinalizador de interrupção global do sistema microcontrolado (bit
EA), todos localizados dentro do registrador IE (interrupt enable [habilitar
interrupção], conforme a Figura 2.

Figura 2. Registador IE.

Para que uma interrupção ocorra (i.e., para que o ISR seja executado), a
interrupção individual e as interrupções globais do sistema microcontrolado
devem estar ativadas, bem como a própria condição de interrupção deve
ocorrer, seja ela interna ou externa (BALL, 2001). Por exemplo, para ativar o
bit ES (interrupção serial), o sistema deverá colocá-lo em nível alto (1), junto
ao bit EA (interrupção habilitada); se o sistema precisa habilitar a interrupção
por timer0, o bit ET0 deverá ser colocado em nível alto (1) em conjunto, sempre,
com o habilitador das interrupções (bit EA).
4 Aplicações das interrupções em microcontroladores

Cabe ao programa principal do sistema microcontrolado selecionar quais


interrupções devem ser ativadas e em quais pontos da execução do programa
habilitá-las (uma vez ativada, uma interrupção pode ser desativada novamente
e, em seguida, reativada, sempre que necessário). Além disso, o programa
principal do usuário terá um ISR para cada interrupção que será ativada, e
cada um desses ISRs será mapeado para a sua fonte de interrupção corres-
pondente. Assim, é fundamental que qualquer interrupção ativada tenha
um ISR válido mapeado para o programa principal, caso contrário, quando a
interrupção for acionada, o microcontrolador começará a tentar executar o
código em algum local que não foi especificado corretamente na instrução
da interrupção, desencadeando um erro no processo ou um resultado ines-
perado, como, por exemplo, sistema inconsistente.
A Figura 3, a seguir, apresenta um exemplo de registro de interrupção em
um sistema microcontrolado que, se ativado, pausa a execução do programa
principal e executa o ISR, associando a interrupção.

Figura 3. Registro de uma interrupção executada por completo.


Fonte: Mackenzie (1995, p. 107).

No processo de registro de uma interrupção, a execução da interrupção


(ISR) ocorre a partir do tempo t 3, após a solicitação de interrupção no tempo
t2, já com o registrador IE ativo (habilitado) desde o t1, conforme o sinal em
nível alto (valor 1) na Figura 3.

Sincronização e registro de uma interrupção


Os dispositivos de E/S (entrada/saída) podem solicitar uma interrupção em
qualquer ciclo de operação, porém os dados do operador ISR geralmente
Aplicações das interrupções em microcontroladores 5

possuem bits e informações espalhadas e este não está preparado para


interromper a instrução a todo momento. Portanto, as interrupções são
sempre reconhecidas no final da instrução atual, quando todos os dados são
organizados em acumuladores ou em outros registradores que podem ser
salvos e restaurados com segurança.
O registro do código principal, os acumuladores, o contador de programa,
o operador de dados e o estado do microcontrolador são salvos e restaurados
sempre que ocorre uma interrupção. Após a conclusão de um manipulador
de interrupção (ISR), a última instrução executada é retornada por meio da
instrução RTI (do inglês return from interrupt). O RTI retorna as informações
principais da pilha referente ao programa principal, substituindo-as nos
registros de onde a interrupção as retirou. Algumas técnicas de interrupção
podem ser utilizadas para permitir que o sistema de dispositivos de E/S
possa interromper a unidade processadora quando estiver pronto. Para
isso, primeiramente, examina-se as etapas em uma interrupção. Em seguida,
deve-se analisar os manipuladores de interrupção e as acomodações das
seções críticas, etapas que fazem parte de todo o processo de registro de
uma interrupção (MACKENZIE, 1995).
Depois que os registradores que controlam as portas de E/S e os temporiza-
dores estiverem inicializados, a mudança de nível de sinal (ativação por borda)
na PORTA bit 0 de entrada pode solicitar uma interrupção, conforme a Figura 4.

Figura 4. Registro de uma interrupção em um microcontrolador.


Fonte: Adaptada de Ball (2001).
6 Aplicações das interrupções em microcontroladores

Os passos a seguir indicam a sequência de ações que levam ao serviço


apresentado na Figura 4 (BALL, 2001):

„„ Quando um hardware externo solicita um serviço para mover os dados


para dentro do microcontrolador ou para relatar um erro, diz-se que
a PORTA bit 0 mudou de nível.
„„ Se a PORTA bit 0 for uma entrada e tiver permissão para detectar uma
interrupção (através do bit 0 TMSKI), pode-se afirmar que as interrup-
ções na PORTA bit 0 estão habilitadas.
„„ Se o bit “I” for 0, pode-se afirmar que o microcontrolador está habili-
tado. Quando o bit “I” for 1, o microcontrolador está “mascarado”, ou
seja, está desabilitado. Se o sinal do dispositivo externo for enviado
para o controlador, diz-se que uma requisição foi feita, e uma inter-
rupção deverá ocorrer. O bit “I” também é controlado por hardware.
„„ Muitos microcontroladores podem não parar no meio de uma inter-
rupção. No entanto, se uma interrupção é reconhecida pelo microcon-
trolador, este a prioriza e encerra a instrução atual. Na maioria dos
sistemas microcontrolados, ao se iniciar o temporizador de interrupção,
ele salva imediatamente os registradores e o PC em um endereço de
memória, aciona o bit “I” e carrega as informações da instrução dentro
do registrador PC para serem processadas.
„„ A partir do endereço de memória especificado, uma rotina é acionada,
chamada de manipulador do timer 0 (registrador contador). O manipu-
lador é como uma sub-rotina que executa o trabalho solicitado pelo
dispositivo. Ele pode mover uma palavra entre o dispositivo e um buffer
(memória), ou pode relatar ou corrigir um erro. Uma das funções mais
críticas e importantes de um manipulador, mas fácil de ser ignorada, é
que ele deve explicitamente remover a causa da interrupção (negando
a solicitação de interrupção), a menos que o hardware faça isso au-
tomaticamente. Para que isso ocorra, basta ele escrever o valor “1” (+
5V) de entrada na PORTA bit 0, referente ao registrador TFLG1 (timer
interrupt flag 1) de um sistema microcontrolado.
„„ Por fim, quando a interrupção é completada, o manipulador executa
uma instrução de RTI. Isso irá restaurar os registradores e o PC para
continuar o programa de onde ele tinha parado.
Aplicações das interrupções em microcontroladores 7

Interrupções externas e as interfaces


digitais
As interrupções externas são realizadas por meio de interfaces (portas) digitais
em sistemas microcontrolados. A seguir, serão apresentadas as interrupções
mais comuns nesses dispositivos.

Interface SPI
A interface SPI (do inglês serial peripheral interface [interface periférica serial])
consiste em um link de dados síncrono que utiliza 3 ou 4 pinos (Quadro 1) para
permitir que um microcontrolador se comunique com qualquer número de
sensores ou dispositivos externos compatíveis com a comunicação SPI. Essa
interface funciona com base em bytes (8 bits), e seu protocolo trabalha com
o conceito mestre/escravo. O mestre é o dispositivo (p. ex., um microcontro-
lador) que inicia as comunicações e fornece o relógio para a sincronização. Já
o escravo é um dispositivo externo que responde às comunicações, recebe
comandos e envia dados, tudo conforme solicitado pelo microcontrolador
(SIM, 2014).

Quadro 1. Sinais em uma interface SPI

Nome do sinal (pino) Descrição Abreviação

SCLK Clock (relógio) SCK, CLK

MOSI/SIMO Master output slave SDI, DI, SI


input

MISO/SOMI Slave output master SDO, DO, SO


input

SS Slave select, chip enable nCS, CS, nSS, STE, CE

Fonte: Adaptado Lipovski (1999).

Segundo Lipovski (1999), o relógio serial (SCLK) é simplesmente um sinal


fornecido para sincronizar as comunicações entre mestre e escravo, repre-
sentados pelas descrições MISO/SOMI e MOSI/SIMO, que indicam exatamente
8 Aplicações das interrupções em microcontroladores

como eles devem estar conectados (a saída do SPI mestre conectada à en-
trada do SPI escravo). Ao se utilizar apenas 3 pinos para a comunicação, um
quarto sinal (pino SS), que estará conectado ao referencial terra (0 volts) no
dispositivo escravo, será necessário para selecionar o SPI escravo com o qual
se deseja estabelecer a comunicação, conforme a Figura 5.

Figura 5. Configuração mestre/escravo em interfaces digitais SPI.


Fonte: Adaptada de Ball (2001).

O SPI não pode se comunicar com todos os escravos de uma só vez, de modo
que o sinal de seleção de escravos é utilizado. Contudo, somente o escravo
ativo no momento recebe as informações, pois a sua linha de seleção está
selecionada em nível baixo (0 volts). O restante dos SPIs escravos deverão ter
a sua linha de seleção em nível alto (+ 5 volts), caso contrário, eles receberão
os comandos (Figura 5). Cada pino se liga com seu pino correspondente,
fechando a ligação para que haja comunicação. Lembre-se de que o relógio
de referência (SCLK), utilizado para o sincronismo, é gerado pelo dispositivo
mestre da comunicação, geralmente o microcontrolador.
Aplicações das interrupções em microcontroladores 9

O conceito mestre/escravo é hierárquico, sendo utilizado para mos-


trar quem está transmitindo e quem está recebendo em um canal
de comunicação.

Interface UART
A interface UART (do inglês universal asynchronous receiver/transmitter
[transmissor/receptor assíncrono universal]) possui um módulo de circuito
integrado que suporta um protocolo para enviar quadros de oito bits (dados)
na comunicação entre microcontrolador e dispositivos externos (ARNOLD,
2001). A Figura 6, a seguir, apresenta o formato do quadro UART.

Figura 6. Quadro de comunicação padrão via interface UART.


Fonte: Adaptada de Soliton Technologies (2020).

De acordo com o sinal binário vermelho de sincronismo da comunicação,


responsável por controlar o início e o fim da comunicação, quando um frame
(quadro) não estiver sendo enviado, o sinal está em nível lógico alto (1);
quando um sinal tiver de ser enviado, um bit de início, que está em nível baixo
(0), é enviado por um tempo. Um frame (quadro) de 1 byte (8 bits) durante
certo tempo é o primeiro bit enviado, chamado de menos significativo. Um
10 Aplicações das interrupções em microcontroladores

bit de paridade pode, então, ser enviado e gerado para que a paridade de
todo o quadro seja sempre par (ou sempre ímpar), para sinalizar o fim da
transmissão dos dados.
Em suma, a interface UART é simples de conectar e utiliza apenas 2 linhas:
TX (transmite) e RX (recebe). Além disso, não é necessário um clock (relógio)
para manter a comunicação, pois o sistema é assíncrono, conforme a Figura 7.

Figura 7. Conexão via interface UART.

Para conectar um microcontrolador a outro módulo que utilize interface


UART, será necessário cruzar as linhas. O TX do microcontrolador se conectará
ao RX do outro dispositivo, ao passo que o RX será conectado ao TX desse
mesmo dispositivo, como mostrado na Figura 7.

Interface I2C
A interface I2C (do inglês inter-integrated circuit [circuito interintegrado]) é
uma interface serial bidirecional para sistemas microcontrolados que utiliza
apenas dois pinos: SCL (serial clock) e das (serial data).
O SCL é gerado pela unidade processadora do sistema microcontrolado
para registrar dados dentro e fora do dispositivo periférico através do sinal
SDA, que consiste em uma linha bidirecional que transmite esses dados. O
sinal SDA é de chave normalmente aberta, para que vários periféricos possam
compartilhar o mesmo barramento de 2 fios. Ao enviar os dados, o sinal SDA
só pode mudar enquanto o SCL estiver no nível baixo (0). As transições na
linha SDA enquanto o SCL estiver em nível alto (1) são interpretadas como
condições de partida e parada (início e fim da transmissão de dados). Se
o SDA ficar em nível baixo enquanto o SCL estiver em nível alto, todos os
periféricos no barramento interpretarão isso como uma condição de START
Aplicações das interrupções em microcontroladores 11

(início da transmissão). Em contrapartida, se SDA estiver indo para nível alto


enquanto o SCL já é nível alto, isso indica uma condição de STOP (término
da transmissão; SUSNEA; MITESCU, 2005). A Figura 8, a seguir, ilustra uma
transferência de dados típica da interface C.

Figura 8. Comunicação padrão via interface C.


Fonte: Ball (2001, p. 39).

Após a interrupção gerada, o microcontrolador inicia a transmissão com


um BIT DE START (Figura 9), envia o endereço do dispositivo que será acessado
(7 bits) e informa aos dispositivos no barramento qual deles deve ser selecio-
nado. Tudo isso é seguido por um bit de leitura/escrita (R/W) (1 para leitura, 0
para gravação). Após o bit de leitura/escrita (R/W), o microcontrolador aciona
o pino de E/S (entrada/saída) conectado ao bit SDA para ser uma entrada
e gera um bit de reconhecimento (ACK). O periférico conduzirá a linha SDA
para nível baixo (0), para indicar que recebeu o endereço e as informações de
leitura/escrita. Após o bit de reconhecimento, o microcontrolador envia outro
endereço: o endereço interno do registrador que o microcontrolador deseja
acessar. O comprimento desse campo varia de acordo com o dispositivo. Após
essas etapas, os dados são enviados (8 bits) e reconhecidos através do bit
ACK, encerrando a transmissão com um BIT DE STOP.
12 Aplicações das interrupções em microcontroladores

Figura 9. Transmissão de dados via interface C.


Fonte: Adaptada de Ball (2001).

Para uma operação de gravação (escrita), o microcontrolador cria um


relógio (clock) de 8 bits de dados. Já para uma operação de leitura, o micro-
controlador trata o pino SDA como uma entrada e clock em 8 bits. Após o envio
dos dados da transmissão (8 bits), é enviado outro bit de reconhecimento (ACK),
conforme ilustrado na Figura 9. Alguns periféricos permitem que vários bytes
sejam lidos ou gravados em uma transferência. O microcontrolador repete a
sequência de dados/confirmação até que todos os bytes sejam transferidos.

Interrupções internas e suas estruturas


A seguir, será descrito o sistema de timers dos microcontroladores, incluindo
o timer de uso geral, o PWM (pulse width modulated [largura de pulso modu-
lada]) e o watchdog timers.

Estrutura e funções de um sistema temporizador


(timers) de um microcontrolador
A temporização (contagem) é de suma importância para as operações dos
sistemas microcontrolado, seja para gerar sinais com duração determinada
com precisão, seja para contar eventos externos e internos (interrupções). Por
esse motivo, o subsistema timer está presente em todas as implementações
de microcontroladores e possui algumas funções, como:

„„ geração de intervalos de tempo precisos;


„„ medição da duração e contagem de eventos externos ou internos.
Aplicações das interrupções em microcontroladores 13

A maioria dos microcontroladores é fornecida com temporizadores es-


pecíficos ou um temporizador de uso geral para implementar as seguintes
funções adicionais:

„„ relógio (clock) de tempo real;


„„ geração de sinais modulados por largura de pulso PWM (pulse width
modulated);
„„ watchdog para detectar situações anormais do programa.

Embora existam variações significativas entre diferentes implementações


do timer de uso geral em microcontroladores distintos, há muitas semelhan-
ças nos princípios de operação e na estrutura do subsistema temporizador.
A Figura 10, a seguir, apresenta um diagrama de blocos geral do sistema de
temporizador, o qual é implementado na maioria dos temporizadores de
sistemas microcontrolados.

Figura 10. Diagrama de blocos de um subsistema timer de uso comum.


Fonte: Adaptada de Susnea e Mitescu (2005).
14 Aplicações das interrupções em microcontroladores

Conforme visto na Figura 10, o elemento central do subsistema timer é o


contador TCNT (timer/counter register), um registrador de 8 ou 16 bits que
pode ser lido ou escrito por software. O relógio para controle do registrador
interno TCNT é obtido a partir da fonte de clock, que pode ser dividida por
um pré-calibrador programável ou a partir de um relógio externo aplicado a
um dos pinos do microcontrolador.
O controle por software no timer é realizado por meio do registrador de
controle TCTL (timer control), e informações sobre vários eventos relacionados
ao temporizador podem ser lidas no registrador de status TFLG (timer flag).
Vários modos de operação são possíveis para o temporizador:

„„ Timer overflow: nesse modo, o evento de interesse é quando o conta-


dor TCNT atinge a sua contagem máxima e retorna a zero no próximo
pulso de clock. O sinal de estouro (overflow) que marca esse evento
é aplicado à lógica de controle de interrupção ICL (interrupt control
logic) via porta E/S (entrada/saída), podendo gerar uma solicitação de
interrupção para a unidade de processamento do sistema microcontro-
lado. O intervalo de tempo entre dois estouros (overflow) sucessivos é
controlado modificando-se a frequência da fonte de clock de entrada
aplicada ao TCNT ou gravando-se no registrador TCNT um valor inicial
para a contagem.
„„ Captura de entrada: nesse modo de operação, o conteúdo do TCNT no
momento da ocorrência de um evento, definido pela borda de um sinal
de entrada, é transferido para um registrador de captura (ICR), e uma
solicitação de interrupção pode ser gerada. Ao comparar dois valores
consecutivos capturados pelo ICR, pode-se determinar o intervalo de
tempo entre os dois eventos.
„„ Comparação de saída: neste modo de operação, o conteúdo do TCNT é
continuamente comparado por hardware com o conteúdo do registrador
interno OCR (output compare register) por meio do comparador digital
COMP. Quando o conteúdo dos dois registros for correspondente, uma
solicitação de interrupção pode ser gerada.
„„ Contador de eventos externos: nesse modo de operação, a entrada do
TCNT é conectada a uma das linhas de entrada do microcontrolador
via barramento interno, e o TCNT conta os pulsos associados aos even-
tos ocorridos. O software é informado sobre o número registrado de
eventos ao ler o contador TCNT (SUSNEA; MITESCU, 2005).
Aplicações das interrupções em microcontroladores 15

Timers PWM

Um sinal PWM é basicamente um sinal com o ciclo de trabalho controlado


dinamicamente. A Figura 11, a seguir, apresenta a operação básica de um
temporizador PWM.

Figura 11. Diagrama do timer PWM.


Fonte: Adaptada de Susnea e Mitescu (2005).

O registrador PWPER define o período do sinal de saída, ao passo que o


registrador PWDTY controla a função de saída do sinal PWM. Quando o conteúdo
do contador PWCNT corresponde ao do PWDTY, a lógica de saída de controle
altera a polaridade do sinal de saída, e quando o PWCNT atinge o valor de con-
tagem de PWPER, o contador é limpo automaticamente (RESET). O registrador
PWCTL contém bits de controle para selecionar a frequência do clock (relógio)
para o registrador PWCNT, bem como a polaridade do sinal de saída, para
poder habilitar todo o PWM do sistema (CALCUTT; COWAN; PARCHIZADEH, 2004).

Os microcontroladores da série Motorola 68HC11 possuem um de-


dicado timer PWM, constituído de um contador de execução livre,
o PWCNT, cujo conteúdo é permanentemente comparado ao de dois outros
registradores internos programáveis, chamados de PWPER e PWDTY.

O contador PWCNT é implementado utilizando-se os 8, 9 ou 10 bits menos


significativos do registrador TCNT1. O comprimento total do contador PWCNT
é selecionável por software, por meio dos bits PWM11 e PWM10, presentes
16 Aplicações das interrupções em microcontroladores

no registrador TCCR1A. Nesse cenário, as funções do registro PWDTY são


executadas pelo registrador OCR1 (output compare register 1; BALL, 2001).

A família de alguns microcontroladores utiliza o registrador timer 1


para gerar o sinal PWM.

Watchdog timer
Um watchdog timer é um temporizador utilizado para detectar e recuperar de-
feitos ou mau funcionamento em sistemas microcontrolados (SUSNEA; MITESCU,
2005). Durante uma operação normal, o microcontrolador reinicia regularmente
o registrador do watchdog para impedir que ele atinja o tempo limite (timing
out). Se, devido a uma falha de hardware ou erro de código, o microcontrola-
dor falhar ao reiniciar o watchdog, o temporizador gerará um sinal de tempo
limite, que será utilizado para iniciar ações corretivas. As ações corretivas
normalmente incluem colocar o sistema em um estado seguro ou restaurar a
operação normal do sistema microcontrolado por meio de uma interrupção
interna, que reinicializará (reset) o microcontrolador (ZLATANOV, 2014).
A Figura 12, a seguir, apresenta um diagrama de blocos com a estrutura de
um watchdog timer, composto por um contador interno. O tempo de estouro
é programável e, ao atingir o seu limite, por meio do detector de overflow,
gera uma interrupção.

Figura 12. Estrutura interna de um watchdog timer.


Fonte: Adaptada de Zlatanov (2014).
Aplicações das interrupções em microcontroladores 17

Se o watchdog timer estiver ativado em um sistema microcontrolado,


o programa principal em execução deverá ser organizado de forma que,
periodicamente, em intervalos de tempo menores que o tempo do overflow
(estouro), ele redefina o contador, caso contrário, um RESET de hardware
será gerado. O registrador de controle no esquema da Figura 12 é utilizado
para ativar o watchdog timer, selecionar o tempo de estouro (overflow) e
redefinir o contador.

Referências
ARNOLD, K. Embedded controller hardware design. [S. l.]: Elsevier, 2001. (Embedded
Technology TM Series).
BALL, S. Analog interfacing to embedded microprocessors: real world design. Woburn:
British Library, 2001.
CALCUTT, D.; COWAN, F.; PARCHIZADEH, H. 8051 microcontrollers: an applications based
introductions. Burlingrton: Elsevier, 2004.
LIPOVSKI, G. J. Introduction to microcontrollers: architecture, programming and inter-
facing for the Motorola 68HC12. San Diego: Academic, 1999.
MACKENZIE, S. I. The 8051 microcontroller. 3rd ed. [S. l.]: Prentice-Hall, 1995.
SIM, M. A practical approach to hardware semaphores for MCP56xx and MPC57xx multi-
-core. [S. l.]: NXP, 2014. (Document Number: AN4805).
SOLITON TECHNOLOGIES. UART protocol validation service. 2020. Disponível em: https://
www.solitontech.com/uart-protocol-validation-service/. Acesso em: 13 ago. 2020.
SUSNEA, I.; MITESCU, M. Microcontrollers in practice. Berlin: Springer, 2005.
ZLATANOV, N. Architecture and operation of a watchdog timer. 2014. Disponível em:
https://www.researchgate.net/publication/295010877. Acesso em: 13 ago. 2020.

Os links para sites da web fornecidos neste capítulo foram todos


testados, e seu funcionamento foi comprovado no momento da
publicação do material. No entanto, a rede é extremamente dinâmica; suas
páginas estão constantemente mudando de local e conteúdo. Assim, os editores
declaram não ter qualquer responsabilidade sobre qualidade, precisão ou
integralidade das informações referidas em tais links.

Você também pode gostar