$nomod51 ;der Modus fuer 8051 wird abgeschaltet $debug $nolist ;es wird kein Listing fuer reg535 erstellt $include(reg535.pdf) ;die 80535-spezifischen Daten $list ;es wird ein Listing erstellt $title (DA_Sinus.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: ; Digital - Analog - Wandlung - Sinus mit 100Hz, Amplitude 2,5 V, Offset 2,5 wird erzeugt. ; Ausgabefrequenz 4 kHz --> 40 Abtastwerte pro Periode ; Vorgehensweise: Werte in HPVEE generieren --> Als Floatingpoint in Textdatei exportieren ; Punkt durch Komma ersetzen in Excel importieren - Floatingpoint in Byte-Wert wandeln ; 5V/255 --> Bytewerte von Excel in Word exportieren - Absatzmarke in Komma wandeln und in ; dieses Dokument einsetzen ; WICHTIG: Bei Simulator von Neumann-Architektur einstellen ; MAP X:0x0000, X:0x7FFF READ WRITE VNM ;Erstellt am: Sonntag, 17. Juni 2007 10:47:51 ;Programmiert: ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Geaendert am: Sonntag, 17. Juni 2007 10:47:51 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil fuer allgemeine Konstanten ;------------------------------------------------------------------------ CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ORG 2000H SINUS_WERTE: db 128,147,167,185,202,218,231,241,249,253,255,253,249,241,231,218,202,185,167,147,128,108,88,70,53,37,24,14,6,2,0,2,6,14,24,37,53,70,88,108 ANZAHL_WERTE EQU 40 RELOAD_T0 EQU 256-250 ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 0BH call ISR_T0 ;ISR Timer 0 reti ;------------------------------------------------------------------------ ;Initialisierungsteil fuer On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov TMOD,#00000010B ;Timer 0 Autoreload mov TH0,#RELOAD_T0 ;250 Mikrosekunden mov TL0,#6 ;ab 6 zaehlen mov IEN0,#10010010B ;Interrupt Freigabe ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.1,START ;Start jnb P1.2,ENDE ;Ende jmp ABFRAGE START: mov R2,#ANZAHL_WERTE ;R2 laden mov DPTR,#2000h ;DPTR laden setb TR0 ;TIMER 0 starten jmp ABFRAGE ENDE: clr TR0 ;TIMER 0 stoppen jmp ABFRAGE ISR_T0: movx A,@DPTR ; Wert vom Speicher holen mov P5,A ; Wert auf DA ausgeben clr P4.0 ; Write für DA_Wandler erzeugen setb P4.0 inc DPTR ; DPTR +1 djnz R2,ENDE_ISR_T0 ; Schon 40? Dann R2 neu laden mov R2,#ANZAHL_WERTE ; R2 neu laden mov DPTR,#2000h ; DPTR mit 2000h laden ENDE_ISR_T0: ret end