Picproje Elektronik Sitesi

DERLEYİCİLER => Proton+ => Konuyu başlatan: ettenoir - 21 Aralık 2017, 13:12:10

Başlık: RS232 Buffer temizleme
Gönderen: ettenoir - 21 Aralık 2017, 13:12:10
Merhaba arkadaşlar,

PIC18F452 kullanıyorum. DWIN K600+ ekran ile RS232 üzerinden haberleştiriyorum. Şöyle bir sıkıntım var, pic gelen datayı okuyor fakat silmiyor, aynı tuşa tekrar bastığımda üstüste biniyor data ve bundan dolayı ekranda farklı değerler çıkıyor.

İnternette bulduğum hazır bir kodu 18F452'ye uyarladım, hazır kod şöyle

Device = 16F877
Xtal = 4
On_Interrupt GoTo kesme 'hardware kesmesi
ADCON1=7 'TÜM GGRGgLER DGGGTAL
Declare Hserial_Baud = 9600 ' Seri iletiGim hızı 9600 bPs
Declare Hserial_RCSTA = %10010000 ' seriport açık ve alıma herzaman açık
Declare Hserial_Clear = On ' bilgi alındığında Tampon belleği temizle
Declare LCD_DTPin = PORTD.4
Declare LCD_RSPin = PORTE.0
Declare LCD_ENPin = PORTE.1
Declare LCD_Interface = 4 ' 4-bit Interface
Declare LCD_Lines = 2
Declare LCD_Type = 0
Declare LCD_CommandUs = 2000
Declare LCD_DataUs = 50
Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol RCIE = PIE1.5 ' USART Receive Interrupt yetki
Symbol RCIF = PIR1.5 ' USART Receive Interrupt bayrağı
GIE=0 'tüm kesmeler kapalı
PEIE=1 'Çevre birim kesmesi aktif
RCIE=1 'Usart alım kesmesi aktif
GIE=1 'tüm kesmeler aktif
Dim satir As Byte 'satir adında byte değiGken
Dim Dongu As Byte 'donu adında byte değiGken
Dim GelenBilgi As Byte
satir=1
basla: 'ana program baGlangıç
For Dongu=1 To 16 '
Print At 2,Dongu,"#" '2 satırın "Dongu" sütünuna "#" yaz
DelayMS 100 '100ms bekle
Next '
For Dongu=1 To 16 '
Print At 2,Dongu," " '2 satırın "Dongu" sütünuna " " yaz
DelayMS 100 '
Next '
GoTo basla '
hata:
Print At 1,satir,"Hata"
Return
kesme: 'kesme alt programı
Context Save 'kayıcıların içeriğini sakla
HSerIn 1000,hata,[GelenBilgi] 'Hardware Usart Kullanarak bilgiyi al
'"gelenbilgi" 'değiGkeninin içeriğine at eğer timeout olursa (1000 ms) "Hata" ya dallan
Print At 1,1,"Gelen Deger ",Dec GelenBilgi 'gelen bilginin değerini yazdır
RCIF = 0 'USART Receive interrupt Flag Temizleniyor
Context Restore 'tüm kyıtlı reg. tekrar yüklenip keseden çıkılıyor
End 'program sonu


Bu kodda ISIS'te test ettiğimde aynısı oluyor.

Sorum şu, buffer'ı nasıl temizleyebilirim?
Başlık: Ynt: RS232 Buffer temizleme
Gönderen: mufitsozen - 21 Aralık 2017, 16:21:35
HSerin komutunu context save/context restore satirlari arasinda kullandiginizdan oluyor
Başlık: Ynt: RS232 Buffer temizleme
Gönderen: ettenoir - 21 Aralık 2017, 16:49:36
Onları kaldırırsam gelen datayı direkt mi gösterir

Kaldırdım bu sefer program bir kere input gelince duruyor