Ir ao conteúdo

Marcus Antonio Costa

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa noite, Sou novo aqui, técnico em eletrônica, um especialista em placas de circuito eletrônicos e gosto muito conhecer projetos em mikroc, peguei aqui um codigo na net em mikroc de um cronometro com hs min segundos e milessimos, mas quem postou o codigo não deu respostas as perguntas nas postagens, e assim dificultando estudo do projeto, este é o código, fiz a placa e funcionou perfeitamente,com pic 16f628a gostaria se alguém poderia me ajudar, o disparo do cronometro você tem que apertar o botao e soltar ai começa o cronometro, e para o cronometro parar tenho que apertar de novo e soltar o botão,, gostaria de saber se poderia iniciar o cronometro apertando o botão e ao solta lo o cronometro iria parar, certo que alguém possa me dar aprendizado nesse sentido fico grato desde já. sbit LCD_RS at RB6_bit; sbit LCD_EN at RB1_bit; sbit LCD_D4 at RB2_bit; sbit LCD_D5 at RB3_bit; sbit LCD_D6 at RB4_bit; sbit LCD_D7 at RB5_bit; sbit LCD_RS_Direction at TRISB6_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB4_bit; sbit LCD_D7_Direction at TRISB5_bit; sbit Zerar at PORTB.B7; unsigned MicroSegundos at TMR1L; typedef struct { char minutos; char segundos; unsigned mSegundos; }Cronometro; Cronometro Crono = {0,0,0}; //1us( contagem dos microsegundos ) void Timer1_Init() { T1CON = 0b00000000; //Prescaler 1:1 e stop } //1ms void Timer0_Init() { OPTION_REG = 0x81; //prescaler 1:4 TMR0 = 6; // (4/clock) * (256 - 6) * 4 = 1ms TMR0IE_Bit = 0; //stop } void Interrupt() { if( TMR0IF_Bit ) { TMR0IF_Bit = 0; TMR0 = 6; MicroSegundos = 0; Crono.mSegundos++; if( Crono.mSegundos >= 1000 ) { Crono.mSegundos = 0; Crono.segundos++; if( Crono.segundos >= 60 ) { Crono.segundos = 0; Crono.minutos++; if( Crono.minutos >= 99 ) { Crono.minutos = 0; } } } } else if( INTF_Bit ) // Iniciar/Pausar { INTF_Bit = 0; TMR0IF_Bit = 0; TMR0 = 6; TMR0IE_Bit = ~TMR0IE_Bit; TMR1ON_Bit = ~TMR1ON_Bit; } } void main() { char flag = 0; #define zerar_flag flag.B1 CMCON = 7; Lcd_Init(); Lcd_Cmd( _LCD_CURSOR_OFF ); Lcd_Out( 1, 5, " m s ms us" ); TRISB.B7 = 1; GIE_bit = 1; PEIE_Bit = 1; INTE_Bit = 1; MicroSegundos = 0; Timer0_Init(); Timer1_Init(); while(1) { if( Zerar ) zerar_flag = 1; if( !Zerar && zerar_flag ) { zerar_flag = 0; Crono.minutos = 0; Crono.segundos = 0; Crono.mSegundos = 0; MicroSegundos = 0; } Lcd_Chr( 2, 5, Crono.minutos/10 + '0' ); Lcd_Chr_CP( (Crono.minutos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( Crono.segundos/10 + '0' ); Lcd_Chr_CP( (Crono.segundos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( Crono.mSegundos/100 + '0' ); Lcd_Chr_CP( (Crono.mSegundos/10%10) + '0' ); Lcd_Chr_CP( (Crono.mSegundos%10) + '0' ); Lcd_Chr_CP(':'); Lcd_Chr_CP( MicroSegundos/100 + '0' ); Lcd_Chr_CP( (MicroSegundos/10%10) + '0' ); Lcd_Chr_CP( (MicroSegundos%10) + '0' ); } } cronometro.bmp

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...