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          ;