;PH_Wertmessung.a51*********************************************************************** ;----- zu diesem Projekt gehören lcd8252.a51 und addahilf.a51 im Ordner Hilf_asm ------- ;******** LCD-Zeile1: Sollwert ;******** LCD-Zeile2: Ist-Wert ;******** 8 LEDs P2 : Zählerstand als Dualzahl ;******** Poti Ain0 : Sollwert ;******** Ausg. Aout: Spannungswert zwischen 0 und fast 5V wie Ain0 (Poti) ;*************************************************************************************** include c51rd2.inc ;Registeradressen einbinden code at 0 ;***** Unterprogramme in lcd8252 ******************************************************* extern code initlcd,loeschzeile1,loeschzeile2,textzeile1,textzeile2,cursorpos,hexaus,dezaus ;***** Unterprogramme in ADDAhilf ****************************************************** extern code Ain0, Ain1, Ain2, Ain3, Aout ;***** Unterprogramme in UPRO Test ***************************************************** extern code EICHEN7, EICHEN4 ;extern code Taster_P32, Taster_P33 ;*************************************************************************************** ;extern code upro rechnung ;******************** Deklarationen ******************************************* LCDPosSollwert EQU 0Dh ;Position der Dez-Zahl im Display LCDPosIstwert EQU 4Dh ;Position der Dez-Zahl im Display LED8 data p2 ;LEDs an P2 Taster_P32 bit p3.2 Taster_P33 bit p3.3 RELAISAUS bit p2.0 ;******************** Programm ************************************************************ init: mov sp,#2fh ;Stackpointer oberhalb Bitadressierbarer Bereich ;notwendig für LCDhilf !!!!!!!!!!! lcall initlcd ;LCD initialisieren lcall loeschzeile1 ;LCD-Anzeigen löschen ("alte Schrift" aus vorherigen lcall loeschzeile2 ;Programmen bleibt sonst auch bei Reset erhalten) loop: mov dptr,#Text1 ;Texte lcall textzeile1 ;ausgeben (siehe unten) mov dptr,#Text2 ; lcall textzeile2 mov a,#LCDPosSollwert ;Cursor-Position für Sollert Poti lcall cursorpos ;an LCD ausgeben lcall Ain0 mov r2, a lcall dezaus jb Taster_P32, LCD jb Taster_P33, LCD2 sjmp WEITER LCD: lcall initlcd ;LCD initialisieren lcall loeschzeile1 ;LCD-Anzeigen löschen ("alte Schrift" aus vorherigen lcall loeschzeile2 ;Programmen bleibt sonst auch bei Reset erhalten) UPRO: lcall EICHEN7 lcall dezaus ;als Dezimalzahl an LC-Display ausgeben lcall Aout ;zur Kontrolle an Analogausgang ausgeben mov r0,#250 zeit2: mov r1,#250 zeit1: djnz r1,zeit1 djnz r0,zeit2 jb Taster_P32, CLEAN sjmp UPRO LCD2: lcall initlcd ;LCD initialisieren lcall loeschzeile1 ;LCD-Anzeigen löschen ("alte Schrift" aus vorherigen lcall loeschzeile2 ;Programmen bleibt sonst auch bei Reset erhalten) UPRO2: lcall EICHEN4 lcall dezaus ;als Dezimalzahl an LC-Display ausgeben lcall Aout ;zur Kontrolle an Analogausgang ausgeben mov r0,#250 zeit4: mov r1,#250 zeit3: djnz r1,zeit3 djnz r0,zeit4 jb Taster_P33, CLEAN ;Wenn Taste "EICHEN PH4" getrückt - UPRO verlassen sjmp UPRO2 ;Sprung in das Unterprogramm "EICHEN PH4" CLEAN: lcall loeschzeile1 ;LCD-Anzeigen löschen ("alte Schrift" aus vorherigen lcall loeschzeile2 ;Eichen löschen) WEITER: mov a,#LCDPosIstwert ;Cursor-Position für den Istwert lcall cursorpos ;an LCD ausgeben lcall Ain2 lcall dezaus clr c subb a,r2 jz TEST jc TEST ;cjne a, r2,rel ;jz ZEIT ;jc ZEIT ;subb a, r2 ;jc ZEIT ;jz ZEIT ;sjmp RELAIS RELAIS: ;mov a,125 ;lcall Aout ;mov LED8,#RELAISAUS setb RELAISAUS ZEIT: mov r0,#250 zeit6: mov r1,#250 zeit5: djnz r1,zeit5 djnz r0,zeit6 ljmp loop ;*********************** Texte ******************************************************* Text2: db 'Istwert:',0 Text1: db 'Sollwert:',0 end