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

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...

Detaylı

pic micro programlama

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:

Detaylı