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

Jak ustawić timery w Bascom do przerwań co minutę i godzinę?

Wnekus 21 Wrz 2003 18:46 1745 9
  • #1 333920
    Wnekus
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 1
    Witam

    Chcialbym miec mozliwosc wygenerowania 2 przerwan, Jedno na oko co minute , a drugie srednio co godzine. Jak sie do tego dobrac w baskomie,
    Moze ktos ma gotowy kod



    Pozdrawiam
  • #2 334413
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Po pierwsze to nie napisałeś jaki to procesor, a po drugie nie podałeś czestottliwości zegra, a po trzecie to raczej będzie ciężko robić rzerwanie co godzine...
    Przerwanie można robić częściej, a czas odliczać w zmiennej i oba te odciki czasu da się załatwić jednym tajmerem.

    Do czego Ci to w ogóle potrzebne?
  • #3 334829
    Wnekus
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 1
    Procek to At89C2051 (89C4051) . Przerwamiua moga byc co dowlny czas byle regularny np 1 sekunda czy nawet mniej
  • #4 335575
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    Nie podałeś jeszcze jaki masz kwarc ale kiepsko to widzę...
    Timery 51 są 16bitowe (max), czyli mogą odliczyć najwyżej 65536 cykli maszynowych, ewentualni mogą zliczzać impulsy zewnętrzne ale to wymaga dodatkowego generatora.
    Zazwyczaj robi się to tak, że przerwanie jest np. co 10ms i czas 1s czy dowolny inny się odmierza przy pomocy licznika programowego.
  • #5 337108
    Wnekus
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 1
    Kwarc to 11.059
  • #7 337127
    Wnekus
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 1
    A masz moze jakas proceurke bo juz 3 dzien sie mecze, byle tylko co pewien z gory ustalony czas generowala przerwanie (najlepiej 100ms do 1 skundy )
    i nic mi nie wychodzi,
  • #8 337136
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    T1_H EQU 0DCh
    T1_L EQU 000h

    INIT: MOV SP,#STACK-1 ; zaladowanie wskaznika stosu
    MEM: MOV R0,#127
    MEM1: MOV @R0,#0
    DJNZ R0,MEM1
    MOV IE,#0 ; wylacz uklad przerwan
    MOV IE,#10001010B ; wlacz uklad przerwan i przerwanie T0 i T1
    MOV TMOD,#00010001B ; T0 w trybie 1, T1 w trybie 1
    MOV TH0,#T0_H ; zaladowanie wartosci
    MOV TL0,#T0_L ; pocz dla licznika
    MOV TH1,#T1_H
    MOV TL1,#T1_L
    SETB TR0 ; uruchomienie licznika T0
    CLR TR1 ; zatrzymanie T1
    MOV REFRESH,#0
    LCALL LCD_INIT
    MOV R0,#(SEK+1)
    CLR END_F

    T0_SERV: PUSH ACC ;obsluga przerwania zegarowego
    PUSH B
    PUSH PSW
    MOV TH0,#T0_H
    MOV A,KEYS
    MOV C,ACC.0
    JNC ZEROW
    MOV C,ACC.1
    JNC SKOK
    SETB SETT_F
    CLR TR0
    SETB TR1
    JMP OUT
    SKOK: LJMP OBSLUG
    ZEROW: MOV C,ACC.1
    JNC OBSLUG
    JB NORM_F,UST
    CLR END_F
    LCALL KASOWANIE
    AJMP GO_KEY
    UST: CLR END_F
    LCALL USTAWIANIE
    OBSLUG: JNB NORM_F,OB_1
    LCALL NOR
    LCALL WIN_N
    OB_1: JNB PRZEW_F,GO_KEY
    LCALL PRZ_CZ
    LCALL WIN_P
    GO_KEY: LCALL GET_KEY
    OUT: POP PSW
    INC REFRESH
    MOV A,REFRESH
    CJNE A,#33,OUD
    MOV REFRESH,#0
    SETB F0
    OUD: POP B
    POP ACC
    RETI


    Tu masz fragmenty programu (konfiguracja proca i obsługa przerwania. Pochodzą z działającego programu (urządzenie działa dobrze).

    PS. Zapomniałem, przerwanie jest co 10ms.
  • #9 338436
    rav.k
    Poziom 14  
    Posty: 109
    Pomógł: 1
    Ocena: 1
    Nie łatwiej wykorzystać RTC, zajmuje tylko kilka linii a korzyści są bardzo duże
  • #10 339274
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 53
    rav.k: założysz się, że nie?
    To co jest wyżej to fragment programu, do odmierzania czasu koniecznych jest tylko kilka linijek z tego, a co do RTC to musisz go jakoś do uC podpiąć (IIC, SPI, itp.), czyli musisz w procesorze napisać odpowiedni eprocedury obsługi.
    No i jeszcze ma jedną wadę - musisz kupić kolejny układ scalony i umieścić do na płytce.
    Nie strzeajmy z armaty do muchy, bo tajmery w uC są po to żeby odmierzać odcinki czasu, a nie po to żeby były...

Podsumowanie tematu

✨ Dyskusja dotyczy ustawienia timerów w Bascom dla mikrokontrolera 8051 (At89C2051/89C4051) w celu generowania przerwań co minutę i co godzinę. Ze względu na ograniczenia timerów 16-bitowych (maksymalnie 65536 cykli maszynowych) i częstotliwość kwarcu 11.059 MHz, bezpośrednie przerwanie co godzinę jest trudne do realizacji. Zalecane jest generowanie przerwań w krótszych, regularnych odstępach (np. co 10 ms lub 1 s) i odmierzanie dłuższych okresów (minuta, godzina) programowo za pomocą liczników. Przykładowy fragment kodu asemblerowego pokazuje konfigurację timerów i obsługę przerwań. Alternatywnie sugerowano użycie zewnętrznego układu RTC, jednak wymaga to dodatkowego sprzętu i implementacji protokołów komunikacyjnych (I2C, SPI). Timer mikrokontrolera pozostaje podstawowym i efektywnym rozwiązaniem do odmierzania czasu w aplikacjach wymagających przerwań czasowych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA