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

[BASCOM]Przekazanie wartości z przerwania.

nobisz 22 Wrz 2008 20:12 1178 3
  • #1 5561158
    nobisz
    Poziom 14  
    mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave?

    Zdanie rozpoczynamy wielką literą - proszę poprawić.
    Proszę stosować tagi w tytule - poprawiłem.
    [zumek]
  • #3 5561667
    mirekk36
    Poziom 42  
    nobisz napisał:
    mam przerwanie w którym wykonuję operacje na zmiennych "globalnych" niestety po powrocie z przerwania moja zmienna odtwarza sobie wartość z przed przerwania. Czy jest jakaś możliwośc przekazania wartości z przerwania do programu głownego, oprócz on interrupt nosave?


    Witam,

    Sorki ale koledze chyba coś się pokręciło i to mocno.... jak już to pokaż swój fragment kodu w którym takie cuda się zdarzają hmmm??

    poza tym opcja NOSAVE nie służy do tego aby włączać/wyłączać możliwość zmian w zmiennych globalnych - to teoria grubymi nićmi szyta.

    Nosave - podowuje tylko, że w trakcie przerwania nie są w sposób automatyczny przez kompilator odkładane przy wejściu i zdejmowane przy wyjściu odpowiednie rejestry (a rejestry to nie to samo co zmienne a jeśli nie robisz wstawek w asemblerze to nawet nie masz styczności z rejestrami za bardzo - tak wprost)

    chyba, że mylisz pojęcie zmiennej globalnej z rejestrem procesora

    albo chyba , że nakombinowałeś za mocno ze stosem i przez to coś ci się chrzani....

    tak czy inaczej przy tak zadanym pytaniu możesz zdać się tylko na wróżkę, która może odpowie ci patrząc w fusy od herbaty

    Jeśli zdeklarujesz zmienną globalną:

    Dim Zmienna1 as Byte

    - gdzieś na początku programu w części inicjalizacyjnej, a potem w przerwaniu obojętnie jakim zapiszesz do niej wartość to wszystko będzie prawidłowo działać

    Dim Zmienna1 As Byte
    Zmienna1 = 15
    
    Do
      Cls
      Lcd Zmienna1
      Print Zmienna1
    
      Wait 1
    Loop
    
    Przerwanie_Timer0:
      Zmienna1 = 4
    Return


    oczywiście jeszcze musisz sobie zdefiniować co ile ma Timer0 wyzwalać przerwanko , i w efekcie tego kodu na wyświetlaczu LCD lub na terminalu zobaczysz nie wartość 15 (tak jak to się niby u ciebie dzieje) tylko wartość 4

    jeśli u ciebie jest inaczej to skoro twój kod jest TOP SECRET - to szukaj sam w nim problemu bo na 1000% tam jest

    pozdr
  • #4 5562556
    nobisz
    Poziom 14  
    witam,

    miałem błąd i wszystko juz działa, kod oczywiście nie jest top secret:)
    dzięki za odpowiedzi
REKLAMA