perçin
Üye
Kod:
#include "E:\ccs_elektrik\rpm_lcd_1.h"
//************************ (R-P-M) irfan perçin ************************
#fuses HS,PROTECT,NOWDT,NOPUT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#include <math.h>
#use delay(clock=4000000)
#include <lcd_4.c> //sizde <lcd.c> kullanabilirsiniz(doya içerisindeki pin ayarı yapmak gerekiyor)
#define HASSASIYET 50 // ( 50)Kac milisaniyede bir rmp hesabı yapılacak
int32 numPulses = 0;
int32 rpm = 0;
int32 cntTimerInt = 0;
#int_EXT
void ext_kesmesi()
{
numPulses++;;
}
#int_timer0
void timer0_kesmesi()
{
cntTimerInt++;
if(cntTimerInt == HASSASIYET / 2) // ( 2 )[HASSASIYET / 10ms] tane kesme gelince rpm'yi guncelle
{
rpm = numPulses * (50 / HASSASIYET) *60; // (50 / HASSASIYET)*60 ;
numPulses = 0;
cntTimerInt = 0;
}
set_timer0(100); // "RTCC_DIV_256 ve kristal 20MHz" oldugunda 13.1 mili saniyede bir kesme veriyor. (100)
} // Eger set_rtcc(60) denirse kesmeler
#inline
void lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"RPM=");
//--------------------------------
lcd_gotoxy(12,1);
printf(lcd_putc,"dk/dv");
//-------------------------
lcd_gotoxy(6,1);
printf(lcd_putc,"lu" rpm);
//----------------------------------
lcd_gotoxy(3,2);
printf(lcd_putc,"PERCIN ELEK.");
}
#inline
void main()
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); //20Mhz'de 13.1ms de kesme verir
ext_int_edge(L_to_H);
enable_interrupts(INT_EXT);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
lcd_init();
for(;)
{
lcd();
}
}
Moderatör tarafında düzenlendi: