Ana Sayfa PIC Assembly - PIC C 16F877A RBO/INT Kesmesi ile LCD Display Uygulaması

16F877A RBO/INT Kesmesi ile LCD Display Uygulaması

8 min read
1
1
8,457

 

RB0/INT KESMESİ

Arkadaşlar kesme ne işe yarar diye başlayalım. Kesme ani bir durum olduğunda normalde çalıştığı kodun üstünden direkt atlayarak kesme fonksiyonuna girer. Yani kesme program çalıştığı sırada altta çalışmaktadır. Komut sırası ona gelmemesine rağmen siz RB0 a basarsanız. Sizi kesme fonksiyonunun içine atacaktır.

RB0/INT KESMESİNİN HI-TECH C DİLİNDE KULLANIMI

INTCON kaydedicisinde:

INTE biti 1 yapılmalıdır(INT kesmesine izin verir ve kesmenin gelmesini bekler.) , GIE biti 1 yapılmalıdır.(GIE biti genel tüm kesmelere izin verir.)

OPTION kaydedicisinde:

INTEDG biti 1 ise yükselen kenarda(+) kesme oluşur. INTEDG biti 0 ise alçalan kenarda(-) kesme oluşur.

NOT: INT kesmesi oluştuğunda INTF bayrağı 1 olur, alt programda kesmeden çıkmak için ve tekrar kesme beklemesini sağlamak için INTF=0 yapılmalıdır.

LCD DISPLAY

LCD (Liquid Crystal Display) göstergeli mikro denetleyici uygulamaları ile hayatımızın her alanında (cep telefonları, fotokopi makineleri, otomobiller, kameralar, oyuncaklar, güvenlik sistemleri gibi) karşılaşılmaktadır.

Karakter tabanlı dot matrix LCD (paralel/seri) ve grafik LCD olmak üzere iki çeşit LCD vardır.

LED gösterge ile sadece sayısal değerler ve sınırlı sayıdaki karakterler gösterilebilmektedir. Buna karşılık LCD göstergeler ile her türlü yazı ve sayısal değeri göstermek mümkündür. LCD’ler çeşitli firmalar tarafından üretilmesine rağmen kontrolleri standartlaşmıştır.

LCD KONTROL İŞLEMLERİ

LCD göstergeye gönderilen veri ya bir komut kodu veya bir karakterdir. Şekil 3. de LCD göstergeye yazma işlemine ait zamanlama diyagramı görülmektedir. RS ucu düşük seviyeye çekilirse yapılacak işlem bir kontrol işlemidir. Eğer yüksek seviyede tutulursa gönderilen bir karakterdir. LCD’ye her 8 bitlik veri, önce yüksek değerlikli 4 – bit, sonra düşük değerlikli 4 – bit olmak üzere iki defada gönderilir. LCD ekrana veriler ASCII karakter kodları gönderilerek gösterilirler. Mesela ekrana 0 göstermek için, sıfırın ASCII kodu olan 48’i göndermek gerekir. RW=0 ise LCD ye yazma, RW=1 ise LCD den okuma işlemi yapılıyordur.

LCD ekrana veri yazmak için aşağıdaki adımlar izlenir;

•Veri, veri yoluna konulur,

•RS ucu lojik 1 yapılarak, yazma işleminin komut olmadığı belirtilir,

•RW ucu lojik 0 yapılır,

•E ucuna lojik “1–0” şeklinde bir saat (clock) darbesi verilir.

LCD ekrana komut yazmak için ise aşağıdaki adımlar izlenir;

•Komut, veri yoluna konulur,

•RS ucu lojik 0 yapılarak, yazma işleminin komut olduğu bildirilir,

•RW ucu lojik 0 yapılır,

•E ucuna lojik “1–0” şeklinde bir saat (clock) darbesi verilir.

LCD BAĞLANTI ŞEMASI

LCD2

##15 Cİ BACAK +VDD 16 CI BACAK İSE -VSS DİR.POTANSİYOMETRENİN ORTA BACAĞINI (VEE) YE SOL BACAĞINI -VSS SAĞ BACAĞINI İSE +VDD YE BAĞLANMALIDIR.

DEVRENİN ŞEMASI

 

LCD3

DEVRENİN HI-TECH C KODU

[php]
#include <htc.h> //Hitech PIC C Yazılımı
#include <stdlib.h>
__CONFIG(0X3FF1);
void bekle(int b)
{int i,j;
for(i=0;i<b;i++)
for(j=0;j<135;j++);
}
/* RB0 kesme hizmet fonksiyonu (RB0 kesmesi oluşunca çağırılır) */
void interrupt kesme(){
#define RS RC0
#define RW RC1
#define E RC2
void lcdKomut (unsigned char);
void lcdVeri (char);
if(INTF){ // RB0 kesme bayrağı 1 ise
INTF=0; // Bayrağı sıfırla ve
TRISD=0;
TRISC=0;
E=0;
bekle(250);
lcdKomut(0x38);//2 satır 5*7 matrix
bekle(250);
lcdKomut(0x0E); //display ve kursor açık
bekle(15);
lcdKomut(0x01);//Ekranı temizle
bekle(15);
lcdKomut(0x06);//Kursor sağa kaysın
bekle(15);
lcdKomut(0x86);//1. satır,6.sıra
bekle(15);
lcdVeri(‘R’);
bekle(15);
lcdVeri(‘O’);
bekle(15);
lcdVeri(‘B’);
bekle(15);
lcdVeri(‘O’);
bekle(15);
lcdVeri(‘T’);
bekle(15);
lcdVeri(‘U’);
bekle(15);
lcdVeri(‘R’);
bekle(15);
lcdVeri(‘K’);
bekle(15);
lcdVeri(‘A’);
}
}
void lcdKomut(unsigned char k)
{
PORTD=k;
RS=0;
RW=0;
E=1;
bekle(1);
E=0;
}
void lcdVeri(char veri)
{
PORTD=veri;
RS=1;
RW=0;
E=1;
bekle(1);
E=0;
}
void main(){
INTF=0; // RB0 kesme bayrağı
INTE=1; // RB0 kesme yetkisi
INTEDG=0; // Harici tetikleme girişi 1 -> Yükselen, 0->Düşen kenar
GIE=1; // Global kesme yetkisi
while(1); // Sonsuz döngüde kesme bekle
}

[/php]

DEVRENİN VİDEOSU:

Devrenin hex dosyasını buradan bulabilirsiniz…

 

 

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Burak Ablay
Daha Fazla Göster -  PIC Assembly - PIC C

1 Yorum

  1. doğan

    22 Kasım 2018 at 17:39

    merhaba;
    bana göre çok önemli olduğunu düşündüğüm bir konuya parmak basmışsınız. günlerdir araştırıyorum ama bu konuda anlaşılır şekilde anlatılabilmiş yeterli kaynak yok. ben bahsi geçen uygulamayı arduino ile yapmak istiyorum. arduinoda da mantık aynı şekilde işliyor olsa gerek. doğru mudur? iyi çalışmalar

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Modbus POLL ile Allen Bradley Motor Sürücüsünün Haberleşmesi

Merhabalar arkadaşlar , Bu yazımızda RS485 yada Modbus haberleşmesi ile ilgilenen arkadaşl…