Timer0 Timer1 Timer2 ADC Comparator Hepsi bir arada örnek uygulama.
timer0 zamanlayıcı , timer bir sayıcı, timer2 sabit frekans zamanlayıcı 133ms olarak sabitlendi
analog giriş ile voltaj ölçümü. Comparator iler 2.81 volt çıkışa ayarlandı.
#include<16f877a.h>
#device ADC=10
#fuses xt,nowdt,nodebug,nolvp
#use delay(clock=4m)
#define use_portd_lcd TRUE
#include <lcd.c>
unsigned long int data;
float voltaj;
int sayi,sure,kesme;
#int_timer0
void timer0_sure()
{
set_timer0(60);
sure++;
if(sure==40)
output_high(pin_b3);
if(sure==80)
{
output_low(pin_b3);
}
}
#int_timer1
void timer1_kesme()
{
set_timer1(65528);
sayi++;
setup_timer_0(rtcc_internal | rtcc_div_256);
if(sayi==255)
sayi=0;
}
#int_timer2
void timer2_kesme()
{
kesme++;
output_toggle(pin_b4);
}
void main()
{
set_tris_a(0xf0);
set_tris_e(0xff);
set_tris_c(0xff);
set_tris_b(0x00);
output_b(0x00);
output_c(0xff);
output_a(0x00);
setup_adc(adc_clock_div_32);
setup_adc_ports(all_analog);
setup_comparator(A0_A3_A1_A3);
setup_vref(VREF_A2 | VREF_HIGH | 10.8);
setup_timer_2(T2_DIV_BY_16,255,16);//(mod, periyod, postscale)
enable_interrupts(int_timer2);
enable_interrupts(int_timer0);
enable_interrupts(int_comp);
set_timer0(60);
setup_timer_1(t1_external | t1_div_by_2);
enable_interrupts(int_timer1);
enable_interrupts(global);
set_timer1(65528);
lcd_init();
while(true)
{
set_adc_channel(5);
data=read_adc();
voltaj=(data * 0.004888);
printf(lcd_putc,"\f\nGerilim: %.2f",voltaj);
delay_ms(500);
}
}
Hiç yorum yok:
Yorum Gönder
Her yorum bilgidir. Araştırmaya devam...