proton

Başlatan selvi, 03 Aralık 2008, 08:37:44

selvi

pbp ile programlari yaziyorum.rf iletisimde ozellikle usart kesmesi veya birden kesme kullanma ihtiyaci oldugunda pbp de istikrarsiz durumlar cikiyor.
  usart ve  rb0 kesmesini ayni programda kullanmak istiyorum.pbp ile yazdigim programla bir turlu istikrarli bir sonuc aciga cikmadi.bu durumda proton tavsiye ediliyor.
 pbp ile proton arasindaki komut farkliliklarini oldugu bir kaynak var mi?proton icin onereceginiz derleyici?
Yaşam anlamlandırıldıkça kutsaldır....

Erol YILMAZ

Basic ile fazlaca vakit kaybetmeden C dilini öğrenip Ansi C derleyicilerinden birine geçmeni tavsiye ederim.

OG

C başka, Basic çalışan için ise Proton fazlasıyla yeterli.


Kesme ayarları
Diğer declare vs kodlar
ON_INTERRUPT GOTO Labelx

Goto Basla  ' Ana program döngüsü

Basla:  ' Bu arada kesme yokken normal kodlar
Kodlar.
Goto Basla

Labelx:  ' kesme ile girilen etiket
Context SAVE  'sistem yazmaçları yedeklenir
Kesme bayrağını temizle
Aradaki varsa diğer kodlar
Context Restore ' yedeklenen değerler geri çağırılıp tekrar ana programa dönülür.


Birde çift öncelikli kesme var.
Öncelik vereceğin kesme için;
ON_INTERRUPT GOTO Labelx
2. öncelikli kesme için
ON_LOW_INTERRUPT GOTO Labely

Yani
ON_INTERRUPT
ON_LOW_INTERRUPT

örneklerini incele. Bunlar donanım kesmesidir. Anında keser. Bir de yazılım kesmesi var, PBP daki yalnızca yazılım kesmesidir.

Yazılım kesmesi için ise ON ile INTERRUPT arasında  alt çizgi kullanılmaz
ON INTERRUPT Labelx
Bu da PBP daki gibi çalışır. Bir komutun icrası başlamışken kesme gelirse mesela
delayms 100 '100ms bekle
içinde iken kesme geldi ise 100ms dolmadan kesmeye gitmez. Bazen bu da gerekli olabilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

muhittin_kaplan

bende bu
on_interrupt goto Kesme
on_hardware_interrupt goto Kesme
on interrupt goto kesme
arasındaki farkın ne olduğunu bilmiyorudm teşekkür ederim
(birde software ve hardware int kavramı nedir ?)

muhittin_kaplan

peki usb den kaynaklı int. çalışmamasında da aynı sorun mu vardır.
buradada "context save" ve "context restore" kullanabilirmiyim ?

OG

ON_INTERRUPT donanım (hardware), on_hardware_interrupt ile aynıdır.

ON INTERRUPT yazılımsal (software)


USB konusunu bilmiyorum. context save/restore  donanım kesmesinden doğacak sıkıntılar için kullanılıyor. Her an oluşabilecek donaım Kesmesi  anındaki son değişkenler unutulmasın diye kaydedilip kesmeden çıkarken tekrar okunuyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

muhittin_kaplan

18f2550 ile int. çalıştırıyorum (rb0), usb yide çalıştırıyorum ayrı ayrı.
ikisini birleştirdiğimde yani int olduğunda bilgiyi gönder dediğimde olmuyor. bundan kaynaklı sanırım..

OG

Unuttuğumuz bir husus, 2. öncelikli kesme komutu ON_LOW_INTERRUPT 16 bit picler için gecerli.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

selvi

bu programda protonla usart donanim kesmesi ve rb0 kesmesi kullandim.program calismadi.kesme kullanimda hata var mi?
Device 16F628A
XTAL 4
Config XT_OSC,MCLRE_OFF,LVP_OFF,WDT_OFF,PWRTE_ON,BODEN_OFF

