Gast
#913422
Wie muss ich das Programm umschreiben das es auf dem ATmega 16 läuft???? Hier das Programm: '----------------------------------------------------------------------- -------- 'Projekt: USB_KIT 'Funktionsüberprüfung 11.11.2004 'Hardware: 'Aufgabe: Software zur Erstinbetriebnahme des AVR-Kits ' dabei werden viele Funktionen getestet und dargestellt. ' Erklärung der Anwendung in grünem Text. 'db100205,100505,250505,011105,230306,230606,050806 '----------------------------------------------------------------------- -------- '----------------------------------------------------------------------- -------- $regfile = "m8def.dat" 'zu jedem Modell passende Datei $crystal = 8000000 'Quarz (Resonator) Frequenz $PROG &HFF,&HAE,&HD9,&H00 'FuseBit auf Extern. Quarz $baud = 9600 'gewünschte Bautrate vorgeben 'Beispiel wie man den internen EEProm laden kann $eeprom Data "123456789012345" '1,15 Data "StarterKit V4.1" '16,31 Data "Timmy Fiola " '32,47 Data "FV EL&IT Mainz " '48,63 Data "Stand: 23032006" '64,79 Data "Handwerkskammer" '80,95 Data "MultimediaGrimm" '96,111 'DatenDirektionRegister Port B DdrB = 255 'alle PortB als Ausgang deklarieren PortB = 255 'alle PullUp ein. DdrC = &B111_1111 'das Gleiche mit Port C(nur 6-Byte) PortC = &B111_1111 'nur andere Schreibweise DdrD = &B0011_1000 'D4+5 für LCD-LED Beleuchtung Outp. PortD = &B1101_1111 'PD4=H/PD5=L Dim I As Integer 'Variable für intern. Zähler vom Timer Dim D As Integer 'eine Integer- Variable (D) wird 'dimensioniert.Der Inhalt kann nun 'während der Laufzeit verändert werden Dim Txt As String * 16 'erstellen einer String-Variablen Dim W As Word 'Word Variablen benötigen wenig Speicher Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = PortB.1 , Db5 = PortB.2 , _ Db6 = PortB.3 , Db7 = PortB.4 , E = PortB.0 , Rs = PortD.6 Initlcd Cls Cursor Off Declare Function Eepromlesen(byval A As Word , Byval E As Word) As String Txt = EepromLesen(79 , 94) : Lcd Txt Lowerline Txt = EepromLesen(16 , 31) : Lcd Txt Config Timer1 = Timer , Prescale = 64 '256 ist schneller On Timer1 SprungTim1 'Sprungadresse Enable Interrupts S1 Alias PinD.3 'hier bekommen die Ports einen selbst S2 Alias PinD.4 '-vormals D.6- S3 Alias PinD.7 'die Sufix aus der Zeichnung, dann S4 Alias PinD.2 'hat man eine gute Wiedererkennung. V7 Alias PortC.2 V6 Alias PortC.1 V5 Alias PortC.0 V4 Alias PortB.5 Irs Alias PortC.1 'Ire Alias PortD.5 'IR-Empfängerdiode '-------------------nur Startbedingung testen und ausgeben------------------- Waitms 250 '1/4 Sekunde warten Print Chr(13) 'Zeilenumbruch 2x Txt = EepromLesen(16 , 31) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(32 , 47) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(80 , 95) : Print Txt 'Text vom EEProm und ausgeben Txt = EepromLesen(64 , 79) : Print Txt 'Text vom EEProm und ausgeben Print "Registertest" Print "B-Port: " ; Ddrb ; " / " ; Portb 'Registerinhalt darstellen Print "C-Port: " ; Ddrc ; " / " ; Portc Print "D-Port: " ; Ddrd ; " / " ; Portd Print 'einfacher Zeilenumbruch Waitms 500 Enable Timer1 'Timer einschalten V6 = 0 V5 = 0 V4 = 0 '----------------------------Hauptroutine------------------------------- ----- Do 'Tasterabfrage mit Entprellung durch "Debounce" Debounce S1 , 0 , Tast1 , Sub 'S1 Debounce S2 , 0 , Tast2 , Sub 'S2 Debounce S3 , 0 , Tast3 , Sub 'S3 Debounce S4 , 0 , Tast4 , Sub 'S4 if S2 = 0 and S3 = 0 then Gosub TimEinAus 'Hier werden Programmroutinen eingefügt.Diese Scheife wird ständig wiederholt Loop '---------------------Ende der Hauptroutine---------------------------------- 'Alles an Programmiercode, was hiernach folgt, sind Nebenroutinen in die der 'Mikrocontroller entweder von sich aus (Interrupt,Timer u.s.w) springt, oder 'durch ein Ereignis (Debounce,Sub- oder Funktion u.s.w) ausgelöst wird. Nach 'der Abarbeitung der Unterroutinen springt der Mikrocontroller immer wieder 'an die Stelle zurück, von der aus er ausgetreten ist. '---------------------Timer1 Ein/Aus----------------------------------------- TimEinAus: If TIMSK.TOIE1 = 0 then 'ENABLE Timer1 TIMSK.TOIE1 = 1 Else TIMSK.TOIE1 = 0 End If waitms 1000 Return 'Hier ist die Timerroutine. Hier wird alle Sekunde hin verzweigt SprungTim1: V7 = Not V7 'das ist ein genialer Befehl, Der den Zustand des Ports einfach 'umdreht. Also ist er eben Low, dann wird er High. Die LED V7 'wird also blinken. Vorausgesetzt der Port steht auf Ausgang 'und der PullUp- Widerstand ist eingeschaltet. Und der Timer 'ist enabled (eingeschaltet) Incr I 'Incrementiere I (Zähle um 1 höher entspricht: I=I+1) Print "033150:Timer";I 'das ist die Syntax um über UART seriell Daten zu 'senden. das Semikolion trennt dabei die Variable (i) 'vom geschriebenen Text. Print sendet dann den Inhalt 'von (I) Ire = V7 'zum Testen der IR-Empfängerdiode Return '--------------------Tastenroutine-------------------------------------- ------ Tast1: Incr D 'zählt die internen Tastendrücke Txt = EepromLesen(64 , 79) 'holt Text vom EEProm (stand) Lowerline : Lcd Txt Print "S1: " ; Txt ; " z:" ; D 'Ausgabe über UART (TXD) V6 = Not V6 'LED-Zustand umschalten Return '----------------------------------------------------------------------- ------ Tast2: Txt = EepromLesen(32 , 47) 'holt Text vom EEProm (USB onB..) Print "S2: " ; Txt 'UART (TXD) Ausgabe Lowerline : Lcd Txt V4 = Not V4 'LED V4 ändert seinen Zustand Return '----------------------------------------------------------------------- ------ Tast3: Txt = EepromLesen(48 , 63) 'holt Text vom EEProm (FV-EL..) Print "S3: " ; Txt 'UART (TXD) Ausgabe Lowerline : Lcd Txt V7 = Not V7 'LED V7 ändert seinen Inhalt Return '----------------------------------------------------------------------- ------ Tast4: Txt = EepromLesen(16 , 31) 'holt Text vom EEProm (USB-Kit..) Lowerline : Lcd Txt Print "S4: " ; Txt 'UART (TXD) Ausgabe V5 = Not V5 Return '----------------------------------------------------------------------- ------ 'Hier folgen Unterroutinen 'Aufgabe : Das implementierte EEProm auslesen (512 Byte Größe möglich), 'Parameter : A (Anfangspunkt) eine Zahl zwischen 1-511 - immer < E ' E (Endpunkt) eine Zahl zwischen 2-512 'Ausgabe : EEPromLesen (Stringvariable) Function EepromLesen(byval A As Word , Byval E As Word) As String Local Epunkt As Word 'Lokale Variablen werden nach Ver- Local Inhalt As Byte 'lassen der Routine wieder frei 'gegeben Eepromlesen = "" 'Der Inhalt bleibt bestehen, deshalb For Epunkt = A To E 'erstmal löschen, dann for - next Readeeprom Inhalt , Epunkt 'um EEProm schrittweise (seriell) Eepromlesen = Eepromlesen + Chr(inhalt) 'aus zu lesen. Next Epunkt End Function