да знаю, не могу понять почему происходит так, входит в прерывание, запрещаю прерывание (и биты обнулял и CLI), но по выходу из прерывания опять начинается обработка. Обнулял биты в конце обработки прерывания, но все равно вход выполняеться снова.
Код | .include "m8def.inc" .device ATmega8 ;------------------------------------------------------------------------- .DSEG .def A=r16 ; .def B=r17 ; .def C=r18 ; .def buf=r19
.def PauseCounter=r23 .equ Delay_segment=0x03
.CSEG rjmp begin rjmp TEST0 ;$0001 rjmp TEST1 ;$0002 reti ;$0003 reti ;$0004 reti ;$0005 reti ;$0006 reti ;$0007 reti ;$0008 reti ;$0009 reti ;$000a reti ;$000b reti ;$000c reti ;$000d reti ;$000e reti ;$000f reti ;$0010 reti ;$0011 reti ;$0012 .org 200
BEGIN:
ldi buf,0x04 out SPH,buf ldi buf,0x5f out SPL,buf
sei ldi buf,0xff out ddrb,buf
ldi buf,0b00001011 out MCUCR,buf ldi buf,0b10000000 out GICR,buf
ldi buf,0x00 out portb,buf END: nop nop nop rjmp END
TEST1: cli ldi buf,0xff out portb,buf ldi PauseCounter,Delay_segment RCALL Pause ;while(PauseCounter!=0) ldi buf,0x00 out portb,buf reti PAUSE: ldi buf,0x0 ; cp buf, PauseCounter ; Compare registers 0x00 and PauseCounter breq Equal ; Branch if registers equal dec PauseCounter nop nop nop nop nop rjmp PAUSE Equal: ret
|
|