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

Bascom, pomoc w napisaniu programu

kamil007 14 Gru 2008 14:12 1565 11
REKLAMA
  • #1 5857531
    kamil007
    Poziom 12  
    Witam!
    Proszę o pomoc w uzupełnieniu programu w bascom.
    Napisałem programik (korzystając z dostępnych listingów w sieci).
    Który pobiera dane z pilota wyświetla je na LCD, i ustawia odpowiednio porty, które zapalają ledy. Jedna z komend mówi żeby przesuwać bity, w lewo, a inna w prawo.. Nawet wszystko działa. :|
    Teraz chciałbym iść dalej, i zmusić program do tego żeby po odłączeniu, i ponownym podaniu zasilania startował z takimi ustawieniami, jak przed odłączeniem zasilania.
    Czyli np: ustawiam na początku stan portu 123, daję rotację w prawo.
    Program w tym momencie to zapamiętuje, i od ponownego załączenia zaczyna z takimi właśnie ustawieniami.
    Kompletnie nie wiem jak do tego podejść, więc zwracam się z prośbą o pomoc
    Cytat:

    $crystal = 8000000
    $regfile = "Attiny2313.dat"
    '$sim
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.5


    Config Lcd = 16 * 2
    Cursor Off
    Config Int1 = Low Level
    Config Rc5 = Pind.3
    Config Portb = Output





    Dim Address As Byte
    Dim Address1 As Byte
    Dim Command As Byte
    Dim Command1 As Byte
    Dim S1 As Byte
    Dim V As Integer




    Declare Sub Mrygl
    Declare Sub Mrygr

    Enable Interrupts
    Enable Int1
    On Int1 Pobr_rc5
    Address1 = 255
    Command1 = 255
    Cls
    Do
    S1 = Pinb
    Upperline
    Lcd "Com:" ; Command1 ; " SP:" ; S1 ; " "
    Lowerline
    Lcd "Adr:" ; Address1 ; " " ' Komendy z pilota naciśnięcie 1 daję rozkaz 1, powtórne naciśnięcie 1 daje rozkaz 129
    If Command1 = 1 Then
    Set Portb.0
    Elseif Command1 = 129 Then
    Reset Portb.0
    Elseif Command1 = 2 Then
    Set Portb.1
    Elseif Command1 = 130 Then
    Reset Portb.1
    Elseif Command1 = 3 Then
    Set Portb.2
    Elseif Command1 = 131 Then
    Reset Portb.2
    Elseif Command1 = 4 Then
    Set Portb.3
    Elseif Command1 = 132 Then
    Reset Portb.3
    Elseif Command1 = 86 Then 'Po tej komędzie ma zacząć rotować w prawo
    Gosub Mrygr
    Elseif Command1 = 85 Then
    Gosub Mrygl
    End If
    Enable Int1
    Loop
    End

    Pobr_rc5:

    Disable Int1
    Enable Interrupts
    Getrc5(address , Command)

    If Address < 255 Then
    Address1 = Address
    Command1 = Command
    End If
    Return

    Sub Mrygr
    Cls
    S1 = Pinb

    Do
    Locate 1 , 1
    Upperline
    Lcd "Com:" ; Command1 ; "SP:" ; S1
    Lowerline
    Lcd "Adr:" ; Address1 ; " "
    Portb = S1
    Rotate S1 , Right
    Waitms 200
    Enable Int1
    If Command1 = 214 Then
    Return
    End If
    Loop
    End Sub




    Sub Mrygl
    Cls
    S1 = Pinb

    Do
    Locate 1 , 1
    Upperline
    Lcd "Com:" ; Command1 ; "SP:" ; S1
    Lowerline
    Lcd "Adr: " ; Address1 ; " "
    Portb = S1
    Rotate S1 , Left
    Waitms 200
    Enable Int1
    If Command1 = 213 Then
    Return
    End If
    Loop
    End Sub
  • REKLAMA
  • Pomocny post
    #2 5857559
    dawid512
    Poziom 32  
    Zapisz dane w EEPROMIE a potem je z niego odczytaj ;)
  • REKLAMA
  • #3 5857632
    kamil007
    Poziom 12  
    Hm, tak z grubsza to tyle wiem:D
    Zapiszę stan portu OK, ale skąd programik będzie wiedział czy ma rotować w lewo czy w prawo??:cry:
  • REKLAMA
  • Pomocny post
    #4 5857638
    teedd
    Poziom 19  
    Kierunek rotacji też zapisz
  • #5 5857709
    kamil007
    Poziom 12  
    @teedd
    @dawid512
    Pomóżcie coś więcej, jak mam zapisać kierunek rotacji, przecież można zapisywac chyba tylko jakieś wartości?? jestem początkującym, bardzo początkującym, siedze już przy tym prawie miesiąc:cry:
  • #6 5857749
    dawid512
    Poziom 32  
    Dodaj sobie dodatkową zmienną do której będziesz wpisywał wartość odpowiadającą twojemu rotate. Robisz odczyt i teraz wiesz w którą stronę ma się odbywać rotacja.
  • REKLAMA
  • #8 5859820
    kamil007
    Poziom 12  
    a jak sie adresuje dwie różne zmienne do wewnętrznego eepromu?
    Cytat:

    Writeeeprom Command1 , 0
    Writeeeprom S1 , ???
  • #10 5859969
    don diego
    Poziom 32  
    dawid512 napisał:
    Writeeeprom Command1 , 0
    Writeeeprom S1 , 1 


    Nie radzę jednak zapisywać danych pod adresem 0 ponieważ mogą one zostać wykasowane.

    Czy mógłbyś podać jakieś źródło tej informacji? Kiedyś też o tym słyszałem, ale nie znalazłem nigdzie potwierdzenia.
  • #11 5860022
    dawid512
    Poziom 32  
    Mały cytat z helpa:
    Cytat:
    Opierając się na nocie katalogowej firmy Atmel, pierwsza komórka pamięci EEPROM (o adresie 0) może zostać nadpisana, jeśli w czasie trwania zapisu nastąpiło obniżenie napięcia zasilania poniżej gwarantowanego 2,7V. Zaleca się nie używać tej komórki pamięci dla ważnych danych, a zwłaszcza tych przechowywanych w trakcie braku zasilania.


    Szczerze to nie zaglądałem w datasheeta jeśli chodzi o tą sprawę ale z ciekawości zaglądnę.
REKLAMA