Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Registers:
- ; R0: delay counter
- ; R29: timer overloads counter
- ; R30: FSM state
- ; R31: temp
- ; States:
- ; 0: Initial/Midway
- ; 1: Going up
- ; 2: Up pressed (t<0.2s)
- ; 3: Going up to limit
- ; 4: At upper end
- ; 5: Going down
- ; 6: Down pressed (t<0.2s)
- ; 7: Going down to limit
- ; 8: At lower end
- ; Interrupt vectors
- +00000000: C009 RJMP PC+0x000A ; RST -> 0x000A
- +00000001: C09B RJMP PC+0x009C ; INT0 -> 0x009D
- +00000002: C018 RJMP PC+0x0019 ; PCINT0 -> 0x001B
- +00000003: C07F RJMP PC+0x0080 ; TIM0_OVF -> 0x0083
- +00000004: 9518 RETI
- +00000005: 9518 RETI
- +00000006: 9518 RETI
- +00000007: 9518 RETI
- +00000008: 9518 RETI
- +00000009: 9518 RETI
- ; RST interrupt handler
- +0000000A: E9FF LDI R31,0x9F
- +0000000B: BFFD OUT 0x3D,R31 ; SPL = RAMEND
- +0000000C: E0F5 LDI R31,0x05
- +0000000D: BBF7 OUT 0x17,R31 ; DDRB = DDBR0|DDRB2
- +0000000E: E0F2 LDI R31,0x02
- +0000000F: BBF8 OUT 0x18,R31 ; PORTB = PORTB1
- +00000010: E0F5 LDI R31,0x05
- +00000011: BFF3 OUT 0x33,R31 ; TCCR0B = CS00|CS02
- +00000012: E0F0 LDI R31,0x00
- +00000013: BFF5 OUT 0x35,R31 ; MCUCR = 0
- +00000014: E2F0 LDI R31,0x20
- +00000015: BFFB OUT 0x3B,R31 ; GIMSK = PCIE
- +00000016: E1F8 LDI R31,0x18
- +00000017: BBF5 OUT 0x15,R31 ; PCMSK = PCINT3|PCINT4
- +00000018: E0E0 LDI R30,0x00 ; R30 = 0
- +00000019: 9478 SEI ; Global Interrupt Enable
- +0000001A: CFFF RJMP PC-0x0000 ; endless loop
- ; PCINT0 interrupt handler
- +0000001B: D092 RCALL PC+0x0093 ; Call Delay(0x00AE)
- +0000001C: D091 RCALL PC+0x0092 ; Call Delay(0x00AE)
- +0000001D: 30E0 CPI R30,0x00 ; switch(R30)
- +0000001E: F099 BREQ PC+0x14 ; 0: Jump 0x32
- +0000001F: 30E1 CPI R30,0x01
- +00000020: F161 BREQ PC+0x2D ; 1: Jump 0x4D
- +00000021: 30E5 CPI R30,0x05
- +00000022: F189 BREQ PC+0x32 ; 5: Jump 0x54
- +00000023: 30E2 CPI R30,0x02
- +00000024: F1B1 BREQ PC+0x37 ; 2: Jump 0x5B
- +00000025: 30E6 CPI R30,0x06
- +00000026: F1D9 BREQ PC+0x3C ; 6: Jump 0x62
- +00000027: 30E4 CPI R30,0x04
- +00000028: F0C9 BREQ PC+0x1A ; 4: Jump 0x42
- +00000029: 30E8 CPI R30,0x08
- +0000002A: F061 BREQ PC+0x0D ; 8: Jump 0x37
- +0000002B: 30E3 CPI R30,0x03
- +0000002C: F019 BREQ PC+0x04 ; 3: Jump 0x30 (-> 0x71)
- +0000002D: 30E7 CPI R30,0x07
- +0000002E: F011 BREQ PC+0x03 ; 7: Jump 0x31 (-> 0x7A)
- +0000002F: 9518 RETI ; else exit
- +00000030: C040 RJMP PC+0x0041 ; Jump 0x71
- +00000031: C048 RJMP PC+0x0049 ; Jump 0x7A
- ; case (R30==0)
- +00000032: 99B3 SBIC 0x16,3
- +00000033: C003 RJMP PC+0x0004 ; if PINB3 jump 0x37 (Up btn)
- +00000034: 99B4 SBIC 0x16,4
- +00000035: C00C RJMP PC+0x000D ; if PINB4 jump 0x42 (Down btn)
- +00000036: 9518 RETI
- ; case (R30==8)
- +00000037: 9BB3 SBIS 0x16,3
- +00000038: 9518 RETI ; if !PINB3 exit
- +00000039: E0E2 LDI R30,0x02 ; R30 = 2
- +0000003A: 27DD CLR R29 ; R29 = 0
- +0000003B: 27FF CLR R31
- +0000003C: BFF2 OUT 0x32,R31 ; TCNT0 = 0
- +0000003D: E0F2 LDI R31,0x02
- +0000003E: BFF8 OUT 0x38,R31 ; TIFR0 = TOV0
- +0000003F: E0F2 LDI R31,0x02
- +00000040: BFF9 OUT 0x39,R31 ; TIMSK0 = TOIE0
- +00000041: 9518 RETI
- ; case (R30==4)
- +00000042: 9BB4 SBIS 0x16,4
- +00000043: 9518 RETI ; if !PINB4 exit
- +00000044: E0E6 LDI R30,0x06 ; R30 = 6
- +00000045: 27DD CLR R29 ; R29 = 0
- +00000046: 27FF CLR R31
- +00000047: BFF2 OUT 0x32,R31 ; TCNT0 = 0
- +00000048: E0F2 LDI R31,0x02
- +00000049: BFF8 OUT 0x38,R31 ; TIFR0 = TOV0
- +0000004A: E0F2 LDI R31,0x02
- +0000004B: BFF9 OUT 0x39,R31 ; TIMSK0 = TOIE0
- +0000004C: 9518 RETI
- ; case (R30==1)
- +0000004D: 99B3 SBIC 0x16,3
- +0000004E: 9518 RETI ; if PINB3 exit
- +0000004F: E0E0 LDI R30,0x00 ; R30 = 0
- +00000050: 98C2 CBI 0x18,2 ; PORTB2 = 0
- +00000051: E0F0 LDI R31,0x00
- +00000052: BFF9 OUT 0x39,R31 ; TIMSK0 = 0
- +00000053: 9518 RETI
- ; case (R30==5)
- +00000054: 99B4 SBIC 0x16,4
- +00000055: 9518 RETI ; if PINB4 exit
- +00000056: E0E0 LDI R30,0x00 ; R30 = 0
- +00000057: 98C0 CBI 0x18,0 ; PORTB0 = 0
- +00000058: E0F0 LDI R31,0x00
- +00000059: BFF9 OUT 0x39,R31 ; TIMSK0 = 0
- +0000005A: 9518 RETI
- ; case (R30==2)
- +0000005B: 99B3 SBIC 0x16,3
- +0000005C: 9518 RETI ; if PINB3 exit
- +0000005D: E0E3 LDI R30,0x03 ; R30 = 3
- +0000005E: E2F0 LDI R31,0x20
- +0000005F: BFFB OUT 0x3B,R31 ; GIMSK = PCIE
- +00000060: 9AC2 SBI 0x18,2 ; PORTB2 = 1
- +00000061: 9518 RETI
- ; case (R30==6)
- +00000062: 99B4 SBIC 0x16,4
- +00000063: 9518 RETI ; if PINB4 exit
- +00000064: E0E7 LDI R30,0x07 ; R30 = 7
- +00000065: E2F0 LDI R31,0x20
- +00000066: BFFB OUT 0x3B,R31 ; GIMSK = PCIE
- +00000067: 9AC0 SBI 0x18,0 ; PORTB0 = 1
- +00000068: 9518 RETI
- ; dead code?
- +00000069: 9BB4 SBIS 0x16,4
- +0000006A: 9518 RETI ; if !PINB4 exit
- +0000006B: CFD6 RJMP PC-0x0029 ; Jump 0x42
- +0000006C: 9518 RETI
- ; dead code?
- +0000006D: 9BB3 SBIS 0x16,3
- +0000006E: 9518 RETI ; if !PINB3 exit
- +0000006F: CFC7 RJMP PC-0x0038 ; Jump 0x37
- +00000070: 9518 RETI
- ; case (R30==3)
- +00000071: 9BB4 SBIS 0x16,4
- +00000072: 9518 RETI ; if !PINB4 exit
- +00000073: E0E0 LDI R30,0x00 ; R30 = 0
- +00000074: 98C2 CBI 0x18,2 ; PORTB2 = 0
- +00000075: E0F0 LDI R31,0x00
- +00000076: BFF9 OUT 0x39,R31 ; TIMSK0 = 0
- +00000077: 99B4 SBIC 0x16,4
- +00000078: CFFE RJMP PC-0x0001 ; while(BTN4) loop
- +00000079: 9518 RETI
- ; case (R30==7)
- +0000007A: 9BB3 SBIS 0x16,3
- +0000007B: 9518 RETI ; if !PINB3 exit
- +0000007C: E0E0 LDI R30,0x00 ; R30 = 0
- +0000007D: 98C0 CBI 0x18,0 ; PORTB0 = 0
- +0000007E: E0F0 LDI R31,0x00
- +0000007F: BFF9 OUT 0x39,R31 ; TIMSK0 = 0
- +00000080: 99B3 SBIC 0x16,3
- +00000081: CFFE RJMP PC-0x0001 ; while(BTN3) loop
- +00000082: 9518 RETI
- ; TIM0_OVF interrupt handler
- +00000083: 95D3 INC R29 ; R29++
- +00000084: 30D1 CPI R29,0x01 ; switch(R29)
- +00000085: F029 BREQ PC+0x06 ; 1: Jump 0x8B
- +00000086: 30D3 CPI R29,0x03
- +00000087: F081 BREQ PC+0x11 ; 3: Jump 0x98
- +00000088: 31D4 CPI R29,0x14
- +00000089: F099 BREQ PC+0x14 ; 20: Jump 0x9D -> INT0 handler
- +0000008A: 9518 RETI ; else exit
- ; case(R29==1)
- +0000008B: E2F0 LDI R31,0x20
- +0000008C: BFFB OUT 0x3B,R31 ; GIMSK = PCIE
- +0000008D: 30E2 CPI R30,0x02 ; switch(R30)
- +0000008E: F019 BREQ PC+0x04 ; 2: Jump 0x92
- +0000008F: 30E6 CPI R30,0x06
- +00000090: F021 BREQ PC+0x05 ; 6: Jump 0x95
- +00000091: 9518 RETI ; else exit
- ; case(R29==1 && R30==2)
- +00000092: E0E1 LDI R30,0x01 ; R30 = 1
- +00000093: 9AC2 SBI 0x18,2 ; PORTB2 = 1
- +00000094: 9518 RETI
- ; case(R29==1 && R30==6)
- +00000095: E0E5 LDI R30,0x05 ; R30 = 5
- +00000096: 9AC0 SBI 0x18,0 ; PORTB0 = 1
- +00000097: 9518 RETI
- ; case(R29==3)
- +00000098: E4F0 LDI R31,0x40
- +00000099: BFFA OUT 0x3A,R31 ; GIFR = INTF0
- +0000009A: E6F0 LDI R31,0x60
- +0000009B: BFFB OUT 0x3B,R31 ; GIMSK = PCIE|INT0
- +0000009C: 9518 RETI
- ; INT0 Interrupt handler
- +0000009D: E0F0 LDI R31,0x00
- +0000009E: BFF9 OUT 0x39,R31 ; TIMSK0 = 0
- +0000009F: 30E1 CPI R30,0x01 ; case(R30)
- +000000A0: F039 BREQ PC+0x08 ; 1: Jump 0xA8
- +000000A1: 30E5 CPI R30,0x05
- +000000A2: F041 BREQ PC+0x09 ; 5: Jump 0xAB
- +000000A3: 30E3 CPI R30,0x03
- +000000A4: F019 BREQ PC+0x04 ; 3: Jump 0xA8
- +000000A5: 30E7 CPI R30,0x07
- +000000A6: F021 BREQ PC+0x05 ; 7: Jump 0xAB
- +000000A7: 9518 RETI ; else exit
- ; case(R30==1 || R30==3)
- +000000A8: E0E4 LDI R30,0x04 ; R30 = 4
- +000000A9: 98C2 CBI 0x18,2 ; PORTB2 = 0
- +000000AA: 9518 RETI
- ; case(R30==5 || R30==7)
- +000000AB: E0E8 LDI R30,0x08 ; R30 = 8
- +000000AC: 98C0 CBI 0x18,0 ; PORTB0 = 0
- +000000AD: 9518 RETI
- ; Delay subroutine (~0.65ms)
- +000000AE: 940A DEC R0
- +000000AF: F7F1 BRNE PC-0x01
- +000000B0: 9508 RET
- +000000B1: 454D ; 'MEGAVOLT'
- +000000B2: 4147
- +000000B3: 4F56
- +000000B4: 544C
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement