Buscar

Sistemas Microprocessados II


Continue navegando


Prévia do material em texto

1 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
Interrupções 
 
Trata-se de um evento que ocasiona a parada da execução de 
uma determinada instrução pela CPU do microcontrolador. Na figura 
abaixo temos o diagrama das interrupções do PIC 16.
F628A. Todas interrupções são controladas pelos registradores 
INTCON, PIR1 e PIE1. 
 
Toda vez que uma flag de interrupção ocorrer, a mesma deve ser 
resetada por software. 
 
O PIC 16F628A possui 10 fontes de interrupção: 
1- Timer0 
2- Timer1 
3- Timer2 
4- Mudança no PORTB 
5- Interrupção externa 
6- Término de escrita na EEPROM 
7- Comparação ou captura no módulo CCP 
8- Recepção de dados na USART 
9- Fim da transmissão de dados na USART 
10- Comparador analógico 
 
Registradores na Memória RAM de um PIC 
 
A memória RAM dos microcontroladores PIC é utilizada para abrigar os 
registradores internos, e é divida em duas partes distintas. 
 
 GPR (General Porpose Registers – Registradores de Propósitos 
Gerais) – Utilizados para armazenamento temporário de dado e 
informações do programa do usuário. 
 
2 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 SFR (Special Function Registers – Registradores de Funções 
Especiais) – Utilizados para controlar periféricos e dispositivos 
internos, flags de estado, etc. 
 
1- Registrador OPTION_REG 
 
Responsável pela configuração de algumas funções internas do PIC 
dentre elas o funcionamento do wdt (Watchdog timer) e do timer0. 
Seus bits de configuração são vistos abaixo. 
 
/rbpu intedg t0cs t0se psa ps2 ps1 ps0 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 /rbpu : Habilitação dos pull-ups do PORTB. 
 0 = habilitado 
 1 = desabilitado 
 
 intedg : Configuração da borda de interrupção externa. 
 0 = descida 
 1 = subida 
 
 t0cs : Configuração da fonte de clock para o timer0. 
 0 = interno 
 1 = externo 
 
 t0se : Configuração da borda que incrementará o timer0. 
 0 = descida 
 1 = subida 
 
 psa : Configuração da aplicação do prescaler. 
 0 = timer0 
 1 = wdt 
 
 ps2,ps1,ps0 : Configuração do prescaler. 
 
 
 
ps2 
 
ps1 
 
ps0 
 
Divisor 
 
Frequênca de Saida do 
Prescaler (Hz) para OSC=4Mhz 
0 0 0 2 500 Khz 
0 0 1 4 250 Khz 
0 1 0 8 125 Khz 
0 1 1 16 62.500 Hz 
1 0 0 32 31.250 Hz 
1 0 1 64 16.625 Hz 
1 1 0 128 7.813 Hz 
1 1 1 256 3.906 Hz 
 
 
3 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
2- Registrador INTCON 
 
Responsável pelo controle das interrupções, sendo dividido 
em três blocos básicos: 
 Controle geral das interrupções – Bit GIE (Global Inerrupt 
Enable) ou controle global das interruções. 
 Controle individual de interrupções – Bits PEIE,T0IE,INTE e 
RBIE. 
 Flags sinalizadoras de ocorrências de interrupções – Bits 
 
 
gie peie t0ie inte rbie t0if intf rbif 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 gie : Habilitação geral das interrupções. 
 0 = todas interrupções desligadas. 
 1 = habilita as interrupções ativas. 
 
 peie : Habilitação geral das interrupções dos periféricos. 
 0 = todas as interrupções dos periféricos desligadas. 
 1 = todas as interrupções dos periféricos ligadas. 
 
 t0ie : Habilitação do timer0 
 0 = desabilitada. 
 1 = habilitada. 
 
 inte : Habilitação das interrupções externas. 
 0 = desabilitada. 
 1 = habilitada. 
 
 rbie : Habilitação das interrupções de mudança de estado. 
 0 = desabilitada. 
 1 = habilitada. 
 
 t0if : Identificação da interrupção do timer0. 
 0 = não ocorreu. 
 1 = ocorreu. 
 
 intf : Identificação de interrupção externa. 
 0 = não ocorreu. 
 1 = ocorreu. 
 
 rbif : Identificação de interrupção de mudança de estado. 
 0 = não ocorreu. 
 1 = ocorreu. 
 
 
 
