sendtestback.asm


1
.include "m8def.inc"
2
3
.dseg 
4
  .def temp1 = r16
5
  .def ausgabe = r17
6
  .def id = r18
7
  .def empf = r19
8
  .def temp2 = r20
9
  .equ UBRRVAL=25
10
 
11
.cseg
12
.org 0x0000
13
; --------------------------------------------------------------------------
14
; Interrupt-Vektor-Tabelle
15
; --------------------------------------------------------------------------
16
    
17
  rjmp  sysinit           ; Reset Handler
18
  reti  ;EXT_INT0         ; IRQ0 Handler
19
  reti  ;EXT_INT1         ; IRQ1 Handler
20
  reti  ;TIM2_COMP        ; Timer2 Compare Handler
21
  reti  ;TIM2_OVF         ; Timer2 Overflow Handler
22
  reti  ;TIM1_CAPT        ; Timer1 Capture Handler
23
  reti  ;TIM1_COMPA       ; Timer1 CompareA Handler
24
  reti  ;TIM1_COMPB       ; Timer1 CompareB Handler
25
  reti  ;TIM1_OVF         ; Timer1 Overflow Handler
26
  rjmp  Timer0_ISR        ; Timer0 Overflow Handler
27
  reti  ;SPI_STC          ; SPI Transfer Complete Handler
28
  rjmp  int_rxc            ; USART RX Complete Handler
29
  reti  ;USART_UDRE       ; UDR Empty Handler
30
  reti  ;USART_TXC        ; USART TX Complete Handler
31
  reti  ;ADC              ; ADC Conversion Complete Handler
32
  reti  ;EE_RDY           ; EEPROM Ready Handler
33
  reti  ;ANA_COMP         ; Analog Comparator Handler
34
  reti  ;TWSI             ; Two-wire Serial Interface Handler
35
  reti  ;SPM_RDY          ; Store Program Memory Ready Handler
36
37
38
        
39
sysinit:
40
        ; Stackpointer initialisieren
41
        ldi temp1, LOW(RAMEND)
42
        out SPL, temp1
43
        ldi temp1, HIGH(RAMEND)
44
        out SPH, temp1
45
     
46
    
47
    ;Timer initialisieren
48
    ;rcall Timer0_Init
49
    ;sei
50
    
51
        ; Oscilator kalibrieren
52
    ;ldi temp1, 5
53
    ;out OSCCAL, temp1 
54
    
55
    ; Baudrate einstellen
56
        ldi temp1, HIGH(UBRRVAL)
57
        out UBRRH, temp1
58
    ldi temp1, LOW(UBRRVAL)
59
        out UBRRL, temp1
60
         
61
        ; Frame-Format: 8 Bit
62
        ldi temp1, (1<<URSEL)|(3<<UCSZ0)
63
        out UCSRC, temp1
64
 
65
         
66
        sbi UCSRB, RXCIE                  ; Interrupt bei Empfang
67
        sbi UCSRB, RXEN              ; RX aktivieren
68
      sbi UCSRB, TXEN                    ; TX aktivieren
69
    sei
70
    ldi ausgabe, 0b00000110       
71
      out DDRB, ausgabe
72
    ;rcall ausgabe
73
    
74
Main:
75
    nop
76
    ;rcall menu
77
    rjmp Main
78
79
 
80
81
82
83
Timer0_Init:
84
  push temp1
85
  in   temp1,TIMSK    ; TIMSK setzen
86
  sbr  temp1,1
87
  out TIMSK,temp1
88
89
  in  temp1,TCCR0
90
  sbr temp1,0b101
91
  out TCCR0,temp1
92
  pop temp1
93
  ret
94
95
Timer0_ISR:
96
  push temp1
97
  in temp1,SREG
98
  push temp1
99
  ;rcall ausgabe
100
  pop temp1
101
  out SREG,temp1
102
  pop temp1
103
  reti
104
105
106
int_rxc:
107
  
108
  in temp1, UDR
109
    cpi temp1, 'H'
110
  breq ichbingemeint
111
  ;rcall serout
112
   ;cpi temp, 'A'
113
     ;brne int_rxc_1
114
  ;push temp1
115
  ;in temp1,SREG
116
  ;push temp1
117
  ;rcall ok
118
  ;pop temp1
119
  ;out SREG,temp1
120
  ;pop temp1
121
  reti
122
123
ichbingemeint:
124
  cbi UCSRB, RXCIE
125
  ldi temp1, 'O'
126
  rcall serout
127
  ldi temp1, 'K'
128
  rcall serout
129
  ldi temp1, 'H'
130
  rcall serout
131
  rjmp warten
132
  ret
133
134
135
warten:
136
  in empf, UDR
137
  cpi empf, '1'
138
  breq erste
139
  cpi empf, '2'
140
  breq zweite
141
  rjmp warten
142
  ret
143
144
erste:
145
  in empf, UDR
146
  cpi empf, '1'
147
  breq ersteeinschalten
148
  cpi empf, '0'
149
  breq ersteausschalten
150
  rjmp erste
151
  ret
152
153
zweite:
154
  in empf, UDR
155
  cpi empf, '1'
156
  breq zweiteeinschalten
157
  cpi empf, '0'
158
  breq zweiteausschalten
159
  rjmp zweite
160
  ret
161
162
ersteeinschalten:
163
  sbi PORTB, 1
164
  ;ldi ausgabe, 0b00000010 
165
    ;out PORTB, ausgabe
166
  sbi UCSRB, RXCIE
167
  reti
168
169
ersteausschalten:
170
  cbi PORTB, 1
171
  ;ldi ausgabe, 0b00000000 
172
    ;out PORTB, ausgabe
173
  sbi UCSRB, RXCIE
174
  reti
175
176
zweiteeinschalten:
177
  sbi PORTB, 2
178
  ;ldi ausgabe, 0b00000100 
179
    ;out PORTB, ausgabe
180
  sbi UCSRB, RXCIE
181
  reti
182
183
zweiteausschalten:
184
  cbi PORTB, 2
185
  ;ldi ausgabe, 0b00000000 
186
    ;out PORTB, ausgabe
187
  sbi UCSRB, RXCIE
188
  reti
189
190
191
serout:
192
        sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste
193
        ;nop                               ; Byte bereit ist
194
        rjmp serout
195
        out UDR, temp1
196
        ret                               ; zurück zum Hauptprogramm
197
198
    .EXIT