PIC 16F887 de B portu değişiklik kesmesi
(b7 b6 b5 b4 pinleri)
b portu kesmesi |
b portu kesmesi |
Ödev dosyasında da açıklama yaptım .
Program mantığın da da herhangi bir b portun da değişiklik olduğunda kesmeye gidiyor . Mikroc progrtamında LCD custom character özelliğini kullandım .
Kodların her satırı için de ayrıca açıklama yaptım, sorularınız olursa yorum yapın yardımcı olmaya çalışacam.
program kodları;
sbit LCD_RS at RD2_bit; sbit LCD_EN at RD3_bit; sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit;
// lcd pin ayarlama işlemleri yapıldı
char txt[15];
short say1=11,say2=22,say3=33,say4=44,sifirla=0;
const char cizgi[] = {1,1,1,1,1,1,1,1};
void karakter(char satir, char yeri) { // LCD custom character özelliği
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(cizgi[i]);
Lcd_Cmd(_LCD_RETURN_HOME); //ekranı sil komutu imleci oririjinal konumuna getirir
Lcd_Chr(satir, yeri, 0);
}
void yazi_yaz()
{
Lcd_Out(2,1," YRD.DOC.DR. "); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1,"V.YUSUF SENYUREK"); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1,"Mikroc Odevi "); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1," Harun DOGAN "); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1," 2.sinif "); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1,"NO: 171212009 "); //2.satır ve 1.sütundan itibaren yazma
delay_ms(1000);
Lcd_Out(2,1," "); //2.satır ve 1.sütundan itibaren yazma
}
void interrupt() // Kesme fonksiyonu
{
if(INTCON.INTF) { say1=0; say2=0; say3=0; say4=0; INTCON.INTF=0; }
if(PORTB.B4) {say1++; INTCON.RBIF=0;INTCON.RBIE=0; }// eğer PORTB'nin
if(PORTB.B5) {say2++; INTCON.RBIF=0;INTCON.RBIE=0; } // eğer PORTB'nin
if(PORTB.B6) { say3++; INTCON.RBIF=0;INTCON.RBIE=0; } // eğer PORTB'nin
if(PORTB.B7) {say4++; INTCON.RBIF=0;INTCON.RBIE=0; } // eğer PORTB'nin
if(PORTB.B0){ say1=0; say2=0; say3=0; say4=0; }
INTCON.RBIF=0; INTCON.RBIE=0;
}
void main() {
ansel=0; anselh=0; // portlar dijital olarak tanımlandı
TRISB=0xF1; // PORTB'nin 0 4 5 6 7 pinleri giriş diğerleri çıkış
PORTB=0; // PORTB'yi sıfırla// OPTION_REG.B7=0; // PORTB dahili pull-up aktif
INTCON.GIE=1; // bütün kesmelere izin ver pin çıkışı butona gider sonra ground olur
INTCON.RBIE=1; // PORTB değişim kesmesine izin ver
INTCON.INTE=1; //RB0 KESMESİNE İZİN VER
INTCON.RBIF=0; // RBIF bayrağını temizle
IOCB.IOCB7=1;
IOCB.IOCB6=1; // b portu kesmeleri için
IOCB.IOCB5=1;
IOCB.IOCB4=1;
IOCB.IOCB0=1;
//OPTION_REG.INTEDG=1; //DÜŞEN KENAR TETİKLEMESİ**** DİKKAT******
Lcd_Init(); // LCD Display hazırlandı
Lcd_Cmd(_LCD_CURSOR_OFF);// LCD display ekranındaki imleci kaldırmak için
Lcd_Cmd(_LCD_CLEAR); //LCD ekranını temizlemek için
yazi_yaz();
karakter(1,4); // 4. 8. 12. sürunlara çizgi çekildı
karakter(1,8); // ekran 4e bölündü
karakter(1,12);//Lcd_Out(1,6,txt3);
while(1){
shortToStr(say1,txt);
Lcd_Out(1,1,txt); //
shortToStr(say2,txt);
Lcd_Out(1,5,txt); //
shortToStr(say3,txt);
Lcd_Out(1,9,txt); //
shortToStr(say4,txt);
Lcd_Out(1,13,txt); //
delay_ms(500);
// her kesmeye girdiğinde kesme sonunda kesmeyi iptal et
// sonra yeniden kesmeyi aktif et
INTCON.RBIE=1; // PORTB değişim kesmesine izin ver
INTCON.RBIF=0;// RBIF bayrağını temizle
} // sonsuz döngüye girildi
}
ödev b portu kesmesi |
Teşekkürler.
Harun DOĞAN blog
Diğer yazılarım:
plc-hmi rs485 haberleşme, plc-hmi rs485 communication, delta plc hmi rs485 kablo bağlantıları
wplsoft dopsoft örnek, hmi örnek, timer örnek,
wplsoft örnek: buton uygulaması, bağlantı şeması, kablo bağlantıları
plc-hmi rs485 haberleşme, plc-hmi rs485 communication, delta plc hmi rs485 kablo bağlantıları
wplsoft dopsoft örnek, hmi örnek, timer örnek,
wplsoft örnek: buton uygulaması, bağlantı şeması, kablo bağlantıları
Hiç yorum yok:
Yorum Gönder