4 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
3- Registrador PIE1 
 
Responsável pela habilitação / desabilitação das interrupções 
periféricas. Seus bits de configuração são vistos abaixo. 
 
eeie cmie rcie txie - ccp1ie tmr2ie tmr1ie 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 eeie : Habilitação de interrupção de término de escrita na 
 EEPROM 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 cmie : Habilitação de interrupção de mudança de estados dos 
 comparadores analógicos. 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 rcie : Habilitação de interrupção de término de escrita na 
 EEPROM 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 txie : Habilitação de interrupção de transmissão de dados na 
 USART. 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 ccp1ie : Habilitação de interrupção do módulo CCP 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 tmr2ie : Habilitação de interrupção de transbordo do timer2 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 tmr1ie : Habilitação de interrupção de transbordo do timer1 
 0 = interrupção desabilitada 
 1 = interrupção habilitada 
 
 
 
 
 
 
 
 
 
 
5 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
4- Registrador PIR1 
 
Responsável pelas flags sinalizadoras das interrupções periféricas. 
Estas flags somente são setadas se as mesmas estiverem 
habilitadas. Seus bits de configuração são vistos abaixo. 
 
eeif cmif rcif txif - ccp1f tmr2if tmr1if 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 eeif : Sinalizador de término de escrita na 
 EEPROM 
 0 = a escrita não iniciou ou ainda não terminou. 
 1 = a escrita terminou 
 
 cmif : Sinalizador de mudança de estados na saída dos 
 comparadores analógicos. 
 0 = não houve mudança 
 1 = houve mudança 
 
 rcif : Sinalizador de recepção de caractere na USART 
 0 = não houve recepção 
 1 = houve recepção 
 
 txif : Sinalizador de transmissão na USART 
 0 = não houve transmissão 
 1 = houve transmissão 
 
 
 ccp1if : Sinalizador de comparação/captura no módulo CCP 
 0 = não houve comparação 
 1 = houve comparação 
 
 tmr2if : Sinalizador de transbordo do timer2 
 0 = não houve transbordo 
 1 = houve transbordo 
 
 tmr1if : Sinalizador de transbordo transbordo do timer1 
 0 = não houve transbordo 
 1 = houve transbordo 
 
 
 
 
 
 
 
 
 
 
6 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
5- Registrador T1CON 
Responsável pelo funcionamento do timer1, abaixo temos seus bits 
de configuração. 
 
- - t1ckps1 t1ckps0 t1oscen 
 
tmr1cs tmr1on 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 Os bits 7 e 6 não possuem função implementada e são lidos como “0”. 
 t1ckps1 e t1ckpso : Seleciona os valores de prescaler do timer1. 
 Abaixo temos os fatores de pré-divisão. 
T1CKPS1 T1CKPSO Divisor 
0 0 1 
0 1 2 
1 0 4 
1 1 8 
 
 t1oscen : Seleciona o oscilador ( Cristal ) externo ligado aos pinos 
 T1OSO (pino 12) e T1OSI ( pino 13 ) do PIC 16F628A. 
 0 = oscilador desligado. 
 1 = oscilador ligado. 
 
 : Controle do sincronismo interno. 
 0 = sincronismo ligado 
 1 = sincronismo desligado. 
 
 tmr1cs : Seleção do clock do timer1 
 0 = clock interno ( fosc/4) 
 1 = clock externo ( T1OSO E T1OSI ) 
 
 tmr1on : Habilitação da contagem do timer1 
 0 = timer1 desligado. 
 1 = timer1 ligado. 
 
 Obs.: Podemos escolher diversos modos de operação do timer1 pela 
 configuração dos bits TMR1CS e . A tabela abaixo mostra os 
 três modospossíveis. 
 
