F452+INTERRUPT ?

Başlatan gofe, 15 Ağustos 2009, 16:34:32

gofe

   Device = 18F452
    ON_INTERRUPT GoTo ATES
    XTAL=20
    ADCON1=%10000001
   
    Declare ADIN_RES 10
    Declare ADIN_TAD 32_FOSC 
    Declare ADIN_STIME 100
    Declare LCD_DTPIN PORTB.4
    Declare LCD_ENPIN PORTB.3
    Declare LCD_RSPIN PORTB.2
    Declare LCD_LINES 2

    Symbol BTU PORTB.1
    Symbol BTD PORTD.7
    Symbol BTL PORTB.0
    Symbol BTR PORTD.6

    INTCON=%11100000 
    T0CON=%10000011 

    Dim SAY As Word
    Dim SAY_2 As Word
    SAY_2=0
    SAY=0
    Cls



ANA:
'    Print At 1,1,"SAYICI "
'    Print At 2,1,DEC4 SAY_2,"    "
    DelayMS 300
    GoTo ANA

Disable
ATES:
    Inc SAY
    If SAY>=1225 Then SAY=0:Inc SAY_2
    If SAY_2=10 Then High PORTC.2 : Low PORTC.1
    If SAY_2=20 Then Low PORTC.2  : High PORTC.1 : SAY_2=0
    INTCON.2=0
    Print At 1,1,"SAYICI "
    Print At 2,1,DEC4 SAY_2,"    "

    Resume
Enable


End


10 ms de bir çıkış konumunu değiştirmek istiyorum.

Bu kod ile kesme oluşturamadım hata nerdedir?

Maxim

zamanlamayı yaparsınız artık ,
bu şekilde çalışıyor ,
birde interrupt içerisinde print komutunu kullanmıyorlar.

   Device = 18F452 
    ON_INTERRUPT GoTo ATES 
    XTAL=20 
    
    ADCON1=%10000001 
    
    Declare ADIN_RES 10 
    Declare ADIN_TAD 32_FOSC 
    Declare ADIN_STIME 100 
    
    Declare LCD_DTPIN PORTB.4 
    Declare LCD_ENPIN PORTB.3 
    Declare LCD_RSPIN PORTB.2 
    Declare LCD_LINES 2 

    Symbol BTU PORTB.1 
    Symbol BTD PORTD.7 
    Symbol BTL PORTB.0 
    Symbol BTR PORTD.6 

    INTCON=%11100000 
    T0CON=%10000011 

    Dim SAY As Word 
    Dim SAY_2 As Word 
    SAY_2=0 
    SAY=0 
    Cls 

ANA: 
    Print At 1,1,"SAY  :",DEC4 SAY,"   " 
    Print At 2,1,"say_2:",DEC4 SAY_2,"   " 
    DelayMS 300 
    GoTo ANA 

Disable 

ATES: 
    Inc SAY 
    If SAY>=1225 Then SAY=0:Inc SAY_2 
    If SAY_2=10 Then High PORTC.2 : Low PORTC.1 
    If SAY_2=20 Then Low PORTC.2  : High PORTC.1 : SAY_2=0 
    INTCON.2=0
    Context Restore

gofe

"CONTEXT RESTORE"
yazınca stack hatası alıyorum.

Maxim

yukarıdaki kod bende proteusta çalışıyor

gofe

7,1 sp4 bende hata veriyor.

Maxim


gofe

CONTEXT RESTORE yi kabul ettiremedim.

ON_Interrupt
ile
ON Interrupt arasındaki farkı bilmiyordum , On interrupt yazınca kesmeler çalışmaya başladı.
Yalnız zamanlama hatalı o da ayrı bir konu.


osc =20 mhz ise 1 saykıl=0.2 us
tmr0 süresi prs 16 ise

255*0,2*16=816 us

10 msn gecikme için
10000/816 =12,5 çıkıyor.
ben 1225 yazmışım .

ancak
12.5 bile gerçek devrede baya uzun sürüyor 1,5 sn kadar.
hata nerde olabilir yanlışmı anlamışım timer konularını?

Maxim

yok zamanlamada hata var ama nedenini bende anlamadım ,

on_interrupt hardware interrupt demektir,
yani gerçek interruptta diyebiliriz heralde

on interrupt ise software interrupttır,

aradaki fark şudur,
software interruptta bir komut işlenirken tam o sırada kesme geldiyse ,
komutun bitmesi beklenir ondan sonra kesme işlemi başlar.
mesela 1 saniyelik bekleme delayms 1000 sırasında kesme gelirse 1 saniye beklenir , donanımsal interruptta her ne olursa olsun kesme geldiği anda kesmeye gidilir.

protonun helpinde interrupt yazın orada açıklamalar var ,
CONTEXT RESTORE de orada yazmaktadır .