Declare LCD_DTPIN PORTB.4 'DATA giri?i PORTB'nin 4. ucundan ba?layacak
Declare LCD_ENPIN PORTA.3 'LCD'nin ENable ucu
Declare LCD_RSPIN PORTA.2 'LCD'nin Register Select ucu
Declare LCD_INTERFACE 4 'LCD veri yolu 4 bit olacak
Declare LCD_LINES 2 'LCD 2 sat?rdan olu?uyor
Cls

Declare HSERIAL_BAUD=9600   'MAXIBOOST
Declare HSERIAL_RCSTA=$90h  'MAXIBOOST
Declare HSERIAL_TXSTA=$00h  'MAXIBOOST
Declare HSERIAL_CLEAR=On    'MAXIBOOST
Declare HSERIAL_SPBRG=25    'MAXIBOOST

CMCON=7           '16F628 de komparatör pinleri iptal hepsi giriþ çýkýþ
PORTB_PULLUPS =0
Symbol GIE  =INTCON.7   'genel interruptlarý açýyor
Symbol PEIE =INTCON.6   'peripheralinterruptlarý açýyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
Symbol INTE=INTCON.4    'RB0  interrupt enable bit
Symbol INTF=INTCON.1    'RB0  interrupt flag bit

On_Interrupt GoTo KESME
RCIE=1
PEIE=1
INTE=0
GIE=1

TRISB=%00000011
TRISA=%00100000
PORTB=0

AL     VAR  Byte  
SAYI   VAR  Byte  
TEMP   VAR  Byte
SAYAC  VAR  Byte
I      VAR  Byte
M      VAR  Byte
K      VAR  Byte
A      VAR  Word
B      VAR  Word
RB     VAR  Bit
US     VAR  Bit
I=0
M=0
K=0
A=0
B=0
RB=0
US=0
SAYI=0
TEMP=0
SAYAC=0
AL=0
LOOP:
If RB=1 Then
DelayMS 9
If PORTB.0=1 Then
SAYI=SAYI+1
If SAYAC=SAYI Then
PORTB.3=1
DelayMS 500
PORTB.3=0
SAYI=0
EndIf
PORTB.6=1
DelayMS 400
PORTB.6=0
EndIf
RB=0
EndIf
If US=1 Then
US=0
      If i=0 And AL=73 Then
       I=I+1
      EndIf
      If I=1 And AL=111   Then
          I=I+1
      EndIf
      If  I=2 And AL=41   Then
       I=I+1
      EndIf
      If I=3 And AL=217 Then
       I=I+1
      EndIf
      If I=4 And AL=0 Then
       I=I+1
       PORTB.4=1
       DelayMS 500
       PORTB.4=0
      EndIf
KAPAT:  
       If M=0 And AL=233 Then
         M=M+1
         I=0
          EndIf
      If M=1 And AL=3 Then
       M=M+1
       I=0
        EndIf
      If M=2 And AL=79 Then
       M=M+1
       I=0
        EndIf
      If M=3 And AL=117 Then
       M=M+1
       I=0
      EndIf
      If M=4 And AL=61 Then
       PORTB.6=1
       DelayMS 500
       PORTB.6=0
      I=0      
      M=0
      INTE=0
      EndIf
      If i=5 And AL<>0  Then
     SAYAC=AL
      INTE=1
      For K=0 To 6
        PORTB.6=1  
        DelayMS 100
        PORTB.6=0
        DelayMS 100
        Next K  
      EndIf
      EndIf
GoTo LOOP
;---------USART KESME-----------
Disable
KESME:
Context SAVE 'sistem yazmaçlar? yedeklenir
GIE=0 'tüm interruptlar? kapat yani INTCON.7=0
If INTF=1 Then
RB=1
INTF=0 'kesme bayrag(? s?f?rlanacak)
GoTo CIK
EndIf
AL=0
HSerIn 1,BIR,[Wait("ARA"),Dec AL]
TEMP=RCREG
RCREG=0
TEMP=0
US=1
GoTo CIK
BIR:US=0
CIK:
Context Restore ' yedeklenen deg(erler geri çag(?r?l?p tekrar ana programa dönülür.
GIE=1 'Yani INTCON.7=1 kesmeleri açt?k.
Resume
Enable
End
Yaşam anlamlandırıldıkça kutsaldır....