Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .include "m32def.inc"
  2. ;Initialisér programmet
  3.  
  4. .def numH       = R19   ; numerator high byte¸ tæller
  5. .def numL       = R18   ; numerator low byte
  6. .def denum      = R16   ; denumerator, nævner
  7. .def kvotientH  = R25   ; kvotient high byte
  8. .def kvotientL  = R24   ; kvotient low byte
  9.  
  10. .org 0
  11.     rjmp RESET
  12.  
  13. RESET:
  14.     ;INDSÆT KODE HER...
  15.     ;Start programløkken
  16.  
  17.     ; Initialiserer stack pointer
  18.     ldi     R16,HIGH(RAMEND)      
  19.     out     SPH,R16            
  20.     ldi     R16,LOW(RAMEND)    
  21.     out     SPL,R16
  22.  
  23.     ; laver s11 og s10 til input ved at cleare ddrd 2 og 6
  24.     cbi DDRD, 2
  25.     cbi DDRD, 6
  26.  
  27.     ; 7-segment-displayet skal sættes til output-mode, PORTB
  28.     ; PORTB setup
  29.     ldi R16, 0xFF
  30.     out DDRB, R16           ; PORTB = output
  31.     ;ldi        R16, 0xFF
  32.     ;ldi        R16, 0xFF           ; tænder for a til at starte med
  33.     out PORTB, R16          ; Turn LEDS off
  34.  
  35.  
  36. LOOP:
  37.     ldi R19, high(2655)     ; summerer værdierne i opgaven
  38.     ldi R18, low(2655)
  39.  
  40.     ldi R17, high(74)
  41.     ldi R16, low(74)
  42.  
  43.     call Sum16
  44.  
  45.     ldi R17, high(592)
  46.     ldi R16, low(592)
  47.  
  48.     call Sum16
  49.  
  50.     ldi R17, high(1380)
  51.     ldi R16, low(1380)
  52.  
  53.     call Sum16
  54.  
  55.     ldi R17, high(17352)
  56.     ldi R16, low(17352)
  57.  
  58.     call Sum16
  59.  
  60.     ldi denum, 5            ; dividerer summen med 5
  61.  
  62.     call Div16_8        ; dividerer summen med 5
  63.  
  64.     com numL                ; komplementerer de tre værdier, da displayet er aktiv lav
  65.     com numH
  66.     com denum
  67.  
  68.     call Print_Diode    ; smækker lortet ud på displayet
  69.  
  70.  
  71. Sum16:
  72.     add R18, R16        ; læg lsb sammen
  73.     adc R19, R17        ; læg msb sammen med carry
  74.  
  75.     ret
  76.  
  77.  
  78. Div16_8:
  79.  
  80.     clr kvotientH
  81.     clr kvotientL       ; clearer kvotienten til at starte med
  82.  
  83.     l1:
  84.         adiw kvotientL, 1   ; lægger 1 til kvotienten
  85.         sub numL, denum     ; trækker nævner fra tæller
  86.         sbci numH, 0        ; trækker vi den lånte bit fra, carry
  87.         brcc l1        ; hopper tilbage, hvis C = 0
  88.                             ; hopper videre, hvis der er lånt fra 'tredje' byte
  89.  
  90.     sbiw kvotientL, 1   ; trækker 1 fra kvotienten
  91.    
  92.     add numL, denum     ; lægger det tilbage, der blev trukket for meget
  93.  
  94.     mov R16, numL       ; rest puttes i R16, nu er num et 8-bit
  95.  
  96.     mov R19, kvotientH  ; lægger high-kvotient i R19
  97.     mov R18, kvotientL  ; lægger low-kvotient i R18
  98.  
  99.     ret
  100.  
  101.  
  102. Print_Diode:
  103.  
  104.     sbis PIND, 2        ; hvis knap 2 (s11) er trykket, så skal næste linje køres, den er aktiv lav
  105.     rjmp knap2
  106.     sbis PIND, 6        ; hvis knap 6 (s10) er trykket, spring næste linje over
  107.     rjmp knap6
  108.    
  109.     ldi R27, 0xFF
  110.     out PORTB, R27
  111.  
  112.     ret
  113.  
  114.  
  115. knap2:
  116.  
  117.     sbis PIND, 6        ; hvis begge er tændt, kør næste linje, ellers hop videre
  118.     rjmp begge
  119.     out PORTB, numH     ; smider numH, R19, ud på displayet
  120.  
  121.     rjmp Print_Diode    ;
  122.  
  123.  
  124. knap6:
  125.  
  126.     out PORTB, numL     ; smider numL, R18, ud på displayet
  127.  
  128.     rjmp Print_Diode    ;
  129.  
  130.  
  131. begge:
  132.  
  133.     out PORTB, R16      ; smækker restdelen ud på display
  134.  
  135.     rjmp Print_Diode
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement