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

[Assembler] Jak zrealizować opóźnienie 1500us bez przerwania 15h?

KaMaS 17 Gru 2003 15:53 5602 3
REKLAMA
  • #1 440773
    KaMaS
    Poziom 11  
    Posty: 42
    Ocena: 15
    Witam

    Chce zrealizować w moim programie opóźnienie rzędu 1500us (1,5ms).
    Korzystałem z funkcji 86h przerwania 15h, jednak to przerwanie nie działa na wszystkich kompach.
    Chce wykorzystać inny sposób.

    pomocy

    KaMaS

    Temat zamykam. - arnoldziq
  • REKLAMA
  • #2 440829
    marcin_17
    Poziom 14  
    Posty: 158
    Pomógł: 1
    Ocena: 11
    ;sampel dla 10 s
    mov eax,10
    call Delay_seconds


    extrn Seconds_today:proc
    Delay_seconds proc
    pusha
    mov ecx,eax
    call Seconds_today
    mov ebx,eax

    DLY1:
    call Seconds_today
    sub eax,ebx
    cmp eax,ecx
    jb DLY1

    popa
    ret
    Delay_seconds endp
    uffff :idea: sampel z ksiazki Asembler dla procesorow intel
  • REKLAMA
  • #3 440865
    DAREK4444
    Poziom 19  
    Posty: 425
    Pomógł: 5
    Ocena: 23
    Albo tak też można:

    Czas:
    MOV R0,#00H
    Opoznienie:
    MOV R1,#06H
    DJNZ R1,Opoznienie
    DJNZ R0,Czas

    Pozniej po prostu lecie dalej:) Jeśli chcesz żeby to był podprogram to wstaw etykiete przed etykietą czas, a na końcu dodaj RET. Powodzenia
  • #4 441118
    Caladan
    Poziom 19  
    Posty: 242
    Pomógł: 33
    Ocena: 3
    Ja proponuję po prostu pobierać czas bezposrednio z przerwania 21h. Albo użyć timera ;) (LUBIMY '51:D )
    Nie pamietam akurat numeru funkcji, ale chwilka kopania w dokumentacji i sie znajdzie. A tak ostatecznie, to mozna uzyc instrukcji pobierania cykli zegara od startu kompa. Trzeba tylko pobrac "próbkę" i później tym mierzyć czas.
REKLAMA