TMR1CS Modo 
0 0 Clock interno sincronizado 
0 1 Clock interno sincronizado 
1 0 Clock externo sincronizado 
1 1 Clock externo não sincronizado 
 
 Clock sincronizado ou síncrono : circuitos internos do pic sincronizam 
 o clock externo com o clock interno, sendo o incremento do timer1 em 
 sincronismo com o clock interno. 
 Clock não sincronizado ou assíncrono : neste caso o incremento do 
 contador do timer1 é feito imediatamente, sem o sincronismo do clock 
 interno. 
7 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
6- Registrador TMR2CON 
 
Responsável pelo funcionamento do timer2, abaixo temos seus bits 
de configuração. 
 
- toutps3 toutps2 toutps1 toutps0 tmr2on t2ckps1 t2ckps0 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
toutps3, toutps2, toutps1 e toutps0 seleciona o postscaler. 
 
toutps3 toutps2 toutps1 toutps0 Divisor 
0 0 0 0 1:1 
0 0 0 1 1:2 
0 0 1 0 1:3 
0 0 1 1 1:4 
0 1 0 0 1:5 
0 1 0 1 1:6 
0 1 1 0 1:7 
0 1 1 1 1:8 
1 0 0 0 1:9 
1 0 0 1 1:10 
1 0 1 0 1:11 
1 0 1 1 1:12 
1 1 0 0 1:13 
1 1 0 1 1:14 
1 1 1 0 1:15 
1 1 1 1 1:16 
 
 tmr2on: Habilitação da contagem do timer1 
 0 = timer1 desligado. 
 1 = timer1 ligado. 
 
 t2ckps1 e t2ckps0 seleciona o prescaler. 
 
t2ckps1 t2ckps0 Divisor 
0 0 1:1 
0 1 1:4 
1 0 1:16 
1 1 1:16 
 
Registradores relacionados ao timer2 
 
INTCON bit gie e peie 
PIR 9 bit tmr2if 
PIE bit tmr2ie 
TMR2 contagem do timer2 
T2CON controle do timer2 
PR2 período do timer2 
 
8 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
7- Registrador CCP1CON 
 
 
Responsável pela configuração do módulo CCP. 
 
- - ccp1x ccp1y ccpm3 ccpm2 ccpm1 ccpm0 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
ccp1x e ccp1y: utilizados somente no modo PWM 
 
ccpm3, ccpm2, ccpm1 e ccpm0 : seleciona o modo de operação do 
 módulo CCP 
 
ccpm3 ccpm2 ccpm1 ccpm0 Modo 
0 0 0 0 Módulo CCP desligado 
0 1 0 0 Captura a cada borda de descida 
0 1 0 1 Captura a cada borda de subida 
0 1 1 0 Captura a cada 4ª borda de subida 
0 1 1 1 Captura a cada 16ª borda de subida 
1 0 0 0 Comparação: ccp1=1 e caso coincida ccp1=0 
1 0 0 1 Comparação: ccp1=0 e caso coincida ccp1=1 
1 0 1 0 Comparação: se coincidir gera interrupção ccp1f 
1 0 1 1 Comparação: se coincidir reseta tmr1 e gera ccpif 
1 1 x x Modo PWM 
 
8- Registrador CMCON 
 
Responsável pela configuração do módulo comparador analógico. 
 
c2out c1out c2inv c1inv cis cm2 cm1 cm0 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 
c2inv e c2out : indica o estado de saída do comparador 2. 
 
 
c2inv=0 c2inv=1 
c2out=0 VIN+ < VIN- c2out=0 VIN+ > VIN- 
c2out=1 VIN+ > VIN- c2out=1 VIN+ < VIN- 
 
c1inv e c1out : indica o estado de saída do comparador 2. 
 
c1inv=0 c1inv=1 
c1out=0 VIN+ < VIN- c1out=0 VIN+ > VIN- 
c1out=1 VIN+ > VIN- c1out=1 VIN+ < VIN- 
 
9 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
cis : seleciona o pino de entrada de VIN- do comparador 1 nos modos 
 1 e 2 
 
cm2, cm1 e cm0 : seleciona o modo de operação dos comparadores 
 
cm2 cm1 cm0 Modo 
0 0 0 0 
0 0 1 1 
0 1 0 2 
0 1 1 3 
1 0 0 4 
1 0 1 5 
1 1 0 6 
1 1 1 7 
 
A saída dos comparadores pode ser lida pelos sinais c1out e c2out 
ou pelos pinos do microcontrolador de acordo com o modo de 
operação. Abaixo temos cada modo de operação detalhado. 
 
Modo 0 – Comparadores em Reset 
 
 
 
Neste modo as saídas dos dois comparadores estão desligadas e os 
pinos RA0, RA1, RA2 e RA3 estão ligadas às entradas dos 
comparadores, logo estas entradas estão configuradas como 
analógicas. 
 
Modo 1 – Comparadores com Três Entradas Multiplexadas 
 
 
 
10 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
Neste modo os dois comparadores compartilham a referência 
externa ligada no pino RA2. 
A entrada inversora de C1 é determinada pelo bit CIS, conforme 
figura acima. 
 
Modo 2 – Comparadores com Quatro Entradas Multiplexadas 
 
 Neste modo as entradas não inversoras são conectadas ao módulo 
de referência de tensão interna, e as entradas inversoras são 
determinadas belo bit CIS conforme figura acima. 
 
Modo 3 – Comparadores com uma Referência Externa Comum 
 
 
 
Neste modo a referência externa é ligada no pino RA2, e o como o 
pino RA3 não está ligado, pode ser utilizado com I/O digital. 
 
Modo 4 – Dois Comparadores Independentes 
 
 
Neste modo as entradas RA0, RA1, RA2 e RA3 são analógicas. 
11 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
Modo 5 – Um Comparador 
 
 
Neste modo apenas o comparador 2 é utilizado, logo os pinos RA0 e 
RA3 podem ser utilizados como I/O digital. 
 
Modo 6 – Dois Comparadores com Referência Comum e Saídas 
 Externas 
 
 
 
Neste modo os dois comparadores compartilham a mesma referência 
externa (pinos RA2) e as saídas dos comparadores são obtidas 
externamente nos pinos RA3 e RA4 ou internamente nos bits 
C1OUT e C2OUT do registrador CMCON. 
 
Modo 7 – Comparadores Desligados 
 
 
Neste modo os dois comparadores estão desligados, logo os pinos 
RA0, RA1, RA2 e RA3 podem ser utilizados como I/O digital. 
12 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
9- Registrador VRCON 
 
Responsável pela configuração da referência interna de tensão 
 
vren vroe vrr - vr3 vr2 vr1 vr0 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
vren: habilitação do módulo de tensão de referência 
0 = módulo desligado 
1 = módulo ligado 
 
vroe: conexão da tensão de referência ao pino RA2. 
0 = Vref não conectada ao pino RA2 
1 = Vref conectada ao pino RA2 
 
vrr: seleção da escala de tensão 
0 = grande escala 
1 = pequena escala 
 
vr3, vr2, vr1 e vr0 : seleção do nível de tensão de saída do módulo. 
A tabela abaixo indica os valores para as duas escalas. 
 
Seleção do nível Escalas de tensão(volts) 
vr3 vr2 vr1 vr0 vrr=1 vrr=0 
0 0 0 0 0,00 1,25 
0 0 0 1 0,21 1,41 
0 0 1 0 0,42 1,56 
0 0 1 1 0,63 1,72 
0 1 0 0 0,83 1,88 
0 1 0 1 1,04 2,03 
0 1 1 0 1,25 2,19 
0 1 1 1 1,46 2,34 
1 0 0 0 1,67 2,50 
1 0 0 1 1,88 2,66 
1 0 1 0 2,08 2,81 
1 0 1 1 2,29 2,97 
1 1 0 0 2,50 3,13 
1 1 0 1 2,71 3,28 
1 1 1 0 2,92 3,44 
1 1 1 1 3,13 3,59 
 
 
 
 
 
 
 
 
 
13 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
10- Registrador TXSTA 
 
Responsável pela configuração do módulo de transmissão serial. 
 
 
csrc tx9 txen sync - brgh trmt tx9d 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
 
