PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Das ist nicht schön von sirpete ...



Import-Script
13.03.2003, 22:15
Moin Peter, <BR> <BR>rein zufällig habe ich gerade gesehen das eine Beispiel-Routine die der Batronix-Software beiliegt eigentlich von mir ist. Das ist ja auch nicht schlimm, aber wenn Du schon meine Sachen verteilst könntest Du wenigstens Deine eigenen Kommentare dazu schreiben. Vor einiger Zeit hatte ich Dir mal eben genau mein Programm und die Erklärung zu seriellen EEPROM&#39;s gemailt. Deine Fragen von damals stehen im Forum Archiv. Schön wie sich alles wiederfindet. Ich bin stolz auf Dich... <BR> <BR>Gruß Winnie <BR> <BR>Hier beide Versionen: <BR>1. Deine <BR>2. meine <BR> <BR>; 24C16 Ansteuerung von Peter Max, bei Fragen u. Verbesserungsvorschlägen, <BR>; bitte eine email an <a href="mailto:sirpete@web.de">sirpete@web.de</a> <BR>; Diese INCLUDE-Datei, steuert den I²C-Bus. Optimiert f&uuml;r den 24C16, <BR>; lässt sich aber einfach auf alle beliebigen I²C-Bausteine &uuml;bertragen. <BR>; <BR>; <BR>; Wichtig!! <BR>; <BR>; Der 24C16 hat eine 11Bit Adressierung, die folgendermaßen aussieht: <BR>; Device-Address | Word-Address | Data | <BR>; 1 0 1 0 P2 P1 P0 R/-W | A7 A6 A5 A4 A3 A2 A1 A0 | B7 B6 B5 B4 B3 B2 B1 B0 | <BR>; ^ ^ ^ | ^ | ^ | <BR>; Device Page Modus | Addresse in der Page | Zu schreibendes Byte | <BR>; <BR>; <BR>; Benötigte Daten: <BR>; SDA - &#62; BIT - Portpin f&uuml;r SDA-Leitung. <BR>; SCL - &#62; BIT - Portpin f&uuml;r SCL-Leitung. <BR>; I2C_befehl - &#62; Wert einer Speicherstelle die ein Baustein Adressiert. <BR>; Adresse - &#62; Wert einer Speicherstelle, die die WordAdresse enthält. <BR>; Wert - &#62; Wert einer Speicherstelle, die die zu schreibenden Daten enthält. <BR>; <BR>; Die Befehle der INCLUDE-Datei: <BR>; wert_lesen - &#62; Schreibt Inhalt von &#34;Wert&#34; im Adressierte Baustein u. an die in &#34;Adresse&#34; Stehendestelle <BR>; wert_schreiben - &#62; Liest Inhalt vom Adressierten Baustein und Adresse in den Akku <BR>; <BR>; Unabhängig von den vorhergehenden Befehlen: <BR>; Startbedingung_erzeugen - &#62; Sendet Startsingnal am I²C-Bus <BR>; Stopbedingung_erzeugen - &#62; Sendet Stopsignal am I²C-Bus <BR>; Acknowledge - &#62; Sendet Acknowledge am I²C-Bus <BR>; No_Acknoeledge - &#62; Sendet NoAcknowledge am I²C-Bus <BR> <BR>Startbedingung_erzeugen: <BR> SETB SDA &#39;Vorbereitung zur Startbedingung&#39; <BR> SETB SCL <BR> JNB SDA,Bus_belegt &#39;Ist der Datenbus frei?&#39; <BR> JNB SCL,Bus_belegt &#39;Ist der Datenbus frei?&#39; <BR> NOP <BR> NOP <BR> CLR SDA &#39;SCL high / SDA geht auf low&#39; <BR> CALL 5µs <BR> CLR SCL <BR> CLR C <BR> JMP I2C_zur&uuml;ck <BR>Bus_belegt: <BR> SETB C &#39;Setze Carry BIT wenn Datenbus besetzt.&#39; <BR> &#39;Wird aber in diesem Programm nicht abgefragt,&#39; <BR> &#39;da nur ein I2C Baustein angeschlossen.&#39; <BR>I2C_zur&uuml;ck: <BR>RET <BR> <BR>Acknowledge: &#39;BIT vom I2C-Baustein &#40;hier EEPROM&#41;&#39; <BR> CLR SDA &#39;zur Bestätigung, dass das&#39; <BR> NOP &#39;Datenwort korrekt angekommen ist. <BR> NOP <BR> SETB SCL <BR> CALL 5µs <BR> CLR SCL <BR>RET <BR> <BR>No_Acknowledge: &#39;siehe oben, nur diametral&#39; <BR> SETB SDA <BR> NOP <BR> NOP <BR> SETB SCL <BR> CALL 5µs <BR> CLR SCL <BR>RET <BR> <BR>Stopbedingung_erzeugen: <BR> CLR SDA &#39;Vorbereitung zur Stopbedingung&#39; <BR> NOP <BR> NOP <BR> SETB SCL &#39;SCL high / SDA geht auf high&#39; <BR> CALL 5µs <BR> SETB SDA <BR>RET <BR> <BR> <BR>8_Bits_senden: &#39;Daten sind im AKKU&#39; <BR> PUSH B &#39;Rette Inhalt von B auf den Stack.&#39; <BR> MOV B,#8 &#39;Wird in diesem Programm eigentlich&#39; <BR> &#39;nicht benötigt, nur zum &#34;Angewöhnen&#34;&#39; <BR>8_Bits: &#39;f&uuml;r später :-&#41;&#39; <BR> RLC A &#39;Schiebe den Akkuinhalt nach links&#39; <BR> MOV SDA,C &#39;durch das Carry Flag um ihn Bitweise&#39; <BR> NOP &#39;zu senden.&#39; <BR> SETB SCL <BR> CALL 5µs <BR> CLR SCL <BR> DJNZ B,8_Bits <BR>&#39;Hole Acknowledge BIT vom Slave &#40;9. BIT, Empfangsbestätigung&#41;&#39; <BR> SETB SDA <BR> RLC A &#39;Stellt Ausgangs Wert von Akku und C wieder her <BR> NOP <BR> SETB SCL <BR> CALL 5µs <BR> MOV C,SDA <BR> CLR SCL <BR> POP B &#39;Stelle B wieder her &#40;vom Stack holen&#41;&#39; <BR>RET <BR> <BR>8_Bits_lesen: &#39;Daten in den Akku lesen&#39; <BR> SETB SDA <BR> PUSH B &#39;siehe oben&#39; <BR> MOV B,#8 <BR>8_Bits_1: <BR> NOP <BR> NOP <BR> NOP <BR> SETB SCL <BR> NOP <BR> NOP <BR> NOP &#39;Die Daten aus dem I2C-Baustein werden&#39; <BR> MOV C,SDA &#39;in das Carry Flag geschrieben und&#39; <BR> RLC A &#39;nach links in den Akku geschoben.&#39; <BR> CLR SCL <BR> DJNZ B,8_Bits_1 <BR> POP B &#39;siehe oben&#39; <BR>RET <BR> <BR>wert_lesen: <BR>&#39;&#34;Dummy write&#34; siehe Datenblatt.&#39; <BR> CALL startbedingung_erzeugen <BR> MOV A,I2C_Befehl <BR> DEC A <BR> CALL 8_Bits_senden <BR> MOV A,Adresse <BR> CALL 8_Bits_senden <BR>&#39;Speicher auslesen ab Adresse &#40;hier Adresse 00 siehe oben&#41;&#39; <BR> CALL startbedingung_erzeugen <BR> MOV A,I2C_Befehl <BR> CALL 8_Bits_senden <BR> CALL 8_Bits_lesen <BR> CALL No_Acknowledge <BR> CALL stopbedingung_erzeugen <BR>RET <BR> <BR>wert_speichern: <BR> CALL Startbedingung_erzeugen <BR> MOV A,I2C_Befehl <BR> CALL 8_Bits_senden <BR> CALL 5µs <BR> MOV A,Adresse <BR> CALL 8_Bits_senden <BR> CALL 5µs <BR> MOV A,Wert <BR> CALL 8_Bits_senden <BR> CALL 5µs <BR> CALL Stopbedingung_erzeugen <BR>RET <BR> <BR>5µs: &#39;Zeitverzögerung von ca. 5µs incl. CALL u. RET&#39; <BR> NOP <BR> NOP <BR>RET <BR> <BR>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42; <BR> <BR>&#39;Belichtungs - Timer f&uuml;r Platinenbelichtungsgerät&#39; <BR>&#39;Auch als K&uuml;chen - Timer zu benutzen.&#39; <BR>&#39;Speichert eingestellte Zeit und zeigt sie beim erneuten&#39; <BR>&#39;Starten bzw. Zeitablauf &#40;00.00&#41; sofort an.&#39; <BR>&#39;Countdown - Zeiten zwischen 59 Minuten und 59 Sekunden&#39; <BR>&#39;bis 1 Sekunde in 1er Sekundenschritten einstellbar.&#39; <BR>&#39;Nach Zeitablauf wird wieder die gespeicherte Zeit f&uuml;r&#39; <BR>&#39;erneuten Start eingestellt.&#39; <BR>&#39;Vier Tasten: Minuten minus, Sekunden minus, Start und Stop.&#39; <BR>&#39;Vierstellige 7-Segment-Anzeige.&#39; <BR>&#39;Mein erstes Mikrocontroller Projekt.&#39; <BR>&#39;&#40;C&#41; Wilfried Brozio Mai / Juni 2001&#39; <BR> <BR>INCLUDE 89C2051.mc <BR> <BR>LJMP Initialisierung&#39;Überspringe feste Sprungadressen.&#39; <BR>&#39;50ms Zeitbasis f&uuml;r Timer / Sekunden genaue Zeit&#39; <BR>&#40;000Bh&#41;: &#39;Einsprungadresse Interrupt Timer 0&#39; <BR> MOV A,TL0 &#39;Grundeinstellung Timer 0 Low Byte&#39; <BR> ADD A,#B3h &#39;A = TL0 = Zeit seit Überlauf &#43; Grundeinstellung B0&#43;3&#39; <BR> MOV TL0,A &#39;Akkuinhalt in Timer 0 low Byte &#40;TL0&#41;&#39; <BR> MOV TH0,#3Ch &#39;Grundeinstellung Timer 0 High Byte&#39; <BR>&#39;Routine zum Countdown der Uhrzeit&#39; <BR> DJNZ R6,stop1 &#39;R6 = R6 - 1, wenn nicht 0 dann springe.&#39; <BR> MOV R6,#%20&#39;Interruptzähler &#40;20&#42;50ms = 1000ms = 1Sekunde&#41;&#39; <BR> DEC R3 &#39;R3 = R3 - 1&#39; <BR> IF R3 = #FFh THEN &#39;R3 &uuml;bergelaufen?&#39; <BR> MOV R3,#09 &#39;dann R3 = 09&#39; <BR> DEC R2 &#39;R2 = R2 - 1&#39; <BR> END IF <BR> IF R2 = #FFh THEN &#39;R2 &uuml;bergelaufen?&#39; <BR> MOV R2,#05 &#39;dann R2 = 05&#39; <BR> DEC R1 &#39;R1 = R1 - 1&#39; <BR> END IF <BR> IF R1 = #FFh THEN &#39;R1 &uuml;bergelaufen?&#39; <BR> MOV R1,#09 &#39;R1 = 09&#39; <BR> DEC R0 &#39;R0 = R0 - 1&#39; <BR> END IF <BR> CJNE R0,#00,stop1 &#39;R0 = 10er Minute&#39; <BR> CJNE R1,#00,stop1 &#39;R1 = 1er Minute&#39; <BR> CJNE R2,#00,stop1 &#39;R2 = 10er Sekunden&#39; <BR> CJNE R3,#00,stop1 &#39;R3 = 1er Sekunden&#39; <BR> SETB D5h &#39;Setze Flag BIT D5h im PSW&#39; <BR> RETI <BR> <BR>Ende: <BR> CLR TR0 &#39;Timer 0 aus&#39; <BR> SETB P3.7 &#39;Relais aus&#39; <BR> LCALL speicher_lesen &#39;Hole Zeit aus dem Speicher.&#39; <BR> LJMP Tasten <BR> <BR>stop1: <BR> RETI <BR> <BR>Initialisierung: <BR> MOV Port1,#FFh &#39;Setze Port 1 auf 1111 1111.&#39; <BR> MOV Port3,#%240 &#39;Setze Port 3 auf 1111 0000.&#39; <BR> MOV R6,#%20 &#39;R6 = Interruptzähler&#39; <BR> MOV SP,#20h &#39;Stack hochsetzen. In diesem Programm&#39; <BR>&#39;eigentlich nicht nötig, DA nur Register Bank 0 benutzt wird.&#39; <BR>&#39;Timer Grundeinstellung&#39; <BR>MOV TMOD,#01h &#39;Timer 0 Modus = 1 <BR>MOV TH0,#3Ch &#39;High Byte von Timer 0 setzen <BR>MOV TL0,#B0h &#39;Low Byte von Timer 0 setzen <BR>SETB EA &#39;Interruptbehandlung aktivieren <BR>SETB ET0 &#39;Interrupt f&uuml;r Timer 0 aktivieren <BR> <BR>&#39;Zum Speichern&#39; <BR> lesen EQU !10100001&#39;Basisadresse 1010 EEPROM, 0001 lesen&#39; <BR> schreiben EQU !10100000&#39;1010 Basis EEPROM, 0000 schreiben&#39; <BR> Adresse EQU 00h &#39;Startadresse 00h im EEPROM&#39; <BR> SDA EQU P1.7 &#39;Portpin P1.7 wird SDA zugewiesen&#39; <BR> SCL EQU P1.6 &#39;Portpin P1.6 wird SCL zugewiesen&#39; <BR> <BR>&#39;I2C-Bus initialisieren&#39; <BR> SETB SCL &#39;Setzte Daten und Clock Leitung&#39; <BR> SETB SDA &#39;auf high&#39; <BR> LCALL speicher_lesen &#39;lies den aktuellen Speicherinhalt&#39; <BR> LJMP Tasten &#39;Frage Tasten ab&#39; <BR> <BR>speicher_lesen: <BR>&#39;auszulesende Adresse schreiben&#39; <BR> SETB SCL <BR> SETB SDA <BR>&#39;&#34;Dummy write&#34; Weil nur ein 24C16 EEPROM vorhanden war, sonst&#39; <BR>&#39;bei z. B. 24C01 EEPROM&#39;s enfällt, siehe Datenblatt.&#39; <BR> LCALL startbedingung_erzeugen <BR> MOV A,#schreiben <BR> LCALL 8_Bits_senden <BR> MOV A,#Adresse <BR> LCALL 8_Bits_senden <BR>&#39;Speicher auslesen ab Adresse &#40;hier Adresse 00 siehe oben&#41;&#39; <BR> LCALL startbedingung_erzeugen <BR> MOV A,#lesen <BR> LCALL 8_Bits_senden <BR> LCALL 8_Bits_lesen <BR> MOV R0,A <BR> LCALL Acknowledge <BR> LCALL 8_Bits_lesen <BR> MOV R1,A <BR> LCALL Acknowledge <BR> LCALL 8_Bits_lesen <BR> MOV R2,A <BR> LCALL Acknowledge <BR> LCALL 8_Bits_lesen <BR> MOV R3,A <BR> LCALL No_Acknowledge <BR> LCALL stopbedingung_erzeugen <BR> RET <BR> <BR>Start: <BR> LCALL Zeit_speichern &#39;eingestellte Zeit speichern&#39; <BR> SETB TR0 &#39;Timer 0 start&#39; <BR> CLR P3.7 &#39;Relais ein&#39; <BR> CLR D1h &#39;Lösche Verzögerungs BIT im PSW&#39; <BR> LJMP Countdown &#39;Zähle r&uuml;ckwärts&#39; <BR> <BR> <BR>&#39;Routine zum Minuten einstellen&#39; <BR>Minuten: <BR> CLR P1.4 &#39;Lösche Taster-BIT zur Entprellung&#39; <BR> DEC R1 &#39;R1 = R1 - 1&#39; <BR> LCALL Refresh <BR> IF R1 = #FFh THEN &#39;Ist R1 &uuml;bergelaufen?&#39; <BR> MOV R1,#09 &#39;Dann setze R1 auf 09. <BR> DEC R0 &#39;R0 = R0 - 1&#39; <BR> LCALL Refresh <BR> END IF <BR> IF R0 = #FFh THEN &#39;Ist R0 &uuml;bergelaufen?&#39; <BR> MOV R0,#05 &#39;Dann setze R0 auf 05. <BR> LCALL Refresh <BR> END IF <BR> SETB P1.4 &#39;Setze wieder Taster-Bit&#39; <BR> JB D1h,Tasten &#39;Ist BIT D1 gesetzt? Dann schnell zählen.&#39; <BR> PUSH B &#39;Rette B auf den Stack.&#39; <BR> MOV B,#03h &#39;Schreibe 03 ins B Register&#39; <BR> <BR>&#39;Warte ob Taste etwas länger gedr&uuml;ckt wird, dann zähle&#39; <BR>&#39;schneller r&uuml;ckwärts.&#39; <BR>warte_1: <BR> LCALL Refresh <BR> MOV R7,#05 &#39;Schreibe 05 in Register R7.&#39; <BR> <BR>warte_2: <BR> LCALL Refresh <BR> DJNZ R7,warte_2 &#39;Springe zu warte_2 bis R7 = 0.&#39; <BR> DJNZ B,warte_1 &#39;Springe zu warte_1 bis B = 0.&#39; <BR> SETB D1h &#39;Setze BIT D1h zum schnell zählen.&#39; <BR> POP B &#39;Stelle B wieder her.&#39; <BR> LJMP Tasten <BR> <BR>Tasten: <BR> LCALL Refresh &#39;Anzeige auffrischen, aktualisieren&#39; <BR> JNB P1.4,Minuten &#39;Minuten einstellen&#39; <BR> LCALL Refresh <BR> JNB P1.5,Sekunden &#39;Sekunden einstellen&#39; <BR> LCALL Refresh <BR> JNB P3.4,Start &#39;Start des Timers&#39; <BR>IF BIT P1.4 THEN CLR D1h&#39;Lösche BIT D1h im PSW, wenn P1.4 high&#39; <BR>IF BIT P1.5 THEN CLR D1h&#39;Lösche BIT D1h im PSW, wenn P1.5 high&#39; <BR> LJMP Tasten <BR> <BR>&#39;Routine zum Sekunden einstellen&#39; <BR>Sekunden: <BR> CLR P1.5 &#39;Lösche Taster-BIT zur Entprellung&#39; <BR> DEC R3 &#39;R3 = R3 - 1&#39; <BR> LCALL Refresh <BR> IF R3 = #FFh THEN &#39;Ist R3 &uuml;bergelaufen?&#39; <BR> MOV R3,#09 &#39;Dann setze R3 auf 09. <BR> DEC R2 &#39;R2 = R2 - 1&#39; <BR> LCALL Refresh <BR> END IF <BR> IF R2 = #FFh THEN &#39;Ist R2 &uuml;bergelaufen?&#39; <BR> MOV R2,#05 &#39;Dann setze R2 auf 05. <BR> LCALL Refresh <BR> END IF <BR> SETB P1.5 &#39;Setze wieder Taster-BIT.&#39; <BR> JB D1h,Tasten &#39;Ist BIT D1 gesetzt? Dann schnell zählen.&#39; <BR> PUSH B &#39;Rette B auf den Stack.&#39; <BR> MOV B,#03h &#39;Schreibe 03 ins B Register&#39; <BR> <BR>&#39;Warte ob Taste etwas länger gedr&uuml;ckt wird, dann zähle&#39; <BR>&#39;schneller r&uuml;ckwärts.&#39; <BR>warte_3: <BR> LCALL Refresh <BR> MOV R7,#05 &#39;Schreibe 05 in Register R7.&#39; <BR> <BR>warte_4: <BR> LCALL Refresh <BR> DJNZ R7,warte_4 &#39;Springe zu warte_4 bis R7 = 0.&#39; <BR> DJNZ B,warte_3 &#39;Springe zu warte_3 bis B = 0.&#39; <BR> SETB D1h &#39;Setze BIT D1h zum schnell zählen.&#39; <BR> POP B &#39;Stelle B wieder her&#39; <BR> LJMP Tasten <BR> <BR>&#39;Vorzeitiges Anhalten des Timers und R&uuml;cksprung auf&#39; <BR>&#39;voreingestellte Zeit &#34;Clocktus Interruptus&#34;:-&#41;&#39; <BR>stop: <BR> CLR TR0 &#39;Timer 0 aus&#39; <BR> SETB P3.7 &#39;Relais aus&#39; <BR> CLR D5h &#39;Flag D5h löschen&#39; <BR> LCALL speicher_lesen &#39;Zeit auf Start stellen&#39; <BR> LJMP Tasten <BR> <BR>&#39;Zähle r&uuml;ckwärts&#39; <BR>Countdown: <BR> LCALL Refresh <BR> JB D5h,STOP &#39;Ist Flag BIT D5h gesetzt, dann Stop&#39; <BR> JNB P3.5,STOP &#39;Timer Countdown Abbruch&#39; <BR> LJMP Countdown&#39;Springe zu Countdown, bis D5h = 1, oder P3.5 = 0.&#39; <BR> <BR>&#39;Eingestellte Zeit speichern ab Adresse 00 &#40;siehe oben&#41;&#39; <BR>Zeit_speichern: <BR> LCALL Startbedingung_erzeugen <BR> MOV A,#schreiben <BR> LCALL 8_Bits_senden <BR> MOV A,#Adresse <BR> LCALL 8_Bits_senden <BR> MOV A,R0 <BR> LCALL 8_Bits_senden <BR> MOV A,R1 <BR> LCALL 8_Bits_senden <BR> MOV A,R2 <BR> LCALL 8_Bits_senden <BR> MOV A,R3 <BR> LCALL 8_Bits_senden <BR> LCALL Stopbedingung_erzeugen <BR> RET <BR> <BR>&#39;Routinen zum Anzeigen und aktualisieren der Zeit&#39; <BR>Refresh: <BR> MOV A,R0 &#39;Schreibe Wert von R0 in den Akku&#39; <BR> LCALL Schiebe &#39;und zeige ihn in &#34;Anzeige 1 an.&#39; <BR> LCALL Anzeige_1 <BR> MOV A,R1 &#39;Schreibe Wert von R1 in den Akku&#39; <BR> LCALL Schiebe &#39;und zeige ihn in &#34;Anzeige 2 an.&#39; <BR> LCALL Anzeige_2 <BR> MOV A,R2 &#39;Schreibe Wert von R2 in den Akku&#39; <BR> LCALL Schiebe &#39;und zeige ihn in &#34;Anzeige 3 an.&#39; <BR> LCALL Anzeige_3 <BR> MOV A,R3 &#39;Schreibe Wert von R3 in den Akku&#39; <BR> LCALL Schiebe &#39;und zeige ihn in &#34;Anzeige 4 an.&#39; <BR> LCALL Anzeige_4 <BR> RET <BR> <BR>Schiebe: <BR> RRC A &#39;Schiebe den Akkuinhalt um eine Stelle&#39; <BR> MOV P3.0,C &#39;nach rechts ins Carry Flag und schreibe&#39; <BR> RRC A &#39;den Inhalt des Carry Flag in BIT P3.0&#39; <BR> MOV P3.1,C &#39;bis BIT P3.3 des Port 3.&#39; <BR> RRC A &#39;Hierdurch steht die Binäre 4 BIT&#39; <BR> MOV P3.2,C &#39;Information an den Eingängen des IC 4511&#39; <BR> RRC A &#39;und kann durch den BCD / 7-Segment-&#39; <BR> MOV P3.3,C &#39;Dekoder &#40;4511&#41; zur Anzeige gebracht&#39; <BR> RET &#39;werden.&#39; <BR> <BR>Anzeige_1: &#39;Lösche BIT P1.0 in Port 1 und schalte&#39; <BR> CLR P1.0 &#39;dadurch den Transistor &#40;f&uuml;r ca. 5ms,&#39; <BR> LCALL 1ms &#39;nicht genau&#41; der ersten Anzeige durch.&#39; <BR> SETB P1.0 &#39;Dann setze das BIT wieder und sperre&#39; <BR> RET &#39;damit den Transistor.&#39; <BR>Anzeige_2: &#39;wie bei Anzeige_1, aber BIT P1.1&#39; <BR> CLR P1.1 <BR> LCALL 1ms <BR> SETB P1.1 <BR> RET <BR>Anzeige_3: &#39;wie bei Anzeige_1, aber BIT P1.2&#39; <BR> CLR P1.2 <BR> LCALL 1ms <BR> SETB P1.2 <BR> RET <BR>Anzeige_4: &#39;wie bei Anzeige_1, aber BIT P1.3&#39; <BR> CLR P1.3 <BR> LCALL 1ms <BR> SETB P1.3 <BR> RET <BR> <BR>&#39;Verzögerungs Routine f&uuml;r Anzeige&#39; <BR>&#39;Zeitverzögerung entspricht ungefähr 5ms&#39; <BR>1ms: <BR> MOV R4,#%10 &#39;Schreibe 10 in Register R4.&#39; <BR>eins: <BR> MOV R5,#%250 &#39;Schreibe 250 in Register R5.&#39; <BR>zwei: <BR> DJNZ R5,zwei &#39;Springe zu zwei bis R5 = 0.&#39; <BR> DJNZ R4,eins &#39;Springe zu eins bis R4 = 0.&#39; <BR> NOP <BR> RET <BR> <BR>&#39;Routinen zum speichern und lesen der Zeit,&#39; <BR>&#39;sowie Routinen zur Steuerung des I2C Busses.&#39; <BR>Startbedingung_erzeugen: <BR> SETB SDA &#39;Vorbereitung zur Startbedingung&#39; <BR> SETB SCL <BR> JNB SDA,Bus_frei &#39;Ist der Datenbus frei?&#39; <BR> JNB SCL,Bus_frei &#39;Ist der Datenbus frei?&#39; <BR> NOP <BR> CLR SDA &#39;SCL high / SDA geht auf low&#39; <BR> LCALL 5µs <BR> CLR SCL <BR> CLR C <BR> JMP I2C_zur&uuml;ck <BR> <BR>Bus_frei: <BR> SETB C &#39;Setze Carry BIT wenn Datenbus besetzt.&#39; <BR> &#39;Wird aber in diesem Programm nicht abgefragt,&#39; <BR> &#39;da nur ein I2C Baustein angeschlossen.&#39; <BR>I2C_zur&uuml;ck: <BR> RET <BR> <BR>Stopbedingung_erzeugen: <BR> CLR SDA &#39;Vorbereitung zur Stopbedingung&#39; <BR> NOP <BR> NOP <BR> SETB SCL &#39;SCL high / SDA geht auf high&#39; <BR> LCALL 5µs <BR> SETB SDA <BR> RET <BR> <BR>Acknowledge: &#39;BIT vom I2C-Baustein &#40;hier EEPROM&#41;&#39; <BR> CLR SDA &#39;zur Bestätigung, dass das&#39; <BR> NOP &#39;Datenwort korrekt angekommen ist. <BR> NOP <BR> SETB SCL <BR> LCALL 5µs <BR> CLR SCL <BR> RET <BR> <BR>No_Acknowledge: &#39;siehe oben, nur diametral&#39; <BR> SETB SDA <BR> NOP <BR> NOP <BR> SETB SCL <BR> LCALL 5µs <BR> CLR SCL <BR> RET <BR> <BR>&#39;Daten sind im AKKU&#39; <BR>8_Bits_senden: <BR> PUSH B &#39;Rette Inhalt von B auf den Stack.&#39; <BR> MOV B,#8 &#39;Wird in diesem Programm eigentlich&#39; <BR> &#39;nicht benötigt, nur zum &#34;Angewöhnen&#34;&#39; <BR>8_Bits: &#39;f&uuml;r später :-&#41;&#39; <BR> RLC A &#39;Schiebe den Akkuinhalt nach links&#39; <BR> MOV SDA,C &#39;durch das Carry Flag um ihn Bitweise&#39; <BR> NOP &#39;zu senden.&#39; <BR> SETB SCL <BR> LCALL 5µs <BR> CLR SCL <BR> DJNZ B,8_Bits <BR>&#39;Hole Acknowledge BIT vom Slave &#40;9. BIT, Empfangsbestätigung&#41;&#39; <BR> SETB SDA <BR> NOP <BR> NOP <BR> SETB SCL <BR> LCALL 5µs <BR> MOV C,SDA <BR> CLR SCL <BR> POP B &#39;Stelle B wieder her &#40;vom Stack holen&#41;&#39; <BR> RET <BR> <BR>&#39;Daten in den Akku lesen&#39; <BR>8_Bits_lesen: <BR> SETB SDA <BR> PUSH B &#39;siehe oben&#39; <BR> MOV B,#8 <BR> <BR>8_Bits_1: <BR> NOP <BR> NOP <BR> NOP <BR> SETB SCL <BR> NOP <BR> NOP &#39;Die Daten aus dem I2C-Baustein werden&#39; <BR> MOV C,SDA &#39;in das Carry Flag geschrieben und&#39; <BR> RLC A &#39;nach links in den Akku geschoben.&#39; <BR> CLR SCL <BR> DJNZ B,8_Bits_1 <BR> POP B &#39;siehe oben&#39; <BR> RET <BR> <BR>&#39;Zeitverzögerung von ca. 5µs.&#39; <BR>5µs: <BR> NOP <BR> NOP <BR> NOP <BR> NOP <BR> NOP <BR> RET <BR>

