arrows , automata , positioning shapes, chains, calc, arrows, positioning
;; (C) David Vajda ;; 2025-03-22 ;; siebensegment 1fach klassisch .include "m8def.inc" ldi r16, HIGH (RAMEND) out SPH, r16 ldi r16, LOW (RAMEND) out SPL, r16 ldi r16, 0xff out DDRC, r16 out DDRB, r16 ldi r16, 0xff out DDRD, r16 main: ;ldi r16, 0x01 ldi ZH, HIGH (telefonstrB) ldi ZL, LOW (telefonstrB) ldi r16, 0x59 rcall hexoutascii rjmp main hexoutascii: push r16 ldi r18, 0b01010101 out PORTD, r18 andi r16, 0b00001111 rcall bcddecode rcall out7 rcall sleep pop r16 push r16 swap r16 ldi r18, 0b10101010 out PORTD, r18 andi r16, 0b00001111 rcall bcddecode rcall out7 rcall sleep pop r16 ret out7: com r24 out PORTC, r24 sbrs r24, 6 rjmp next ldi r24, 0x01 out PORTB, r24 rjmp next2 next: ldi r24, 0x00 out PORTB, r24 next2: ret bcddecode: push r16 push ZH push ZL ldi ZH, HIGH (seg7B) ldi ZL, LOW (seg7B) ;; das stimmte natuerlich nicht mit dem adiw - das ist konstante laut i inc r16 bcddecodeloop1: lpm r24, Z+ dec r16 brne bcddecodeloop1 pop ZL pop ZH pop r16 ret sleep: push r16 push r17 push r18 ldi r16, 0xff sleeploop1: ldi r17, 0x0b sleeploop2: dec r17 brne sleeploop2 dec r16 brne sleeploop1 pop r18 pop r17 pop r16 ret seg7: .db 0b00111111, 0b00001100, 0b01011011, 0b01011110, 0b01101100, 0b01110110, 0b01110111, 0b00011100, 0b01111111, 0b01111110, 0b01111101, 0b01100111, 0b00110011, 0b01001111, 0b01110011, 0b01110001 .equ seg7B = seg7*2 ; 1 e ; 2 d ; 4 c ; 6 b ; 7 a ; 9 f ; 10 g ; 1 e ; 2 d ; 3 c ; 4 b ; 5 a ; 6 f ; 7 g ;; 0: abcdef 1 2 3 4 5 6 0b 0 0111 111 ;; 1: bc 4 3 ;; 2: abged 5 4 7 1 2 ;; 3: abgcd 5 4 7 3 2 ;; 4: fgbc 6 7 4 3 ;; 5: afgcd 5 6 7 3 2 ;; 6: afgcde 5 6 7 3 2 1 ;; 7: abc 5 4 3 ;; 8: abcdefg 1 2 3 4 5 6 7 ;; 9: abcdfg 2 3 4 5 6 7 ;; A: abcefg 3 4 5 6 7 ;; b: cdefg 2 3 6 7 ;; C: afde: 1 2 5 6 ;; d: bcdeg 1 2 3 4 7 ;; E: adefg 1 2 5 6 7 ;; F: aefg 1 5 6 7 ;; 1: bc 3 4 0b 0 0001 100 ;; 2: abged 1 2 4 5 7 0b 0 1011 011 ;; 3: abgcd 2 3 4 5 7 0b 0 1011 110 ;; 4: fgbc 3 4 6 7 0b 0 1101 100 ;; 5: afgcd 2 3 5 6 7 0b 0 1110 110 ;; 6: afgcde 1 2 3 5 6 7 0b 0 1110 111 ;; 7: abc 3 4 5 0b 0 0011 100 ;; 8: abcdefg 1 2 3 4 5 6 7 0b 0 1111 111 ;; 9: abcdfg 2 3 4 5 6 7 0b 0 1111 110 ;; A: abcefg 1 3 4 5 6 7 0b 0 1111 101 ;; b: cdefg 1 2 3 6 7 0b 0 1100 111 ;; C: afde: 1 2 5 6 0b 0 0110 011 ;; d: bcdeg 1 2 3 4 7 0b 0 1001 111 ;; E: adefg 1 2 5 6 7 0b 0 1110 011 ;; F: aefg 1 5 6 7 0b 0 1110 001 telefonstr: .db 2,4,0x22, 0x22 .eqq telefonstrB = telefonstr*2