RX-TX-Kommunikation.asm
1 | .include "tn2313def.inc" ;Definitionsdatei laden
| 2 |
| 3 | .EQU baud = 9600 ;
| 4 | .EQU takt = 3686400 ;
| 5 | .DEF akku = r16 ;
| 6 | .CSEG ;
| 7 | rjmp start ;
| 8 | .ORG $07 ;
| 9 | rjmp igetch ;
| 10 | .ORG $10 ;
| 11 | start: ldi akku, low(ramend);
| 12 | out SPL,akku ;
| 13 | ldi akku,$ff ;
| 14 | out DDRB,akku ;
| 15 | rcall initi ;
| 16 | ldi ZL,LOW(prompt*2);
| 17 | ldi ZH,HIGH(prompt*2)
| 18 | rcall putsf
| 19 | sei
| 20 |
| 21 | haupt: rjmp haupt ;
| 22 |
| 23 | putsf: push r0 ;
| 24 | in r0, SREG ;
| 25 | push r0 ;
| 26 | push ZL ;
| 27 | push ZH ;
| 28 |
| 29 | putsf1: lpm ;
| 30 | adiw ZL,1 ;
| 31 | tst r0 ;
| 32 | breq putsf3 ;
| 33 |
| 34 | putsf2: sbis USR,UDRE ;
| 35 | rjmp putsf2 ;
| 36 | out UDR,r0 ;
| 37 | rjmp putsf1 ;
| 38 |
| 39 | putsf3: pop ZH ;
| 40 | pop ZL ;
| 41 | pop r0 ;
| 42 | out sreg,r0 ;
| 43 | pop r0 ;
| 44 | ret ;
| 45 |
| 46 | initi: push akku ;
| 47 | ldi akku, takt/(16*baud)-1;
| 48 | out UBRR,akku ;
| 49 | sbi UCR,RXEN ;
| 50 | sbi UCR,TXEN ;
| 51 | sbi UCR, RXCIE ;
| 52 | pop akku ;
| 53 | ret ;
| 54 |
| 55 | igetch: push akku ;
| 56 | in akku,UDR ;
| 57 | igetch1:
| 58 | sbis USR,UDRE ;
| 59 | rjmp igetch1 ;
| 60 | out UDR,akku ;
| 61 | out PORTB,akku ;
| 62 | pop akku ;
| 63 | reti ;
| 64 |
| 65 | prompt: .DB 10,13,"Ihre Eingabe bitte > ",0 ;
| 66 | .EXIT ;
|
|