$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 (AD_40T2.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: Wandelt im A/D-Wandler 40 Werte mit Periodendauer von 1ms unter ; Verwendung von Timer 2 mit Interrupt unter Verwendung ; des Überlaufbits ; AD_40T2 AD_Wandler 40_ Werte T_imer2 ; ;T1=Wandlung starten L1=an L2=aus ;T3=Programm beenden L2=aus L1=aus ;Programmiert: J. Walter 11.12.93 ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 Zaehlvariable für Anzahl der A/D-Werte ; ;Kommentar: ; ;Aenderungen: 4.1.2004 ;Anpassung an Keil Entwicklungsumgebung ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ ; MONITOR EQU 8000H ;Monitoreinsprung CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp ABFRAGE ;zur Abfrage springen ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 2BH ;Timer 2 Interrupt TIMER2_INT: mov DAPR,#0H ;Wandlung ausloesen, Bereich 0-5V clr TF2 ;Timer 2 Überlaufflag löschen reti ORG 43H ;A/D-Wandler Interrupt AD_INT: clr IADC ;Wandlungsbit löschen call AD_WERT_ISR ; reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: ;Initialisierung für Abtastung setb P3.3 ;Wandlung läuft clr P3.2 ;L1 an setb EAL ;Allgemeine Interruptfreigabe setb EADC ;A/D-Wandler-Interrupt Freigabe setb ET2 ;Timer 2 Überlauf freigeben mov R2,#40 ;40 Werte werden eingelesen mov DPTR,#2000h ;Anfangsadresse für Daten mov CRCH,#0FCh ;Timer 2 Hohes Byte laden mov CRCL,#18h ;Timer 2 Niederes Byte laden setb T2R1 ;Timer 2 Wiederladen bei Überlauf setb T2I0 ;Timer 2 Start mit Zeitgeberbetrieb ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ WARTE: jnb P3.2,WARTE ;Wandlung noch nicht beendet ABFRAGE: clr P3.3 ;L2 an Wandlung beendet jnb P1.1,INIT ;Start der Wandlung WANDLUNG_AN: jnb P1.3,ENDE ;Ende des Programms jmp ABFRAGE ;------------------------------------------------------------------------ ;A/D-Wandler Interrupt Service Routine ;------------------------------------------------------------------------ AD_WERT_ISR: mov A,ADDAT movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen djnz R2, NICHT_FERTIG ; clr T2I0 ;nach 40 Werten Timerueberlauf sperren setb P3.2 ;L1 aus nach Wandlung NICHT_FERTIG: ret ENDE: setb P3.3 setb P3.2 ;L1 aus = Wandlung beendet ljmp MONITOR ;Sprung in Monitor end