usart kesmesi

Başlatan zihnisinir, 30 Eylül 2020, 09:16:06

zihnisinir

#15
Hocam fazlaca acemiliğim olsa da öğrenmenin önünde engel değil. o yüzden daha dikkatli yaklaşarak sorunları çözmeye çalışacağım. ayrıca size zaten hem kodları hem tabloyu yollamıştım o sebepten yeniden göndermedim herhangi bir değişiklik yapmamışım. Velhasıl.. verdiğiniz kodlar üzerinden değişimler yaptım fakat simülasyonda  yine çalışmıyor. ama mantık olarak anlamak istediğim bi şey var . ben alıcı devresinde butonlara basınca a portundan A0,A1 ve A2'den kablo ile iletim yapıp alıcı devresine bağlıyordum. Burada mantığım neydi. Şu an da herhangi bir modül bağlantısı yok, o yüzden bu şekilde bağlamalıyım ama gerekli modül bağlantılarını da yapınca o kabloları çıkaracağım. Ama sizin çiziminize baktığımda sanki bu bağlantılara gerek yok. TX-RX bağlantıları bunu yapıyor öyle mi ? eğer öyleyse modül bağlandığında da modül ayakları ile entegre ayakları arasında da tx-rx bağlantısı mı yapacağım ? umarım anlatabildim...  ayrıca config ayarlarında #config .... #endconfig bolumunu derleyici kabul etmedi..

zihnisinir

kırmızı çizgi ile çizdiklerim bahsettiğim bağlama şeklim (ama yanlış anlaşılmasın şimdi alıcı verici bağlantısını sadece tx-rx üzerinden yapıyorum)
son kodları da yine yolluyorum size.

verici
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_OFF & _PWRTE_ON 
define OSC 4
trisa=0
trisb=%01100010:portb=0
CMCON=7
OPTION_REG.7=1
INTCON=0

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  '9600 baud @ 4mhz
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
  
sayac var word  
VERI  VAR BYTE 
symbol buton=portb.0
symbol butonpatlat=portb.6
symbol butonpatlat2=portb.5
symbol cikis=porta.0
symbol cikis1=porta.1
symbol cikis2=porta.2



clear 
pause 300

basla:

if buton=1 then 
  cikis=1:veri=10
   gosub send
   veri=0
    else 
     cikis=0
      endif
  
  if butonpat=1 then 
   cikis1=1:veri=20
    gosub send
    veri=0
     else 
      cikis1=0
        endif

  if butonpat2=1 then
   cikis2=1:veri=30  
    gosub send
    veri=0
     else 
      cikis2=0             

  endif
  goto basla
 

SEND: 
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
HSEROUT ["A","R","A",veri]
 return 
 end

alıcı


'****************************************************************
'*  Name    : usartalicinu.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2020 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 1.10.2020                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
  
 @ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_OFF & _PWRTE_ON

 define OSC4
PORTA=0:PORTB=0
TRISA=%00000001:TRISB=%00000010
OPTION_REG=%11000101 'tum kesmeler ve tmro kesmesi acik  1/64 
CMCON=7 

DEFINE HSER_RCSTA 90h   ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h   ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25    '9600 baud @ 4mhz
DEFINE HSER_CLROERR 1   ' Clear overflow automatically

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheral interruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
 

TMRO var byte         
temp var byte
sayac var word
GELEN  VAR BYTE
X      VAR BYTE
ALDIM VAR BIT

symbol giris2=porta.0
symbol cikis1=portb.3

PAUSE 200
CLEAR






 on interrupt goto BASLA
 PEIE=1:RCIE=1:GIE=1  
  BASLA:
  IF ALDIM=1 THEN
          ALDIM=0
          IF GELEN=10 THEN CIKIS1=1
          IF GELEN=20 THEN CIKIS1=0  
          IF GELEN=30 THEN 
            FOR X=0 TO 2
              CIKIS1=1
              PAUSE 200
              CIKIS1=0
              PAUSE 200
            NEXT
           ENDIF
           GELEN=0
        ENDIF         
  
  GOTO BASLA

 disable
 KESME:
  GIE=0  
    hSerIn 10,dene,[WAIT("ARA"),GELEN] 
    ALDIM=1
       
dene: 
    temp=RCREG            
    RCIF=0
    GIE=1
    Resume
    enable
    end
 

simülasyon




ete

#17
Son verdiğin kodlar benim verdiğim kodlar zaten ne değiştirdinki?
Yanlızca Config satırı farklı oda versiyon farkından kaynaklanıyor ve fark sayılmaz.

Seri haberleşme adı üzerinde bir ünite ile diğer bir ünitenin belirli kurallar çerçevesinde bir biri ile haberleşmesi anlamına geliyor. A portundan yaptığın başka bir direk haberleşme yolu ya onu kullanacaksın yada seri haberleşmeyi kullanacaksın. Toplam 2 kablo ile iki üniteyi bir biri ile haberleştirebilirsin.Mesafe yaklaşık 3-5m dolayındadır.

Sen bir modülden bahsediyorsun ne modülüdür bu? Modülün ne olduğunu bilmeden soruna cevap veremeyeceğim. Üstelik çalışmıyor dediğin programı benim kodlar olmasına rağmen olmayacak bir değişiklik yapmışsın acaba neden?
on interrupt goto xxxxx   bu komut sence ne işe yarıyor?
Kesme oluştuğu zaman xxxxx ile belirlenen kesme etiketine gitmesini sağlıyor programın.
Peki sen oraya ne yazmışsın Goto BASLA  neden? AKlımdan kötü kötü senaryolar geçiyor.
Yinede iyi niyetimi koruyarak bir şey söylemeyeceğim ama bu konuyu kilitliyorum. Daha fazla devam etmeyecek.
ELinde örnek var. Son açıklamalarımıda dikkate alarak ne yapmak istiyorsan yaparsın artık.

Ete

Çalışmıyor dediğin programı

Ete

Powered by EzPortal