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
|
|