zgłaszam się po weekendzie
mój program po sugestiach kol. ZbeeGin wyglądał jak poniżej
nie zdążyłam jeszcze wstawić poprawki którą zasugerował jako ostatnią
$crystal = 16000000
$regfile = "m16def.dat"
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Config Lcd = 16 * 4
Dim Poz As Word
Config Int0 = falling
On Int0 Get_x nosave
enable int0
enable interrupts
config pind.2 = input
config pind.3 = input
poz = 1
cls
cursor off
do
home
lcd poz ; " "
waitms 100
loop
get_x:
'If pind.3 = 1 Then
' decr poz
' if poz = 0 then poz = 5000
' else
' incr poz
' if poz > 5000 then poz = 1
' end if
$asm
PUSH r30 ' zapamiętaj R30:R31
PUSH r31
PUSH r16 ' zapamiętaj _temp1
PUSH r26 ' zapamiętaj X
PUSH r27
Loadadr Poz , X ' adres zmiennej POZ do rej X (funkcja BASCOMa)
LD r30, X+ ' załaduj zawartość zmiennej do pary R30:R31
LD r31, X
'If pind.3 = 1 Then
SBIS PIND, 3 ' jak bit ustawiony to omiń skok
JMP _else
' Decr Poz
SUBI r30, 1 ' odejmij 1 od zawartości spod X
SBCI r31, 0
' If Poz = 0 Then Poz = 5000
MOV r16, r31 ' sprawdź czy w R30:R31 jest zero
!OR r16, r30
BRNE _store ' nie, zatem zapisz aktualną i wyjdź
LDI r30, &H88 ' inaczej załaduj do pary R30:R31 5000
LDI r31, &H13
JMP _store ' zapisz i wyjdź
_else:
'Else
' Incr Poz
ADIW r30, 1 ' jak bit był zero dodaj 1
' If Poz > 5000 Then Poz = 1
CPI r30, &H89 ' sprawdź czy w R30:R31 jest 5001
LDI r16, &H13
CPC r31, r16
BRCS _store ' jest mniej więc zapisz aktualną i wyjdź
LDI r30, 1 ' inaczej załaduj do pary R30:R31 wartość 1
LDI r31, 0
_store:
ST X, r31 ' finalnie zapisz zawartość R30:R31 pod adres w X
ST -X, r30
POP r27
POP r26
POP r16
POP r31
POP r30
$end asm
return
Dodano po 7 [minuty]:
jeszcze do koliegi piotr5000, to nie jest częstotliwość 15Hz bo tam jest 5000 impulsów na obrót a nie jeden impuls na obrót, więc czas jednego impulsu wychodzi kilka-kilkanaście mikrosekund... a nie w milisekundach
Dodano po 25 [minuty]: włożyłem tą nową wstawkę ale jest bez zmian ,albo są tak małe że niezauważalne, myslę .że bascom jeszcze coś źle robi poza przerwaniem,
bo nie ma różnic czy wstawię w przerwaniu instrukcje z bascoma czy asm
Dodano po 8 [minuty]: próbowałem jeszcze w trzecim kompilatorze basica w "mikrobasic PRO" i tam też działa rewelacyjnie, tylko w tym bascomie świruje, problem w tym że bascoma mam komercyjnego ,a tamte demo i niewiele kodu się zmieści