ADI-SOYADI İmza TARİH 11.01.2016 Sınav Final
Transkript
ADI-SOYADI İmza TARİH 11.01.2016 Sınav Final
ADI-SOYADI ÖĞRENCİ NO S1. Şekilde görülen devrede 16F877’nin D portuna bir adet ortak anotlu 7-parçalı gösterge, RC1 pinine bir adet anahtar ve RC0 pinine ise bir adet buton bağlanmıştır. Anahtar ‘1’ konumunda iken devrenin 1,3,5,7,9 şeklinde tek sayıları, ‘0’ iken ise 0,2,4,6,8 şeklinde çift sayıları displayde göstermesi istenmektedir (çevrim tablosu kullanarak). Sayma işlemi butona her basılıp/bırakıldığında gerçekleşmelidir. İstenen çalışmayı sağlayacak programı sadece XC8 kodu ile yazınız (30 puan) #include <xc.h> #define SW RC1 #define BUTON RC0 const int A[]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0X82,0xF8,0x80,0x90}; void main(){ TRISD=0; TRISC0=1; TRISC1=1; PORTD=0; unsigned tek=1,cift=0; while(1){ while(BUTON); while(!BUTON); tek+=2; cift+=2; if(SW==1){ // tek sayılar if(tek>9) tek=1;// basa dön PORTD=A[tek]; } else{// cift sayılar if(cift>8) cift=0;// basa dön PORTD=A[cift]; } }//while sonu }//main sonu İmza TARİH 11.01.2016 SÜRE 80 dakika DERS ADI Mikroişlemciler Cevap kağıdı Fakülte Teknoloji Sınav Final NOTU S2. 16F877’nin TMR0 sayma girişine bir adet buton, PORTC ye ise transistörlü yapı üzerinden 4 adımlı bir unipolar step motor bağlanmıştır. Butona her 8 kez basıldığında step motoru tek faz tam adım sağa doğru bir tur döndüren uygulamayı TMR0 sayıcı kesmesi kullanarak sadece XC8 kodu ile yazınız. Not. Adımlar arası gecikme ihmal edilebilir.(30 p) include <xc.h> #define _XTAL_FREQ 4000000 unsigned char _adim[]={0b0010,0b0100,0b1000,0b0001}; void main() { unsigned char i=0; PORTC=0x00; TMR0=-8; TRISA=0x10; // RA4 giris yapılıyor TRISC=0x00; T0SE=0; // Düsen kenar tetikleme T0CS=1; // Harici osilatör PSA=1; // Prescaler WDT için PS2=0; // 1:2 bölüm değeri PS1=0; PS0=0; T0IF=0; T0IE=1; GIE=1; for(;;); } void interrupt kes(void) { if (T0IF) { for (int i=0; i<=4; i++) { PORTC=_adim[i]; //__delay_ms(100); } TMR0=-8; T0IF=0; } } Not. Soruları doğru anlamak sınavın bir parçasıdır. Sınav esnasında soru sormayınız! Her soruyu ayrılan alana cevaplayınız, İsteyenler Assembly dili komutlarını C dili içerisine (C dilinde çalışacak şekilde) gömerek programları yapabilirler. Ek kağıt kesinlikle kullanılmayacaktır, Başarılar dileriz… Yrd.Doç.Dr. Bülent ÇOBANOĞLU - Yrd.Doç.Dr. Faruk YALÇIN S3. PORTC nin 0. pinine bağlı butona basıldığında (butona basıldığında lojik 0 bilgisi gelmektedir), RE0/AN5 pininden gelen analog gerilimi dijitale çeviren ve çevrim sonucunun en düşük değerlikli 8 bitini SONUC isimli değişken/kaydedici üzerine yazdıktan sonra uygulamayı sonsuz döngüde bekleten XC8 dilinde verilen programın main fonksiyonunu uygun şekilde tamamlayınız. (15 puan) void main() { //gerekli TRIS ve PORT ayarları yapıldı ADCON1=0b10000000; ADCON0=0b01101001; int SONUC; while (RC0==1); //( (if li bir ifade bloguna da alınabilir) GO=1; while (nDONE==1); SONUC=ADRESL; while (1); } S5. Aşağıdaki boşlukları uygun şekilde doldurunuz (10 puan). a) Temel bir mikro denetleyicinin donanımsal yapısında CPU, giriş – çıkış (I/O) portları/birimleri, hafıza birimleri (ROM/RAM), saat darbe üreteci (osilatör) ….mutlaka yer alır. b) W kaydedicisini temizleyen kod satırını Assembly Komut/Komutları ile XC8 dilinde yazınız? #asm CLRW #endasm Veya asm ("CLRW"); // TEK SATIR ISE S4. 16F877’nin PORTD ve RB0-RB2 uçlarına şekildeki gibi bir 2*16 paralel LCD bağlanmıştır. LCD nin ikinci satır, üçüncü sütununa ‘A’ harfini yazan programın sadece lcdKomut() ve lcdYaz() fonksiyonlarını XC8 kodu ile yazınız. Not: Hazır fonksiyon kullanmayınız. (15puan) void lcdKomut() { PORTD=0xC3; RB0=0;//RS=0 RB1=0;//RW=0 RB2=1;//E=1 __delay_ms(2); RB2=0;//E=0 } void lcdYaz() { PORTD=‘A’; RB0=1;// RS=1 RB1=0;// RW=0 RB2=1;// E=1 __delay_ms(2); RB2=0;// E=0 }
Benzer belgeler
Deney 1 - WordPress.com
gerekmektedir. Artık Eğitim Seti kartı PC den bağımsız olarak çalışmaktadır.
12) Eğer Programı değiştirmek veya başka bir program yüklemek isterseniz, aynı tarzda
önce RESET‟e basıp hiç vakit geçir...
pic micro programlama
0: Taşma olazsa (ADD komutları ile değişir)
Bit0:C
1:8 bitten taşma olursa
0:Taşma olmazsa(ADD komutları ile değişir)
OPTION: