logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odczytanie stanu bitu z rejestru [Bascom]

KiciuR8 25 Paź 2009 00:41 2750 7
  • #1 7171461
    KiciuR8
    Poziom 11  
    Witam

    Mam pytanie, jak można w bascomie odczytać stan konkretnego bitu z konkretnego rejestru. Dokładnie chodzi mi o odczytanie stanu 4 bitu w rejestrze R6 w Attiny 13. Podłączyłem do niego klawiaturę AT i potrzebuje wiedzieć jaką wartość ma ten bit gdyż jest on używany jako flaga stanu klawisza shift. Podejrzewam że ktoś z was wie co na to poradzić, proszę o pomoc.
  • #2 7171477
    mirekk36
    Poziom 42  
    A słyszał kolega o takich poleceniach jak AND czy OR ???? one działają chyba w każdym języku a już na pewno w każdym dla mikrokontrolerów. Tak więc dalej to już chyba nie trzeba tłumaczyć .... dzieki nim możesz zrobić wszystko

    z drugiej strony do pola bitowego w Bascomie można się dostać w jeszcze prostszy sposób - dzięki "kropce" .... o ile dobrze kojarzę i pamiętam
  • #3 7171499
    Konto nie istnieje
    Poziom 1  
  • #4 7171538
    KiciuR8
    Poziom 11  
    No niestety kropka tu nie pomoże, sprawdzałem to wcześniej. Jeśli chodzi o zmienną to próbowałem jakoś odczytać wartość rejestru do zmiennej ale nic to nie dało, błąd zgodności danych czy coś takiego. Poza tym zmienne same w sobie też mam umieszczone w rejestrach roboczych. Próbuje jakoś ten asm wpleść ale też mi topornie idzie, co oznacza "nop"?
  • #5 7171686
    jacobsek
    Poziom 22  
    Nop to opóźnienie, program czeka jeden cykl zegarowy nic nie robiąc po każdym nop
  • #6 7171719
    grysek
    Poziom 19  
    Spróbuj coś takiego:

    Dim X As Byte At &H60
    
    sts 0x60 ,R06
    
    If X.4 = 1 Then
     Instrukcje
    End if


    Zawartość rejestru zostanie przepisana do zmiennej X
  • #7 7171915
    ZbeeGin
    Poziom 39  
    grysek napisał:
    Zawartość rejestru zostanie przepisana do zmiennej X

    I tym samym namieszać równo w programie pozycjonując tą zmienną w przestrzeń zmiennych użytkownika. Wystarczy, że adres &H60 będzie zajęty przez wcześniej zdefiniowaną zmienną (Bo przy AT bez OVERLAY kompilator przesunie sobie adres zmiennej X tak, by nie zniszczyć czegoś co już jest pod podanym za AT adresem) i arbitralne zastosowanie STS zniszczy jakąś zmienną. Tu nie potrzeba wcale pozycjonowania zmiennej X. Wystarczy do STS przekazać adres zmiennej:

    Adresy ustalą się same i nie będzie konfliktów.

    Nie prościej jest jednak spozycjonować X wprost na R6 który znajduje się pod adresem &H06?
    Dim X As IRAM Byte At &H06

    Zgodnie z tym co napisano:
    Mark Alberts w BASCOM Help napisał:
    You may also specify IRAM. IRAM is the place in memory where the registers are located : absolute address 0 - 31. BASCOM uses most of these addresses, depending on the instructions/options you use. For a $TINY chip it makes sense to use IRAM since there is NO SRAM in most tiny AVR chips (TINY15 for example). You may also use to IRAM to overlay registers in memory.
REKLAMA