Wątek przeniesiony 2018-11-07 15:45 z Newbie przez Marooned.

ASEMBLER - Mikro-kontroler 8051 - Przerwania

Odpowiedz Nowy wątek
2014-06-02 14:38
Aneirin
0

Witam serdecznie! :)

Niestety z asemblerem jako tako zbytnio styczności nie miałem, a muszę zrobić prosty program, który podczas przerwania włącza lub wyłącza miganie diody, zwracam się do Was z pytaniem. Póki co napisałem coś takiego (miganie diody dopiero zrobię później, póki co chce by działało prawidłowo przerwanie ):

    ORG 0
    LJMP main
    ORG 0003H   
    CPL P1.2    ;jest to port z diodą - zmiana stanu diody
    RETI
    ORG 60H
main:
    SETB EA
    SETB EX0
    JMP $

Program działa w ten sposób, że jeśli wcisnę przycisk odpowiadający za przerwanie INT0, to zaświeci się dioda. Potem program powinien wrocic do wykonywania dalszej czesci programu, jednak tego nie robi, tylko ciągle wykonuję przerwanie ( dioda cały czas zmienia swój stan ). Z tego co się dowiedziałem, to mógłbym użyć flagi na T2COM, ale niezbyt wiele mi to mówi.
Bardzo proszę o pomoc :)

dodanie znacznika <code class="asm"> - furious programming

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

2014-06-02 15:10
Aneirin
0
ORG 0
    LJMP main
    ORG 0003H
EXT0INT:
    LJMP obsluga_int0
    ORG 60H
main:
    SETB EA
    SETB EX0
    JMP $
obsluga_int0:
    CPL P1.2
    RETI

Wychodzi na to, że nawet jak wyłączę przycisk przerwania to po przerwaniu skacze do JMP $ i znów do przerwania. Nawet jeśli wcisnę go raz jeszcze to nic się nie dzieje...

dodanie znacznika <code class="asm"> - furious programming

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

2014-06-02 15:41
Aneirin
1

Dobra, już wiem jak. Wystarczyło dodać:

setb IT0

aby przerwanie było aktywowane zboczem :))

dodanie znacznika <code class="asm"> - furious programming

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0