csrc : seleção de fonte de clock síncrono 
0 = clock externo (modo escravo) 
1 = clock interno (modo mestre) 
 
tx9 : habilitação de modo de transmissão de 9 bits 
0 = modo de transmissão de 8 bits 
1 = modo de transmissão de 9 bits 
 
txen : habilitação do transmissor 
0 = desabilitado 
1 = habilitado 
 
sync : seleção do modo de transmissão da USART 
0 = modo assíncrono de transmissão 
1 = modo síncrono de transmissão 
 
brgh: seleção de modo de clock de alta velocidade 
0 = modo de baixa velocidade 
1 = modo de alta velocidade 
 
trmt : indicador do estado do registrador de transmissão 
0 = registrador de transmissão (TSR) cheio 
1 = registrador de transmissão (TSR) vazio 
 
Tx9 : habilitação do do nono bit de transmissão 
Usado para gerar informaçãode paridade 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
11- Registrador RCSTA 
 
Responsável pela configuração do módulo de recepção serial. 
 
 spen rx9 sren cren adden ferr oerr rx9d 
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 
 
spen : habilitação da usart 
0 = desabilitada ( pinos RB1 eRB2 como I/O digital) 
1 = habilitada 
 
rx9 : habilitação de modo de recepção de 9 bits 
0 = modo de recepção de 8 bits 
1 = modo de recepção de 9 bits 
 
sren : habilitação de recepção única 
0 = desabilitada 
1 = habilitada 
 
cren : habilitação de recepção contínua 
0 = desabilitada 
1 = habilitada 
 
adden: habilitação de detecção de endereço 
0 = desabilita a detecção de endereço (o 9º bit pode ser usado para 
paridade) 
1 = habilita a detecção de endereço 
 
ferr : indicador de erro de frame 
0 = nenhum erro de frame 
1 = erro de frame 
 
oerr : indicador de erro de overrun (sobreposição) 
0 = nenhum erro de overrrun 
1 = erro de overrun (3 caracteres foram recebios sem serem lidos) 
 
rx9d : 9º bit de dados recebido pela USART, utilizafdo para verificar 
a paridade, se o transmissor estiver de acordo. 
 
12- Registrador SPBRG 
 
 
 
 
 
 
 
 
15 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
PRÁTICAS 
 
 
1. Módulo TIMER0 
 
 O timer0 consiste em um temporizador/contador de 8 bits ( 0 a 
 255), possuindo duas funções básicas: 
 
 Contador - Contagem de eventos externos. Utiliza clock externo 
ligado ao pino RA4 
 
 Temporização (contagem de tempo): Utiliza o clock interno do PIC 
como clock do temporizador. 
 
 O timer0 pode ser programado para trabalhar com prescaler 
 dedicado. O prescaler é um contador/divisor que é utilizado para 
 reduzir a freqüência do sinal de clock aplicado ao TIMER0 por um fator 
 conhecido. O valor inicial de contagem pode ser carregado pelo 
 registrador timer0. Se não for carregado nenhum valor de início de 
 contagem, ele começará a contagem pelo “0”. 
 Quando o TMR0 for configurado como temporizador, os pulsos de 
 incremento do contador são provenientes do OSC/4. O bit que indica se 
 ocorreu o estouro na contagem do timer0 é dado pelo bit T0IF do 
 registrados INTCON. 
 O TMR0 possui o resultado da contagem ( 0 a 255 ) enquanto que, 
 quem define o funcionamento do TIMER0 é o registrador OPTION_REG. 
 
 
 Registradores relacionados ao funcionamento do timer0 
 
 option_reg – bits t0cs (fonte de clock), t0se (borda do clock), 
psa (prescaler o timer) ou wdt) , ps2,ps1e ps0 (configuração do 
prescaler). 
 tmr0 – contém os oito bits do contador 
 intcon – bits t0ie (habilitação do timer0) e t0if (flag de transbordo 
do timer0) 
 
 
 
 
 Exemplo 1: 
 
 Encontrar a temporização máxima do timer0, para um clock interno de 
 4MHz. Para isso verificaremos o tempo entre uma mudança de estado 
 do bit sinalizador de estouro do timer0. 
 
