HSEROUT

Başlatan vale9, 09 Haziran 2008, 16:31:53

vale9

HSEROUT komutunu kullandığım zaman tx ve rx pinleri (16F873 için Portc.6 ve 7) açılışta sürekli lojik-1 olarak kalıyor, ne yaptıysam çözemedim. Bu olay her iki işlemcimde de interrupt olarak algılanıyor.

Kodları ISIS'te simule ediyorum.

TRIS register'ı doğru ayarlı.
Hayat 1'ler ve 0'lardan ibarettir.

OG

Usart açık ise TX pini H olur bu normal, hatta bunun önüne gecemezsiniz, fakat RX pini zaten giriş atanması gerektiğinden herhangi bir lojik seviye görmemeniz gerekir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

vale9

hocam TX'i anladım. RX'i giriş atamıştım zaten ama yine aynı. Hatta şimdi RX'in ucunu boş bıaktım simulasyonda high gösteriyor
Hayat 1'ler ve 0'lardan ibarettir.

Gurkan-Demirbas

Programını verirmisin lütfen?
isis'de programını problemsiz simüle edebildin mi?

Gürkan

vale9

Ayrıca hocam tespit ettiğim şey şu: eğer kodun herhangi bir yerinde HSERIN geçiyorsa buraya hem tx hem de rx high oluyor. Bu komutu yürütmesem de oluyor. HSERIN veya HSEROUT komutlarını koddan sildiğimde low oluyor. Anlam veremedim?
Hayat 1'ler ve 0'lardan ibarettir.

mech

proton pic basic bölümünde hserout ve kesme konusunda bi başlık açmıştım. Bu konuyu orada çözdük. Bir bak istersen. Ayrıca aynı bölümde 4. sayfada yine bu konu var orada çok daha ayrıntılı bilgi içeren bir başlık daha var.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

Gurkan-Demirbas

Alıntı yapılan: "mech"proton pic basic bölümünde hserout ve kesme konusunda bi başlık açmıştım. Bu konuyu orada çözdük. Bir bak istersen. Ayrıca aynı bölümde 4. sayfada yine bu konu var orada çok daha ayrıntılı bilgi içeren bir başlık daha var.
https://www.picproje.org/index.php/topic,20782&highlight=
Alıntı YapProgramını verirmisin lütfen?
Hocam programını verebilirsen yardımcı olmaya çalışırız; OG hocama katılıyorum; RX tanımlanana pin'den Lojik0 alman lazım; programda bir hata olma olasılığı daha yüksek

Gürkan

vale9

Örneği ETE hocamın örnekleri üzerinde yazdım.

                                                 
@ DEVICE PIC16F873A                             ' model PIC16F873A                          
@ DEVICE PIC16F873A, WDT_OFF                    ' watch dog timer: off
@ DEVICE PIC16F873A, PWRT_OFF                   ' power-on timer: off
@ DEVICE PIC16F873A, PROTECT_ON                 ' code protect: on
@ DEVICE PIC16F873A, XT_OSC                     ' oscillator: xtal

DEFINE LCD_DREG     PORTC                       ' lcd data port is portc
DEFINE LCD_DBIT     0                           ' lcd data pins starts from pin 0
DEFINE LCD_RSREG    PORTC                       ' lcd rsreg pin is at portc
DEFINE LCD_RSBIT    5                           ' lcd rsreg pin is 5th
DEFINE LCD_EREG     PORTC                       ' lcd ereg pin is at portc
DEFINE LCD_EBIT     4                           ' lcd ereg pin is 4th
DEFINE LCD_RWREG    PORTA                       ' lcd rw pin is at porta
DEFINE LCD_RWBIT    0                           ' lcd rw pin is 0th
DEFINE LCD_LINES    2                           ' lcd is 2 lines
DEFINE LCD_BITS     4                           ' lcd communication protocol: 4 bits

ADCON1=6                                        ' porta digital

'TRISA=%00111111                                 ' porta direction
'TRISB=%11110111                                 ' portb direction
TRISC=%10111111                                 ' portc direction

DEFINE HSER_RCSTA 90h                           ' enable ser. port & cont. rec.
DEFINE HSER_TXSTA 20h                           ' enable transmit, brgh=0

DEFINE HSER_SPBRG 25                            ' 2400 baud @ 4 mhz, %0,17
DEFINE HSER_CLROERR 1                           ' clear overflow automatically