Import-Script
14.03.2003, 18:15
Hi Winnie, ich kann gut nachvollziehen was in dir vorging, als du das bemerkt hast. Da investiert man immerhin ein paar Stunden um ein kleines Programm zu schreiben, gibt es grossz&uuml;gig an andere weiter und irgendjemand streicht plötzlich die Lorbeeren f&uuml;r sich ein. <BR> <BR>Das ist mir einmal auf der Arbeit passiert. Ein Kollege hat dann f&uuml;r &#34;seinen&#34; Verbesserungsvorschlag eine Prämie bekommen. <BR> <BR>Da dachte ich dann im Stillen: Na vielen Dank auch! <BR> <BR>Seitdem gebe ich ungern Quellcodes raus. <BR> <BR> <BR>Im Prinzip ging es mir gar nicht um die Prämie, ich war nur &uuml;ber die Dreistigkeit ziemlich entäuscht.

Import-Script
14.03.2003, 19:14
Hallo winnie, <BR>hätte ja nicht ahnen können, dass ich dich so sehr damit verletzte, wenn ich mir das im nachhinein &uuml;berlege hast du eigenlich garnciht so unrecht. nur wie du selber siehst habe ich auch informationen dazu gelegt, die bei dir nicht vorkommen, desweitern habe ich mich auch sehr lange damit beschäftigt. <BR>Ich sahs persönlich auch stunden lang an der Routine zur ansteuerung des 1-wire dallas buses und und der 4 Bit LCD ansteuerung. welche ich auch mit hilfe von b&uuml;cher, internet seiten und Maxim-heften &#40;dallas&#41; erstellt habe. <BR>habe jedoch auch &#34;selber&#34; daran gearbeitet in form von tests und aufbauten der hardware. <BR> <BR>zum thema kommentare einfach mit &uuml;bernommen, wieso sollte ich sie nochmal schreiben, wenn sie schon da sind. <BR>naja, wie dem auch sei, es war eigentlich nicht der sins in irgend einer form eine arbeit als meine auszugeben, wollte im prinzip auch nciht das rad neu erfinden, wollte lediglich damit ausdr&uuml;cken das diese datei von mir zusammengestellt wurde, und f&uuml;r fragen bereitstehen. <BR>