1- Monte o circuito abaixo no Proteus. 
 
16 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
 
 
2- Edite o programa abaixo no mikroC. ( clock = 4 Mhz ) 
 
void main() 
{ 
 option_reg=0b00000111; 
 tmr0=0; 
 intcon.t0if=0; 
 trisb.rb0=0; 
 portb.rb0=0; 
 while(1) 
 { 
 if(intcon.t0if==1) 
 { 
 portb.rb0=~portb.rb0; 
 tmr0=0; 
 intcon.t0if=0; 
 } 
 } 
} 
 
Com osciloscópio meça o tempo de estouro do timer0 e compare 
com o valor de estouro dado a seguir. 
 
 
 
 
 
 
3- Abaixo temos as fórmulas de cálculo do tempo de estouro do timer0, 
e também do valor de carga no timer0, para tempo de estouros 
determinados. 
 
17 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
 
 
 Exemplo 2: 
 
Configurar o registrador OPTION_REG para proporcionar um tempo de 
 estouro de 60 ms, com OSC interno de 4 MHz e PS de 256. 
 
 
 
 Para obter este tempo de estouro, basta colocar o valor de carga de 21 
 no registrador timer0, e compilar o exemplo anterior novamente. 
 
 
 Exercício 
 
 Configurar o registrador OPTION_REG para proporcionar um tempo de 
 estouro de 30 ms, com OSC externo de 150 KHz e OS de 128. Verifique 
 com o osciloscópio o tempo obtido. 
 
 
 
 
 
 
 
 
 
18 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
2. Módulo TIMER1 
 
 Trata-se um temporizador/contador de 16 bits ( 0 a 65535 ), suas 
 características são parecidas com a do timer0. Dizemos que o timer está 
 operando como temporizador quando a referência do clock de 
 incremento da contagem é realizada pelo clock interno do PIC, e 
 dizemos que está operando como contador quando o clock de 
 incremento é proveniente de um clock externo ao PIC pinos 
 T1OSO (12) e T1OSI (13) 
 
 Registradores relacionados ao funcionamento do timer1 
 
 intcon – bits peie (habilitação da interrupções periféricas) e gie 
(habilitação geral das interrupções). 
 pir1– bit tmr1if (flag de transbordo do timer1) . 
 pie1– bit tmr1ie (habilitação da interrupção de transbordo do 
timer1). 
 tmr1l– bits menos significativos da contagem. 
 tmr1h– bits mais significativos da contagem. 
 t1con– registrador responsável pela configuração do timer1. 
 
 Exemplo 1 
 
Encontrar a temporização máxima do timer1, para um clock interno de 
 4MHz. Para isso verificaremos o tempo entre uma mudança de estado 
 do bit sinalizador de estouro do timer1. 
 
 
 
 
1. Monte o circuito abaixo no Proteus. 
 
 
 
19 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
2. Edite o programa abaixo no mikroC. ( clock = 4 Mhz ) 
 
void main() 
{ 
 trisb.rb0=0; 
 trisb.rb6=1; 
 trisb.rb7=1; 
 portb.rb0=0; 
 t1con=0b00111111; 
 intcon.gie=0; 
 intcon.peie=1; 
 pie1.TMR1IE=1; 
 pir1.TMR1IF=0; 
 tmr1L=0x0; 
 tmr1H=0x0; 
 while(1) 
 { 
 if (pir1.TMR1IF==1) 
 { 
 portb.rb0=~portb.rb0; 
 tmr1L=0x0; 
 tmr1H=0x0; 
 pir1.TMR1IF=0; 
 } 
 } 
 } 
 
 
3. Abaixo temos as fórmulas de cálculo do tempo de estouro do timer1, 
e também do valor de carga no TMR1L e TMR1H, para tempo de 
estouros determinados. 
 
 
 
 Para tempos de estouro diferentes devemos encontrar o valor de 
