Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RS232 Buffer temizleme

Başlatan ettenoir, 21 Aralık 2017, 13:12:10

ettenoir

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?

mufitsozen

HSerin komutunu context save/context restore satirlari arasinda kullandiginizdan oluyor
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

ettenoir

#2
Onları kaldırırsam gelen datayı direkt mi gösterir

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