;************************************************************************* ;***Beispielprogramm zum Datentransfer zwischen PC und Mikrocontroller *** ;************************************************************************* ;*** Hardware: Batronix Experimentierboard + RS232 Erweiterungsmodul ;*** zus. Software: Windows Beispielprogramm (Visual Basic) ;************************************************************************* ; Das Programm sendet einen Text über die serielle Schnittstelle an ; den PC und zeigt zudem die vom PC empfangenen Daten an dem Port 0 an. ;************************************************************************* ;Definition des Prozessors: INCLUDE 89c52.mc ;WICHTIG! Das Programm wurde für eine Oszillatorfrequenz von 24MHz ;geschrieben. Bei anderen Oszillatorfrequenzen muß ggf. der Timer- ;zur Baudratenerzeugung angepasst werden. ;Belegte Speicheradressen: Position EQU 0h Sendebusy BIT 0h ;Überspringe Interruptvektoren: LJMP Initialisierung ;************************************************************************* ;Serieller Interrupt (0023h): IF BIT TI THEN ;Byte gesendet: CLR TI ; Löschen des Transmit Interrupt (TI) Bits CLR Sendebusy ; Löschen des Sendebusy Bits ELSE ;Byte empfangen: CLR RI ; Löschen des Receive Interrupt (RI) Bits MOV Port0,SBUF ; Anzeigen des empfangenen Wertes END IF RETI ;Rückkehr aus der Interruptroutine ;************************************************************************* Initialisierung: MOV SCON,#01010000b ;Modus 1, 8bit UART, REN = 1 ORL PCON,#80h ;Bit SMOD setzen MOV TMOD,#00100000b ;Timermodus 2, Autoreload MOV TH1,#F3h ;Baudrate ist 9614 (~ = 9600 Baud) SETB TR1 ;Timer 1 starten SETB ES ;serielle Interruptfreigabe SETB EA ;globale Interruptfreigabe MOV DPTR,#Sendetext ;Datenpointer auf den Beispieltext setzen MOV Position,#0 ;Position auf 0 initialisieren SJMP Hauptprogramm Hauptprogramm: LCALL Sende_Text Endlosschleife: LJMP Endlosschleife ;************************************************************************* Sende_Text: MOV A,Position ;Textposition in den Akku kopieren MOVC A,@A+DPTR ;Zeichen aus dem Beispieltext einlesen MOV SBUF, A ;Senden der Daten SETB Sendebusy _warte: JB Sendebusy,_warte ;Warte bis Sendevorgang abgeschlossen IF A = #10 THEN RET ;Wenn eingelesener Wert = 10 -- > > Ende der Textzeile INC Position ;Textposition hochzählen SJMP Sende_Text ;************************************************************************* Sendetext: DB "Hallo, ich bin der vom Mikrocontroller gesendete Text!! ",10