carga para o TMR1L e TMR1H, de acordo com a fórmula. 
 
 
 
 
 
 
20 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
4. Modificar o exercício anterior para um tempo de estouro do timer1 de 
300 ms, com prescaler de 8 
 
 
 
 Logo basta carregarmos TMR1H = 6D e TMR1L = 83 para termos 
um tempo de estouro de 300 ms. 
 
Exemplo2 
 
1- Gerando sucessivos acionamentos com o timer1. Utilizando timer1 para 
acionar 8 leds da seguinte maneira: 
 Led1 invertido após 1 segundo. 
 Led2 invertido após 2 segundos. 
 Led2 invertido após 3 segundos. 
 Led4 invertido após 4 segundos. 
 Led5 invertido após 5 segundos. 
 Led6 invertido após 6 segundos. 
 Led7 invertido após 7 segundos. 
 Led8 invertido após 8 segundos. 
Após nove segundos o processo repete. 
 
2- Monte o circuito abaixo no Proteus. Utilizar o osciloscópio para verificar 
o tempo 500 ms. 
21 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 
3- Digite o compile o seguinteprograma. 
 
int cont1; 
void main() 
{ 
 cont1=0; 
 trisb=0; 
 trisa.ra0=0; 
 portb=0; 
 porta.ra0=0; 
 t1con=0b00110001; 
 //pir1.TMR1IF=0; 
 tmr1L=0x83; // estouro a cada 500 ms 
 tmr1H=0x6d; 
 while(1) 
 { 
 if(pir1.TMR1IF==1) 
 { 
 porta.ra0=~porta.ra0; 
 cont1++; 
 if(cont1==2) portb.rb0=~portb.rb0; 
 if(cont1==4) portb.rb1=~portb.rb1; 
 if(cont1==6) portb.rb2=~portb.rb2; 
 if(cont1==8) portb.rb3=~portb.rb3; 
 if(cont1==10) portb.rb4=~portb.rb4; 
 if(cont1==12) portb.rb5=~portb.rb5; 
 if(cont1==14) portb.rb6=~portb.rb6; 
 if(cont1==16) 
 { 
 portb.rb7=~portb.rb7; 
 cont1=0; 
 } 
22 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 tmr1L=0x83; // estouro a cada 500 ms 
 tmr1H=0x6d; 
 pir1.TMR1IF=0; 
 } 
 } 
} 
 
 
 
 
 
 
 
 
 
 
 
Exemplo 3 
 
Cronômetro com timer1 
 
1- Monte o circuito abaixo no Proteus. 
 
 
 
 
 
 
 
 
 
23 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
2- Edite o programa abaixo no mikroC. ( clock = 4 Mhz ) 
 
sbit LCD_RS at RB4_bit; 
sbit LCD_EN at RB5_bit; 
sbit LCD_D4 at RB0_bit; 
sbit LCD_D5 at RB1_bit; 
sbit LCD_D6 at RB2_bit; 
sbit LCD_D7 at RB3_bit; 
sbit LCD_RS_Direction at TRISB4_bit; 
sbit LCD_EN_Direction at TRISB5_bit; 
sbit LCD_D4_Direction at TRISB0_bit; 
sbit LCD_D5_Direction at TRISB1_bit; 
sbit LCD_D6_Direction at TRISB2_bit; 
sbit LCD_D7_Direction at TRISB3_bit; 
char str_segundo[10],str_minuto[10], 
str_hora[10],str_dia[10]; 
 
char segundo,minuto,hora,dia,contador; 
 
