1 | '------------------------------------------------------------------------------
|
2 | $regfile = "m168def.dat" 'ATmega168-Deklarationen
|
3 | $crystal = 11059200 'Quarz: 11059200 Hz
|
4 |
|
5 | Dim S As String * 10 '10+1 Byte langer String
|
6 | Dim B(11) As Byte At S Overlay 'Auf Adresse von s setzen!
|
7 |
|
8 | Dim N As Byte 'Für aktuelle Stringlänge
|
9 | Dim Recbyte As Byte
|
10 |
|
11 | '------------------------------------------------------------------------------
|
12 | ' Hardware UART konfigurieren; 2400,8N1
|
13 | Config Com1 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
|
14 |
|
15 | 'Öffne Kommunikation mit Sonde
|
16 | Open "comb.0:2400,8,n,1" For Input As #1 'Port B.0 ist RxD für Opto (E-Feld)
|
17 | Open "comb.1:2400,8,n,1" For Output As #2 'Port B.1 ist TxD für Opto (E-Feld)
|
18 | On Pcint0 Serielle_lesen 'Sprung bei Interrupt (Port B.0 = PCINT0)
|
19 |
|
20 | On Urxc Onrxd
|
21 | Enable Urxc
|
22 |
|
23 | Pcmsk0.0 = 1 ' PCINT für Port B.0 freigeben
|
24 | Pcicr.0 = 1 ' PCints aktivieren (PCIE0=1)
|
25 | Enable Interrupts ' Interrupts gernerell freigeben
|
26 |
|
27 | '*******************************************************************************
|
28 | '*********************** H A U P T P R O G R A M *******************************
|
29 | '*******************************************************************************
|
30 | Main:
|
31 | N = 0
|
32 | Do
|
33 | 'mach was
|
34 | Loop
|
35 | Close #1
|
36 | Close #2
|
37 | '*******************************************************************************
|
38 |
|
39 | '*******************************************************************************
|
40 | '*************************** Interrupt Routinen ********************************
|
41 | '*******************************************************************************
|
42 | Onrxd: ' wird bei Eingabe ein serieller Interrupt ausgelöst
|
43 | Pcmsk0.0 = 0 ' erstmal PCINT0 Soft-UART sperren
|
44 | Incr N ' zähle empfangene Zeichen
|
45 | B(n) = Udr ' empfangenes Zeichen in String einfügen
|
46 | Udr = B(n) ' und als Echo zurücksenden
|
47 | Pcmsk0.0 = 1 ' PCINT0 Soft-UART wieder freigeben
|
48 | Return
|
49 | '*******************************************************************************
|
50 | Serielle_lesen:
|
51 | Disable Urxc ' serieller Interrupt sperren
|
52 | Pcmsk0.0 = 0 ' Solange Bits reinkommen, PCINT0 sperren
|
53 | Get #1 , Recbyte ' Byte lesen
|
54 | Udr = Recbyte ' und gleich weiter auf UART senden
|
55 |
|
56 | ' Put #2 , Recbyte ' Byte als Echo zurücksenden
|
57 |
|
58 | Pcmsk0.0 = 1 ' PCINT0 wieder freigeben
|
59 | Enable Urxc ' serieller Interrupt wieder freigeben
|
60 | Return
|
61 | '*******************************************************************************
|