1 | ; **************************************************
|
2 | ; * *
|
3 | ; * Erste Version Rohwert bzw. geschiftet ausgeben *
|
4 | ; * *
|
5 | ; * *
|
6 | ; * 8.1.05 01:04 *
|
7 | ; * *
|
8 | ; **************************************************
|
9 | .include "4433def.inc" ;ggf. anpassen
|
10 | .def temp = r16
|
11 | .def temp2 = r17
|
12 | .def display = r18
|
13 | .def lowByte = r24
|
14 | .def highByte = r25
|
15 | .def Delay =r19 ; Delay variable 1
|
16 | .def Delay2 =r20 ; Delay variable 2
|
17 | .def Delay3 =r21
|
18 |
|
19 | .CSEG
|
20 | .ORG $0000
|
21 | ;
|
22 | ; Reset- und Interrupt-Vektoren
|
23 | ;
|
24 | rjmp Start ; Reset-vector
|
25 | reti ; External Interrupt Request 0
|
26 | reti ; External Interrupt Request 1
|
27 | reti ; Timer/Counter1 Capture event
|
28 | reti ; Timer/Counter1 Compare match A!!!!!!!!!
|
29 | reti ; Timer/Counter1 Compare match B
|
30 | reti ; Timer/Counter1 Overflow
|
31 | reti ; Timer/Counter0 Overflow
|
32 | reti ; SPI Serial Transfer complete
|
33 | reti ; Uart Rx char available
|
34 | reti ; Uart Tx data register empty
|
35 | reti ; Uart Tx complete
|
36 | reti ; Analog comparator
|
37 |
|
38 |
|
39 | ; ************** Interrupt service routines ********
|
40 | ; ************** Main Loop ********
|
41 | Start:
|
42 | ; ldi temp1,low(RAMEND)
|
43 | ; out SPL,temp1
|
44 | ; ldi temp1,high(RAMEND)
|
45 | ; out SPH,temp1 ;init Stack Pointer
|
46 |
|
47 | ldi temp, RAMEND ;Stackpointer initialisieren
|
48 | out SPL, temp
|
49 |
|
50 | ldi temp, 0xFF ;Port D = Ausgang
|
51 | out DDRD, temp
|
52 |
|
53 | ldi temp, 5
|
54 | out ADMUX, temp ;Channel5
|
55 | ldi temp, ((1<<ADEN) | (1<<ADSC) | (1<<ADFR)) + 7
|
56 | out ADCSR, temp
|
57 |
|
58 | loop:
|
59 | sbi ADCSR, ADIF
|
60 |
|
61 | wait1:
|
62 | sbis ADCSR, ADIF
|
63 | rjmp wait1
|
64 | sbi ADCSR, ADIF
|
65 | wait2:
|
66 | sbis ADCSR, ADIF
|
67 | rjmp wait2
|
68 | ;ADC einlesen
|
69 | in lowByte, ADCL
|
70 | in highByte, ADCH
|
71 |
|
72 | ;zweimal nach rechts schieben über carry macht aus 10-bit-Wert einen 8-bit-Wert
|
73 | ;damit er an einem Port angezeigt werden kann
|
74 | ror highByte
|
75 | ror lowByte
|
76 | ror highByte
|
77 | ror lowByte
|
78 | ;Differenz von der 'Mitte' bilden
|
79 | mov temp, lowByte
|
80 | ldi temp2, 128
|
81 | sbc temp, temp2
|
82 | ;Vorzeichen löschen
|
83 | andi temp, 0x7f
|
84 |
|
85 | ;Anzeige auf ein paar hohe Bits zurechtstutzen
|
86 | ; clc
|
87 | ; ror temp
|
88 |
|
89 | rjmp disp
|
90 |
|
91 | ;******* wird momentan übersprungen bis disp:
|
92 | andi temp, 0x07
|
93 | ldi display, 0x01
|
94 |
|
95 | shift:
|
96 | dec temp
|
97 | breq fertsch
|
98 | clc
|
99 | rol display
|
100 | rjmp shift
|
101 | fertsch:
|
102 | mov temp, display
|
103 |
|
104 | disp:
|
105 | com Temp
|
106 | out PORTD, temp; Wert über LEDs anzeigen
|
107 | ;rjmp loop
|
108 |
|
109 |
|
110 | DLY:
|
111 | dec Delay
|
112 | brne DLY
|
113 | dec Delay2
|
114 | brne DLY
|
115 | rjmp loop ; Repeat loop forever.include "lcd-routines.asm" ;LCD-Routinen werden hier eingefügt
|