ssled.asm
1 | .include "m328pdef.inc"
| 2 |
| 3 | ldi r16, 0b01111111 ; PB0-6 as outputs (7 segment display)
| 4 | out DDRB, r16 ;
| 5 |
| 6 | loop:
| 7 |
| 8 | ldi r16, PINC ; Eingnge einelesen
| 9 |
| 10 | cpi r16, 0b00000000 ; Eingnge = 0?
| 11 | brne number1 ; wenn nein: weiter mit Prfung auf Nummer 2
| 12 | ldi r17, 0b01111110 ; sonst: 0 -> Segmente a, b, c, d, e, f aktivieren
| 13 | jmp ausgabe ; und ausgeben
| 14 |
| 15 | number1:
| 16 | cpi r16, 0b00000001 ;
| 17 | brne number2 ;
| 18 | ldi r17, 0b00110000 ; 1 -> b, c
| 19 | jmp ausgabe ;
| 20 |
| 21 | number2:
| 22 | cpi r16, 0b00000010 ;
| 23 | brne number3 ;
| 24 | ldi r17, 0b01101101 ; 2 -> a, b, d, e, g
| 25 | jmp ausgabe ;
| 26 |
| 27 | number3:
| 28 | :
| 29 | :
| 30 |
| 31 | number9:
| 32 | cpi r16, 0b00001001 ; if(PINC == 9)
| 33 | breq nonumber ;
| 34 | ldi r17, 0b01111011 ; 9 -> a, b, c, d, f, g
| 35 | jmp ausgabe ;
| 36 |
| 37 | nonumber:
| 38 | ldi r17, 0 ; alles aus
| 39 |
| 40 | ausgabe:
| 41 | out PORTB, r17 ; Segmente updaten
| 42 |
| 43 | rjmp loop ;
|
|