gdzie jest błąd???

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
mazerlok
-
Posty: 8
Rejestracja: 29 maja 2007, 8:34

gdzie jest błąd???

Post autor: mazerlok » 02 cze 2007, 12:11

ponieważ znalezienie edytora asemblerowego spełniającego moje oczekiwania zajmie mi za durzo czasu postanowilem wykorzystac mozliwosci wstawek asemblerowych w bascomie.
ale chyba czegos nie kumam bo to nie chce sie skompilowac.
kto wie jak to powinno byc?
listing:

Kod: Zaznacz cały

Dim E As Byte
Dim C As Byte
E = 7
C = 7
Declare Sub Dodaj
Config Timer0 = Counter , Gate = Internal , Mode = 1
P3.4 = 0
Enable Interrupts
Enable Timer0
On Timer0 Dodaj
$asm
Petla:
djnz (e),petla
cpl p3.0
mov (e),(c)
sjmp petla
$end Asm
 End

Dodaj:
C = C + 7
If C > 40 Then
   C = C -  40
   End If
E = C
Return
najpierw przyczepia sie do lini : djnz (e),petla ze AS EXPECTED BY DIM
a potem jeszcze Label nod found (.dodaj)

próbowalem różnych konfiguracji a helpa to chyba znam juz na pamięć.
Ostatnio zmieniony 02 cze 2007, 14:08 przez mazerlok, łącznie zmieniany 1 raz.

ZbeeGin

Post autor: ZbeeGin » 02 cze 2007, 14:08

mazerlok pisze:próbowalem różnych konfiguracji a helpa to chyba znam juz na pamięć.
Jak widać nie znasz helpa na pamięć, bo błąd robisz dalej podstawowy:

Kod: Zaznacz cały

djnz {e},petla 
cpl p3.0 
mov {e},{c} 
mazerlok pisze:najpierw przyczepia sie do lini : djnz (e),petla ze AS EXPECTED BY DIM
Oczywiście kompilator próbuje to ugryźć w każdą stronę i propnuje zdefiniowanie zmiennej tablicowej djnz() z ilością elementów zawartą w e, i tu podpowiada że brak DIM oraz określenia typu AS. Czasami musi się nieźle namyśleć...
mazerlok pisze:a potem jeszcze Label nod found (.dodaj)
A to już niestety Twoja wina. Najpierw deklarujesz procedurę Dodaj, a później rezygnujesz z procedury na korzyść etykiety Dodaj:. No niestety kompilator nie myśli abstrakcyjnie i tutaj się wykłada.

mazerlok
-
Posty: 8
Rejestracja: 29 maja 2007, 8:34

Post autor: mazerlok » 02 cze 2007, 21:34

pisałem nawiasy {} ale tez sie czepiał więc wstawiłem () i sie odczepił.na jakiś czas :???:
co do reszty to faktycznie jakoś ciezko dzisiaj myślałem.....


dobra jak go teraz zmusic do symulacji tego programu ?
wystawia mi : "is not a valid integer value
a jak chce opuscic symulacje : Floating point dyvision by zero
:?:
błędy poprawiłem

00:05
oki. przetestowałem sprzętowo. ale ciekaw jestem czemu baskom nie chciał mi tego zasymulowac?

ZbeeGin

Post autor: ZbeeGin » 03 cze 2007, 7:14

00:05
oki. przetestowałem sprzętowo. ale ciekaw jestem czemu baskom nie chciał mi tego zasymulowac?
Nie wiem dlaczego akurat u Ciebie symulacja nie działa. Ja z powodzeniem mogłem sobie symulację uruchomić, a nawet popodglądać stan zmiennych...
Być może twój BASCOM jest już dość leciwy.

mazerlok
-
Posty: 8
Rejestracja: 29 maja 2007, 8:34

Post autor: mazerlok » 03 cze 2007, 9:53

:sad:
ja to mam jakiegos pecha........

[ Dodano: 2007-06-04, 00:18 ]
cuda ludzie cuda
upubliczniam swego koda i odpiszcie czy u wes tez takie cuda:
dla wartosci E=10 procedura trwa 1000us dla pełnego cyklu 1-0-1 dla zboczy narastających, a dla E=9 tylko 50us czyli zgodnie z obliczeniami dla kwarcu 12MHz.
mniejsze wartosci E rownież dają wynik zgodny z obliczeniami.
to sa wyniki rzeczywiste nie z symulatora! testowane wielokrotnie na oscyloskopie.
co ten baskom tam jeszcze wstawia? sciągłem sobie najswieższą wersje z MCS-a.

Kod: Zaznacz cały

Config Timer0 = Counter , Gate = Internal , Mode = 1

Dim E As Byte
Dim C As Byte
E = 5
C = 5
P3.4 = 1
Enable Interrupts
Enable Timer0
Start Counter0
On Timer0 Dodaj

$asm
Petla:
djnz {e},petla
cpl p3.4
mov {e},{c}
sjmp petla
$end Asm


Dodaj:
C = C - 1
If C = 255 Then
   C = 10
   End If
E = C
Start Counter0
Return
Proszę pamiętać o umieszczaniu listingów w znacznikach [code] i [/code]. marcing
Ostatnio zmieniony 01 sty 1970, 1:00 przez mazerlok, łącznie zmieniany 1 raz.

ODPOWIEDZ