das ist gut, ich hatte mir schon sowas gedacht, weil ich auch weiß, das verschiedene register vom atmel selbst zur berechnung dienen, aber ich wusste nicht ganz welche, danke.
Martin
Das ist nur zur Hälfte richtig.dabei ist xx eine zahl zwischen 0 und 31
Register R0 - R15 kann man nicht mit dem Befehl ldi beschreiben...
Gruß Sebastian
das ist gut, ich hatte mir schon sowas gedacht, weil ich auch weiß, das verschiedene register vom atmel selbst zur berechnung dienen, aber ich wusste nicht ganz welche, danke.
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Zur Berechnung kann man sie alle verwenden, es gibt schon ein Paar "Sonderregister", aber um Werte abzuspeichern kann man alle Benutzen, nur beim Beschreiben muß man aufpassen:
ldi R16,0xFF geht
ldi R2,0xFF geht nicht, da muß man schon einen Umweg machen:
ldi R16,0xFF
mov R2,R16
daraus zu lesen ist wiederrum egal:
out PORTD,R2
out PORTD,R16
beides geht...
Naja, wenn jemand mehr wissen möchte kann ich nur auf diese Seite verweisen.
Gruß Sebastian
Der Tiny12 hat keinen SRam, nur die Register.
als in Assembler kann man das lösen, in dem man jeweils 2 Register pro zahl verwendet.
ldi R16, 0x27
ldi R17, 0x10 ; 0x2710 = 10000
ldi r18, 0x03
ldi r19, 0xe8 ; 0x03e8 = 1000
nun die subtrakion
zuerst die unteren Bytes subrtahieren
sub r17, r19 ; Wenn R19 > R17 wird das Carry Flag gesetzt, sonst nicht
dann
subc r16, r18 ; Jetzt mit carry subtrahieren
In r16, r17 steht nun das Ergebnis
Ich kann mir kaum vorstellen, das man das in Bascom anders lösen kann, wenn man keine SRAM hat. Ich denke, bei den Ramlosen typen wird man nicht um Assembler rumkommen.
lg
Alex
hi leute ich hab mal vor längerer zeit ne kaffemaschine mit nem tiny bestückt (orginal ic hat sich in Rauch aufgelöst) vieleicht hilft das weiter
'$regfile = "AT12def.dat"
'$tiny
'portb.0 Relais ,,Pinb.1 ON/OFF ..Pinb.2 3 Tassen ,, Portb.3 LED1 ,, Portb.4 LED 2
Enable Interrupts
Enable Int0 'enable the interrupt
On Int0 Stopall Nosave 'jump to label2 on INT0
Dim A As Iram Word
Dim B As Iram Word
$asm
ldi R16,&h07
Out Ddrb , R16 '3 Ausgänge
LDI R16 ,&h18
Out Portb , R16 'Pullup´s setzen
$end Asm
Start:
Do
If Pinb.1 = 1 Then Gosub Onof 'Taste 0/1
If Pinb.4 = 1 Then Gosub Dreibis 'Taste 3-5 Kaffe
Loop
End
Onof:
Set Portb.2
Wait 120
Reset Portb.2
Return
Dreibis:
Set Portb.2
Wait 120
Reset Portb.2
Return
Stopall:
Portb = 0 'reset
Return
Tagtimer: '720 s sind 12 Stunden
Return
Sicher dass das so auf der Hardware läuft?
Im Simulator tut es, allerdings hängt sich sich der Tiny 12 auf sobald man Wait benutzt, Waitms funktioniert. Ansonsten ist halt wie oben gezeigt Assembler angesagt.
Gruß
Sven
die Kaffemaschiene läuft jetzt schon 2 jahre damit also hab damit anscheinend nichts grundlegendes falsch gemacht denk ich mal
nochmal sven
Achso zu Wait's,Ich wollte nur zeigen wie das mit dem iram und dem Einbinden von Assembler funktioniert. Im kompletten Programm hab dann noch den Timer vergewaltigt .
Hi nochmal!
Hey, das ist ja klasse, daß es so funktioniert. Also du hast kein Wait verwendet. Hast du den Timer dann auch in Assembler geprogt? Mit Bascom klappt das bei den kleinen Tinys nicht so recht. Jedenfalls habe ich es noch nicht hinbekommen, wenn ich da den Timer so konfiguriere, wie ansonsten gewohnt tut sich anschließend auf dem Tiny nix mehr.
Gruß
Sven
Ich hab jetzt leider kein tiniy12 mehr da um es zu testen
Hilfreich ist auf alle fälle beide Simulatoren zu verwenden.(Bascom und Studio4 unterscheiden sich in eigen sachen)
Ich hab grad mal die den timer gestarte, in Studio4 funzt er bestens.
Lesezeichen