main (void)
{
const float lsb = 5000.0/1024.0
float mv, sabtigrat, fahrenheit;
unsigned int sıcaklık ;
trisb =0;
trisa = 3;
ADCON1=0x8E;
ADCON0 = 0x41;
FOR (;;)
{
ADCON0=0x45
while((adcon0&4)!=0);
sicaklik=ADRESH;
sicaklik=256 sicaklik+ADRESL;
mc=sicaklik lsb
santigrat=mv/10.0
fahrenheit=1.8 santigrat+32;
If(mod==1)
portb = (ınt)santrigrat;
else
PORTB=(ınt) fahrenheit;
delay ms(250)
bu yazdıklarımı satır satır ne işe yaradığını ve genel olarak ne iş yaptığını yazabilirmisiniz ?
arkadaşalr bu komutlardan yarın sınava girecem biri bunların cevabını yazarsa Allah razı olsun. ben cevabını çok aradım ama pek azını yapabildim.
C konusma dili gibidir. Basit programlari anlamak icin cok az ingilizce bilmen yeterlidir.
Nasil okunuyor soyleyeyeyim.
ADCON0=0x45
ADCON0 a 45 Hex sayisini yukle
while((adcon0&4)!=0);
adcon degerini 4 ile and islemi yaptiginda, sonuc sifirdan farkliysa bekle.
Yani adcon un 4 agirlikli biti 0 oluncaya kadar bekle.
PORTB=(ınt) fahrenheit;
Fahreneit degiskeninin icinde tuttugu veriyi integer varsay ve PORTB ye yaz.
Gibi.....
16F877'ye göre
main (void) // ana fonksiyon
{
const float lsb = 5000.0/1024.0 // ADC'nin 1LSb değeri hesaplanmış ve lsb değişkenine atılmış
float mv, sabtigrat, fahrenheit; // ondalıklı değişkenler tanımlanmış
unsigned int sıcaklık ; // işaretsiz tam olarak sıcaklik değişkeni tanımlanmış
trisb =0; // B portu komple çıkış yapılmış
trisa = 3; // A portunun RA0 ve RA1 pinleri giriş yapılmış
ADCON1=0x8E; // ADC ayarları= ADC sonucunu sağa dayalı olarak yaz ve RA0 analog uç, Vref+ ucu Vdd'ye bağlı, Vref- ucu Vss ye bağlı
ADCON0 = 0x41; //ADC Ayarları= ADC çalışma frekansı fosc/8, AN0 pinini analog giriş için seç, ADC modülünü aç
FOR (;;) // sonsuz döngü
{
ADCON0=0x45 // ADC çevrimine başla
while((adcon0&4)!=0); // ADC meşgul değil ise
sicaklik=ADRESH; // sıcaklik değişkenine ADC'den okunan değerin düşük byte değerini yaz
sicaklik=256 sicaklik+ADRESL; // Bu komutta bisorun var "256 sicaklik" komutunda 256 ile sıcaklık arasında bir operatör olmalı
mc=sicaklik lsb // Bu komutta bisorun var "sicaklik lsb" komutunda sıcaklık ile lsb arasında bir operatör olmalı
santigrat=mv/10.0 //okunan değeri santigrat olarak hesapla ve santigrat değişkenine at
fahrenheit=1.8 santigrat+32; //okunan değeri fahrenat olarak hesapla ve fahrenheit değişkenine at
If(mod==1)
portb = (ınt)santrigrat; // Eğer mod değişkeni 1 ise b portuna santrigrat değerini gönder
else
PORTB=(ınt) fahrenheit; // Eğer mod değişkeni 1'e eşit değilse b portuna fahrenheit değerini gönder
delay ms(250) // 250 ms bekle
Allah razı olsun kardeş valla çok makbule geçti eyw :)