Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "m32def.inc"
- ;Initialisér programmet
- .def numH = R19 ; numerator high byte¸ tæller
- .def numL = R18 ; numerator low byte
- .def denum = R16 ; denumerator, nævner
- .def kvotientH = R25 ; kvotient high byte
- .def kvotientL = R24 ; kvotient low byte
- .org 0
- rjmp RESET
- RESET:
- ;INDSÆT KODE HER...
- ;Start programløkken
- ; Initialiserer stack pointer
- ldi R16,HIGH(RAMEND)
- out SPH,R16
- ldi R16,LOW(RAMEND)
- out SPL,R16
- ; laver s11 og s10 til input ved at cleare ddrd 2 og 6
- cbi DDRD, 2
- cbi DDRD, 6
- ; 7-segment-displayet skal sættes til output-mode, PORTB
- ; PORTB setup
- ldi R16, 0xFF
- out DDRB, R16 ; PORTB = output
- ;ldi R16, 0xFF
- ;ldi R16, 0xFF ; tænder for a til at starte med
- out PORTB, R16 ; Turn LEDS off
- LOOP:
- ldi R19, high(2655) ; summerer værdierne i opgaven
- ldi R18, low(2655)
- ldi R17, high(74)
- ldi R16, low(74)
- call Sum16
- ldi R17, high(592)
- ldi R16, low(592)
- call Sum16
- ldi R17, high(1380)
- ldi R16, low(1380)
- call Sum16
- ldi R17, high(17352)
- ldi R16, low(17352)
- call Sum16
- ldi denum, 5 ; dividerer summen med 5
- call Div16_8 ; dividerer summen med 5
- com numL ; komplementerer de tre værdier, da displayet er aktiv lav
- com numH
- com denum
- call Print_Diode ; smækker lortet ud på displayet
- Sum16:
- add R18, R16 ; læg lsb sammen
- adc R19, R17 ; læg msb sammen med carry
- ret
- Div16_8:
- clr kvotientH
- clr kvotientL ; clearer kvotienten til at starte med
- l1:
- adiw kvotientL, 1 ; lægger 1 til kvotienten
- sub numL, denum ; trækker nævner fra tæller
- sbci numH, 0 ; trækker vi den lånte bit fra, carry
- brcc l1 ; hopper tilbage, hvis C = 0
- ; hopper videre, hvis der er lånt fra 'tredje' byte
- sbiw kvotientL, 1 ; trækker 1 fra kvotienten
- add numL, denum ; lægger det tilbage, der blev trukket for meget
- mov R16, numL ; rest puttes i R16, nu er num et 8-bit
- mov R19, kvotientH ; lægger high-kvotient i R19
- mov R18, kvotientL ; lægger low-kvotient i R18
- ret
- Print_Diode:
- sbis PIND, 2 ; hvis knap 2 (s11) er trykket, så skal næste linje køres, den er aktiv lav
- rjmp knap2
- sbis PIND, 6 ; hvis knap 6 (s10) er trykket, spring næste linje over
- rjmp knap6
- ldi R27, 0xFF
- out PORTB, R27
- ret
- knap2:
- sbis PIND, 6 ; hvis begge er tændt, kør næste linje, ellers hop videre
- rjmp begge
- out PORTB, numH ; smider numH, R19, ud på displayet
- rjmp Print_Diode ;
- knap6:
- out PORTB, numL ; smider numL, R18, ud på displayet
- rjmp Print_Diode ;
- begge:
- out PORTB, R16 ; smækker restdelen ud på display
- rjmp Print_Diode
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement