quinta-feira, 11 de maio de 2017

Usando timer 0 com o CSS (por: Renato Lôbo Rodrigues)

           Olá pessoal que acompanha o blog, temos mais uma postagem do senhor Renato Lôbo,um programa escrito em C para compilador CCS, que faz piscar um LED usando o timer0 configurado pelos registradores, usando como referência o datasheet do PIC6F628A da Microchip.
http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf

lista de peças para montagem em bancada:
- matriz de contatos pequena
- pic16F628A, microcontrolador da Microchip
- resistor de 220 ohm para limitar a corrente do LED
- LED 3 ou 5 mm vermelho
- cabinhos para ligações dos componentes
- fonte de 5V, pode ser um carregador de celular ou suporte de 3 pilhas(4,5V)
A simulação:




foto do projeto:


O código fonte :

///////////////////////////////////////////////////////////////////////
//              Projeto: pisca-pisca usando timer0                   //
//                 Nome: Renato Lôbo Rodrigues                       //
//                 Data: 11/05/17                                    //
//                Email: lobosoft@oi.com.br                          //
///////////////////////////////////////////////////////////////////////
#include <16F628A.h>
#use delay (clock = 4Mhz)
//Configure os fusíveis em acordo com o pic selecionado
#fuses NOWDT
#fuses PUT
#fuses NOBROWNOUT
#fuses NOMCLR
#fuses INTRC_IO
#fuses PROTECT

#byte tris_portA = 0x85 //direção dos pinos do portA
#byte tris_portB = 0x86 //direção dos pinos do portB

#bit led1      = 0x05.0 //pino A0

//##############################################################################
#bit GIE           = 0x0b.7 //interrupção blobal
#bit TOIE          = 0x0b.5 //interrupção timer0
#bit TMR1ON        = 0x10.0 //interrupção timer1
#bit TMR2ON        = 0x12.2 //interrupção timer2

#byte tmr0         = 0x01   //preload do timer0

#byte OPTION_REG = 0x81    //registro no endereço 0x81 do banco1

//___________________________________________
//Rotina de interrupção do timer0
#int_rtcc
void rotina_t0()
{
   static int8 conta;
   conta++;               // conta 125 vezes o tempo do timer0(4ms) para completar 500 miliseguundos
   if (conta==125)      //125*4ms = 500ms => ciclo de 1 segundo
   {
      led1=~led1;       //inverte a saída ligando ou desligando o LED.
      conta = 0;
   }
   tmr0 = 6;            //inicia a contagem em 6 e vai até 256(onde estoura)
}
//___________________________________________
//Rotina principal
void main()
{
   //pinos configurado como entrada por segurança  (alta impedância)
   tris_portA = 0b11111110; //todos os pinos do portA como entrada exceto pino A0 como saída
   tris_portB = 0b11111111; //todos os pinos do portB como entrada
   
   led1 = 1;       //Acende o led1

   //registro configurado para 4 milisegundos(veja pagina 25 do datasheet)
   OPTION_REG = 0b10000011;//1   = pull-up desabilitado
                           //0000= deixe tudo zero como padrão
                           //011 =prescaler dividido por 16

   tmr0 = 6;                        //preload do timer0 para 4ms
   GIE = 1;                         //interrupção global ativa
   TOIE = 1;                        //interrupção timer0 ativa
   TMR1ON = 0;                      //desabilita timer1
   TMR2ON = 0;                      //desabilita timer2
  

   while(true)     //laço infinito
   {
     
   }
}

Nenhum comentário :

Postar um comentário

olá,digite aqui seu comentário!