bu kod neden calısmıyor

Başlatan murat79, 16 Ocak 2006, 00:16:59

murat79

include "modedefs.bas"
'/// analog  portlar  dijitale  cevrildi ////////
cmcon=7 
'//// portların giriş cıkış  ayarları///////
porta=0
portb=0
trisa=%00000110
trisb=0
SO var porta.1 
'/////degişkenler////////
durum var byte 
biriktir var byte 
'////sembol olusturma ////////////
symbol lpt=$6 
'/// portb yi  sıfırlama /////
portb=0 
'/// program baslangici///// 
bekle:
if porta.2=1 then test
goto bekle 

test:

peek lpt,durum 

if durum=%00000010 then yukle

goto test 

yukle:

if durum=%00100001 then biriktir="!"
if durum=%00100011 then biriktir="#"
if durum=%00100100 then biriktir="$"
if durum=%00100101 then biriktir="%"
if durum=%00100110 then biriktir="&" 


yakson:
serout SO,T9600,[biriktir]
pause 250
goto yukle  
end                            


arkadaslar  yukarıdaki  kodlar neden calısmıyor  acaba bi bakarmısınız  acaba
burada  yapmak  istediğim  paralel portdan  gelen  binary kodları karşılıgına  gelen ascii kodunu  biriktir  isimli degiskene  atıp  sonrada  bu  biriktir isimli degiskendeki bilgiyi  lcd  de  okumak  ama  bir  turlu  beceremedim  bunu
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

Veli B.

symbol lpt=$6
burada ki amacın nedir tam olarak?
peek lpt,durum
if durum=%00000010 then yukle
Burada durum 2 olursa dallanmasını istemişsin ama dallandığı yerde yine durum için farklı şartlar sorgulamışsın.Bu kadar kısa zamanda durum değişebiliyor mu?Bu ksım bana hiç mantıklı gelmedi.
durum bu verdiğin 5 şarttan birine uymazsa yinede bilgiyi gönderiyorsun.Bu gereklimi.Durumda değişiklik olursa göndermen mantıklı olan.
Bu arada kodu daha okunabilir ve verimli hale getirmek için select case kullanabilirsin if grubu yerine.Peek yerine ilgili reg.lere direkt erişim daha kolay olur.Kendi helpinde bu konuda notlar var.

murat79

durum cok kısa  zamanlarda  aslında  oradakı  olay  su  ustat  lpt  portuna  yollanan  yazıcı  kodlarını  yakalayıp  her  binary  kodun  karsılıgı  olan  carakteri  bir  degişkene  atmak  bu  arada  oorada  aslında  bir  de  flag  ım  var  o  bana  star of  text  baslangıcını  belirtiyor  
bekle: 
if porta.2=1 then test 
goto bekle
bu  koddakı  durum  gerceklesirse  okumaya  baslıyor  program
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

Veli B.

include "modedefs.bas" 
'/// analog  portlar  dijitale  cevrildi //////// 
cmcon=7 
'//// portların giriş cıkış  ayarları/////// 
porta=0 
portb=0 
trisa=%00000110 
trisb=255
SO var porta.1 
'/////degişkenler//////// 
durum var byte 
biriktir var byte 
'/// portb yi  sıfırlama ///// 
portb=0 
'/// program baslangici///// 
bekle: 
if porta.2=1 then test 
goto bekle 

test: 



if PORTB=%00000010 then yukle 

goto test 

yukle: 

if PORTB=%00100001 then biriktir="!" 
if PORTB=%00100011 then biriktir="#" 
if PORTB=%00100100 then biriktir="$" 
if PORTB=%00100101 then biriktir="%" 
if PORTB=%00100110 then biriktir="&" 


yakson: 
serout SO,T9600,[biriktir] 
goto yukle  
end                


Bu şekilde bir denersen bakalım.&6 ile sanırım port byi tanımlamak istedin.Printer sinyallerini buradan okuyacaksın ama okuman için önce giriş olarak set etmen lazım.Birde bu kadar hızlı değişim için pause gibi durumlar sakıncalı.Data kaçırma ihtimalin yüksek.Önerim pin sayısı fazla olan bir işlemci ile yapman.877 gibi.Konumunu kontrol ettiğin pini RB0 a gir ve 8 bit paralel giriş için atıyorum port d yi kullan.Kesme kontrolü ile printerın sinyal gönderip göndermediğini denetle.İlave işlemler gerekli olacak kesmelerin disable edilmesi gibi, okuma anında.Kafanda şekillendirisen daha kolay olur.

Edit:
bekle: 
if porta.2=1 then test 
goto bekle 

test: 

peek lpt,durum 

if durum=%00000010 then yukle 

goto test
Tekrar okurken farkettim.Burda ilave olarak neden portb.1 in 1 olması nı kontrol edip bu şarta bağlıyorsun.

murat79

bekle: 
if porta.2=1 then test 
goto bekle 

test: 

peek lpt,durum 

if durum=%00000010 then yukle 

