Değişkenin 1 artması gerekirken 7 artması problemi

Başlatan eee1984, 28 Şubat 2008, 13:07:53

eee1984

:D

Merhaba Arkadaslar

Bu Programda bi veri değişkeni atadım ve surekli 1 artacak sekilde ayarladım ama anlamadıgım nokta su 1-1 artacagına 7-7 artıyor niye olabilir yardımcı olabilirmisiniz lütfen

Alıntı Yap'****************************************************************
'*  Name    : Tx calısan.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.02.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
define osc 4


include "modedefs.bas"

datap   var GPIO.0    ;0 dan data cıkıyor

veri   var   byte
baud    con   16780             


veri=%01010101
CMCON=7
Trisio=%000000
OPTION_REG.7=0  'pull-up lar enable

main:
   
   
    serout2 datap,baud, [REP$55\8,REP$55\8,REP$55\8,REP$55\8,REP$55\8] 'uyandirma sinyali preambl
    serout2 datap,baud, [REP$00\8,REP$00\8,REP$00\8,REP$00\8,REP$00\8]
    serout2 datap,baud, [REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8,REP$FF\8]
    serout2 datap,baud, ["E","A","X","A",veri]  
   
goto main


end

Bu da Receiver

Alıntı Yap'****************************************************************
'*  Name    : RX.BAS                                            *
'*  Author  : ExE                                               *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.02.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :  16f870                                                 *
'*          :                                                   *
'****************************************************************
include "modedefs.bas"

DEFINE OSC 4 'Oscillator speed in MHz: 3(3.58) 4 8 10 12 16 20 24 25 32 33 40

'******LCD TANIMLAMALARI******
DEFINE LCD_DREG     PORTC 'LCD DATA BACAKLARI PORTC'YE BAGLI
DEFINE LCD_DBIT     0    'LCD DATA BITLERI HANGİ BITTEN BASLIYOR ??!
DEFINE LCD_EREG     PORTC 'LCD ENABLE BACAGI HANGI PORTA BAGLI
DEFINE LCD_EBIT     5    'LCD ENABLE BITI HANGI PORTA BAGLI  ??
DEFINE LCD_RSREG    PORTC 'LCD RS BACAGI HANGI PORTA BAGLI
DEFINE LCD_RSBIT    6     'LCD RS BACAGI HANGI BITE BAGLI   ???
DEFINE LCD_BITS     4     'LCD 4 BIT BAGLI
DEFINE LCD_LINES    2     'LCD KAC SIRADAN OLUSUYOR   satır sayısı

OPTION_REG.7=0 'pullup lar açıldı
Adcon1=7 ;A portları digital

TRISB=%11110000 ; rb4-7 sutun=giriş rb0-3=satır çıkış
portc=0:TRISC=0

TRISA=%00000001; Porta.0=giriş gerisi çıkış

Tus var byte

Veri var byte
GIRIS var PORTA.0

Veri=0
Portc.6=1
PORTC.5=1
main:
gosub KEYPADTARAMA
pause 500
SerIn2 GIRIS,16780,[WAIT ("EAXA"), Veri]
lcdout $fe,1
pause 200
LCDOUT $fe,2, "ALINAN"
pause 200
 LCDOUT $fe,$C0,Dec Veri
; LCDOUT $fe,$C0,"VERI=$",Hex Veri ," "
write 5, Veri
  goto main
end

KEYPADTARAMA:
Tus=16
PAUSE 500           '500 ms BEKLEME YAP

lcdout $FE,1
LCDOUT $FE,$80,"ExE"
PAUSE 500
LCDOUT $FE,$C0,"2008"
PAUSE 500


lcdout $FE,1
pause 500

OKU:
PORTB=%11111110 ;1.satır
;ve ardından dikeyleri kontrol edecegiz.
IF PORTB =%11101110 then TUS=7
IF PORTB =%11011110 then TUS=8
IF PORTB =%10111110 then TUS=9
IF PORTB =%01111110 then TUS=10 '/"

PORTB=%11111101;2.satır
IF PORTB=%11101101 then TUS=4
IF PORTB=%11011101 then TUS=5
IF PORTB=%10111101 then TUS=6
IF PORTB=%01111101 then TUS=11 'x tusu"

PORTB=%11111011;3.satır
IF PORTB=%11101011 then TUS=1
IF PORTB=%11011011 then TUS=2
IF PORTB=%10111011 then TUS=3
IF PORTB=%01111011 then TUS=12 '- tusu"

PORTB=%11110111;4.satır
IF PORTB=%11100111 then TUS=13 'ON/C tusu
IF PORTB=%11010111 then TUS=0
IF PORTB=%10110111 then TUS=14 '= TUSU
IF PORTB=%01110111 then TUS=15 '+ tusu"

PORTB=%11111111

IF TUS<10 THEN  LCDOUT $fe,2,"TUS=", Dec Tus ,"   "
IF TUS=10 THEN  LCDOUT $FE,2,"TUS="," /    "
IF TUS=11 THEN LCDOUT $FE,2,"TUS=", "X   "
IF TUS=12 THEN LCDOUT $FE,2,"TUS="," -    "
IF TUS=13 THEN LCDOUT $FE,2,"TUS=","ON/C   "
IF TUS=14 THEN LCDOUT $FE,2,"TUS="," =   "
IF TUS=15 THEN LCDOUT $FE,2,"TUS="," +  "

if Tus=16 then   oku

PAUSE 100

return


Devre goruntusu de su



Tamam arkadaslar niçin boyle yaptıgının sebebini buldum ama  çözüm sizce ne olabilir  bi fikir verebilirmisiniz :oops:

Maxim


eee1984

Alıntı yapılan: "maxiboost"nedenmiş ?

Şöyle programı incelediyseniz her defasında veri almadan once keypadden bi tusa basmamı bekliyor alıcı kısmında ama iletici bunu beklemiyor her defasında veriyi gondermeye devam ediyor  ve aynı zamanda veriyi 1 artırıyor yani ben tusa basma suremi biraz geciktireyim bundan sonra daha da sacmalayacak belki lcd e 9-10 12 li artma gorecegim..
Acıklayabildim mi bilmiyorum..  :cry:

kadirbas

Selamlar,

eee1984 arkadaşım, aynı anda tuş  takımını okurken seri gelen verileri işleyebilmek istiyorsan kesme kullanmalısın. Basic ile nasıl yazılacağını bilmediğimden sana kod olarak yardımcı olamam fakat sana şöyle bi fikir verebilirim.

16f870'in seri porttan veri alma kesmesi var ve bu kesme sayesinde veri alma işlemi her 1 byte için tamamlandığında verileri kaçırmadan işlemen için bir kod yazabilrsin. Benim önerim; PIC içerisinde ufak bir tampon bölge ayırman ve her seri port veri alma kesmesi geldiğinde veriyi bu tampona yerleştirmen. Tabii ki bir sonraki yerin neresi olduğunu bilebilmen için bir de indeks değişkeni tutman gerekiyor. Ana döngüye gittiğinde bu indeks değişkeninin senin tampon bölgenin başını gösterip göstermediğini kontrol ederek yeni veri alınıp alınmadığını algılayabilirsin. Senin istediğin veri sıralamasının gelip gelmediğini de bu tampon içerisindeki verileri kontrol ederek yapabilirsin. Bu arada tuş takımının kontrolünü de sonsuz döngü şeklinde değil, ana döngünün içerisinde bir kontrol fonksiyonu şeklinde yapmalısın bence.


Kolay gelsin. İyi çalışmalar...