Hier kuck mal.
Dieser code hat in etwa so bei mir funktioniert. experimentiere mal damit herum. Ist glaube ich auch ne bessere erklaerung als mein versuch vorhinCode:$regfile = "m8535.dat" $crystal = 10000000 Config Portc = Output '( Im Hauptprogramm Berechnest Du Aus Jedem Helligkeitswert(8 Bit) Die Entsprechende Anzahl Von Timerticks. Beim Nulldurchgang Löscht Du Deinen Timer Und Schreibst Die Timerticks Der Hellsten Lampe Ins Compare -register Deines Timers. Wenn Das Compare -reg Einen Ir Auslöst, Schaltest Du Die Lampe Ein Und Schreibst Den Wert Der Zweithellsten Lampe Ins Compare -reg , Usw. Fang Am Anfang Mit Nur Einer Lampe An. Dann Hast Du Nur Einen Wert Für Das Compare -register Und Dein Programm Bleibt Einfach. Wenns Läuft , Bau Die Anderen Lampen Ein! ') ' 8 chanel werter festleen an engem array ! Dim Chanel_val(8) As Word Dim Temp_chanel_val(8) As Word Dim Trigger_chanel_num(8) As Byte Dim T As Byte Dim C As Byte Dim M As Byte Dim Idx As Byte Dim Chanel As Integer 'actuel chanel nummer Dim Comp As Integer Dim T_c As Integer Dim R_c As Integer Dim R2d2 As String * 1 Dim R3d3 As String * 10 Declare Sub Big_level() As Bit ' Offset NUll Duurchgang = 1750 ticks Chanel_val(1) = 1750 'MIN Chanel_val(2) = 1700 Chanel_val(3) = 1600 ' Chanel_val(4) = 1500 ' Chanel_val(5) = 1400 ' Chanel_val(6) = 1300 ' Chanel_val(7) = 1200 ' Chanel_val(8) = 1100 'MAX 'Config Int0 = Rising Set Mcucr.isc01 Set Mcucr.isc00 ' Interrupts Enable Interrupts 'timer configureiren Call Big_level Compare1b = 250 '12502 Config Timer1 = Timer, Prescale = 8 Config Serialin = Buffered, Size = 64 Enable Int0 'Null Durchgans erkennung Enable Compare1a 'timer1 interrupt Enable Compare1b 'timer1 interrupt On Int0 Int0_isr On Compare1a Timer_isr On Compare1b Port_reset Do R2d2 = Inkey() If Err = 0 Then If R2d2 <> "*" Then R3d3 = R3d3 + R2d2 Else Print "Chanel 1 set to "; R3d3 Chanel_val(1) = Val(R3d3) R3d3 = "" End If End If Loop 'main routine 'Timer_ticks_max = 12500 'bei prescale = 8 ass 12500 'One_step = 50 'linear ticks Timer_isr: 'compare1a interrupt T_c = Trigger_chanel_num(Chanel) Select Case T_c Case 1 : Set Portc.0 Case 2 : Set Portc.1 Case 3 : Set Portc.2 Case 4 : Set Portc.3 Case 5 : Set Portc.4 Case 6 : Set Portc.5 Case 7 : Set Portc.6 Case 8 : Set Portc.7 End Select Chanel = Chanel + 1 If Chanel > 8 Then Chanel = 1 End If T_c = Trigger_chanel_num(Chanel) Comp = Chanel_val(T_c) Compare1a = Comp Return Int0_isr: 'Null Durchgangs Interrupt Timer1 = 0 Start Timer1 Chanel = 1 T_c = Trigger_chanel_num(Chanel) Comp = Chanel_val(T_c) Compare1a = Comp Return Port_reset: Portc = 0 Return![]()







Zitieren

Lesezeichen