 | Elektrotekno.com Elektronik ve Teknoloji Merkezi
|
| | Yazar | Mesaj | fredy2005 | | Tarih: 19.09.2008, 13:08 Mesaj konusu: 16f628A - stack overflow executing call instruction - acil y | |
| arkadaşlar kitabın birinde assembly komutlarda bir proje buldum işime yarayacak bir proje ama onu geliştirip biraz değiştirmem gerekiyor böyle olduğu için programın aynısını biraz daha iyi bildiğim proton dilinde yazmaya çalıştım ama proteusta karşıma ard arda "stack overflow executing call instruction" şeklinde msj çıkıyor ve program kesmeye gitmiyor.
bu arada proje ccp ve timer1 kullanarak belirli frekans aralıklarını ledlerde gösteren bir program ama protonda yazınca sürekli bu hatayı veriyor her iki dilde de yazdığım program komutlarını gönderiyorum acaba nerde hata olduğunu söyleyebilir misiniz?
**********assembly kodlar*****************
lıst p=16f628a
ınclude "p16f628a.ınc"
ledler equ h'20'
org h'0000'
goto basla
org h'0004'
goto kesme
basla
clrf portb
banksel trısb
movlw b'00001000'
movwf trısb
bsf pıe1,2
banksel portb
movlw b'00000101'
movwf ccp1con
movlw b'00000001'
movwf t1con
movlw h'c0'
movwf ıntcon
clrf ledler
dongu
goto dongu
kesme
clrf tmr1l
clrf tmr1h
bcf ıntcon,gıe
movlw b'00000000'
movwf ledler
movlw d'100'
subwf ccpr1h,w
btfsc status,c
goto anaprog
movlw b'00010000'
movwf ledler
movlw d'80'
subwf ccpr1h,w
btfsc status,c
goto anaprog
movlw b'00110000'
movwf ledler
movlw d'60'
subwf ccpr1h,w
btfsc status,c
goto anaprog
movlw b'01110000'
movwf ledler
movlw d'40'
subwf ccpr1h,w
btfsc status,c
goto anaprog
movlw b'11110000'
movwf ledler
anaprog
movf ledler,w
movwf portb
bcf pır1,2
bsf ıntcon,gıe
retfıe
end
********proton***************
device=16f628a
trısb=%00001000
portb=0
cmcon=7
on ınterrupt goto int
pıe1.2=1 'ccp1 capture modu devrede
ccp1con=%00000101 'her yükselen kenarda yakalama
t1con=%00000001 'timer1 aktif
ıntcon=$00000011 'kesmeler aktif
dongu:
goto dongu
int:
tmr1l=0
tmr1h=0
ıntcon.7=0 'yeni kesmeleri engelle
portb=%00000000
ıf ccpr1h<100 then portb=%00010000
ıf ccpr1h<80 then portb=%00110000
ıf ccpr1h<60 then portb=%01110000
ıf ccpr1h<40 then portb=%11110000
pır1.2=0 'bayrağı sıfırla
ıntcon.7=1 'kesmeler yeniden aktif
resume
end
şimdiden teşekkürler
-----------------------------------------------------
|
|
the_dalga | | Tarih: 11.11.2008, 02:06 Mesaj konusu: | |
| aynı sorunu ben su yüzden yasıyordum
Program bittikten sonra gecikme kısmına girince (girmemesi gerek call la falan cagirmiyorum
normal işleyişte giriyor) return komutu ile karşılıyordu.E döneceği bir yer yok,dolayısıyla stack sorunu cıkıyordu.
BELKİ isine yarar dedim kolay gelsn.
-------program
gecikme (dikkat etmediğim için program bitiminde giriyor)
movlw h'00'
return (döneceği yer yok )
|
|
|
|