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