-yazdım demedim yazıldı-
16f877 için yazıldı arkadaş ayarladı sanırım o giriş voltaj değerlerini
oraya eklediğim resim var o şekilde çalışır mı acaba ? uygulama da
program bu arkadaş açıklamalı açıklamalı yazmış devreyi yap unuttuğum bir şey yoktur umarım çalışır dedi...
#include <16f877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor.
// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#int_RB // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void B_degisiklik () // Kesme fonksiyonu ismi
{
if (input(pin_b4)==0)// RB4 pini girişi okunuyor.
{
set_adc_channel(0); // AN0 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi1=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj1=(0.001953125*bilgi1); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital1=%lu",bilgi1); // AN0 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj1=%fV",voltaj1); // AN0 ucundaki sinyalin gerilim değeri
}
if (input(pin_b5)==0) // RB5 pini girişi okunuyor.
{
set_adc_channel(1); // AN1 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi2=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj2=(0.001953125*bilgi2); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital2=%lu",bilgi2); // AN1 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj2=%fV",voltaj2); // AN1 ucundaki sinyalin gerilim değeri
}
if (input(pin_b6)==0) // RB6 pini girişi okunuyor.
{
set_adc_channel(2); // AN2 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi3=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj3=(0.001953125*bilgi3); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital3=%lu",bilgi3); // AN2 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj3=%fV",voltaj3); // AN2 ucundaki sinyalin gerilim değeri
}
if (input(pin_b7)==0) // RB7 pini girişi okunuyor.
{
set_adc_channel(3); // AN3 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
bilgi4=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj4=(0.001953125*bilgi4); // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
printf("\fDijital4=%lu",bilgi4); // AN3 ucundaki sinyalin dijital karşılığı
printf("\nVoltaj4=%fV",voltaj4); // AN3 ucundaki sinyalin gerilim değeri
}
delay_ms(1000); // 1 sn gecikme veriliyor.
output_b(0xFF); // B portu çıkışı komple lojik1
}
unsigned long int bilgi1,bilgi2,bilgi3,bilgi4; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj1,voltaj2,voltaj3,voltaj4; // ondalıklı tipte voltaj isminde değişken tanıtılıyor
//********** ANA PROGRAM FONKSİYONU*******
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
enable_interrupts(GLOBAL); // Tüm kesmeler aktif
set_tris_b(0xFF); // B portu komple giriş
while(1) // sonsuz döngü
{
enable_interrupts(INT_RB); // RB çevrimi bitti kesmesi tanıtılıyor
}
}