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

ASEMBLER - Mikro-kontroler 8051 - Przerwania

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

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

1

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

setb IT0

aby przerwanie było aktywowane zboczem :))

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

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