Quellcode: include c51cc01.inc ;Einbinden der Speicherzuweisungstabelle REG0 equ 00h ;Zuweisung der Namen REG0-REG7 zur Adresse 00h-07h REG1 equ 01h REG2 equ 02h REG3 equ 03h REG4 equ 04h REG5 equ 05h REG6 equ 06h REG7 equ 07h ; Programmbeginn ;--------------------------------------------------------------- ORG 0h jmp main ;************************************************************************************************************** ;************************************************************************************************************** ;************************************************ Funktionen ************************************************* ;************************************************************************************************************** ;************************************************************************************************************** ; ein Byte aus ACC ausgeben serial_out: ; auf Abschluss des letzten Sendevorganges warten jnb TI,serial_out clr TI ; senden mov SBUF,A ret ;************************************************************************************************************** ;************************************************************************************************************** ;**************************** Initialisierung der seriellen Schnittstelle RS232 **************************** ;************************************************************************************************************** ;************************************************************************************************************** init: ; serielle Schnittstelle aktivieren ; 9600 Baud, Modus 1 mov TL1, #0FAh mov TH1, #0FAh ; die SFR's initialisieren ;mov SCON,#70 mov SCON,#82 mov PCON,#128 mov TMOD,#32 mov TCON,#64 ret ;************************************************************************************************************** ;************************************************************************************************************** ;**************************** Unterprogramm für Zeitschleife - Takt: 1 Sekunde **************************** ;************************************************************************************************************** ;************************************************************************************************************** Time: push REG7 ;sichern der Registerinhalte R0-R7 und Inhalt des PSW auf dem Stack push REG6 push REG5 push REG4 push REG3 push REG2 push REG1 push REG0 push PSW mov R2, #100d ;Anfangswert der Schleife LOOP1 in R2 laden LOOP1: mov R3, #100d ;Anfangswert der Schleife LOOP2 in R3 laden LOOP2: mov R4, #50d ;Anfangswert der Schleife LOOP3 in R4 laden LOOP3: djnz R4, LOOP3 ;Schleife, die so lange durchlaufen wird, bis R4 auf 0 ist djnz R3, LOOP2 ;Schleife, die so lange durchlaufen wird, bis R3 auf 0 ist djnz R2, LOOP1 ;Schleife, die so lange durchlaufen wird, bis R2 auf 0 ist push PSW ;Registerinhalt R0-R7 und PSW vom Stack wieder in Register laden push REG0 push REG1 push REG2 push REG3 push REG4 push REG5 push REG6 push REG7 ret ;Rücksprung ins Hauptprogramm ;************************************************************************************************************** ;************************************************************************************************************** ;********************************************** Hauptprogramm ********************************************** ;************************************************************************************************************** ;************************************************************************************************************** main: mov A, #'C' lcall init start: lcall serial_out ;lcall Time ljmp start END.