SYMBOL GIE  = INTCON.7                          ' general interrupt enable
SYMBOL PEIE = INTCON.6                          ' peripheral interrupt enable
SYMBOL RCIE = PIE1.5                            ' usart receive int. enable
SYMBOL RCIF = PIR1.5                            ' usart receive int. flag

SYMBOL TX    = PORTC.6                          ' tx pin        = portc.6 
SYMBOL RX    = PORTC.7                          ' rx pin        = portc.7

M       VAR BYTE                                ' for message data
TEMP    VAR BYTE                                ' for usart reg

LOW TX
LOW RX

'------------------------------------------------------------------------------
INITIALIZE:

    PAUSE 500

    ON INTERRUPT GOTO INT
    RCIE=1
    PEIE=1
    GIE=1

'------------------------------------------------------------------------------
MAIN:
    
    LCDOUT $FE,1,"M=", M
    LCDOUT $FE,$C0,"TEMP=", TEMP
    
    PAUSE 100
    SOUND PORTB.0,[100,5,100,50]

    ..........


    GOTO MAIN
    
'------------------------------------------------------------------------------
SEND:

    HSEROUT [REP$55\8,REP$55\8,REP$55\8,REP$55\8,REP$55\8]  ' preamble signals
    HSEROUT [REP$00\8,REP$00\8,REP$00\8,REP$00\8,REP$00\8]
    HSEROUT [REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8]
    TX=0                                        ' stop bit
    TX=1                                        ' start bit
    HSEROUT [M]                                 ' send M data
    HSEROUT [M]
    HSEROUT [M]
    PAUSE 50                                    ' wait for 50 ms
    
    RETURN

'------------------------------------------------------------------------------
    DISABLE
INT:

    GIE=0
    HSERIN, [M]
     
    TEMP=RCREG
    GIE=1
    RESUME
    
    ENABLE

    END
Hayat 1'ler ve 0'lardan ibarettir.

vale9

ARKADAŞLAR CEVABI BULDUM AMA ÇOK KOMİK Bİ DURUM VAR ANLAMADIM NİYE ÖYLE OLDU:

başta LOW RX yazmıştım onu kaldırınca çalıştı normal olarak   :?
Hayat 1'ler ve 0'lardan ibarettir.

mech

benzer hatayı yapmışız. low deyince tabi çıkış olarak atadı.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

vale9

OG hocam RX pinini halletim ama,

Alıntı YapUsart açık ise TX pini H olur bu normal, hatta bunun önüne gecemezsiniz...

demiştin. Önüne geçmem lazım:) Çünkü karşı taraf sürekli interruptta kalıyor napabilirim?

Komutların herhangi bir yerinde kullansamda kullanmasamda HSEROUT veya HSERIN geçiyorsa bu pin otomatik olarak H oluyor simulasyonda.
Hayat 1'ler ve 0'lardan ibarettir.

OG

Geçilemiyor çünkü usart açıldığı gibi TX pini H seviyeye çıkıyor.

http://picproje.org/index.php/topic,19402
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

vale9

Ama usart'ı açmıyorum, tüm registerları iptal ettim.

HSEROUT komutunun olduğu yere programın dallanmasını da engelledim TX hala High. Derlerken bu komutun bir yerde geçtiğini görürse otomatik olarak RX ve TX'i usarta atama yapıyor anladığım kadarıyla.
Hayat 1'ler ve 0'lardan ibarettir.

OG

DEFINE HSER_RCSTA 90h  ' RCSTA=%10010000
demektir
7. bit usartı açar. yani define ile usart açılmış olur. Bu biti 0 yapıp PORTB.2 yi lowa cekebilirsin veya bu pini giriş olarak kullanabilirsin. Aksi taktirde low olmaz, çıkış durumundadır ve H seviyesindedir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

vale9

Hocam haklıymışsınız. Benim sorunumda usart RX sürekli aktif olacak, TX de ben data yollayacağım zaman aktif olacaktı. Fakat yazılımsal olarak bu imkansızmış.

Ben çözümümü paylaşmak istedim:

* Usart sürekli aktif

* Gönderme yaparken bir pini daha feda edip TX pini ile AND yapıyorum.

* Diğer pin sadece gönderme yapılırken H, diğer durumlarda L oluyor.

* Böylece gönderme yapmıyorken AND'lenmiş çıkışım L olarak kalıyor.
Hayat 1'ler ve 0'lardan ibarettir.