Witam,
mam problem z programem, który napisałem. Chodzi o to, że jeśli w pętli głównej programu zwiększam wartość zmiennej o jeden i wprowadzam opóźnienie poleceniem
"waitms", to nie jest ona w ogóle wyświetlana - na wyświetlaczach LED nic się nie zmienia. Z kolei, jeśli w programie głównym opóźnienie realizowane jest poleceniem "wait", to wówczas zmienna jest prezentowana poprawnie. Do sterowania multipleksowego wyświetlaczami LED wykorzystałem rejestr szeregowo-równoległy CD4094, uP to atmega8. Tak wygląda działający program:
Wystarczy, że zamiast "wait 1" wpiszę "waitms 1000", to program już nie działa. Nie rozumiem o co chodzi, przecież te opóźnienia są równoznaczne?
mam problem z programem, który napisałem. Chodzi o to, że jeśli w pętli głównej programu zwiększam wartość zmiennej o jeden i wprowadzam opóźnienie poleceniem
"waitms", to nie jest ona w ogóle wyświetlana - na wyświetlaczach LED nic się nie zmienia. Z kolei, jeśli w programie głównym opóźnienie realizowane jest poleceniem "wait", to wówczas zmienna jest prezentowana poprawnie. Do sterowania multipleksowego wyświetlaczami LED wykorzystałem rejestr szeregowo-równoległy CD4094, uP to atmega8. Tak wygląda działający program:
Cytat:Dim Dana2 As Byte
Dim I2 As Byte
'Dim A As Byte
Dim X As Single
Dim A As Byte , B As Byte
Dim I As Byte
Dim R As Byte
Dim Nr_wys As Byte
Dim T As Integer
Dim Bd(9) As Byte
Dim V As Byte
Dim Q As Byte
Dim S As Byte
Dim D(8) As Byte
Dim C(8) As Byte
Dim O As Byte
Dim H As Byte
Clk_4094 Alias Portb.0
Data_4094 Alias Portd.7
Strobe_4094 Alias Portd.6
W1 Alias Portc.3
W2 Alias Portc.2
Declare Sub Zapis_cyfry(cyfra As Byte)
Config Timer0 = Timer , Prescale = 256
On Timer0 Mwys
Enable Interrupts
Enable Timer0
Load Timer0 , 125
Config Portc.5 = Input
Config Portb.0 = Output
Config Portd.7 = Output
Config Portd.6 = Output
Config Portd.5 = Output
Config Portc.3 = Output
Config Portc.2 = Output
Set Portc.5
Reset Portb.0
Reset Portd.7
Reset Portd.6
Set Portd.5
H=11
Do
T = H
Incr H
Wait 1
Loop
End
Sub Zapis_cyfry(cyfra As Byte)
Dana2 = Lookup(cyfra , Wys)
For I2 = 0 To 7
Data_4094 = Dana2.i2
Clk_4094 = 1
Clk_4094 = 0
Next I
Strobe_4094 = 1
Strobe_4094 = 0
End Sub
Mwys:
Load Timer0 , 125
Reset W1
Reset W2
X = T
If X >= 10 Then
X = X / 10
A = X
X = X - A
X = X + 0.01
X = X * 10
B = X
End If
Select Case Nr_wys
Case 0:
Call Zapis_cyfry(a)
Set W1
Case 1:
Call Zapis_cyfry(b)
Set W2
End Select
Incr Nr_wys
If Nr_wys = 2 Then
Nr_wys = 0
End If
Return
Wys:
Data 2 , 158 , 36 , 12 , 152 , 72 , 64 , 30 , 0 , 8
Wystarczy, że zamiast "wait 1" wpiszę "waitms 1000", to program już nie działa. Nie rozumiem o co chodzi, przecież te opóźnienia są równoznaczne?