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

[dsm-51] przerwania. Kiedy program wchodzi do przerwania?

00101100 11 Sty 2005 22:32 2362 1
REKLAMA
  • #1 1130275
    00101100
    Poziom 11  
    Posty: 5
    Mam taki przykładowy program. Chciałem zapytać kiedy program wchodzi do przerwania - wtedy kiedy wystawiona jest flaga przepełnienia licznika TF0 ??

    CT0 EQU 0
    M0 EQU 1
    G0 EQU 0
    T0S EQU M0 + 4*CT0 + 8*G0

    CT1 EQU 0
    M1 EQU 0
    G1 EQU 0
    T1S EQU M1 + 4*CT1 + 8*G1

    TMS EQU T0S + 16*T1S
    THS EQU 256-180


    LJMP START

    ORG 0BH
    CLR TF0
    MOV TL0, #0
    MOV TH0, #THS
    DJNZ R2, NEXT

    CPL P1.7
    NEXT:
    RETI

    ORG 100H
    START:
    SETB EA
    SETB ET0

    MOV TMOD, #TMS
    MOV TL0, #0
    MOV TH0, #THS
    CLR TF0 ;CZYSZCZENIE FLAGI PRZELADOWANIA

    SETB TR0

    MOV R2, #20 ;USTAWIAMY LICZNIK

    SJMP $
  • REKLAMA
  • #2 1130947
    tprzemko
    Poziom 22  
    Posty: 413
    Pomógł: 54
    Ocena: 21
    Witam
    Program przedstawiony ma za zadanie cykliczną zmianę portu p1.7. Cała zbawa odbywa się w przerwaniu. Mikrokontroler wchodzi do przerwania w momęcie ustawienia flagi TF0 (dla timera0). Flaga zostaje ustawiona automatycznie w momęcie kiedy licznik timera0 doliczy do 0 (licznik liczy w górę dlatego masz działanie 256-180). W przerwaniu następuje dekrementacja rejestru R2. Po 20 przerwaniach nastąpi zmiana p1.7, ale tylko przy pierwszym uruchomieniu. Następna zmian nastąpi po 255 przerwaniach. Aby cyklicznie następowała zmiana musisz dopisać w przerwaniu po djnz mov r2,#20, co odnowi licznik. I teraz nie pamietam ale chyba flaga TF0 jest automatycznie kasowana po przyjęciu przerwania, więc zbedna jest instrukcja clr tf0.
    Pozdrawiam
REKLAMA