Dieses Programm erfüllt die vier Funktionen Master Transmitter, Master Receiver, Slave Transmitter, Slave Receiver.
Zu Starten ist das Programm bei der Adresse 8000h.
Um die Übertragung als Master zu beginnen, muß "a" eingegeben werden. Abhängig vom Richtungsbit, das bei dieser Version im Programmcode in den Routinen "08h Start gesendet" beziehungsweise "10h Repeated-Start gesendet" eingestellt werden muß, wird das Terminal zum Master Transmitter oder zum Master Receiver.
Da das Programm alle für den Betrieb als Slave nötigen Interruptroutinen enthält, kann es auch als Slave angesprochen werden. Hierbei wird an Hand des empfangenen Richtungsbit zwischen Transmitter und Receiver unterschieden und automatisch die entsprechende Routine angesprochen.
Die Übertragung kann vom Transmitter, gleich ob Master oder Slave, mit "!" beendet werden.
Zu beachten ist, daß alle gleichzeitig am Bus verwendeten Programme unterschiedliche eigene Adressen besitzen müssen, was im Programmcode im entsprechenden Register S1ADR in der Routine "Initialisierung" einzustellen ist.
;************************************************************
; I2C-Bus
; Entwickelt für µC-Kit von Kern
; Michael Popp; Februar 1998
;************************************************************
;************************************************************
; Vereinbarungen
charin code 2730h ;Unterprogramm Zeicheneingabe
charout code 273Ch ;Unterprogramm Zeichenausgabe
anfang code 8000h ;Start-Adresse
inter code 802Bh ;Adresse für I2C-Interrupt
haupt code 8200h ;Adresse Hauptprogramm
s1adr data 0dbh ;Eigene Bus-Adresse
s1dat data 0dah ;Bus-Daten
s1con data 0d8h ;Bus-Kontrollen
s1sta data 0d9h ;Bus-Status
P1_6 bit 96h ;SCL-Pin
P1_7 bit 97h ;SDA-Pin
si bit 0dbh ;Interrupt Flag
aa bit 0dah ;Ackknowledge Flag
sta bit 0ddh ;Startbit
sto bit 0dch ;Stoppbit
es1 bit 0adh ;I2C-Bus-Interrupt aktivieren
;************************************************************
;************************************************************
; Hauptprogramm
org anfang
mov dptr,#haupt ;
clr a ;
jmp @a+dptr ;
org haupt
call init ;Bus initialisieren
loop: mov a,s1sta
cjne a,#0F8h,loop ;Interrupts
call charin ;
cjne a,#61h,loop ;
call start ;
jmp loop ;
;************************************************************
;************************************************************
; Initialisierung
; -> /
; /
; /
; |