ADC_Wandlung.asm


1
.include "m16def.inc"
2
.include "routines.inc"
3
4
.def temp = r16
5
6
      ldi temp, 0xFF
7
      out DDRB, temp  ;Out-Port klarmachen
8
9
10
11
;Stack Init
12
13
  ldi temp, LOW (RAMEND)
14
  out SPL,temp
15
  ldi temp, HIGH(RAMEND)
16
  out SPH,temp
17
18
19
20
21
22
;----ADCSR REGISTER einstellen---
23
      ldi  temp, 0b10000101
24
      out   ADCSR, temp
25
;--------------------------------
26
27
28
;----ADMUX auf KANAL 1 einstellen---------------
29
;----und ADLAR (Bit 5) setzend--
30
;----und wir einfach ADCH als 8 Bit auslesen----
31
;----können-------------------------------------
32
      ldi   temp, 0b00100001
33
      out   ADMUX, temp
34
;-----------------------------------------------
35
36
37
38
39
40
41
      sbi ADCSR, ADSC       ;Eine Dummy einlesung starten
42
dummy:    sbis   ADCSR, ADIF      ;Warten auf ADIF
43
      rjmp   Dummy
44
45
46
47
48
49
mainloop:
50
51
      SetZPointer(datamain*2)
52
      sbi    ADCSR, ADSC      ;set bit ADSC=Start conversion
53
54
55
adifwait:     sbis ADCSR, ADIF       ;Warten auf den Interrupt flag
56
      rjmp adifwait
57
58
59
            
60
      in temp  ,ADCL        ;Einlesen
61
      in temp2 ,ADCH
62
63
64
65
66
      mov temp3, temp2      ;durch 32 (2 hoch 5) teilen
67
68
      lsr temp3
69
      lsr temp3
70
      lsr temp3
71
      lsr temp3
72
      lsr temp3
73
74
75
76
setZloop:     cpi temp3, 0         ;den ZPointer so lange erhöhen, bis
77
      breq portout        ;er auf der richtigen Stelle steht
78
      IncZPointer
79
      dec temp3
80
      rjmp setZloop
81
82
83
portout:    lpm              ;ausgabe des aus ADCH gelesenen Wertes
84
      mov temp, r0
85
      com temp
86
87
88
      out PORTB, temp      ;leds aufleuchten lassen
89
90
91
      rjmp mainloop        ;und wieder von vorn
92
93
94
95
;----Datablock im Flashrom----------------------
96
;----Lookup table-------------------------------
97
98
99
datamain: 
100
.db 0b00000000,0
101
.db 0b00000001,0
102
.db 0b00000011,0
103
.db 0b00000111,0
104
.db 0b00001111,0
105
.db 0b00011111,0
106
.db 0b00111111,0
107
.db 0b01111111,0