Problem polega na tym że program działa tylko i wyłącznie jeśli użyję Wait. Jeśli gdziekolwiek użyję Waitms to wiesza się w tym miejscu. Totalnie nie wiem co skopałem a jest mi to bardo potrzebne do obsługi SAA1057
Jeśli mógł by ktoś rzucić okiem na kod i coś podpowiedzieć byłbym wdzięczny
Druga sprawa. Jak napisać aby przyciśnięcie naraz obu przycisków na Pinc.5 i Pinc4 wywołało przejście do obsługi SAA1057 ? Aktualnie jest to zrobione na Pinc.3 ale też za bardzo nie działa (w docelowym urządzeniu mam do dyspozycji tylko 2 przyciski)
Jeśli mógł by ktoś rzucić okiem na kod i coś podpowiedzieć byłbym wdzięczny
Druga sprawa. Jak napisać aby przyciśnięcie naraz obu przycisków na Pinc.5 i Pinc4 wywołało przejście do obsługi SAA1057 ? Aktualnie jest to zrobione na Pinc.3 ale też za bardzo nie działa (w docelowym urządzeniu mam do dyspozycji tylko 2 przyciski)
"sterownik SAA1057 z wyświetlaczem led"
$regfile = "m8def.dat"
$crystal = 8000000
Config Portd = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
' ustawiam porty do saa1057
Dat Alias Portd.13
Ena Alias Portd.12
Clk Alias Portd.11
'przyciski
Ddrc = &B1111_1111
Portc = &B1111_1111
Config Timer0 = Timer , Prescale = 8
Declare Sub Pobr_znaku(cyfra As Word)
On Timer0 Mult_wysw
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word
Dim Wart As Word
Dim X As Byte
Dim Nr_wysw As Byte
Dim Wpis As Word
W1 Alias Portb.0
W2 Alias Portb.1
W3 Alias Portb.2
W4 Alias Portb.3
Reset W1
Reset W2
Reset W3
Reset W4
Enable Interrupts
Enable Timer0
Wpis = &B1100100111000101 ' prekonfig
Wpis = 8750 ' częstotliwość początkowa
Gosub Saa
Wart = 875
Do
If Pinc.5 = 0 And Pinc.4 = 1 Then
Wart = Wart - 1
End If
If Pinc.5 = 1 And Pinc.4 = 0 Then
Wart = Wart + 1
End If
If Pinc.3 = 0 Then
Wpis = Wart * 10
wait 2
Gosub Saa
End If
If Wart < 875 Then Wart = 1085
If Wart > 1085 Then Wart = 875
D = Wart Mod 10
C = Wart \ 10
C = C Mod 10
B = Wart \ 100
B = B Mod 10
A = Wart \ 1000
A = A Mod 10
If A = 0 Then A = 10
Wait 1
Loop
Saa:
Dat = 0
Ena = 0
Clk = 0
Waitms 5
Ena = 1
Waitms 5
Clk = 1
Waitms 5
Clk = 0
Waitms 5
For X = 15 To 0 Step -1
Dat = Wpis.x 'Tu wartość Wpis wysyłamy do syntezy bit po bicie.
Waitms 5
Clk = 1
Waitms 5
Clk = 0
Waitms 5
Next X
Ena = 0
Waitms 5
Clk = 1
Waitms 5
Clk = 0
Waitms 5
Ena = 1
Waitms 5
Dat = 1
Clk = 1
Waitms 100
Return
End
'-------------------------------------------------------------------------------
Sub Pobr_znaku(cyfra As Word)
Portd = Lookup(cyfra , Kody7seg)
End Sub
Mult_wysw:
Load Timer0 , 150
Reset W1
Reset W2
Reset W3
Reset W4
Select Case Nr_wysw
Case 0:
Call Pobr_znaku(a)
Set W1
Case 1:
Call Pobr_znaku(b)
Set W2
Case 2:
Call Pobr_znaku(c)
Set W3
Case 3:
Call Pobr_znaku(d)
Set W4
End Select
Incr Nr_wysw
If Nr_wysw = 4 Then
Nr_wysw = 0
End If
Return
Kody7seg:
Data &B01000000 , &B01111001 , &B00100100 , &B00110000 , &B00011001
Data &B00010010 , &B00000010 , &B01111000 , &B00000000 , &B00010000
Data &B11111111 ' kaswanie cyfry
