1. sayfa
r2d2droids, teşekkür ederim fakat bu işlerde acemiyim biraz daha açarmısınız mesela pbp de bir kaç satır yazarmısınız |
basic bilmiyorum fakat timer modülü ile işlem yapabilmeniz için ilk önce modül hakkında bilgi sahibi olmanız gerek. http://www.geocities.com/r2d2droids/downloads/appnotes/pic.zip adresinde Türkçe bilgi bulabilirsinz. ardından yapmanız gerekn basic dilinde timer için kullanılan registerlere modülü aktif etmek, bölücü değerini atamak interruptları aktif etmek gibi işlemleri gerçekleştirmek için bazı değerler atayacaksınız. modülün amacı sayma sonunda bir kesme oluşturmak pbp da kesmeleri nasıl yapabileceğinizi de pbp nin manual inden öğreneceksiniz. "interrupt service routine" şeklinde geçiyor olabilir. bilemiyorum. bilen arkadaşlar bu konuda yardımcı olacaklardır... |
Pic Basic yardım dosyasında on_interrupt komutunu bi incele.orda hazır bi saat programı var.... |
16f877'nin içinde sen kurmasan da sürekli sayan TMR0(8bitlik sayıcı), sen kurarsan sayan TMR1 (16 bitlik sayıcı), yine sen kurarsan çalışan TMR2 (8 bitlik sayıcı) mevcuttur. Bu sayıcıları kurarak kesmelerini aktif edersen belirli periyotlarla kesme oluştururlar ve sen de bu kesmeler sırasında belirli işlemler yapabilirsin. Mesela kesme içinde bir sayacı belirli bir sayıdan aşağıya saydırıp uzun zaman gecikmeleri elde edebilirsin. Bu arada programın kesmeler dışında başka işleri yapmaya devam eder. Örnek çok, ama benimkiler assembly olur. İŞine yararsa birkaç program koyarım buraya. Kolay gelsin. |
ilgilenen her keze teşekkürler r2d2droids, bir örnek buldum ve sizin verdiğiniz bilgiler o örneği anlamam için çok faydalı oldu teşekkür ederim fakat anlayamadıgım bir kaç nokta var saat var byte dsaat var byte dakika var byte saniye var byte ticks var byte update var byte saat = 0: dakika = 0: saniye = 0: ticks = 0: update = 1 option_reg = %00000101 intcon = %10100000 on interrupt goto kesme basla: if update = 1 then lcdout $fe,1 dsaat = saat if (saat//12) = 0 then dsaat = dsaat+12 endif if saat<12 then lcdout #dsaat,":",#dakika,":",#saniye," AM" else lcdout #(dsaat-12),":",#dakika,":",#saniye," PM" endif update = 0 endif goto basla disable (ne maksatla kullanılmış) kesme: ticks = ticks + 1 if ticks < 61 then devam ticks = 0 saniye = saniye + 1 if saniye >= 60 then saniye = 0 dakika = dakika + 1 if dakika>= 60 then dakika = 0 saat = saat + 1 if saat >= 24 then saat = 0 endif endif update = 1 devam: intcon.2 = 0 'kesme bayragı temizle (sizin verdiğiniz notlarda tmr0 sayıcısı zaman aşımı yok diyor) resume end bunları bana açıklayabilirmisiniz |
pic programı uygularken disable gördügü yerden enable gördügü yere kadar olan ara kısımda kesmeleri devre dışı bırakır.Yani disable . . . enable şeklinde yazarsan arada ... olan satırlar işlenirklen kesme oluşsada bi işlem yapılmayacak.Ben böyle biliyorum daha önce çok benzer bi uygulamayı yapmıştım. İkinci işaretledigin yerde ise 2.bitin temizlenmesinin amacı kesmeleri tekrar aktif etmen.Eger onu temizlemessen kesme gelsede ilgili bit 1 oldugundan işlem yapılmayacak diye biliyorum.Hatırladıklarım bunlar.Umarım anlatabilmişimdir |
cevap erken gelmiş ama soru sahibi arkadaşın yerinde olsam madem disable var neden enable yok sorusunu sorardım...![]() |
Hem enable yok hem de program "disable " komutunun olduğu satıra hiçbir zaman gitmez.Bi gariplik var |
Birkaç örnekte aynı olayı gördüm. Disable kesme olarak belirlenen etikete önek olarak kullanılan bir seçenek. Anti komutu disable değil resume. Soruyu soran arkadaşım seni hakkın programlama diline davet ediyorum C öğren bırak bu picbasic zırvalarını. ![]() ![]() |
µC ler için bir de C++ derleyicileri var onlarıda hakk diline dahil etmek lazım...![]() |
her keze açıklamalarından dolayı tşekkür ederim fakat ben bu dili kendi imkanlarımla zor zor öğrenmeye çalışıyorum ve cundalı oldugum için her istediğim malzeme ve kaynağa pat diye ulaşamıyorum her neyse.. bu akşam bir kaç saat kafa patlatıp olayı çözdüm benim anladıgım kadarıyla bişeyler açıklamaya çalışayım eğer yanlışım olursa sizlerden müdahale bekliyorum enable komutu kullanılmasada oluyor anladıgım kadarıyla intcon2 kontrol edilerek enableye gerek kalmadan kesme iptallikten çıkıyor tmr0 256usn de bir başa dönüyor ve başka bir satır okunurken zaman aşımı oluştugundan intcon2 1 oluyor ben birde denemek amacıyla ufak bir program yazdım program lcd de analogtan giren bilgiyi geçen saniyeyi(100sn ye kadar sonra tekrar sıfırlanıyor)ve hserout la giren bir seri veriyi okuyor bunu örnek olarak vereyim dedim trisc = %10111111 zaman var byte say var byte w var word gel var byte intcon = $a0 option_reg = $05 on interrupt goto kes basla: lcdout $fe,$80,"sn:",#zaman,":",#say," gln:",#gel," " adcin 0,w lcdout $fe,$c0,"olc:",#w," " hserin 10,hata,[gel] goto basla disable kes: say = say+1 if say < 61 then git say = 0 zaman = zaman+1 if zaman = 100 then zaman = 0 git: intcon.2 = 0 resume enable hata: goto basla eger bir yanlışım varsa lütfen uyarın hemen düzelteyim |
yardım dosyasını bir yerlere upload edebilir misin? zorla pic basic öğreteceksin bana...![]() |
http://rapi.dshare.tv/30518 soldakine on interrupt sağdakine hserout yüklenecek |
sayın üstadlar yok mu bunu inceleyen dogru yolda olup olmadıgımı merak ediyorum eksiklerimi bana söyleyebilirmisiniz |
Proton Pic Basic e laf söyletmem..![]() ![]() |
1. sayfa
sayın arkadaşlar mesela pbp de hpwm komutunu kullandıgımızda pic herhangi bir satırı uygularken arka taraftanda pwm sinyalini üretebiliyor peki bu işi zaman içinde yapabilirmi yani başka bir işle ugraşırken arka taraftanda zamanı sayabilirmi eğer 16f877 veya 84 için varsa böyle bir şey ufak bir örnek verebilirmisiniz