PC Pic Haberleşmesi 2X16 LCD Ekran Karakter Sorunu

Başlatan hit85, 05 Şubat 2016, 01:11:29

hit85

Mrblar

Hserin ve Hseout komutlarıile PC ve PIC haberleşmesi yapmak istiyorum.
PIC-->PC veri(karakter) geliyor, burda sıkıntı yok.
Ama PC-->PIC veri(karakter ) geliyor. Ama ekrana yazdırma sorun yaşıyorum.
5 Karakter gönderdim diyelim. 2*16 LCD nin tek(1.) karakterinde, sırayla 3 veri görebiliyorum.
16 Karakter gönderdim diyelim 16 karakteri de LCD'de nasıl yazdırabilirim.

Str ile denedim o da olmadı.
Yardımlarınız için şimdiden Teşekkürler.

Not: PC de kullandığım Terminal Programı :Terminal v1.9b
        Resim alıntıdır. 



' HserOut Hserin veri gönderme-alma
' gönderilen komutlar ekranda tek karakter olarak yazıyor (16 Karakter yazması lazım)
Device = 16F876

;-------------------------------------------------------------------------------
Xtal = 16
Declare PortB_Pullups = On
On_Interrupt GoTo kesme 'hardware kesmesi
ADCON1=7 'TUM G.R..LER D.G.TAL	

Declare LCD_RSPin PORTB.2
Declare LCD_ENPin PORTB.3
Declare LCD_DTPin PORTB.4
Declare LCD_Interface 4
Declare LCD_Lines 2 


Declare Hserial_Baud = 38400
Declare Hserial_RCSTA = %10010000
Declare Hserial_TXSTA = %00100100
Declare Hserial_SPBRG=25
Declare Hserial_Clear = On
      
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 'tum kesmeler kapal.
PEIE=1 'Cevre birim kesmesi aktif
RCIE=1 'Usart al.m kesmesi aktif
GIE=1 'tum kesmeler aktif
Dim Dongu As Byte 'donu ad.nda byte de.i.ken
Dim GelenBilgi As Byte


GoTo basla
'hata:
    'Print At 1,12," Hata"
    'Return

kesme: 'kesme alt program.
    Context Save 'kay.c.lar.n iceri.ini sakla
    'HSerIn 2000,hata,[GelenBilgi] 'Hardware Usart Kullanarak bilgiyi al
                    '"gelenbilgi" 'de.i.keninin iceriğine at eğer timeout olursa (1000 ms) "Hata" ya dallan
    HSerIn 2000,[GelenBilgi]
    GoSub GetChar
    GoSub PutChar
    Print Cls
    Print At 1,1,"GelenBilgi " 'gelen bilginin de.erini yazd.r
  'For i=0 To 15
    'Print At 2,1+i,GelenBilgi+i : DelayMS 2
    Print At 2,1,GelenBilgi
  'next
    RCIF = 0 'USART Receive interrupt Flag Temizleniyor
    DelayMS 5000
    Print Cls 
    Context Restore 'tum ky.tl. reg. tekrar yuklenip keseden c.k.l.yor

basla: 'ana program ba.lang.c
   For Dongu=1 To 16
        Print At 1,1,"Veri yollaniyor "       '
        Print At 2,Dongu,"#"    '2 sat.r.n "Dongu" sutununa "#" yaz
        DelayMS 50
    Next 
    Print Cls  
                   '
    For Dongu=1 To 16
        Print At 1,1,"Veri yollaniyor "       '
        Print At 2,Dongu," "    '2 sat.r.n "Dongu" sutununa "#" yaz
        DelayMS 50
    Next 
    Print Cls
    'HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preamble
    HSerOut ["ATZ"]
    GoTo basla '

 
     
' Get a character from the USART receiver
GetChar:
    GelenBilgi = 0                          ' Preset to no character received
    If PIR1.5 = 1 Then GelenBilgi = RCREG   ' If receive flag then get character
    Return                          ' Go back to caller

' Send a character to the USART transmitter
PutChar:
    If PIR1.4 = 0 Then PutChar      ' Wait for transmit register empty
    'TXREG = GelenBilgi                    ' Send character to transmit register
    Return                          ' Go back to caller
 End 'program sonu

hit85

 PC den PIC e 16 karaktere kadar (1-16) sorunsuz bir şekilde  karakter gönderdim sonunda.
' HserOut Hserin veri gönderme-alma
' gönderilen komutlar ekranda  karakter olarak yazıyor
' 
Device = 16F876

;-------------------------------------------------------------------------------
Xtal = 16
Declare PortB_Pullups = On
Declare LCD_RSPin PORTB.2
Declare LCD_ENPin PORTB.3
Declare LCD_DTPin PORTB.4
Declare LCD_Interface 4
Declare LCD_Lines 2 

'Symbol set_  PORTC.0 '17
'Symbol geri  PORTC.1 '18
'Symbol ileri PORTC.2 '16
'Symbol iptal PORTC.3 '15
'Symbol buzzer PORTC.4

Declare Hserial_Baud = 38400
Declare Hserial_RCSTA = %10010000
Declare Hserial_TXSTA = %00100100
Declare Hserial_SPBRG=25
Declare Hserial_Clear = On
'Declare SERIAL_DATA 8           ' Set SERIN and SEROUT data bits to 8 (default) 	
	