goto test
bunu  yapmamın  sebebi  portb1 1 oldugunda  start text   anlamında kullanılıyor  olması  yanı  aslında  bu  yolladıgım  benım  deneme  calısmalarım  start text  ve  end of  text  arasındakı  tum  oktet leri  alıp  bir  degişkende  ascci  karsılıgına  cevirip  sonucunda  

x  bir  baska  makinede  printere  gonderilen  yazının  okunması  yada  goruntulenmesini  saglamak
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

murat79

include "modedefs.bas" 
'/// analog  portlar  dijitale  cevrildi //////// 
cmcon=7 
'//// portların giriş cıkış  ayarları/////// 
porta=0 
portb=0 
trisa=%00000110 
trisb=255 
SO var porta.1 
'/////degişkenler//////// 
durum var byte 
biriktir var byte 
'/// portb yi  sıfırlama ///// 
portb=0 
'/// program baslangici///// 
bekle: 
if porta.2=1 then test 
goto bekle 

test: 



if PORTB=%00000010 then yukle 

goto test 

yukle: 

if PORTB=%00100001 then biriktir="!" 
if PORTB=%00100011 then biriktir="#" 
if PORTB=%00100100 then biriktir="$" 
if PORTB=%00100101 then biriktir="%" 
if PORTB=%00100110 then biriktir="&" 


yakson: 
serout SO,T9600,[biriktir] 
goto yukle  
end                


katana  kardes  ellerin  saglik  bu  kod  bu  şekilde  olunca  calıstı  şimdiki  aşamada  sunu  yapmam  lazım  ama  gene  cıkamadım  işin  içinden  burada
if PORTB=%00100001 then biriktir="!" 
if PORTB=%00100011 then biriktir="#" 
if PORTB=%00100100 then biriktir="$" 
if PORTB=%00100101 then biriktir="%" 
if PORTB=%00100110 then biriktir="&"
binary kodlara  karsilik  gelen  ascii kodlari biriktir degişkenine  atıp  okuyabiliyoruz  artık  lakin  benim  asıl  yapmaya  calıstıgım  sey  su  bu  kodları  biryerde  toplayı  lcd  ye  yolladıgımda  hepsinin aynı anda  cıkmasını  saglamak  ornek  olarak
#+$+%+&= #$%&      gibi  bişiler  olmasını  dusledim ama  bunu  bir  turlu  beceremedim  yani  lcd de  gormem  gereken  aslında  benim (#$%&)  bu  olmalı  konu  hakkında  fikir  ve  goruslerinizi  hatta  mumkunse  ornek bir  kodla anlatırsanız  cok  sevinirim
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

Veli B.

include "modedefs.bas" 
'/// analog  portlar  dijitale  cevrildi //////// 
cmcon=7 
'//// portların giriş cıkış  ayarları/////// 
porta=0 
portb=0 
trisa=%00000110 
trisb=255 
SO var porta.1 
'/////degişkenler//////// 
durum var byte 
biriktir var byte[4] 
'/// portb yi  sıfırlama ///// 
portb=0 
'/// program baslangici///// 
bekle: 
if porta.2=1 then test 
goto bekle 

test: 



if PORTB=%00000010 then yukle 

goto test 

yukle: 

if PORTB=%00100001 then biriktir[0]="!" 
if PORTB=%00100011 then biriktir[1]="#" 
if PORTB=%00100100 then biriktir[2]="$" 
if PORTB=%00100101 then biriktir[3]="%" 
if PORTB=%00100110 then biriktir[4]="&" 


yakson: 
serout SO,T9600,[biriktir[0],254,129,biriktir[1],254,130,biriktir[2]254,131,biriktir[3]254,132,biriktir[4]] 
goto yukle  
end


Bu şekilde çalışacağını sanıyorum.Daha önce seri lcd kullanmadığım için emin değilim.

murat79

katana  ustadım  fikir  olarak  galiba  anladım  gibi  lakin  yazdıgınız  kodda  bulunan  son  satırdaki  yani  
yakson: 
serout SO,T9600,[biriktir[0],254,129,biriktir[1],254,130,biriktir[2]254,131,biriktir[3]254,132,biriktir[4]] 
goto yukle  
end
[] gibi işaretleri  pbp compailer etmedi  verdigi  hata  su (error line 48: expected ']'.proje.bas
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

Veli B.

seri lcd için bakabilecek kadar vaktim yok kusura bakma.Kullanmadığım için çalışmasını incelemem lazım.Eğer seri değilde paralel lcd için denersen bu kod çalışır.Seri için en azından şimdilik yardımcı olamayacağım.

murat79

ustat  cok  sağolasın  ben  hallettim  olayı  
yakson: 
serout SO,T9600,[biriktir[0,biriktir[1],biriktir[2],biriktir[3],biriktir[4]] 
goto yukle  
end
yapınca  calıstı  seri lcd  ile
------------------------------------------------------- Kim Ne Derse Desin Kim Ne Söylerse Söylesin  Sen Gel Ne Olursan Ol Yine Gel

Veli B.

Tebrikler.Çalıştırmana sevindim.Ben de seri lcd için bir şey öğrenmiş oldum sayende.Teşekkürler.