'****************************Programm Schieberegister by Paul Baumann********** 'Das Programm realisiert ein 16-Bit Schieberegister. Die Daten werden über PD0 'eingelesen und mit PD2 weitergetaktet. An PD1 werden sie wieder herausgeschoben. 'Ein Strobe_Signal an PD3 übergibt das obere Byte an den Timer0, der eine PWM 'realisiert. Das untere Byte wird an Port B ausgegeben. An PD5 erscheint das PWM 'Signal, an PD4 und PD6 werden die Steuersignale für eine H-Brücke ausgegeben. 'Die Richtungsinformation liegt im Bit 0 von des Eingabewords. $regfile = "attiny2313.dat" $crystal = 1000000 Dim Niederbyte As Byte Dim Hochbyte As Byte Dim Eingabe As Long 'Es werden 17 Bit gebraucht! On Int0 Interupt0 'Springe bei Clock zu Interupt0 On Int1 Interupt1 'Springe bei Strobe zu Interrupt1 Config Int0 = Rising 'Auf steigende Flanke reagieren Config Int1 = Rising Enable Int0 Enable Int1 Enable Interrupts Config Pind.0 = Input 'IN RX Dateineingang Config Pind.1 = Output 'out TX Datenausgang Config Pind.2 = Input 'IN Clock an INT0 PD2 Config Pind.3 = Input 'IN Strobe an INT1 PD3 Config Pind.4 = Output 'Out Vorwärts Steuersignal Config Pind.5 = Output 'OUT PWM OC0B Config Pind.6 = Output 'OUT Rückwärts Steuersignal Config Portb = Output 'Port B als Ausgabe Portd = &B00001101 'Ziehwiderstände einschalten 'Config Timer0 = Pwm , Prescale = 1 Ocr0b = &B0 'Timer aus Tccr0a = &B00100011 'Com0B1,WGM11,WGM00 Tccr0b = &B00000001 'CS0 Timsk = &B00000010 'TOIE0 '*************************Hauptschleife***************************************** Do Niederbyte.0 = Eingabe.1 'Aus dem Eingabeword die unteren Niederbyte.1 = Eingabe.2 '8 Bit extrahieren und Niederbyte.2 = Eingabe.3 'im Niederbyte speichern Niederbyte.3 = Eingabe.4 Niederbyte.4 = Eingabe.5 Niederbyte.5 = Eingabe.6 Niederbyte.6 = Eingabe.7 Niederbyte.7 = Eingabe.8 Hochbyte.0 = Eingabe.9 'Aus dem Eingabeword die oberen Hochbyte.1 = Eingabe.10 '8 Bit extrahieren und Hochbyte.2 = Eingabe.11 'im Hochbyte speichern Hochbyte.3 = Eingabe.12 Hochbyte.4 = Eingabe.13 Hochbyte.5 = Eingabe.14 Hochbyte.6 = Eingabe.15 Hochbyte.7 = Eingabe.16 'Zum Testen von Hannes 'Niederbyte = Eingabe AND 255 'untere 8 Bit maskieren 'Hochbyte = Eingabe / 256 'wenn der Compiler clever ist, dann macht er Byteshifting Loop End '********************Interrupt bei Clock an PD2********************************* Interupt0: 'Clock Eingabe.0 = Pind.0 'Datenbit in Eingabebit speichern Shift Eingabe , Left , 1 'Ein Feld weiter nach links schieben Portd.1 = Eingabe.16 'An Portd.1 wieder rausschieben Return 'Zurück vom Interrupt '*******************Interrupt bei Strobe an PD3********************************* Interupt1: 'Strobe If Eingabe.0 = 1 Then Set Portd.6 'Wenn niedrigstes Bit 1 ist ,dann Steuersignal Reset Portd.4 'Rückwärts einschalten, vorwärts ausschalten Else 'Sonst eben anderscht rum ;-) Reset Portd.6 Set Portd.4 End If Ocr0b = Hochbyte 'PWM-Wert ausgeben Portb = Niederbyte 'Schaltsignale ausgeben Return