'All_Digital=TRUE                    'bütün portlari djital (1-0) yap 

      
Symbol GIE  =INTCON.7   'genel interruptlar  aciyor
Symbol PEIE =INTCON.6   'Cevresel kesmeleri  aciyor
Symbol INTE =INTCON.4   'RB0 Kesmesini aciyor
Symbol INTF =INTCON.1   'RB0 kesme bayragi
Symbol RCIE =PIE1.5     'USART kesmesini aciyor
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
GIE=0     'Butun kesmeler devrede
INTE=1    'RB0 kesmesi devrede       
RCIE=1    'USART kesmesi devrede
PEIE=1    'Cevresel kesmeler devrede
GIE=1     'Butun kesmeler devrede
On_Interrupt GoTo kesme 'hardware kesmesi

Dim Dongu As Byte 'donu ad.nda byte de.i.ken
Dim GelenBilgi[16] As Byte
Dim i As Byte          ' Döngü değişkeni
GoTo basla

hata:
    Print Cls
       Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r
    'Print At 2,1,"16 KarkterOlmali"
    If GelenBilgi[15]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10],GelenBilgi[11],GelenBilgi[12],GelenBilgi[13],GelenBilgi[14]
      
    If GelenBilgi[14]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10],GelenBilgi[11],GelenBilgi[12],GelenBilgi[13]
      
    If GelenBilgi[13]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10],GelenBilgi[11],GelenBilgi[12]
      
    If GelenBilgi[12]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10],GelenBilgi[11]
      
    If GelenBilgi[11]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10]
      
    If GelenBilgi[10]=0 Then '1.if
      Print Cls
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9]
      
    If GelenBilgi[9]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8]
      
    If GelenBilgi[8]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7]
      
    If GelenBilgi[7]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6]
      
    If GelenBilgi[6]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5]
      
    If GelenBilgi[5]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4]
      
    If GelenBilgi[4]=0 Then '1.if
      Print Cls  
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3]
      
    If GelenBilgi[3]=0 Then '1.if
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2]
      
    If GelenBilgi[2]=0 Then '1.if
      
      Print Cls  
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0],GelenBilgi[1]
      
    If GelenBilgi[1]=0 Then '1.if
      
      Print Cls 
      Print At 1,1,"GelenBilgi Eksik " 'gelen bilginin de.erini yazd.r 
      Print At 2,1,GelenBilgi[0]
      
    If GelenBilgi[0]=0 Then '1.if
       Print Cls
       Print At 1,1,"Hataaaa " 'gelen bilginin de.erini yazd.r
       Print At 1,1,"HicbirBilgiGelmed"
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    
    RCIF = 0 'USART Receive interrupt Flag Temizleniyor
    GIE=1
    DelayMS 5000
    Print Cls
DelayMS 100
GoTo basla


kesme: 'kesme alt program.
    Context Save 'kayıtlar.n iceriğini sakla 
    'HSerIn 2000,hata,[GelenBilgi] 'Hardware Usart Kullanarak bilgiyi al
                    '"gelenbilgi" 'de.i.keninin iceriğine at eğer timeout olursa (1000 ms) "Hata" ya dallan
    
    GelenBilgi[0] = 0
    GelenBilgi[1] = 0
    GelenBilgi[2] = 0
    GelenBilgi[3] = 0
    GelenBilgi[4] = 0
    GelenBilgi[5] = 0
    GelenBilgi[6] = 0
    GelenBilgi[7] = 0
    GelenBilgi[8] = 0
    GelenBilgi[9] = 0
    GelenBilgi[10] = 0
    GelenBilgi[11] = 0
    GelenBilgi[12] = 0
    GelenBilgi[13] = 0
    GelenBilgi[14] = 0
    GelenBilgi[15] = 0
    HSerIn 1000,hata,[Str GelenBilgi\16]:DelayMS 250
    Print Cls
    Print At 1,1,"GelenBilgi " 'gelen bilginin de.erini yazd.r
      Print At 2,1,GelenBilgi[0],GelenBilgi[1],GelenBilgi[2],GelenBilgi[3],GelenBilgi[4],GelenBilgi[5],GelenBilgi[6],GelenBilgi[7],GelenBilgi[8],GelenBilgi[9],GelenBilgi[10],GelenBilgi[11],GelenBilgi[12],GelenBilgi[13],GelenBilgi[14],GelenBilgi[15]
    RCIF = 0 'USART Receive interrupt Flag Temizleniyor
    GIE=1
    DelayMS 2000
    Print Cls 
     
    Context Restore 'tum ky.tl. reg. tekrar yuklenip keseden c.k.l.yor

basla: 'ana program ba.lang.c 
   For Dongu=1 To 16
        Print At 1,1,"Veri yollaniyor "       '
        Print At 2,Dongu,"#"    '2 sat.r.n "Dongu" sutununa "#" yaz
        DelayMS 50
    Next 
    Print Cls  
                   '
    For Dongu=1 To 16
        Print At 1,1,"Veri yollaniyor "       '
        Print At 2,Dongu," "    '2 sat.r.n "Dongu" sutununa "#" yaz
        DelayMS 50
    Next 
    Print Cls
    'HSerOut [Rep $AA\5,Rep $00\5,Rep $FF\5]'uyandirma sinyali preamble
    HSerOut ["ATZ"]
    GoTo basla '
 
 End 'program sonu