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-AVR] instrukcja lookup

marcin1990 19 Wrz 2009 14:10 2279 2
REKLAMA
  • #1 7034576
    marcin1990
    Poziom 14  
    Jak w temacie zaczynam swoją przygodę z bascomem i napotkałem pierwszy problem. Chciałbym na wyświetlaczu led wyświetlić zawartość rejestru eedr który będzie zwiększany z każdym naciśnięciem przycisku. Wszystko chodzi ok dopóki nie użyję polecenia lookup. Dopóki licznik liczy po swojemu i wartość EEDR jest przepisywana na port C to ok. Za każdym naciśnięciem cośtam się zmienia. Ale gdy chcę wyświetlić normalne liczby to gaśnie mi wyświetlacz (wszystkie wyjścia = 1). Poniżej zamieszczam kod i proszę o pomoc.

    $regfile = "m16def.dat"                                     'atmega 16
    
    $crystal = 8000000                                          'taktowanie 8 MHZ (kwarc zewnętrzny)
    
    Config Portb = Output                                       ' Port B jako wyjście(steruje wyświetlaczem)
           Portb = &B10101010                                   'czy ma być 1 czy 2 wyświetlany
    Config Portc = Output                                       'Port C jako wyjście (0= segment zaświecony)
           Portc = &B00000000                                   'Port D jako wejście przycisk podpięty pod pin 7
    Config Portd = Input
             Portd = &B11111111
                 Eedr = 0                                       'zerowanie rejestru eedr
    Do
    Debounce Pind.7 , 0 , Zw , Sub                              'obsługa zwarcia pinu D.7 do masy
     Portc = Lookup(eedr , Liczba1)                             'Przepisanie na port C wartości rejestru liczba zgodnego
                                                                ' nr aktualnej wartości EEDR
    Loop
    End                                                         'end program
    Zw:
    Incr Eedr                                                   'Zwiększenie wartości EEDR
    If Eedr = 10 Then Eedr = 0                                  'Jeśli EEDR = 10 to licz od 0
    Return
    
    Liczba1:                                                    'Etykieta Liczba
     Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144       'Wartości do przepisania
    
  • REKLAMA
  • #2 7081899
    arnoldziq
    VIP Zasłużony dla elektroda
    Co masz na myśli: 'jak chcę wyświetlić normalne liczby' ?
    Zamieszczony kod działa poprawnie, ale ...
    Wysyłasz na port C dane co jakieś 1/8000000 sekundy. Masz taką potrzebę, czy to przypadek ?
    Może zrób to tak :
    $regfile = "m16def.dat"   'atmega 16
    $crystal = 8000000               'taktowanie 8 MHZ (kwarc zewne;trzny)
    Config Portb = Output          ' Port B jako wyjs'cie(steruje wys'wietlaczem)
    Config Portc = Output          'Port C jako wyjs'cie (0= segment zas'wiecony)
    Config Portd = Input
            Eedr = 0                 'zerowanie rejestru eedr
    Do
    Debounce Pind.7 , 0 , Zw , Sub   'obs?uga zwarcia pinu D.7 do masy
    Loop
    End                            'end program
    Zw:
    Incr Eedr           'Zwie;kszenie wartos'ci EEDR
    If Eedr = 10 Then Eedr = 0    'Jes'li EEDR = 10 to licz od 0
    Portc = Lookup(eedr , Liczba1)  
    Return
    Liczba1:         'Etykieta Liczba
     Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144       'Wartos'ci do przepisania
    


    Pytanie : dlaczego używasz EEDR jako licznika ?
  • #3 7086156
    marcin1990
    Poziom 14  
    już sobie poradziłem, uczę się z książki Piotra Góreckiego "mikrokontrolery dla początkujących" i tam tak to było przedstawione. Dodałem zmienną i na normalnej zmiennej(1 bajtowej) chodzi bez problemu.
REKLAMA