Page 1
Adsız
Standard

8051 Mikrodenetleyici Led Buton Örnekleri

Örnek 1: Port 1’in 0.bitine bağlı ledi yakan programın assembly kodunu yazınız.

Devre şeması aşağıdaki gibidir. Kullanılan malzemeler: AT89C51 mikrodenetleyici, kırmızı led , 330 ohm direnç ve topraklama (ground).

devreSemasi

Çıkışa baktığımızda ledin yanması için o bite lojik 1 (+5v) vermemiz gerekmektedir. Bunu da çeşitli yollarla yapabilmekteyiz.

MOV P1,#01h

MOV P1,#00000001b

SETB P1.1

Bu üç komutta aynı işlemi, Port 1’in 0.bitini 1 yapar. ilk 2 komut ile tüm port etkilenirken 3.komut ile sadece ilgili bit etkilenir. SETB komutu ilgili biti 1 yapar. CLRB komutu ise ilgili biti 0 yapar. tüm program aşağıdaki gibidir.

ORG 0H
MOV P1,#01H ;SETB P1.0
JMP $
END

JMP $ ile programın son satırda sürekli tekrar etmesi sağlanır. $ işareti satır başını göstermektedir.

 

Örnek 2: Port 1’in 0.bitine ve 1.bitine bağlı ledleri yakan programın assembly kodunu yazınız.

Devre şeması aşağıdaki gibidir. Kullanılan malzemeler: AT89C51 mikrodenetleyici, 2 x kırmızı led , 2 x 330 ohm direnç ve topraklama (ground).

devreSemasi

 

Bu devrede ise 2 adet led bulunmaktadir. Bit işlem yaparak 2 satırda yapabileceğimiz gibi, tüm porta bilgi gönderek tek komutla yapabiliriz.

MOV P1,#00000011B

MOV P1,#00000011B

SETB P1.0

SETB P1.1

SETB ile MOV komutu arasındaki fark ise; SETB komutu ile aktif olan bit sadece CLR komutu ile sıfırlanabilir. Porta aktarılan veri SETB komutu ile aktif yapılan biti değiştiremez. Tüm program aşağıdaki gibidir.

ORG 0H
SETB P1.3
MOV P1,#00000011B ;SETB P1.0 SETB P1.1, MOV P1,#3 , MOV P1,#03H
JMP $
END

Örnek 3: Port 1’in 0.bitine  bağlı ledli  Port 0’in 0.bitine bağlı anahtara göre yakan programın assembly kodunu yazınız.

Devre şeması aşağıdaki gibidir.

devreSemasi

 

Böyle uygulamalarda anahtarın ve ledin bağlantı şekline göre program kodu yazılırı. Devre şemasına baktığımızda port 0’da pull-up direnci ile bağlantı yapıldığını görmekteyiz. Pull up direnci girişi sürekli aktif seviyede tutmak için kullanılır. Butona basılmadıysa giriş “1” butona basıldıysa giriş “0” olacaktır. Ledin bağlantısına baktığımızda ise eğer porttan gelen veri “1” ise led yanacak “0” ise led sönecektir. Eğer butona basılmadan ledi yakıp, butona bastığımızda sönmesini istersek direk giriş bilgisini çıkışa aktarmalıyız. Tam tersi durumda ise gelen veriye mantıksal değil işlemi uygulamalıyız. Ben uygulamada direk giriş bilgisini ledin olduğu porta aktardım bu durumda butona basmaz isek led yanacak, bastığımızda ise sönecektir. Program kodu aşağıdaki gibidir.

ORG 0H
MOV P0,#0FFH
DONGU:
MOV P1,P0 ;SETB P1.0 SETB P1.1, MOV P1,#3 , MOV P1,#03H
JMP DONGU
END

Başlangıçta Port 0’i giriş olarak tanımlamak için tüm bitlerini 1 yaptık. Bu program sayesinde P0’daki bilgi direk olarak P1’e aktarılacaktır.

 

Eğer devre şeması aşağıdaki gibi olsaydı;

devreSemasiLEğer butona bastığımızda ledin yanmasını istiyorsak, programı değiştirmeden ledin bağlantısını bu şekilde yapabiliriz. Bu durumda ledin yanabilmesi için porttan “0” bilgisi gelmelidir. Anahtara bastığımızda porta “0” bilgisi gitmektedir. Bu bilgiyi de port 1 e gönderirsek ilgili led yanacaktır. Programı kodu yine aynı kalacaktır.

 

Tüm örneklerin proteus çizimleri ve keil projelerini buradan indirebilirsiniz.