Moin, ich möchte beim Tiny12L die ersten 4 Pins als Ausgabeport, den 5. Pin als Eingabe und den 6. Pin wider als Ausgabeport des PortBs deklarieren und benutzen. Wie kann man so etwas in Assembler realisieren? Was wird genau mit dem Befehl IN eingelesen? Nur der Eingabeport oder der komplette PortB (s. Beispiel oben)?
Noch etwas: Habe ich die Möglichkeit einen Wert (z.B. 400) so vom Mikrocontroller speichern zu lassen, dass ich ihn nach einem Stromausfall wieder benutzen kann?
du kannst jeden Port einzeln mit dem DDRx-Register definieren, entweder komplett als byte: ldi r16, 0b00010010 ;PORT 1und 4 als Ausgang out DDRB, r16 oder auch bitweise einzeln sbi DDRB, 4 ;setzt PORTB.4 als Ausgang in liest den kompletten Port, wobei zu beachten ist, dass jeder Port 3 Register hat: DDRx: Eingang/Ausgangsdefinition PORTx: das eigentliche Portregister, PINx: die Signale am eigentlichen Pin Ist ein Portpin als Eingang definiert, muss man immer PINx einlesen, da im Portregister nur steht, was man vorher reingeschrieben hat (0:interner Pullup deaktiviert, 1: interner Pullup aktiviert).
Und was den Wert speichern betrifft... Ja das geht mit dem internen EEPROM. Davon hast Du 64 Bytes beim Tiny12 zu Verfügung. MooseC
Ah, vielen Dank, also wenn ich wie oben beschrieben die Ports deklariere, wie lese ich dann nur das ein, was am Pin 5 des PortBs anliegt? Also welche Werte gibt dann PinB zurück, wenn an Pin 5 ein high bzw. ein low anliegt? Wie lautet der Assemblercode für die EEPROM Abspeicheraktion? (Ich fange gerade erst an mit der Assemblerprogrammierung!)
Entweder du benutzt die Sprungbefehle SBIC und SBIS (nächsten Befehl überspringen, wenn Bit in IORegister set/cleared) sbic PINB,5 rjmp BitSet . . . sbis PINB,5 rjmp BitCleared . . . BitSet: BitCleared: oder du musst dein Bit auscodieren: in Temp,PINB andi Temp,0b00100000 somit steht in Temp 00100000, wenn das Bit gesetzt ist und 0, wenn das Bit nicht gesetzt ist.
Und was das Speichern betrifft... Suche einfach danach, Du wärst nicht der erste der sich damit beschäftigt. Die Beiträge hier im Forum/Codesammlung sind recht vielfältig. Nur einer davon: http://www.mikrocontroller.net/forum/read-4-647.html#647 MooseC
Moin, mein Tiny12L läuft komischerweise nicht, mit Ponyprog kann ich Daten erfolgreich übertragen, aber anschließend läuft dieses lachhafte Programm nicht: ------------------------------------------------------ .include "tn12def.inc" ldi r18, 0b11111111 out DDRB, r18 ldi r16, 0b11111111 out PORTB, r16 ende: rjmp ende ------------------------------------------------------ Ich habe kein externes Quarz angeschlossen - muss ich den internen RC ocillator noch aktivieren? Benjamin
Moin, wie kann ich einen Taster per Assembler entprellen? Ich benötige dies, um Register hochzuzählen, wenn ich einen Taster drücke (Beim Drücken des Tasters soll noch nichts passieren, erst beim Loslassen soll ein Register um 1 incrementiert werden.)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.