void main() 
{ 
 trisa=0; 
 TRISB=0; 
 trisb.rb6=1; 
 trisb.rb7=1; 
 trisa.ra4=1; 
 Lcd_Init(); 
 Lcd_Cmd(_LCD_CLEAR); 
 Lcd_Cmd(_LCD_CURSOR_OFF); 
 lcd_out(1,1,"Hora:"); 
 lcd_out(2,1,"Dia"); 
 t1con=0b00110001; 
 intcon.gie=0; 
 intcon.peie=1; 
 pie1.TMR1IE=1; 
 pir1.TMR1IF=0; 
 tmr1L=0xED; 
 tmr1H=0x85; 
 contador=0; 
 segundo=0; 
 minuto=0; 
 hora=0; 
 dia=0; 
 
 while(1) 
 { 
 if(pir1.tmr1if==1) 
 { 
 contador++; 
24 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 if(contador==1) 
 { 
 segundo++; 
 contador=0; 
 } 
 if(segundo==60) 
 { 
 minuto++; 
 segundo=0; 
 } 
 if(minuto==60) 
 { 
 hora++; 
 minuto=0; 
 } 
 if(hora==24) 
 { 
 dia++; 
 hora=0; 
 } 
 pir1.TMR1IF=0; 
 tmr1L=0xED; 
 tmr1H=0x85; 
 } 
 bytetostr(segundo,str_segundo); 
 bytetostr(minuto,str_minuto); 
 bytetostr(hora,str_hora); 
 bytetostr(dia,str_dia); 
 lcd_out(1,6,str_hora); 
 lcd_chr_cp(':'); 
 lcd_out_cp(str_minuto); 
 lcd_chr_cp(':'); 
 lcd_out_cp(str_segundo); 
 lcd_out(2,6,str_dia); 
 if(portb.rb6==0) t1con.TMR1ON=0; 
 if(portb.rb7==0) t1con.TMR1ON=1; 
 if(porta.ra4==0) t1con.TMR1ON=0; 
 if(porta.ra4==0) 
 { 
 t1con.TMR1ON=1; 
 contador=0; 
 segundo=0; 
 minuto=0; 
 hora=0; 
 dia=0; 
 bytetostr(segundo,str_segundo); 
 bytetostr(minuto,str_minuto); 
 bytetostr(hora,str_hora); 
 bytetostr(dia,str_dia); 
25 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 t1con.TMR1ON=0; 
 } 
 } 
 } 
 
 
2. Temporizador TIMER2 
 
 Trata-se de mais um registrador de função especial. Este timer funciona 
somente como temporizador, pois não possui entrada para uma fonte de clock 
externa consistindo em um temporizador 8 bits ( 0 a 255), suas características 
são parecidas com a do timer0. 
 
 Prescaler programável de 1:1 a 1:16. 
 Postcaler programável de 1:1, 1:4 ou 1:16. 
 Capacidade de ligar ou desligar o módulo. 
 Registrador de período (PR2). 
 Fornece a base de tempo do módulo CCP1 
 
 O timer2 possui dois sinais de saída: o primeiro é o sinal de transbordo 
do timer2 e serve de base de tempo para o módulo CCP1 e o segundo que 
consiste no mesmo sinal anterior, porem dividido pelo fator programado no 
postscaler, o qual aciona a flag de transbordo do timer2. 
 O registrador de período possibilita que se altere o valor de transbordo 
do timer2 ( de 255 para qualquer valor inferior a este). 
 
Registradores relacionados ao funcionamento do timer2 
 
 intcon – bits peie (habilitação da interrupções periféricas) e gie 
(habilitação geral das interrupções). 
 pir1– bit tmr2if (flag de transbordo do timer2) . 
 pie1– bit tmr2ie (habilitação da interrupção de transbordo do 
timer1). 
 tmr2– contém os oito bits do contador. 
 t2con– registrador responsável pela configuração do timer2. 
 pr2– registrador de período do timer2. 
 
Verificação do tempo de estouro. 
 
void main() 
{ 
 trisb.rb0=0; 
 portb.rb0=0; 
 t2con=0b01111111; // postscaler de 16 e prescaler de 16 
 pr2=255; // registrador de período com valor=255 
 pir1.tmr2if=0; // flag de estouro do timer2 
 while(1) 
 { 
 if(pir1.tmr2if==1) 
26 
 
 
Sistemas Microprocessados II Geraldo Ramos de Lelis 
 
 { 
 portb.rb0=~portb.rb0; 
 pir1.tmr2if=0; 
 } 
 } 
} 
 
 
3. Módulo CCP 
 
Trata-se de um periférico que permite ao programador, controlar e 
medir o tempo de diversos eventos. 
3.1. Captura 
3.2. Comparação 
3.3. PWM ( Pulse Width Modulation ) Modulação por largura de pulso