1. button a basildiginda pic seri porta "1111"
2. button a basildiginda pic seri porta "2222"
.
.
.
.
9. button a basildiginda pic seri porta "9999"
ID'lerini gonderiyor ve bilgisayardaki arayüz programı ID'leri alarak database eslestirmesi yapıyor vs vs...
dolayisi ile pic buttonlarin basili olup olmadigini kontrol edip ona gore seri porta data gondermeli.
Ilk olarak interrupt ile yapmak istedim fakat 16f877'nin interrup icin kullanabilecegim 4 pini oldugunu ogrenince vazgecip primitif yontemlere basvurdum.
Basit bir If dongusu ile olabilecegini dusundum ama yanildim..
Yazdigim kod :
while(1) {
if (PORTB.F0 == 1 )
{ Usart_Str("1111");
}
if (PORTB.F1 == 1 )
{ Usart_Str("2222");
}
if (PORTB.F2 == 1 )
{ Usart_Str("3333");
ile baslayip devam ediyor.
1. button a bastigimda 1111 datasi gidiyor ama dongu sonsuz oldugu icin ben button'u kapatana kadar onlarca kez gonderiyor. Sonsuz dongu olmadan da button durumunu devamli test edemiyorum.
Benim istedigim sadece 1 kere gondermesi. Saatlerce ekrana bakip dusundum ama bunu yapacak bir yontem aklima gelmedi ve interrupt'a yonelmeyi dusundum.
Hic Pic bilmiyorum ancak belki bir yardimi dokunur:
if (PORTB.F0 == 1)
{
if (B1 == 0)
{
Usart_Str("1111");
B1=1;
}
}else{B1=0;}
......
Seklinde olabilir belki.
B1 herhangi bir degisken.
Ayrica 4 tane pini vardir fakat sana bir tane pin yeter su durumda. Herhangi bir butona basildiginda bu interrupt rutini portu okur ve cikisini verir. Yani senin while dongusunun yerine interrupt kullanmis olursun....
Her pin icin ayri bir interrupt gerekiyor sanirim. Her button icin ayri bir ID oldugu icin hepsi icin ayri interrupt subroutin gerekiyor. Dolayisi ile 9 interrupt pin gerekiyor.
Ayrica verdigin ornek ayni button'a 1 kere basarsak gecerli oluyor sanirim. 2. kez ayni button'a bastigimda B=1 oldugu icin Usart_Str islevini gerceklestiremeyecek.
Her pin icin ayri bir interrupt gerekiyor sanirim. Her button icin ayri bir ID oldugu icin hepsi icin ayri interrupt subroutin gerekiyor. Dolayisi ile 9 interrupt pin gerekiyor.
Ayrica verdigin ornek ayni button'a 1 kere basarsak gecerli oluyor sanirim. 2. kez ayni button'a bastigimda B=1 oldugu icin Usart_Str islevini gerceklestiremeyecek.
Her pin icin ayri bir interrupt gerekiyor sanirim. Her button icin ayri bir ID oldugu icin hepsi icin ayri interrupt subroutin gerekiyor. Dolayisi ile 9 interrupt pin gerekiyor.
Ilk olarak interrupt ile yapmak istedim fakat 16f877'nin interrup icin kullanabilecegim 4 pini oldugunu ogrenince vazgecip primitif yontemlere basvurdum.