ExtInt0: push Temp1 ; save Temp1 in Temp1,SREG ; save flag register push Temp1 in Temp1,MCUCR ; Int0 _/~ or ~\_ ? sbrc Temp1,0 ; skip next line if ~\_ rjmp UpA ; was _/~ so jump to UpA ori Temp1,$01 ; MCUCR-bit0 = 1 out MCUCR,Temp1 ; Int0 next change will be _/~ sbic PinD,3 ; skip next line if channel B=0 rjmp DecRot ; if B=1 and A=~\_ -> decrement rjmp IncRot ; if B=0 and A=~\_ -> increment UpA: andi Temp1,$FE ; MCUCR-bit0 = 0 out MCUCR,Temp1 ; Int0 next change will be ~\_ sbic PinD,3 ; skip next line if channel B=0 rjmp IncRot ; if B=1 and A=_/~ -> increment rjmp DecRot ; if B=0 and A=_/~ -> decrement ExtInt1: push Temp1 ; save Temp1 in Temp1,SREG ; save flag register push Temp1 in Temp1,MCUCR ; Int1 _/~ or ~\_ ? sbrc Temp1,2 ; skip next line when ~\_ rjmp UpB ; was _/~ so jump to UpB ori Temp1,$04 ; MCUCR-bit2 = 1 out MCUCR,Temp1 ; Int1 next change will be _/~ sbic PinD,2 ; skip next line if channel A=0 rjmp IncRot ; if A=1 and B=~\_ -> increment rjmp DecRot ; if A=0 and B=~\_ -> decrement UpB: andi Temp1,$FB ; MCUCR-bit2 = 0 out MCUCR,Temp1 ; Int1 next change will be ~\_ sbic PinD,2 ; skip next line if channel A=0 rjmp DecRot ; if A=1 and B=_/~ -> decrement rjmp IncRot ; if A=0 and B=_/~ -> increment IncRot: mov Temp1,RotVal ; max limit = +127 reached ? cpi Temp1,$7F ; breq Exit ; yes, so don't increment inc RotVal ; no, increment rjmp Exit ; DecRot: mov Temp1,RotVal ; min limit = -128 reached ? cpi Temp1,$80 ; breq Exit ; yes, so don't decrement dec RotVal ; no, decrement Exit: pop Temp1 ; restore Flag register out SREG,Temp1 ; pop Temp1 ; restore Temp1 reti