$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 (KMMS.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: Messe jede Sekunde kontinuerlich den gemittelten, ; spannungsabhängigen Temperaturwert von 2 Sensoren und sende den Wert über die serielle Schnittstelle an "KEIL" ; ; ; ;Erstellt am: Dienstag, 9. Januar 2007 07:18:06 ;Programmiert: Deneffle Pierre ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Geaendert am: Dienstag, 9. Januar 2007 07:18:06 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil fuer allgemeine Konstanten ;------------------------------------------------------------------------ CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 0Bh ;Interruptvektor Timer0 call ISR_T0 ;Interrupt Service-Routine aufrufen reti ;Return from Interrupt ;------------------------------------------------------------------------ ;Initialisierungsteil fuer On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov sp,#30h ;Stack-Pointer auf setb EAL ;allgemeine Interruptfreigabe setb ET0 ;Timer0 mov TH0,#6h ;Timer0 TH0=6 mov TMOD,#00000010b ;Timer0 auf Autoreload Betrieb mov R2,#20 ;Zaehlregister mov R3,#200 ;Zaehlregister mov ADCON,#10000000b ;Initialisierung der A/D-Wandler ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.3,START ;Programm-Start jmp ABFRAGE ;Warte-Schleife START: setb TR0 ;Timer0 starten jmp ABFRAGE ;Sprung zur Abfrage ISR_T0: djnz R2,WEITER1 ;bis 4000 zaehlen mov R2,#20 ;Register neu laden djnz R3,WEITER1 mov R3,#200 ;Register neu laden cpl P3.2 ;Funktion wenn 1 sek erreicht wurde call MITTEL ;Berechnung der Mittelwert WEITER1: ret ;Interrupt-Service-Routine beenden MITTEL: clr MX0 ;Kanal 0 mov DAPR,#0 ;Starten der Wandlung jb BSY,$ ;fertig? mov R0,ADDAT ;Wert in R0 setb MX0 ;Kanal 1 mov DAPR,#0 ;Starten der Wandlung jb BSY,$ ;fertig? mov A,ADDAT ;Wert in Akku A add A, R0 ;Akku + Ro rrc A ;division durch 2 call SENDEN ;Sendung an der Serielleschnittstelle SENDEN: mov SBUF,A ;die Mitteltemperatur ist gesendet ret end ;Ende