include C51ED2.inc ;Registeradressen einbinden EXTERN CODE initLCD,loeschen,loeschzeile1,loeschzeile2,textzeile1,textzeile2,cursorpos EXTERN CODE textaus,zifferaus,hexaus,dezaus code at 0 CLR p3.0 ; CLR p3.1 ; CLR p3.2 ; CLR p3.3 ; Port 3 Auf 0 setzen CLR p3.4 ; CLR p3.5 ; CLR p3.6 ; SETB p1.0 LCALL initLCD ;LCD initialisieren LCALL loeschen ;LCD löschen ;*********Sensor Initialisieren******************************************************** ;public start: Start1: CLR p1.0 ;Sensor resetten MOV R0, #0A0h ; Zeit1: NOP ;Zeitschleife für 480µs DJNZ R0, Zeit1 ; SETB p1.0 ;p1.0 auf HIGH JB p1.0, $ ;Warten auf Presence Pulse JNB p1.0, $ ; MOV A, #04h LCALL cursorpos MOV A, #03h LCALL dezaus ;*********Scip ROM********************************************************* CLR C ;Carry-Flag löschen MOV R1, #08h ;In Register R1 8Hex schreiben => 8Bit MOV A, #0CCh ;In Akku CCHex schreiben => SkipROM WTSlot: CLR p1.0 ;p1.0 auf LOW NOP NOP RRC A ;Akku mit Carry-Flag nach rechts rotieren MOV p1.0, C ;Carry-Flag an p1.0 ausgeben MOV R0, #02h ; Pussy5: NOP ;Zeitschleife für 7µs DJNZ R0, Pussy5 ; MOV R0, #0Ch ; Zeit5: NOP ;Zeitschleife für 49µs NOP NOP ; DJNZ R0, Zeit5 ; ;ergibt Zyklus von 60µs SETB p1.0 ;p1.0 auf HIGH DJNZ R1, WTSlot ;R1 decrementieren und Sprung wenn R1 != 1 ;*********Convert T********************************************************* CLR C ;Carry-Flag löschen MOV R1, #08h ;In Register R1 8Hex schreiben => 8Bit MOV A, #44h ;In Akku 44Hex schreiben => Convert T Blubb: CLR p1.0 ;p1.0 auf LOW NOP NOP RRC A ;Akku mit Carry-Flag nach rechts rotieren MOV p1.0, C ;Carry-Flag an p1.0 ausgeben MOV R0, #02h ; Pussy6: NOP ;Zeitschleife für 7µs DJNZ R0, Pussy6 ; MOV R0, #0Ch ; Zeit6: NOP ;Zeitschleife für 49µs NOP NOP ; DJNZ R0, Zeit6 ; ;ergibt Zyklus von 60µs SETB p1.0 ;p1.0 auf HIGH DJNZ R1, Blubb ;R1 decrementieren und Sprung wenn R1 != 1 ; MOV R2, #04h ; ;Neger2: MOV R1, #0FAh ; ;Neger: MOV R0, #0FAh ; ;Zeit3: DJNZ R0, Zeit3 ;Zeitschleife für 750µs ; NOP ; ; DJNZ R1, Neger ; ; DJNZ R2, Neger2 ; JB p1.0, $ ;warten auf Bestätigung von Convert T JNB p1.0, $ MOV A, #04h LCALL cursorpos MOV A, #03h LCALL dezaus ;*********Sensor Initialisieren******************************************************** ; public start: CLR p1.0 ;Sensor resetten MOV R0, #0A0h ; Zeit11: NOP ;Zeitschleife für 480µs DJNZ R0, Zeit11 ; SETB p1.0 ;p1.0 auf HIGH MOV R0, #0A0h ; Zeit21: NOP ;Zeitschleife für 480µs DJNZ R0, Zeit21 ; ;*********Scip ROM********************************************************* CLR C ;Carry-Flag löschen MOV R1, #08h ;In Register R1 8Hex schreiben => 8Bit MOV A, #0CCh ;In Akku CCHex schreiben => SkipROM WTSlot1: CLR p1.0 ;p1.0 auf LOW NOP MOV R0, #02h ; Pussy51: NOP ;Zeitschleife für 7µs DJNZ R0, Pussy51 ; RRC A ;Akku mit Carry-Flag nach rechts rotieren MOV p1.0, C ;Carry-Flag an p1.0 ausgeben MOV R0, #0Ch ; Zeit51: NOP ;Zeitschleife für 49µs NOP ; DJNZ R0, Zeit51 ; ;ergibt Zyklus von 60µs SETB p1.0 ;p1.0 auf HIGH DJNZ R1, WTSlot1 ;R1 decrementieren und Sprung wenn R1 != 1 ;*********ScratchPad Lesen******************************************************* CLR C ;Carry-Flag löschen MOV R1, #08h ;In Register R1 8Hex schreiben => 8Bit MOV A, #0BEh ;In Akku BEHex schreiben => Scratchpad Lesen Blubb2: CLR p1.0 ;p1.0 auf LOW NOP MOV R0, #02h ; Pussy9: NOP ;Zeitschleife für 7µs DJNZ R0, Pussy9 ; RRC A ;Akku mit Carry-Flag nach rechts rotieren MOV p1.0, C ;Carry-Flag an p1.0 ausgeben MOV R0, #0Ch ; Zeit9: NOP ;Zeitschleife für 49µs NOP ; DJNZ R0, Zeit9 ; ;ergibt Zyklus von 60µs SETB p1.0 ;p1.0 auf HIGH DJNZ R1, Blubb2 ;R1 decrementieren und Sprung wenn R1 != 1 ;*********Read Timeslot erzeugen******************************************************* CLR A ;Akku löschen CLR C ;Carry-Flag löschen MOV R1, #08h ;In Register R1 8Hex schreiben => 8Bit RTSlot: CLR p1.0 ;p1.0 auf LOW NOP MOV R0, #02h ; Pussy: NOP ; NOP ;Zeitschleife für 11µs DJNZ R0, Pussy ; MOV C, p1.0 ;Zustand von p1.0 ins Carry-Flag schreiben affe: RRC A ;Akku mit Carry-Flag nach rechts rotieren NOP NOP SETB p1.0 ;p1.0 auf HIGH MOV R0, #0Bh ; Pussy2: NOP ;Zeitschleife für 44µs NOP ; DJNZ R0, Pussy2 ; ;ergibt Zyklus von 60µs DJNZ R1, RTSlot ;R1 decrementieren und Sprung wenn R1 != 1 CLR p1.0 ;Sensor resetten MOV R0, #0A0h ; Zeit0: NOP ;Zwitschleife von 480µs DJNZ R0, Zeit0 ; SETB p1.0 ;p1.0 auf HIGH MOV R0, #0A0h ; Zeit04: NOP ;Zwitschleife von 480µs DJNZ R0, Zeit04 ; MOV B, #02h ;In Register B 02Hex schreiben DIV AB ;Akku durch Register B teilen ;*********Display Ausgabe******************************************************* MOV R0, A ;Akku in Register R0 sichern MOV A, #00h ;In Akku 00Hex schreiben LCALL cursorpos ;Kursor auf erste Position und erste Zeile Setzen MOV A, R0 ;Register R0 in Akku zurückschreiben LCALL dezaus ;Akkuinhalt aud LCD ausgeben LJMP Start1 ;Rücksprung zum Anfang END