David hat recht, mir ist glatt ein Fehler beim Zeichnen unterlaufen und ich bin in die falsche PIN Reihe geruscht.

Sorry, habe das auch beim erneuten drüber schauen übersehen.
Habe den Plan schon geändert, kann ihn nur nicht Hochladen, da bei meinen Homepage Provider was schief läuft. So wie das geht, werde ich den neuen Plan Hochladen.
Quellcode für ein Feuerwehrauto:
$regfile = "attiny2313.dat"
$prog &HFF , &H64 , &HDF , &H00
$PROG &HFF,&H64,&HDF,&H00
$PROG &HFF,&H64,&HDF,&H00
Dim A As Byte 'Blaulicht1
Dim B As Byte 'Blaulicht2
Dim C As Byte 'Flascher
Dim D As Byte 'Martinhorn Hi
Dim E As Byte 'Martinhorn Low
Dim F As Word 'Martinhorn Wechsel
Dim G As Byte 'PWM
Dim H As Byte 'Blinker
Config Portb.0 = Output 'PWM
Config Portb.1 = Output 'Blinker
Config Portb.2 = Output 'Flascher
Config Portb.3 = Output 'Blaulicht 1
Config Portb.4 = Output 'Blaulicht 2
Config Portb.5 = Output 'Martinhorn
Config Timer0 = Timer , Prescale = 1
Config Timer1 = Timer , Prescale = 1
Enable Timer0
Enable Timer1
Enable Interrupts
On Timer0 Unters
On Timer1 Unterp
Do 'Hauptschleife
Loop 'sprung zum Hauptschleifen anfang
End
Unterp: 'Sprungpunkt von Timer1
If A = 64 Then A = 0 'Wenn Var. Blaul. 1 gleich 64, dann Var. Blaul. 1 gleich 0
Incr A 'Var. Blaul. 1 +1
If A < 32 Then Portb.3 = 0 'Blaulicht 1
If A > 31 Then Portb.3 = 1 'Blaulicht 1
If B = 62 Then B = 0 'Wenn Var. Blaul. 2 gleich 62, dann Var. Blaul. 2 gleich 0
Incr B 'Var. Blaul. 2 +1
If B < 31 Then Portb.4 = 0 'Blaulicht 2
If B > 30 Then Portb.4 = 1 'Blaulicht 2
If C = 96 Then C = 0 'Wenn Var. Flascher gleich 96, dann Var. Flascher gleich 0
Incr C 'Var. Flascher +1
If C < 6 Then Portb.2 = 1 'Flascher
If C = 6 Then Toggle Portb.2 'Flascher
If C = 12 Then Toggle Portb.2 'Flascher
If C > 18 Then Portb.2 = 0 'Flascher
If H = 48 Then H = 0 'Var. Blinker gleich 48, dann Var. Blinker gleich 0
Incr H 'Var. Blinker +1
If H = 1 Then Toggle Portb.1 'Blinker
Return 'Zurück zum Hauptprogramm
End
Unters:
If F > 35000 Then F = 0
Incr F 'Var. Martinsh. +1
If F < 17500 Then E = 7 'Var. Martinsh. We. kleiner 86, springe nach W1
If F > 17500 Then E = 8 'Var. Martinsh. We. größer 86, springe nach W2
Incr D
E = E * 2 'Var. Martinsh. Hi +1
If D > E Then D = 0 'Var. Martinsh. Hi +1
E = E / 2
If D < E Then Portb.5 = 1 'Martinhorn
If D > E Then Portb.5 = 0 'Martinhorn
If G = 128 Then G = 0 'Wenn Var. PWM gleich 128, dann Var. PWM gleich 0
Incr G 'Var. PWM +1
If G = 1 Then Toggle Portb.0 'PWM
If G = 4 Then Toggle Portb.0 'PWM
Return
End
Die Angaben hinter dem ' sind nur als Programmablaufanhaltspunkte, das brauch ihr nicht mit übernehmen.
Das Martinhorn klingt noch nicht ganz sauber, bin aber dabei...liegt wahrscheinlich daran, weil ich ein Rechtecksignal auf den Lautsprecher gebe und dann passieren sehr unschöne sache. Deswegen bin ich gerade dabei einen passenden schwingkreis dafür zu bauen. Sprich aus Rechteck Sinus machen, das problem dabei ist, das sich ein Schwingkreis unter Last verändert.
Kurze erklärung zum Programm:
Ich lege Speicherbereiche fest, die dann hochgezählt werden. Also DIM (Speicherberech erstellen) A (der Name des Speicherbereichs, könnt ihr nennen wir ihr wohlt, darf nur kein BASCOM befehl sein) AS BYTE (als Byte, also einen Speicherbereich von 0 bis 255). Dann werden die Ein und Ausgänge Konfiguriert, in diesem fall habe ich nur Ausgänge (z.B. CONFIG PORTB.0 = OUTOUT der PIN 12 am IC soll ein Ausgang sein.) Dann werden die beiden Timer, die der ATTiny2313 hat als Zähler Konfiguriert mit einem Vorteiler von 1 (z.B.Config Timer0 = Timer , Prescale = 1), sowie aktiviert (Enable Timer0) und die dazugehörigen Unterprogramme angegeben (On Timer0 Unters).
Ich habe alles in Unterprogrammen laufen, damit zu keinen verzögerungen kommt, wenn er vom Hauptprogramm ins Unterprogrammspringt. Darum ist meine Hauptschleife leer (DO LOOP END).
Im Unterprogramm lasse ich nun den jeweiligen Speicherbereich hochzählen (z.B. INCR A zähle den Speicherbereich A um einen hoch). Wenn ein bestimmter Wert erreicht ist, soll er den Ausgang schalten (z.B. If A < 32 Then Portb.3 = 0 wenn A kleiner 32 ist, dann soll der Ausgang B.3 aus sein)(If A > 31 Then Portb.3 = 1 wenn A größer 31 ist, dann soll B.3 An sein). Vorweg habe ich noch die Speicherrücksetzung (If A = 64 Then A = 0 wenn A = 64 dann setze A auf 0), das mach ich am Anfang, damit er nie höher als 64 Zählen kann.
Ganz am Anfang steht $prog &HFF , &H64 , &HDF , &H00 damit wird der interne Vorteiler auf Null gesetzt, in der Werkseinstellung ist ein Vorteiler gesetzt. Sprich die Intern erzeugten 1 MHz werden runtergetaktet und das hebe ich damit auf.