preamply sinyalinde sorun

Başlatan zerolax, 24 Ocak 2014, 20:09:42

zerolax

herkese hayırlı akşamlar

preamply sinyali olarak
HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]

bu komutu kullandığımda alıcıda aksama oluyor bazen almıyor ama preamply sinyali kullanmadığımda bir aksama olmuyor
preamply sinyali kullanmasam ilerde bana sorun çıkartırmı yada neden preamply sinyali kullandığımda böyle yapıyor
EMRE SALMAN

ete

Programın gerisini görmeden bu soruya yorum yapmak imkansız.

Ete

zerolax

@__config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF


OPTION_REG = 7
ADCON1 = 7


DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

define LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2


TRISA = %00000000
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
TRISE = %00000000


PORTA = 0
PORTB = 0
PORTC = 0
PORTE = 0
PORTD = 0

TEMP var byte
KIME VAR byte
EMIR var byte
SAYAC var word
ALDI VAR BYTE
KIM var byte
YENI var byte
KIMLIK var byte
KIMDEN VAR BYTE
XSAYAC VAR WORD

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 KONT = PORTB.0
rcie=1
peie=1
gie=1


on interrupt goto kesme

BASLA:

    kime = 255
    kimlik = 155
    lcdout $fe, 1
    kime = 255
    lcdout "gelen otobus"
    lcdout $fe, $C0,"yolda"
    PAUSE 500
   
GONDER:

        PORTB.7 = 1
        HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        HSEROUT ["E","M","R",kime,kimlik,10,13]
        PORTB.7 = 0
       
goto basla

KESME:

bu verici programı hocam

@__config _XT_OSC & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF


OPTION_REG = 7
ADCON1 = 7


DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


TRISA = %00000000
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
TRISE = %00000000


PORTA = 0
PORTB = 0
PORTC = 0
PORTE = 0
PORTD = 0

TEMP var byte
KIME VAR byte
EMIR var byte
SAYAC var word
ALDI VAR BYTE
KIM var byte
YENI var byte
KIMLIK var byte
KIMDEN VAR BYTE
XSAYAC VAR WORD

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 KONT = PORTB.0
rcie=1
peie=1
gie=1


on interrupt goto kesme

sayac = 0
BASLA:

    PORTB.6 = 1
    PORTB.6 = 1   
    sayac = sayac + 1
    if sayac = 300 then basla
    pause 5
goto basla

disable
KESME:
    PORTB.6 = 0

    hserin 10,atla,[wait("EMR"),kim,kimden]
    if kim = 155 then led
    if kimden = 155 then led
   
ATLA:

    TEMP=RCREG
    GIE=1
    Resume
    enable
   
   
LED:
    PORTB.7 = 1
    PAUSE 100
    PORTB.7 = 0
    PAUSE 1000
    TEMP=RCREG
    GIE=1
    resume
    enable

END


buda alıcı programı hocam

verici programı yarım daha bitirmedim geri bilgi alıdıracam
EMRE SALMAN

ete

Kesme içinde ........Then LED deyip kesme dışında bir yere atlayamazsın. Büyük hata !!!!!!!!!!!
Bir sürü HSEROUT komutunu alt alta yazmayın faydadan çok zarar sağlar. Heleki karşıda kesme kullanıyorsan 1 tanesi yeterlidir. Bir tane derken 1 tane PreAMBL için birde işaretçi ve yollanacak bilgi için demek istedim.

Fazlası programı kesmeden çıkmamaya zorlar başka işler aksar.

Ete

zerolax

hocam peki o zaman ben bu işlemleri nasıl seçtirebilirim kesmeden başka bir yere atlayamazsam yapacagı işleri tek tek if (eğer) komutu içindemi yapmalıyım birde dediğiniz gibi karşı taraftada kesme bir preamply bir de gönderececeğim bilgi kullandığım zaman çok geç algılıyor
rf leri söküp direk kabloyla denedim yine aynı
EMRE SALMAN

zerolax

hocam dediklerinizi uyguladım bu sefer tek preamply tek bilgi gönderme denedim şuan sorunsuz çalışıyordu kristalin bir bacaında sorun varmış teşekkür ederim verdiğiniz bilgiler için son sorum kesmeden bir yere atlamam yanlışsa hepsini if komutu içindemi yapmalıyım kesmede bekletipte sonramı kesmeden çıkmalıyım
EMRE SALMAN

ete

Bunun için genelde kullanılan yöntem atlama yerine bir başka değişkeni set etme yöntemidir.
Örnek verecek olursak POZ diye bir değişken kullanalım (POZ VAR BIT şeklinde tanımla)
if kim = 155 then led
if kimden = 155 then led
satırları yerine,
if kim = 155 or Kimden=155 then poz=1
hepsi bu.
Ana program bölümünde ise
IF POZ=1 then
  Poz=0
  Goto LED
ENDIF
şeklinde satırlar ilave edersen oldu bitti demektir.

Ete

zerolax

şöyle yapsam olurmu POZ = BYTE DESEM
IF KIM = 155 THEN POZ = 1
IF KIM = 11 THEN POZ = 2
IF KIM = 55 THEN POZ = 3
RESUME
ENABLE

porgramın basınada
IF POZ = 1 THEN LEDBIR
IF POZ = 2 THEN LEDIKI
IF POZ = 3 THEN LEDUC

bu mantıkla gitsem olur değil mi hocam en son led başlıklarından çıkarkende POZ = 0 yaparım
EMRE SALMAN

MS_59

#8
aslında bu sorgulamaları direk ana programda yapsanda olur
basla:
IF KIM = 155 THEN gosub led_bir
IF KIM = 11 THEN gosub led_iki
IF KIM = 55 THEN gosub led_uc


mehmet

ete

Ben  sana kesme içinde işaretçi biti kullanmayı gösterdim. Aslında Proteus haklı. Ana program döngüsü içinde yapılması gereken kaşılaştırmayı kesme içinde yapmaya kalkışıyorsun buna gerek yok ki.
Sanırım kesme işleminin işleme şeklinden habersiz sin. Anlatayım. Program ana döngü içinde dolaşıp dururken veri gelirse program kesme etiketine gider veriyi alıp yeniden kaldığı yere döner. Kesmeye gidip gelme arasında ne değişir tabiiki veri değeri o halde sen ,
İf veri=xx ise şuraya git gibi bir komut koyarsan program kesmeden dönünce bu komutu anında görür ve çalıştırır.  Böylece ayrıca poz değişkeni kullanmaya bile gerek kalmaz.

Ete

zerolax

Hocam çok sağolun beni aydınlattınız Allah yardıçcınız olsun
EMRE SALMAN

Powered by EzPortal