değişikenin bit lerine atama sorunu

Başlatan ferit06, 26 Mayıs 2010, 10:24:04

ferit06

 
Şöyle bir değişkenim var,

Dim   gec    As  Byte

  buna  şu şekilde atama yapıyorum ve proteusta çalışmasına rağmen fiziki devrede çalışmıyor( portb4 ve 5 te yaptığım değişiklilere cevap vermiyor)

gec.0=PORTB.5
gec.1=PORTB.4

Ancak aşağıdaki şekilde yaptığım atamada fiziki devrede çalışıyor.( Kurulu devrede hiç bir değişiklik yapmadan)
If PORTB.5=0 And PORTB.4=0 Then gec=0
If PORTB.5=0 And PORTB.4=1 Then gec=1
If PORTB.5=1 And PORTB.4=0 Then gec=2
If PORTB.5=1 And PORTB.4=1 Then gec=3


İşlemci 16 F 819 ,

değişkenin bitlerine portlardan  atama yapmak için daha kolay bir komut şekli varmıdır ( birden fazla portun birkaç pini kullanılma durumuda olabilir)?

OG

Evet biraz dolambaçlı yöntemi var. GETBIT ve LOADBIT

GETBIT
VALUE = GETBIT EX_VAR , INDEX
EX_VAR ' BITI alınacak değişken
INDEX ' Hangi biti alınacak
VALUE ' Alınmış bit degeri bu değişkene yüklenecek


LOADBIT
LOADBIT PT_VAR , INDEX , VALUE
''' VALUE değerini PT_VAR değişkeninin INDEX bitine yükle
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ferit06

#2
teşekkür ederim.

bir veya iki bit için kendi yöntemimi  de uygulayabilirim ancak daha fazlası için sizin gösterdiğiniz komutları uygulamak daha uygun olacak.


Yalnız ilk atama şeklinin proteusta çalışması fiziki devrede çalışmaması hakkında da bir bilginiz/yorumunuz varmı?


önerinizi
aşağıdaki şekilde yaptım ve proteusta denedim sonuç olumlu. Akşam da evde fiziki devrede deneyeceğim.
Dim  value As Bit

value= GetBit   PORTB,5
LoadBit gec, 1, value

value= GetBit   PORTB,4
LoadBit gec, 0, value


Fiziki devre sonuç. çalışmıyor.....




Şu şekilde yaptım proteusta yine çalışıyor. Fiziki devre için akşam deneyeceğim.

Dim  value As Byte

value=PORTB
gec= %00000011 & value

Bu çözümde fiziki devrede çalışmadı...

Bu arada yeni kullanmaya başladığım Brenner programlayıcı ve USBurn18a2 kullanıyorum. Bundan olabilirmi?


configürasyona ait değerler;

   Device = 16F819
    Config   HS_OSC, WDT_OFF, MCLRE_ON, BODEN_OFF, LVP_OFF, CP_OFF' dahili
    Xtal = 20
    All_Digital TRUE
    #define ADC_BITS 10         
    #define ADC_Sampleus 40   '   
'   #define ADC_CLOCK 2   'C

   All_Digital = TRUE             ' TÜM PORTLAR DIGITAL
   PortB_Pullups = On            'PORTB DEKI PULL-UP DIRENÇLERI AKTIF
TRISA=%00001111   '
TRISB=%11110000
ADCON0=%10000000 '7. ve 6 bitler 20 MHz TAD=32 OSC için 10 yapıldı.
ADCON1=%11000101 '+ VREF  AN3 bağlı AN0,AN1 analog giriş diğer AN ler digital,
                       ' 6 bit 1 yapıldı 20 MHz TAD=32 OSC için


T1CON=%00000000   'TMR1 SAYACI AYARLANIYOR  1:1 e BOLME YUKSELEN KENAR
                   ' osilator is enable, internal clock=fosc/4
                   ' 1 periyod= 1/(20000000/4 sn)= 0,2 uS



Son DÜZETLTME

Dim  value As Bit
gec=0  ' Daha önce yazmamış olmam nedeniyle  tesadüfen başlangıçta bu değerlere karşılık gelen 'pORTB5 ve POTB4 ün "1" değerini almaları nedeniyle çalımıyor du
value= GetBit   PORTB,5
LoadBit gec, 1, value

value= GetBit   PORTB,4
LoadBit gec, 0, value

Tekrer OG arkadaşımıza teşekkür ediyorum.