Import-Script
14.03.2003, 23:07
Hallo Peter, <BR> <BR>ist schon in Ordnung, hast mich ja nicht verletzt. Kam mir nur alles sehr seltsam vor. Aber wie dem auch sei ist es nun geklärt und vielleicht kann jemand was damit anfangen. Deshlab haben wir ja auch dieses Forum. <BR> <BR>Gruß Winnie <BR>

Import-Script
17.03.2003, 10:48
Hallo Winnie, <BR> <BR>soll ich die Beispielroutinen aus der Software nehmen oder darf ich diese drin lassen? Ich wusste seinerzeit nicht, dass die von Dir kommen. Peter hatte mir diese zur Einbindung zugeschickt... <BR> <BR>Gr&uuml;ße <BR>André

Import-Script
17.03.2003, 16:32
Hallo André, <BR> <BR>vielen Dank f&uuml;r die Nachfrage, aber da es sich hier ja um ein Forum handelt wo allen geholfen werden soll lass sie einfach drin. <BR>Ich suchte nur letztens was um eine Frage hier im Forum beantworten zu können, da bin ich zufällig dr&uuml;ber gestolpert. Versteht sich das ich nicht begeistert war aber immerhin sind diese Routinen ja auch nicht so toll. Hauptsächlich die Art und Weise wie der Kollege das handhabt hat mich irgendwie irritiert oder schockiert!? <BR> <BR>Vielleicht kannst Du Dich noch dran erinnern als ich eben zur Erstellung des gesamten Programms bei Dir nachfragte ob ich Teile Deiner Zeit-Routine &uuml;bernehmen darf. Das war f&uuml;r Dich selbstverständlich, da sie ohnehin bei der gekauften oder auch Demo-Version der Batronix-Software beiliegen. Großartig ändern kann man da ohnehin nichts, aber trotzdem bin ich der Meinung das man ja wenigstens nachfragt, insbesondere wenn man es dann -wie der Kollege- unter eigenem Namen verteilt. <BR> <BR>Na ja, wie dem auch sei habe ich meinem &#39;Ärger&#39; luft gemacht und das Thema ist f&uuml;r mich erledigt. <BR>Nochmals danke f&uuml;r die Nachfrage und lass alles wie es ist. <BR> <BR>Gruß Winnie <BR>