89C51RC2 PLCC ile Trafik Sinyalizasyonu

Projeyi Hazırlayan: Abdullah Onur Baysal Dosyalar 89c51rc2-plcc-trafik-sinyalizasyonu Emeği geçen Kişilere Teşekkürler
Trafik Sinyalizasyonu
Devremde 4 yol ağzındaki trafik ışıklarının koordinasyonlarını bir 89c51rc2 mikro denetleyicisiyle başarmış bulunmaktayım.
Program iki kademeden oluşmaktadır. Birincisi ışıkların yanma sürelerini belirlemek amacı ile gecikme yaratmak için oluşturulmuş “zaman(n)” fonksiyonudur. Bu fonksiyonda “n” yerine yazılan değer kadar (n=saniye) programda gecikme oluşur. İkinci kısım ise ”main()” ana programın yazılı olduğu kısımdır. Bu kısımda ledlerin yanıp sönme sıraları ve bekleme süreleri (“zaman(n)” fonksiyonu ile) gerçekleştirilmiştir.
Kullanılan Malzemeler
- 89c51RC2
- LCC-SKT44 (soket)
- Kristal : 12MHz
- Kapasitör : 22pF x2 - 10uF
- Direnç : 10K - 330 x12
- Kırmızı Led : x8
- Sarı Led : x8
- Yeşil Led :x8
- Delikli Pertinaks
- Klemens(ikili) : x7
- L7805
- Zil teli
Trafik Sinyalizasyon Devre Şeması

LCC-SKT44 Soket Bacak bağlantıları

89c51RC2 PLCC Bacak bağlantıları

Mikro Denetleyiciye Yüklenecek C Programı
#include <t89c51Rx2.h>
#include <stdio.h>
#define yol4yesil P2_5
#define yol4sari P2_4
#define yol4kirmizi P2_3
#define yol3yesil P2_2
#define yol3sari P2_1
#define yol3kirmizi P2_0
#define yol2yesil P3_5 //portların isim atamalamaları yapıldı.
#define yol2sari P3_4
#define yol2kirmizi P3_3
#define yol1yesil P3_2
#define yol1sari P3_1
#define yol1kirmizi P3_0
void zaman(int saniye) //bekleme fonksiyonu
{
int a,b;
for(a=0;a<saniye;a++)
{
for(b=0;b<20;b++)
{
TH0=0x3C;
TL0=0xB0;
TR0=1;
while (!TF0)
{}
TR0=0;
TF0=0;
}
}
return;
}
void main()
{
int sari=1,kirmizi=1,yesil=5;
TMOD=0x01;
P2=255; //bütün ışıklar kontrol amacıyla yanar
P3=255;
zaman(5);
P2=0;
P3=0;
yol1kirmizi=1; //bütün yollara kırmızı ışık yanar
yol2kirmizi=1;
yol3kirmizi=1;
yol4kirmizi=1;
zaman(2);
while(1)
{
yol1kirmizi=0;
yol1yesil=1; //1.yol için yeşil ışık
zaman(yesil);
yol1yesil=0;
yol1sari=1; //1.yol için sarı ışık
zaman(sari);
yol1sari=0;
yol1kirmizi=1; //1.yol için kırmızı ışık
zaman(kirmizi);
yol2kirmizi=0;
yol2yesil=1; //2.yol için yeşil ışık
zaman(yesil);
yol2yesil=0;
yol2sari=1; //2.yol için sarı ışık
zaman(sari);
yol2sari=0;
yol2kirmizi=1; //2.yol için kırmızı ışık
zaman(kirmizi);
yol3kirmizi=0;
yol3yesil=1; //3.yol için yeşil ışık
zaman(yesil);
yol3yesil=0;
yol3sari=1; //3.yol için sarı ışık
zaman(sari);
yol3sari=0;
yol3kirmizi=1; //3.yol için kırmızı ışık
zaman(kirmizi);
yol4kirmizi=0;
yol4yesil=1; //4.yol için yeşil ışık
zaman(yesil);
yol4yesil=0;
yol4sari=1; //4.yol için sarı ışık
zaman(sari);
yol4sari=0;
yol4kirmizi=1; //4.yol için kırmızı ışık
zaman(kirmizi);
}
}
Programın Çalışması
Öncelikle programda kullanılacak olan kütüphanelerin tanımlamaları yapılmıştır.
#include
#include
Daha sonra programdaki portların her bitinin ayrı bir şekilde kullanılmasından kaynaklanacak karışıklığı gidermek amacıyla portlara ilgili yolun kırmızı-sarı-yeşil ışıklarına ait atamaları yapılmıştır.
#define yol4yesil P2_5 #define yol4sari P2_4 #define yol4kirmizi P2_3 #define yol3yesil P2_2 #define yol3sari P2_1 #define yol3kirmizi P2_0 #define yol2yesil P3_5 #define yol2sari P3_4 #define yol2kirmizi P3_3 #define yol1yesil P3_2 #define yol1sari P3_1 #define yol1kirmizi P3_0
a-) “zaman(n)” Fonksiyonunun çalışması
Zaman fonksiyonu devrenin çalışması esnasında devreyi herhangi bir konumda istenilen süre bekletilmek amacıyla gerçekleştirilmiştir. Fonksiyonun çalışma prensibi şu şekildedir.
Mikro Denetleyici osilatör olarak 12MHzlik kristal kullandığı için ve bu mikro denetleyicinin zamanlayıcıları da kristalin 1/12 si kadar hızla saydıkları için zamanlayıcıyı mod1 de -50000 e kadar 20 defa saydırmamız bir saniyelik bir gecikmeye yol açmaktadır. Bu gecikmeyi de kullanıcının fonksiyonu çağırırken girdiği sayısal değer (n) kadar tekrarlatırsak istenilen gecikme fonksiyonu elde edilmiş bulunmaktadır.
b-) “main()” Ana programın çalışması
Öncelikle programda kullanılacak değişkenler tanımlanmıştır.
int sari=1,kirmizi=1,yesil=5;
“sari” değişkeni programın işleyişindeki bütün sarı ışıkların yanma sürelerini belirlemektedir.
“kirmizi” değişkeni programın işleyişindeki bütün kırmızı ışıkların yanma sürelerini belirlemektedir.
“yesil” değişkeni programın işleyişindeki bütün yeşil ışıkların yanma sürelerini belirlemektedir.
Saymasını istediğimiz değer 2 bytelık bir değer içerisindedir dolayısıyla mikro denetleyicinin zamanlayıcısı 16 bitlik geri yüklemesiz olan mod1’e kurulmuştur.
TMOD=0×01;
Ledlerin sağlamlık kontrolü amacıyla programın başlangıcında bütün ledler 5 saniye yanık durup daha sonra çıkışlar temizlenip ve bütün yollara kırmızı ışık vererek 2 saniye bekledikten sonra “while(1)” kısır döngüsüne girmektedir.
P2=255; //bütün ışıklar kontrol amacıyla yanar P3=255; zaman(5); //5 saniye bekler P2=0; //çıkışlar temizlenir P3=0; yol1kirmizi=1; //bütün yollara kırmızı ışık yanar yol2kirmizi=1; yol3kirmizi=1; yol4kirmizi=1; zaman(2); //2 saniye bekler
Bu durumda bütün yollara kırmızı ışık verilmektedir. Bundan sonra yapılan işlem ışıkların istenilen konuma getirilip ilgili bekleme fonksiyonunun (”zaman(n)”) çağırılmasıdır.
Örnek: Birinci yola yeşil ışık vermek için;
yol1kirmizi=0; yol1yesil=1; //1.yol için yeşil ışık zaman(yesil);
NOT: Bu Programda unutulmaması gereken çok önemli noktalardan birisi işlemler sırasında bir sonraki basamağa geçerken önceki işlemde değiştirilmiş olan ışığın eski konumuna getirilmesidir.
Örnek :
yol1yesil=0; yol1sari=1; //1.yol için sarı ışık zaman(sari); yol1sari=0; yol1kirmizi=1; //1.yol için kırmızı ışık zaman(kirmizi);
“while(1)” kısır döngüsünün içinde bütün yollara birer kez geçiş hakkı verilmiş ilgili ışıkların süreleri kadar yakılıp söndürülmüştür. Program bu döngünün içinden hiçbir koşulda çıkmayacağı için program kapatılana kadar kendisini tekrarlayacaktır.

26/11/2008 2:14 pm
arkadaşlar bana acil tırafik ışıklarının çalışma pırensibi lazım nerden bula bilirim acaba