DESIGN AND IMPLEMENTATION OF AN 8051 …
Transcript of DESIGN AND IMPLEMENTATION OF AN 8051 …
Politeknik Dergisi Journal of Polytechnic
Cilt: 5 Sayı: 3 s. 195-207, 2002 Vol: 5 No: 3 pp. 195-207, 2002
195
8051 AİLESİ MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI VE
GERÇEKLEŞTİRİLMESİ
Ömer Faruk BAY, Salih GÖRGÜNOĞLU
Gazi Üniversitesi Teknik Eğitim Fakültesi Elektronik ve Bilgisayar Eğitimi Bölümü
06500 Teknikokullar, ANKARA
ÖZET
Günümüzde mikrodenetleyici adı verilen işlemciler yaygın olarak bir çok alanda kullanılmaktadır. Çok sayıda analog ve
sayısal tümleşik elemanlar kullanılarak gerçekleştirilebilecek devre tasarımları tek bir mikrodenetleyici ile yapılabilmektedir.
Mikrodenetleyici kullanılarak yapılan devreler daha az yer kaplamaktadır. Harici donanım elemanları ile yapılan işler
mikrodenetleyici kontrol yazılımı ile yapılabilmektedir. Böylece donanımda değişiklik yapmadan sadece yazılımı değiştirerek
aynı cihaz üzerinde farklı işlemler yapma imkanı sunulmaktadır. Bu yüzden mikrodenetleyicilerin öğrenilmesi ve öğretilmesi
lisans eğitiminde büyük önem arz etmektedir. Bu çalışmada mikrodenetleyicilerin öğrenilmesini kolaylaştırmak ve deneysel
çalışmalarda kullanabilmek için genel amaçlı bir mikrodenetleyici eğitim seti tasarlanmış ve gerçekleştirilmiştir. Deney setinin
kullanımı ile ilgili örnek yazılımlar verilmiş, setin kullanımına yönelik bilgisayar ortamında bir arayüz yazılımı da yapılmıştır.
Böylece mikrodenetleyicinin ve eğitim seti içinde yer alan modüllerin daha iyi anlaşılması sağlanmıştır.
Anahtar Kelimeler : 8051 Mikrodenetleyici, RS232 Seri port, C++ Builder
DESIGN AND IMPLEMENTATION OF AN 8051 MICROCONTROLLER
EDUCATIONAL SET
ABSTRACT
In recent years, the processors which is called microcontroller have been used in many areas. The implementation of
circuit design by using a lot of integrated analog and digital element could be done using only one microcontroller. The design
that uses microcontroller require less board area. Because many tasks which is implemented using extra hardware elements are
performed by software. Thus, several processes can be implemented on a microcontroller by software without changing
hardware parts. So, learning and using microcontrollers are very important concept for undergraduate education in electrical
engineering and computer engineering. This paper presents an educational set specifically designed for teaching and learning the
8051 family microcontrollers. Control software and related information for using of educational set was given, and a computer
interface program related to use different module in educational set was prepared. Thus, understanding the microcontroller and
the modules in the educational set was made easy.
Keywords: 8051 microcontroller, RS232 serial port, C++ Builder
1. GİRİŞ
Mikrodenetleyiciler elektronik devre tasa-
rımlarında denetleme elemanı olarak çok yaygın
kullanıma sahip tümleşik elemanlardır. Bünyele-
rinde zamanlayıcı, sayıcı, giriş çıkış portları,
analog sayısal çevirme ünitesi, RAM bellek, ROM
bellek, PWM darbe üreteci, seri haberleşme bi-
rimi, ALU vb. birimler bulundururlar. ROM bel-
lek içinde kullanıcı tarafından yazılıp yerleştirilen
kontrol programı sayesinde sözü edilen birimler
çalıştırılır ve istenen işler yerine getirilir.
Mikrodenetleyici, ALU sayesinde matematiksel
işlemler yapabilme ve işlem sonuçlarını mantıksal
olarak değerlendirip karar verme yeteneğine de sa-
hiptir (1-4). Bu sayede donanımda değişiklik yap-
madan sadece mikrodenetleyicinin işleyeceği yazı-
lımı değiştirerek, değişik işlerin yapılması sağlana-
bilmektedir. Bu ise tasarımcıya büyük bir kolaylık
ve devre tasarımında esneklik sağlamaktadır. Ay-
rıca donanım maliyeti de oldukça azalmakta, yer
tasarrufu sağlanarak daha küçük boyutlu cihazların
yapılmasına imkan sağlanmaktadır.
Günümüzde tümleşik elemanlar üreten bir-
çok firma (Intel, Atmel, Michrochip, Texsas
Instrument, National Semiconductror vb.) değişik
özelliklere sahip mikrodenetleyiciler üretmekte-
dirler. Mikrodenetleyiciler birbirlerinden sahip ol-
dukları üniteler(ADC, PWM, Zamanlayıcı, vb),
Giriş/Çıkış bacak sayıları, çalışma hızları, bellek
kullanım şekilleri açılarından farklılıklar arz et-
mektedirler. Devre tasarımları yapılırken özellikle
maliyet açısından amaca en uygun mikrodeneteyici
bu özellikler göz önünde bulundurularak seçilmek-
tedir.
Mikrodenetleyicilerin çok yaygın olarak
kullanımı bu konunun lisans eğitiminde ağırlıklı
olarak verilmesini gerektirmektedir. Bu dersin ve-
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
196
rilmesinde ise hem donanım hem de yazılım kıs-
mının birlikte koordineli bir şekilde verilmesi bü-
yük önem arzetmektedir. Bunun için mikrodenet-
leyicinin öğrenilmesini kolaylaştırmaya yönelik bir
çok çalışma yapılmaktadır (5-11). Yapılan bu ça-
lışmaların çoğu simülatör çalışması olduğundan
öğrencinin bir bütün olarak mikrodenetleyici ta-
banlı bir sistemi tasarlayıp sonrada fiziksel olarak
gerçekleştirmesi mümkün olmamaktadır. Yapılan
çalışmaların bir kısmı ise ticari geliştirme bordları
kullanılarak labaratuvarda yapılan deneysel çalış-
maların verimli hale getirilmesine yöneliktir.
Ticari geliştirme bordları ise gelişmekte olan
ülkelerdeki okullar için pahalı seçimlerdir. Bu
çalışmada ise bir mikrodenetleyicinin hem
donanım hem de yazılım olarak öğrenilmesini
kolaylaştırmaya yönelik modüler yapıda bir eğitim
seti tasarlanmakta ve gerçekleştirilmektedir.
Eğitim setinin maliyeti ticari geliştirme
bordlarından oldukça düşük ve modüler yapıda
tasarlandığı için de geliştirmeye açıktır.
8051 mikrodenetleyici seçilmesinin sebebi
ise, bu mikrodenetleyici endüstriyel uygulamalarda
çok yaygın olarak kullanılmakta ve basit bir mima-
riye sahip bulunmaktadır. 20 den fazla birbirinden
bağımsız 8051 tabanlı eleman satan firma ve 12
den fazla bu mikrodenetleyici ile ilgili ders kitabı
bulunmaktadır (6). Bu mikrodenetleyiciye ait te-
meller öğrenildikten sonra bunlar diğer mikrode-
netleyicilere veya daha karmaşık mimarilere
kolaylıkla aktarılabilir.
Bu makalede, eğitim ve öğretim için düşük
maliyetli bir mikrodenetleyici eğitim setinin tasa-
rımı ve gerçekleştirilmesi sunulmaktadır. 2. bö-
lümde mikrodenetleyicinin yapısı anlatılmaktadır.
3. bölümde mikrodenetleyici eğitim setinin nasıl
tasarlandığı ve gerçekleştirildiği detaylı bir şekilde
sunulmaktadır. 4. bölümde bilgisayar seri haber-
leşme portunun nasıl kullanılacağı anlatılmaktadır.
5. bölümde ise mikrodenetleyici seti ile bilgisaya-
rın haberleşmesini sağlayan bilgisayar arayüz ya-
zılımı tanıtılmaktadır.
2. MİKRODENETLEYİCİNİN YAPISI
Eğitim setinin nasıl tasarlandığına geçmeden
önce mikrodenetleyicinin bazı önemli özellikle-
rinin bilinmesi gerekmektedir. Bunlar kesme
(Interrupt) kullanımı, zamanlayıcı kullanımı ve
özel fonksiyon kaydedicileridir.
2.1. Zamanlayıcı ve Sayıcı yapıları
Zamanlayıcı/Sayıcılar iç veya dış kaynaklı
bir zaman periyodunu ölçmek için veya olayları
saydırmak için kullanılır. Girişe uygulanan bir dar-
benin genişliğinin veya frekansının ölçülmesi buna
örnek olarak verilebilir. 8051 ürünlerinin çoğunda
iki adet 16 bitlik zamanlayıcı (T0, T1) ve her za-
manlayıcı için iki tane özel fonksiyon kaydedicisi
(Special Function Register-SFR)vardr. Bunlar T0
için TH0 ve TL0, T1 için TH1 ve TL1 dir. Bu se-
kiz bitlik zamanlayıcılar birleştiklerinde 16 bitlik
zamanlayıcıyı oluştururlar. Çalışma esnasında her
giriş darbesinde bir veya iki SFR deki sayma de-
ğeri bir artırılır. Şekil 1’de zamanlayıcının yapısı
görülmektedir.
Şekil-1. Zamanlayıcı/sayıcının yapısı
Zamanlayıcı/sayıcı zamanlayıcı durumunda
iken makine periyodunu sayar. Makine periyodu
saat frekansının 1/12 sidir. Sayıcı durumunda ma-
kine periyoduna bağlı olarak P3.4(T0) veya P3.5
(T1) dış giriş ucundan örnek alır. Giriş uçlarının 1
den 0’a geçişlerinde saklayıcının değeri 1 artar. Bir
sonraki örnekleme için bir makine periyodunun
geçmesi gerekir. Bu yüzden örnekleme frekansı
osilatör frekansının 1/24 üne eşittir. Daha yüksek
frekanslarda hatalı sayımlar oluşur. Zamanlayıcı
sayıcı ayrıca sayma değeri taştığında bir kesme
üretir. Bunun için ilgili kesme bayrağı yetkilendi-
rilmesi gerekir. Zamanlayıcı/sayıcı TMOD ve
TCON kaydedicileri programlanarak kullanılırlar.
Şekil 2’de TMOD ve TCON Kaydedicileri ve iş-
lev tanımlamaları görülmektedir.
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
197
Şekil -2. TMOD ve TCON kaydedicileri
TMOD ilk 4 biti Zamanlayıcı-0 ve ikinci 4
biti Zamanlayıcı-1 ayarlamak için kullanılır.
GATE=1 olduğunda Zamanlayıcı x’in INTx dış
kesmesinin 1 olması yeterlidir. C/T zamanlayıcı
veya sayıcı seçme bitidir. Zamanlayıcı olarak
çalışacaksa bu bit 0 yapılır. Bu durumda sistem
saatini sayar. Eğer bu bit 1 yapılırsa harici Tx
bacağından gelen darbeleri sayar.
M1 ve M0 bitleri 4 çalışma modundan birini
seçer. Mod 1 seçildiğinde 16 bitlik sayma yapar
yani TH ve TL nin mevcut değerlerinden
başlayarak 65535(FFFF) değerine kadar sayar. Bu
değere ulaştığında kesme üreterek TFx bayrağını
set eder. Zamanlayıcıyı çalıştırmak veya
durdurmak için TCON kaydedicisindeki TRx
bitlerinden yararlanılır(4).
2.1.1 Zamanlayıcı ile zaman gecikmesi
yapmak
Zamanlayıcı THx ve TLx kaydedicisinin
birlikte oluşturduğu değerden itibaren 65535
değerine kadar sayar. Bundan yararlanarak istenen
zaman gecikmesi sağlanabilir. Örnek olarak 50
ms’lik bir zaman gecikmesi istensin. Sistem saat
frekansı 11.0592 MHz olsun bunun için şu sıra
izlenir.
Sayıcı saat frekansı =Sistem saat frekansı /12
=11.0592/12
=921.6 Khz
Her sayma için geçen
zaman =1/sayıcı saat frekansı
=1/921.6Khz
=1.085 s
Gecikme için sayma Sayısı
= Gecikme zamanı/Her sayım
için geçen zaman
= 50ms/1.085 s
=46080
THx ve TLx kaydedicilerine yüklenecek değer
Ön yükleme sayısı = 65536-Gecikme için sayma
sayısı
= 65536-46080
= 19456=4C00H
Dolayısı ile THx=4C ve TLx=00 değerleri
onaltılık olarak yüklenip zamanlayıcı çalıştırıldı-
ğında 50 ms lik gecikme sağlanacaktır
2.2. Kesmelerin Kullanımı
Mikrodenetleyici özellikle giriş çıkış işlem-
lerinde bir porttan değer gelip gelmediğini sürekli
kontrol etmek zorunda kalır. Bu ise sürekli olarak
mikrodenetleyiciyi meşgul ederek diğer işleri ak-
satabilir. Bunu önlemek için kesmelerden yararla-
nılır. Mikrodenetleyici bir işle meşgul iken kendi
işini bırakarak çevre birimlerden gelen isteğe ce-
vap vermesi ve daha sonra işine kaldığı yerden de-
vam etmesine kesme (interrupt) denir. Çevre bi-
rimler isteklerini mikrodenetleyiciye kesme girişle-
rine sinyal göndererek veya bazı kaydedicilerdeki
bitleri set ederek iletirler.
Tablo-1. 8051 kesme adresleri
8051 in beş adet kesme üreten kaynağı vardır.
Bunlardan iki tanesi harici diğerleri dahilidir. Bir
kesme geldiğinde işlemci derhal işini bırakıp gelen
kesme kaynağına göre kesme vektör adresine
dallanır. Burada kesme hizmeti için 8 baytlık bir
yer ayrılmıştır. Eğer bu adres alanı hizmet görecek
alt programın yazılımı için yeterli ise alt program
buraya yazılır. Eğer yeterli değilse kesme alt
programına bu adrese konulan bir LJMP komutu
ile gidilip RETI komutu ile dönülür.
Mikrodenetleyicili sisteme güç verildiğinde veya
RESET kesmesi üretildiğinde mikrodenetleyici
0000H adresine dallanarak buradaki ilk komutu
işlemeye başlar. Tablo 1’de kesmeler ve kesme
vektör adresleri görülmektedir(1). C derleyicisi
kesme olaylarını kendisi yönetmektedir.
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
198
Şekil-4 Mikrodenetleyici ana kart modülü devre şeması
3. MİKRODENETLEYİCİ EĞİTİM SETİNİN
TASARIMI
Mikrodenetleyici eğitim seti, Şekil 3’deki
genel blok şemada görüldüğü gibi, mikrode-
netleyici ana modülü, analog/sayısal çevirici
modülü (ADC), LCD ve LED modülü, step motor
sürme modülü, tuş takımı modülü olmak üzere beş
modülden meydana gelmektedir. Bilgisayar ara
yüz yazılımı C++ Builder görsel programlama dili
kullanılarak, mikrodenetleyici modülleri kontrol
yazılımları ise 8051 mikrodenetleyicisi için
geliştirilen standart C derleyicisi kullanılarak
gerçekleştirilmektedir.
Şekil-3. Eğitim setinin genel blok şeması
3.1 Ana kart modülü
Eğitim setinde yer alan anakart modülünde
AT89LV52 mikrodenetleyici kullanılmıştır ancak
8051 uyumlu ve 40 bacaklı DIP şeklindeki diğer
işlemcilerde kullanılabilir. Anakart üzerinde
mikrodenetleyicin tüm uçları kullanım esnekliği
sağlamak için konnektörlerle dışarı çıkarılmıştır.
Mikrodenetleyicinin saat sinyalini sağlamak için
11 MHz.’lik kristal kullanılmıştır. Ayrıca anakart
üzerinde seri haberleşme yapabilmek için seri ha-
berleşme birimi(RS232) eklenmiştir. Bu modülde
seri haberleşme için ICL232 tümleşik devresi kul-
lanılmıştır. Şekil-4 de anakart modülünün devre
şeması verilmektedir. Devredeki S1 anahatarı
mikrodenetleyiciyi resetlemek için kullanılmakta-
dır. Ayrıca mikrodenetleyicinin P0 portuna 4.7 k’
lık pul up dirençleri, P0 portunun yapısı gereği ko-
nulmuştur. Diğer portlara pull up dirençleri koy-
maya gerek yoktur.
3.2. Tuş takımı Modülü
Şekil-5 de görülen tuş takımı devresinde
74C922 kod çözücü tümdevresi kullanılmıştır. Bu
tümdevrenin tuşların bağlandığı satır ve sutun
girişleri ile bir kesme çıkışı ve veri çıkış portları
vardır. Herhangi bir tuşa basıldığında 74C922
tümdevresi basılan tuşu satır ve sütunları tarayarak
bulmaktadır. Veri çıkış uçlarına tuşun onaltılık
sayı kodunu yerleştirir ve tuş kodunun hazır
olduğunu belirtmek için DA çıkış ucunu belli bir
süre(yaklaşık 100ms) aktif yapar. Daha sonra
tekrar mantıksal 0 değerine çevirir. 74C922 kod
çözücü entegresinin DA çıkışının kullanımı ile
kesme üretilerek tuş kodlarının işlemciye
gönderilmesi sağlanır. Mikroişlemci kesme
girişleri mantıksal 0 da aktif olduğundan bu
tümdevrenin çıkışına bir transistör konularak
değilleme işlemi yapılmıştır.
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
199
Şekil-5. Tuştakımı modülü devre Şeması
3.2.1 Mikrodenetleyici tuştakımı
yazılımı
Aşağıda 8051 mikrodenetleyicisi için C
derleyicisi ile yapılan tustakımı devresi için örnek
yazılım formatı verilmektedir. C derleyicisi
kesmelere kendisi bir kesme numarası vererek
kullanmaktadır. INT0 harici kesmesinin numarası
0, Seri haberleşme kesme numarası 4 dür. Bu
bilgiler kullanılan C derleyicisinin kullanım
kılavuzundan öğrenilebilir(12).
#include<AT89X52.h> /* tanımlı register isimlerini
kullanabilmek için gerekli header dosyası*/
#include<intrins.h> /*_nop_; komutunu
kullanabilmek için gerekli header dosyası*/
Tuş takımını kullanabilmek için gerekli değişken
tanımlamaları sfr TUSPORTU=0x90 ; /* P0 portunun
P2.0,P2.1,P2.2,P2.3 port uclari tus takimi data girisi*/
unsigned char idata tuskodu;
Bir tuşa basıldığında tuş takımı INT0 girişine bir
sinyal gönderir. Bu sinyal kesme girişinden
aşağıdaki alt program ile algılanır. void EXT0(void) interrupt 0 /* 74c922 int0 kesme
girişini kullanmaktadır*/
{
EX0=0; /*INT0 yetkisiz*/
TUSPORTU=0xff; /*tuspotunu giriş olarak
ayarla*/
tuskodu=TUSPORTU; /*tuş kodunu oku*/
tuskodu=tuskodu & 0xf0; /*MSB 4 bite 74922 nin data
hatları bağlı olduğundan LSB 4 bit maskelendi*/
switch(tuskodu) /*tus koduna göre işlem
yap*/
{
case 0x00:/*Komutlar*/;break;
case 0x10: /*Komutlar*/;break;
case 0x20: /*Komutlar*/;break;
case 0x30: /*Komutlar*/;break;}
EX0=1;/*INT0 tekrar yetkili*/}
3.3. LCD ve LED Modülü
Devre tasarımında işlem sonuçlarını veya
istenen mesajları görmek için yedi segment LED
gösterge elemanlar veya LCD göstergeler
kullanılmaktadır. LED gösterge sadece sayısal
değerler ve birkaç karekter gösterebilmektedir.
Buna karşılık LCD göstergeler ile her türlü yazı ve
sayısal değeri göstermek mümkündür. Kontrolleri
yazılımla daha kolaydır. Bu yüzden uygulamalarda
LCD göstergeler daha çok tercih edilirler. LCD ler
çeşitli firmalar tarafından üretilmesine rağmen
kontrolleri standartlaşmıştır. Tüm LCD
göstergelerde yetki (Enable), oku yaz(R/W), ve
kaydedici seç(RS) uçları ile veri giriş hatları
vardır. Şekil 6’da LCD göstergenin blok şeması
görülmektedir.
Şekil -6 LCD iç yapısı
LCD göstergeler karakter ve satır sayısı
olarak çeşitli seçenekler sunarlar. LCD göstergeler
karakterlerin kodlarını saklayabilmek için bir
dahili RAM bulundururlar. Bu RAM’a Gösterge
Veri RAM’ı (Display Data RAM) adı verilir. Bir
satırında 16 karakteri olan 2 satırlık bir göstergeyi
her bir satırında 40 karakteri olan 2 sanal satır
olarak düşünmek mümkündür. Ancak bir anda 40
karakterden 16 sı görülebilmektedir. Kalan
karakterler ancak kaydırma işleminden sonra
görülebilirler. arzu edilen herhangi bir noktaya bir
karakter yazdırılmak istenirse önce DDRAM
adresi seçilmeli ve daha sonra karakter kodunun
buraya yazılması gerekmektedir(2). LCD gösterge
modülünde aynı zamanda 8 adet LED ışık da
yerleştirilmiştir. Böylece LED ışıklarla da değişik
uygulamaların yapılması sağlanmıştır.
3.3.1. LCD Kontrol İşlemleri
LCD göstergeye gönderilen veri ya bir
komut kodu veya bir karakterdir. LCD
göstergelerde ekranın temizlenmesi, imlecin başa
alınması , DDRAM adresinin seçilmesi, resetleme
gibi komut işlemleri vardır. Bunun için LCD ye
gönderilen verinin komut mu yoksa ekranda
gösterilecek bir karakter mi olduğu belirtilmelidir.
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
200
Şekil-.7’de LCD göstergeye yazma işlemine ait
zamanlama diyagramı görülmektedir. RS (Register
Select) ucu düşük seviyeye çekilirse yapılacak
işlem bir kontrol işlemidir. Eğer yüksek seviyede
tutulursa gönderilen bir komut değil karakterdir.
Şekil 7. LCD göstergeye yazma işlemine ait
zamanlama diyagramı
3.3.2. LCD komutları
Burada en çok kullanılan LCD komutları
anlatılacaktır.
Fonksiyon belirleme(Function Set) : Bu
komut ile veri yolunun büyüklüğü göstergedeki
satır sayısı ve font büyüklüğü belirlenir.
Göstergeyi kapat/aç (Display off/on) : LCD
göstergeyi açmak yada kapatmak için kullanılır.
Göstege kapalı iken DDRAM daki veriler korunur.
Göstergeyi temizle(Clear Display):
Göstergenin temizlenmesi DDRAM daki her
hücreye boşluk(20H) karakterinin yazılmasını ve
imlecin sol baştan göstergenin ilk karakterine
konumlanmasını sağlar.
İmleci kaydır(Shift Display): İmleci veya
göstergeyi sola veya sağa kaydırmak için
kullanılır.
İmleç Başa (Cursor Home) : İmleci en sola
ve en üst satıra konumlandırır.
Giriş Kipi(Entry mode) : Giriş kipi her
karakter okuma veya yazma işlemini takiben,
imlecin veya göstergenin işlemini belirler. En çok
kullanılan işlem modu, göstergenin o anki
değerlerinin korunarak imlecin bir sağa
kaydırılmasıdır. Bu düzenleme ile bir sonraki
karakter o anki konumun bir sağına yazılır
Şekil-8’de LCD Modül devre şeması ve
LED modül devre şeması görülmektedir
(a) (b)
Şekil-8 a) LCD Modül devre şeması
b) LED modül devre şeması
3.3.3. LCD ve LED yazılımı
Mikrodenetleyici LCD ve LED denetimi
için yapılması gereken değişken tanımlamaları şu
şekildedir.
#include<AT89X52.h> /* tanimli register isimlerini
kullanabilmek için gerekli header dosyası*/
#include<intrins.h> /*_nop_; komutunu
kullanabilmek için gerekli header dosyası*/
sfr LCD_DATA=0x80; /* LCD VE ADC verisi* P0
portu uçlari*/
sbit LCD_RS=0xa7 ; /* LCD ekran RS ucu P2.7
port ucu*/
sbit LCD_RW=0xa6 ; /* LCD ekran Read/Write
ucu P2.6 port ucu*/
sbit LCD_E=0xa5 ; /* LCD ekran Enable ucu
P2.5 port ucu*/
sfr LEDDATA=0x80 ; /* P1 portu ayni zamanda
LED leri yakmak için de kullaniliyor*/
unsigned char idata leddegeri;
LCD kontrolü için gerekli alt programlar aşağıda
verilmektedir.
/*-Gecikme alt programı--*/
void DELAY(unsigned int x)
{unsigned int data j;
for(j=0;j<x;j++) {_nop_;_nop_;}}
/*Enable darbesi üretme alt programı*/
void CLOCK()
{
LCD_RW=0;LCD_E=0;DELAY(1);
LCD_E=1;DELAY(1);LCD_E=0;
}
/*-LCD resetleme alt programı */
/*function set 3c, display on 0c, clear display 01, entry
mode 06, cursor home 02 */
void RESETLEME()
{
LCD_RS=0;LCD_DATA=0x3c;
CLOCK();DELAY(18000);
LCD_RS=0;LCD_DATA=0x3c;
CLOCK();DELAY(400);
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
201
LCD_RS=0;LCD_DATA=0x3c;
CLOCK();DELAY(400);
LCD_RS=0;LCD_DATA=0x3c;
CLOCK();DELAY(200);
LCD_DATA=0x0c; CLOCK();DELAY(200);
LCD_DATA=0x01; CLOCK();DELAY(8000);
LCD_DATA=0x06; CLOCK();DELAY(200);
}
/*--LCD data gönder alt programı-- */
void DATA_GONDER()
{
LCD_DATA=ACC;LCD_RS=1;CLOCK();
}
/*--LCD imleç konumlandırma-- */
/*128 line1 ,136 line2,192 line3, 200 line4 */
void LINE(unsigned char y)
{
LCD_DATA=y;LCD_RS=0;CLOCK();
}
/*Girilen bir sayıyı LCD göstergeye yazan alt
program*/
void DISPLAY(unsigned int x)
{
unsigned int data sayi;
unsigned char data s2,s1,s0;
sayi=x;
s2=sayi/100;
sayi=sayi%100;
s1=sayi/10;
sayi=sayi%10;
s0=sayi;
ACC=s2+48;DATA_GONDER(); /* s2 rakamı LCD
displayde görünür*/
ACC=s1+48;DATA_GONDER();
ACC=s0+48;DATA_GONDER();
}
/*Girilen bir sayıya göre LCD göstegeye mesaj yazan
altprogram*/
unsigned char code msg0(16)="GAZI UNV. ";
unsigned char code msg1(16)="TEK. EGT. FAK. ";
void MESAJ(unsigned char x)
{unsigned char i;
LINE(128);
for(i=0;i<=15;i++)
{switch (x)
{ case 0:ACC=msg0(i);DATA_GONDER();break;
case 1: ACC=msg1(i);DATA_GONDER();break;
}
}
}
/*LEDleri sağa veya sola yakan alt program*/
void LEDLER(unsigned char x)
{
unsigned char direction;
direction=x;
switch(direction)
{
case 0:
LEDDATA=~(leddegeri);
leddegeri=leddegeri >> 1;
if(leddegeri<=0) leddegeri=0x80;break;
case 1:
LEDDATA=~(leddegeri);
leddegeri=leddegeri << 1;
if(leddegeri<=0) leddegeri=0x01;break;
}
}
3.4. Analog/Sayısal çevirici modülü
Bu modülde analog/sayısal çevirici olarak
ADC804 tümdevresi kullanılmıştır. ADC804
tümdevresi 8 bitlik bir dönüştürücüdür. Bu
modülün devre şeması Şekil-9’da görülmektedir.
Dönüştürücünün içinde kendi referans üreticisi
vardır ancak istenirse dışarıdan VCC/2 değerinde
bir referans da verilebilir. Bu taktirde ADC804 5
voltluk bir giriş sinyalini FFH(255) olarak
çevirmektedir. ADC girişine analog sinyal bir
potansiyometre üzerinden verilmektedir.
ADC804’ün mikrodenetleyici yazılımı
yapılırken Şekil-10’daki zamanlama diyagramı
kullanılmıştır. ADC804’ün 4 ve 19 nolu
bacaklarına bağlanan direnç ve kondansatör ile
ADC804 için gerekli olan saat(clock) sinyali
üretilmektedir. Üretilen sinyalin frekansı:
Fclock=1/1.1*R*C dir. R=10K ve C=150pF
seçilirse Frekans değeri 606 Hz olmaktadır.
Devrede yüksek hız kullanılmamıştır. Şekil-10 da
500 kHz için örnek zamanlama diyagramı
görülmektedir.
Şekil-9 a) ADC804 analog/sayısal çevirici modül
devre şeması
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
202
Şekil-10 ADC804 zamanlama diyagramı
3.4.1. ADC yazılımı
Mikrodenetleyicinin ADC kontrol yazılımı
aşağıda verilmektedir.
#include<AT89X52.h> /* tanimli register isimlerini
kullanabilmek için gerekli header dosyası*/
#include<intrins.h> /*_nop_; komutunu
kullanabilmek için gerekli header dosyası*/
sfr ADC_DATA=0x90; /* ADC data girisi
P1 port uclari */
sbit ADC_CS=0xb4 ; /* P3.4 port ucu*/
sbit ADC_RD=0xb5 ; /* P3.5 port ucu*/
sbit ADC_WR=0xb6 ; /* P3.6 port ucu*/
sbit ADC_INTR=0xb7 ; /* P3.7 port ucu*/
unsigned char idata dcdeger;
void ADCOKU(void)
{
ADC_CS=0; ADC_INTR=1;
ADC_WR=1;ADC_RD=1;
ADC_WR=0;DELAY(1);
ADC_WR=1;DELAY(50);
ADC_RD=0;DELAY(1);
/* while(ADC_INTR==1); ucu kullanılmamiştır bu uç
mikroislemciye baglanmayabilir*/
ADC_DATA=0xff;
adcdeger=ADC_DATA;
ADC_RD=1;
ADC_CS=1;
}
3.5. Step Motor Sürücü Modülü
Step motor sürücü devresi ULN2068
tümdevresi ile yapılmıştır. Bu tümdevre içinde
herbir çıkış üç transitörle sürülmekte olup 1.5
Amper akım verebilmekte ve 10 Volt besleme ile
çalışmaktadır. Hem bipolar hemde unipolar step
motoru sürebilmektedir. Şekil-11’de bu modülün
devre şeması verilmiştir.
Şekil-11 Step motor sürücü modülü devre şeması
Bipolar step motor 4 uca sahip olup şematik
gösterimi Şekil-12’deki gibidir. Unipolar step
motor 5 veya 6 uca sahip olup şematik gösterimi
Şekil 13 deki gibidir. Unipolar step motor devreye
bağlanırken ortak uçlar 10-12 voltluk bir Vcc
kaynağa bağlanır. Diğer uçlardan sürücü sinyaller
gönderilir.
Şekil-12 Bipolar step motor
Şekil-13 Unipolar step motor
3.5.1. Step motor yazılımı
Step motor için mikrodenetleyici kontrol
yazılımı aşağıda verilmektedir.
#include<AT89X52.h> /* tanimli register isimlerini
kullanabilmek için gerekli header dosyası*/
#include<intrins.h> /*_nop_; komutunu
kullanabilmek için gerekli header dosyası*/
sfr MOTORDATA=0xa0; /*P2 portu P2.0 P2.1 P2.2
P2.3*/
unsigned char ptr;
void stepmotor(unsigned char x)
{ unsigned char code steptabright(
)={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09,
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
203
0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};/*yarım
adım sağa döndürme tablosu*/
unsigned char code steptableft(
)={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,
0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; /*yarım
adım sola döndürme tablosu */
unsigned char direction;
direction=x;
switch(direction)
{ case 0: /*Sağa dödür*/
MOTORDATA=steptabright(ptr) & 0x0f;
ptr++;
if (ptr>15) ptr=0;
break;
case 1: /*Sola döndür*/
MOTORDATA=steptableft(ptr) & 0x0f;
ptr++;
if (ptr>15) ptr=0;
break; }
3.6. Mikrodenetleyici seri port
haberleşme yazılımı
Yukarda bahsedilen modüllerin bilgisayar
vasıtası ile kontrolünü gerçekleştirmek için gerekli
olan seri port yazılımı ise aşağıda verilmektedir.
#include<AT89X52.h> /* tanimli register isimlerini
kullanabilmek için gerekli header dosyası*/
#include<intrins.h> /*_nop_; komutunu
kullanabilmek için gerekli header dosyası*/
unsigned char rchar,tchar,bekle;
/* bu alt program seri port veri alış verişi için gerekli*/
void WAIT(void)
{ bekle=0xff;
while(bekle !=0);}
/* Seri portu ayarlama */
PCON=0x80; /*for 19200 baud
0x80*/
SCON = 0x50; /* mode 1: 8-bit
UART, enable receiver */
TMOD = 0x21; /* timer 1 mode 2 8-
Bit reload , Timer0 mode1 16 bit */
TH1 = 0xfd; /* reload value 57600 baud
the same for 19200 baud*/
TR1 = 1; /* timer 1 run for serial
communication */
/*Bilgisayara veri göndermek için*/
tchar=adcdeger;
SBUF=tchar;
WAIT();
/*Bilgisayardan veri almak için*/
void serial_int() interrupt 4
{ EX0=0;ES=0;
if(TI==1)
{TI=0; bekle=0;ES=1;}
else
{
RI=0;
ACC=SBUF;
rchar=ACC;
if(rchar==241) {Motoru sağa döndür
komutları}
if(rchar==242){motoru sola döndür komutları}
if(rchar==243){Ledleri sağa dogru yak
komutları}
if(rchar==244){Ledleri sola doğru yak }
if(rchar==245){ADC çevrimini başlat}
if(rchar==246){Motor, led ve ADC dur}
if(rchar>0 && rchar<240){hiz=rchar;}
bekle=0;
ES=1;
}
EX0=1;
}
4. BİLGİSAYAR SERİ HABERLEŞME
PORTUNUN KULLANIMI
Bilgisayar arayüz yazılımı Borland C++
Builder görsel programlama dili ile hazırlanmıştır.
C++ Builder, C++ dilinin özelliklerini bünyesine
barındıran ve güçlü bir program geliştirme ortamı
kullanıcıya sunan görsel bir programlama
dilidir(13). Programlama dillerinde seri port
kullanımı çok iyi bilinen bir konu değildir. Yapılan
bilgisayar arayüz yazılımı mikrodenetleyiciye
verileri seri porttan göndermektedir. Bu yüzden
seri haberleşmenin bu dilde nasıl yapıldığının
bilinmesi gerekmektedir. Bu işlem üç adımda
gerçekleşmektedir.
Port’un kullanıma açılması
Veri gönderme ve alma
Port’un kapatılması
Port’un kullanıma açılması için öncelikle
aşağıdaki global değişkenler tanımlanır.
HANDLE hComm = NULL;
COMMTIMEOUTS ctmoNew = {0}, ctmoOld;
DWORD dwBytesRead;
DCB dcbCommPort;
unsigned char Buffer(10);
Daha sonra Windows’un CreateFile fonksiyonu
kullanılarak aşağıdaki şekilde kullanıma açılır.
hComm = CreateFile("COM2",
GENERIC_READ | GENERIC_WRITE,
0,
0,
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
204
OPEN_EXISTING,
0,
0)
Portun kullanıma açılıp açılamadığı
aşağıdaki fonksiyon ile öğrenilebilir.
if(hComm == INVALID_HANDLE_VALUE)
{
ShowMessage("Port açılamadı");
Application->Terminate();
}
Port’un veri gönderme ve almada
kullanacağı buffer büyüklüğü aşağıdaki fonksiyon
ile ayarlanır.Hem giriş hemde çıkış bufferi 128
bayt olarak ayarlanmıştır
SetupComm(hComm, 128, 128);
Port’un zaman aşım değerleri aşağıdaki
fonksiyonlar ile ayarlanır.
Kullanılmakta olan zaman aşım değerlerini sakla
GetCommTimeouts(hComm,&ctmoOld);
Yeni zaman aşım değerlerini ayarla
ctmoNew.ReadTotalTimeoutConstant = 100;
ctmoNew.ReadTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutMultiplier =0;
ctmoNew.WriteTotalTimeoutConstant =0;
SetCommTimeouts(hComm, &ctmoNew);
Portun kullanacağı protokol 19200 baud
rate, no parity, 8 bit veri uzunluğu ve 1 stop biti
olarak aşağıdaki şekilde ayarlanır.
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hComm, &dcbCommPort);
BuildCommDCB("19200,N,8,1", &dcbCommPort);
SetCommState(hComm, &dcbCommPort);
Veri haberleşmesi bittikten sonra
programdan çıkarken port’u tekrar eski haline
getirmek için aşağıdaki komutlar kullanılır.
PurgeComm(hComm, PURGE_RXABORT);
SetCommTimeouts(hComm, &ctmoOld);
CloseHandle(hComm);
Bir baytlık veri göndermek için örneğin 246
verisini göndermek için
TransmitCommChar(hComm, 246);fonksiyonu
kullanılır.
Veri alışı yapmak için ise aşağıdaki program
kullanılabilir
while(basla)
{
if(say == 0) {
say=1;TransmitCommChar(hComm,246);}
ReadFile(hComm, &Buffer, 1 , &dwBytesRead,
NULL);
if(dwBytesRead) { say=0; adcdeger=Buffer(0); }
Application->ProcessMessages();
}
Bilgisyar 246 verisini göndermekte,
ReadFile fonksiyonu ile de port’u okumaktadır.
Porta bir değer gelmişse dwBytesRead değişkeni 0
dan farklı bir değer almaktadır. Bu durumda değer
hemen okunmakta ve say=0 sıfır yapılarak yeni bir
okuma için porta 246 değeri tekrar gönderilmek-
tedir. Basla değişkeni boolean olarak tanımlanmış
ve programda BAŞLA butonuna tıklandığında
true(1) değerini almakta ve DUR butonuna basıldı-
ğında ise false(0) değerini almaktadır. Buton tık-
lama olaylarını algılayabilmek ve sonsuz döngüden
çıkabilmek için Application->ProcessMessages()
fonksiyonu gereklidir.
5. BİLGİSAYAR ARAYÜZ YAZILIMI
Mikrodenetleyici ana modülü bilgisayara
RS-232 seri haberleşme port’u ile bağlanmıştır.
Bilgisayar seri port’tan mikrodenetleyiciye,
analog/sayısal çevirme modülü(ADC), LED mo-
dülünü veya step motoru sürmek için gerekli kont-
rol verilerini gönderir. Bu veriler yön (sağ, sol),
başla, dur, ve hız bilgilerinden oluşur.
Mikrodenetleyici bu verileri aldığında gerekli sü-
rücü işaret sinyallerini üreterek modüllere gönde-
rir. Örneğin bilgisayar ADC çevrimini başlat veri-
sini(245) gönderdiğinde mikrodenetleyici ADC
çevrimini başlatır ve okuduğu değeri tekrar bilgi-
sayara gönderir. Bilgisayar bu değeri hem sayısal
hemde grafik olarak ekranda gösterir. Mikrodenet-
leyicinin giriş çıkış için kullanılan portları (P0,.
P1, P2, P3) belirli bir kullanım amacı için
ayrılma-mıştır. Her modül istenilen port’a
bağlanabilir. Tuş takımı LCD göstergeye birtakım
bilgiler yazdırmak için kullanılmıştır. 0,1,2,3 tuşla-
rına bastıkça ekrana değişik mesajlar yazdıran bir
yazılım da örnek olarak eklenmiştir. Buradaki
amaç, tuş takımının ve LCD göstergenin kullanı-
mını göstermektir. Bilgisayar arayüz yazılımı C++
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
205
BAŞLA
ANA MENÜ
işlem türünü seç
İşlem
türü=ADCADC modülünü çalıştır
E
H
İşlem
türü=STEP
MOTOR
STEP MOTOR
modülünü çalıştırE
H
İşlem
türü=LEDLED modülünü çalıştır
E
H
İşlem
türü=KAPAT
E
SON
H
Builder 4.0 görsel programlama dili ile ve
mikrodenetleyici kontrol yazılımları ise C dili
kullanılarak yapılmıştır. Arayüz yazılımının akış
şeması Şekil-14’de verilmiştir.
Şekil-14. Bilgisayar arayüz yazılımı akış şeması
Bilgisayar arayüz yazılımı çalıştırıldığında ilk
olarak ana menü gelmektedir. Ana menü ekran
çıktısı Şekil-15’de görülmektedir. ADC butonuna
basıldığında ADC modül ekranı, Step motor
butonuna basıldığında Step motor modülü ekranı,
LED butonuna basıldığında Step motor modülü
ekranı gelmektedir.
Şekil-15 Bilgisayar arayüz yazılımı ana menü
ekranı
Şekil-16 ADC modülü ekranında gösterilen sinüs
sinyali
ADC modül ekranında BAŞLA butonuna
basıldığında seri port’tan 245 kodunu, DUR
butonuna basıldığında 246 kodunu, Okuma hızı
için ise 0-240 arası bir değer seri port’tan
mikrodenetleyiciye göndermektedir. Mikrodenetle-
yici başla verisini alır almaz ADC çevrimini
başlatmakta ve okuduğu değeri tekrar seri port’tan
bilgisayara göndermektedir. Bilgisayar bu değeri
ekranda hem sayısal hem de grafik olarak
göstermektedir. Şekil-16’de ADC girişine sinyal
jeneratöründen pozitif ofset değeri ayarlanarak, bir
sinüs sinyali uygulayarak elde edilen değerler
ekranda görülmektedir.
Ömer Faruk BAY, Salih GÖRGÜNOĞLU/POLİTEKNİK DERGİSİ,CİLT 5, SAYI 3, 2002
206
Şekil-17 Step motor modülü ekranı
Şekil-17’da görülen step motor modülü
ekranında da benzer bir işlem yerine getiril-
mektedir. BAŞLA butonuna basıldığında bilgisa-
yar mikrodenetleyiciye 241 kodunu, DUR için ise
246 kodunu mikrodenetleyiciye gönderkmek-tedir.
Mikrodenetleyici 241 kodunu alır almaz step
motoru çalıştırmaktadır. Motorun dönüş yönünü
değiştirmek için 241 ve 242 kodu mikrodenet-
leyiciye gönderilir. Mikrodenetleyici 241 kodunu
almakla motoru sağa 242 kodunu almakla motoru
sola döndürmektedir. Step motorun dönme hızı ise
kaydırma çubuğu ile yapılmaktadır. Bilgisayar,
kaydırma çubuğunun konumu değiştirildiğinde,
konum bilgisini sayısal değer olarak(0-240
arasında bir değer) mikrodenet-leyiciye
göndermektedir. Mikrodenetleyici de step motora
gönderilen sayısal kontrol sinyallerinin frekansını
gelen değere göre değiştirerek step motorun hızını
değiştirmektedir. Ayrıca motor dönüş yönü ve hızı
ekranda aynı zamanda simüle edilmektedir.
Şekil-18 LED kontrol ekranı
Şekil-18’de görülen LED modülü ekranında
ise LED ışıkların sağa, sola, hızlı veya yavaş
olarak kayarak yanması uygulaması yapılmaktadır.
Bu işlemler step motora benzer bir şekilde yerine
getirilmektedir.
6. SONUÇ
Bu çalışmada endüstriyel amaçlı uygulama-
larda çok yaygın olarak kullanılan
mikrodenetleyicilerin öğrenimini kolaylaştırmak
için bir model eğitim seti ve uygulama devreleri ta-
sarlanmış ve gerçekleştirilmiştir. Ayrıca bir bilgi-
sayar arayüz yazılımı yapılmış ve bu arayüz yazı-
lımı ile bir bigisayarla bir mikrodenetleyicinin bir-
likte nasıl kullanılabileceği gösterilmiştir. Örnek
uygulama devreleri ve bunlara ait mikrodenetleyici
yazılımları en basit halleri ile verilerek öğrenilme-
leri kolaylaştırılmıştır. Ayrıca yazılımlar C dili
kullanılarak yapılmış böylece C dilinin bir
mikrodenetleyicide nasıl kullanılabileceği göste-
rilmiştir. Bunun için kullanılan mikrodenetleyiciye
ait C derleyicisinin temin edilmesi gerekmektedir.
Kontrol yazılımları istenirse Assembly dili
kullanılarak da yazılabilir. C derleyicisi mikrode-
netleyicinin bellek kullanımı, kesme kullanımı gibi
kaynaklarını kendisi yöneterek kullanıcı ile
mikrodenetleyici arasında belli bir ölçüde donanım
soyutlaması sağlamaktadır. Böylece programcının
daha az veya asgari düzeyde mikrodenetleyicinin
iç yapısını ve özelliklerini bilmesi yeterli olmak-
tadır. Ayrıca C dilinin sağladığı program kontrol
ve döngü yapılarının kullanılması ile daha kolay,
hatasız ve geliştirilebilir programlar yazmak
mümkün olmaktadır. Mikrodenetleyicinin program
belleği sınırlı olduğundan kullanılacak C derle-
yicisi de dikkatli seçilmelidir. Çünkü C derleyi-
cilerinin aynı tür işlemler için ürettikleri kod
büyüklükleri farklı olmaktadır. Bu hem bellek
kullanımı hem de performans açısından önem arz
etmektedir.
KAYNAKLAR
1. Barnett, R.H., The Family of Microcontrollers,
Prentice Hall, New Jersey, 1995
2. Sinha,N.K., Microprocessor- Based Control
Systems, D. Reidell Publishing Company,
Holland.,1986
3. Intel 8-bit Embedded Controller
Handbook,1991
4. Atmel Corporation CDROM product Guide,
1999
5. Santos, A.; Boemo, E.; Faura, J.; Meneses, J. ,
Microcontrollers in education: a case-study,
Frontiers in Education Conference, Twenty-
8051 MİKRODENETLEYİCİ EĞİTİM SETİNİN TASARIMI... / POLİTEKNİK DERGİSİ, CİLT 5, SAYI 3, 2002
207
fourth Annual Conference. Proceedings ,
Page(s): 378 –382, 1994
6. Beetner, D.; Pottinger, H.; Mitchell, K.
Laboratories teaching concepts in
microcontrollers and hardware-software co-
design, Frontiers in Education Conference,
30th Annual, Volume:2,.2000.
7. Del Rio, A., Andina, J.J.R., UV151:a
simulation tool for teaching/learning the
8051microcontroller, Frontiers in Education
Conference, 30th Annual , Volume: 2 , Page(s):
F4E/11 -F4E/16, 2000
8. Nunnally, C.E.,Teaching microcontrollers,
Frontiers in Education Conference, FIE '96.
26th Annual Conference., Proceedings of ,
Volume: 1 , Page(s): 434 -436 vol.1, 1996
9. del Rio, A.; Rodriguez, J.J.; Nogueiras, A.A.,
Learning microcontrollers with a CAI oriented
multi-micro simulation environment,
Education, IEEE Transactions on , Volume: 44
Issue: 2 , 2001
10. A.H.G. Al - dhaher, Integrating hardware and
software for the development of
microcontroller - based systems,
Microprocessor and microsystems”, 25 , 2001
11. T.K. Hamrita., R.W. McClendon, A New
Approach for Teaching Microcontroller
Courses, Int. J. Engng Ed. Vol. 13, 1997
12. Keil Software Inc, µVision2 IDE, C51
Compiler’s user guide
13. Kargülle,İ., Zeydin, P., C++ Builder 4,
Türkmen Kitabevi, İstanbul, 2000