Hier kuck mal.
Code:
$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
Dieser code hat in etwa so bei mir funktioniert. experimentiere mal damit herum. Ist glaube ich auch ne bessere erklaerung als mein versuch vorhin
Lesezeichen