;******************************************************** ; Hochschule für Technik und Wirtschaft Dresden(FH) * ; FB ET, Praktikum Mikrocontrollertechnik * ;-------------------------------------------------------* ;Projekt: Microcontrollersteuerung * ;Modul: prakt.a51 * ;System: SAB80C517A ( MCB517AC/KEIL ) * ;Aufgabe: Rahmenprogramm zu allen Praktikumsaufgaben * ; In diesen 8051-Programmrumpf sind an den * ; geeigneten Stellen die notwendigen Programm- * ; zeilen einzufügen. * ;-------------------------------------------------------* ;Autor: J. Huhle HTWD * ; huhle@et.htw-dresden.de Tel.: HA 2542 * ;Datum: 08.05.2002 * ;-------------------------------------------------------* ;bearbeitet von: * ;******************************************************** $include(reg517a.inc) ;Register_Symboldefinitionen ;Definitionen für verschiebare (relocatable)... mainprog segment code ; ... Programm- const segment code ; Konstanten- main_data segment data ; Daten- main_bits segment bit ; Bitsegmente ;*** glob. Nutzervereinbarungen und -definitionen *** ;Konstanten t0rel equ 0-5000 ; T0_Reloadwert mask1 equ 0efh ; Init.wert für MASKE user_psw equ 8 ; Name für eine Registerbank_Adresse ;Variable in der Reg_Bank 1 (Beispiele) dseg at 8 ;nutzt RG1 R0.. max. 8 Byte MASKE: ds 1 ;ein Byte für MASKE res. (entspricht R0) POINTER: ds 1 ;ein Byte für POINTER res. (entspricht R1) ;Variable im frei nutzbarem Reg_bereich (ein Beispiel) rseg main_bits Signal: dbit 1 ;Signal-Flag rseg main_data PUFFER: ds 4 ;vier Byte für Puffer reserv. iseg at 0e0h usersp: ds 20h ; Reservierung für Stack ab E0H ;------- Programmstart ab PC=0000 ----------------- cseg at 0 jmp start ; Sprung zur Startmarke wird ; notwendig, da ab PC=0003 ; INT_Einsprünge liegen können ;------- Interrupteinsprungadressen --------------- ; Einsprung der T0-OV-ISR cseg at 0bh jmp t0_isr ; Sprung zur eigentlichen ISR, ; da ab PC=0013h weitere ISR möglich ; Einsprünge der UART-ISR cseg at 23h ; ser.Kanal 0 ds 3 ; reserviere 3 Byte für Debugger-ISR cseg at 83h ; ser.Kanal 1 ds 3 ; reserviere 3 Byte für Debugger-ISR ;---- Initialisierungsteil mit UP-Aufruf von userinit ---- rseg mainprog org 100h start: clr EAL ;alle INT's sperren mov sp,#usersp-1 ;Stackpointer festlegen ; Arbeitsregister 0...255 löschen mov psw,#0 clr a mov r0,#255 ;Zähler r0 laden regcle: mov @r0,a ;Löschschleife djnz r0,regcle ;USER_Variablen initialisieren ;RG1 (PSW=8) (Beispiel) mov psw,#user_psw mov r0,#mask1 ;MASKE init. mov r1,#PUFFER ;als Zeiger genutzt mov PUFFER,#5 ;Puffer mit 5 initialisieren ; On-Chip Peripherie initialisieren call OnChipInit setb eal ;INT freigeben ;---------- Hauptprogramm ------------------------- main: ;Hauptprogrammschleife ;muss mit Leben erfüllt werden jmp main ;-------- T0_ISR Basiszeitgeber ----------------- t0_isr: mov th0,#high t0rel ;T0_reload mov tl0,#low t0rel push psw push acc mov psw,#user_psw ;ISR_action (Beispiel) ;muss mit Leben erfüllt werden inc P4 ;LED-Kette inkrementieren t0isren:pop acc pop psw reti ;------------ ENDE der T0_ISR --------------------- ;********************************************** ; UP ONCHIPINIT * ; Initialisierung der benötigten On-chip- * ; peripherie (Timer,INT-System...) * ;********************************************** OnChipInit: ;Timer0-Initialisierung mov th0,#high t0rel mov tl0,#low t0rel mov tmod,#1 ;16-bit_timer setb et0 ;INT_Freigabe setb tr0 ;T0-start ;u.U. ser.Schnittstelle initialisieren ;siehe conea0.inc ;INT-Prioritäten festlegen mov ip0,#00000000b ; mov ip1,#00000010b ;T0 auf Stufe2 ret ;Ende des UP ;hier notwendige Treiber einfügen ;$include (conea0.inc) ;z.B. rseg const ;z.B. für LCD-Texte ;***************************************************** LCD_Text1: db 'LCD-OK',0 LCD_Text2: db '0,000 Volt',0 ;***************************************************** end ;Programmende