Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

[Bascom] poprawa opisu oraz stworzenie kodu w C i asemblerze

picassek
-
-
Posty: 6
Rejestracja: 5 cze 2010, o 15:26
Lokalizacja: sosnowiec

[Bascom] poprawa opisu oraz stworzenie kodu w C i asemblerze

Postautor: picassek » 5 cze 2010, o 15:33

Witam, jako zadanie dostałem opisanie krok po kroku otrzymanego kodu oraz przeniesienie kodu z języka Bascom na kod Asemblera i C. Jako, że programowanie nie jest moją mocną stroną, prosiłbym o pomoc (rady, sugestie najlepiej w sposób tzw. łopatologiczny jak można osiągnąć postawiony cel i jak wogóle się najlepiej za to zabrać) w przetransformowaniu kodu z języka Bascom na język Asemblera i C (o ile nie będzie problemów z jakimiś fragmentami kodu, które dla C mogą być niezrozumiałe) oraz opisaniu kodu bascoma (Ogólnie zaznaczyłem, reszty nie jestem pewien). Mikrokontroler to AT89C2051, a dokładniej jest to zestaw nowy elektronik k 372 " sonar z czujnikami ultradźwiękowymi.

Kod: Zaznacz cały

$crystal = 12000000 $regfile = "89C2051.DAT" Config Timer0 = Timer , Gate = Internal , Mode = 1 Tmod.3 = 1 Tmod.7 = 0 Gate_alias P3.7 Booz_alias P3.0 Ledy Alias P1 Dim Temp As Long Dim Error As Byte Dim B1 As Byte Dim B2 As Byte Declare Sub Ledy_(nled As Byte , Gd As Byte) Dim Nled As Byte Dim Gd As Byte On Timer0 Timer0_int On Int0 Int0_int Tcon.0 = 0 Priority Set Int0 Enable Interrupts Enable Timer0 Disable Int0 // Początek programu ? // Booz_ = 0 Gate_ = 1 Call Ledy_(8 , 0) // Początek pętli głównej // Do Error = 0 Th0 = 0 Tl0 = 0 Gate_ = 0 Delay Delay Delay Delay Delay Gate_ = 1 Tcon.4 = 1 Waitms 1 Delay Delay Delay Delay Delay Tcon.1 = 0 Enable Int0 Do Error.1 = Tcon.5 Loop Until Error > 0 If Error.0 = 1 Then Call Ledy_(0 , 0) Booz_ = 0 Print "T" Elseif Error.1 = 1 Then B1 = Tl0 B2 = Th0 Temp = B2 * 256 Temp = Temp + B1 // w zależności od odległości zapalane są ledy, wraz z włączeniem 5 leda, włącza się buzer // If Temp < 860 Then Call Ledy_(8 , 0) Booz_ = 1 Elseif Temp > 859 And Temp < 2109 Then Call Ledy_(7 , 0) Booz_ = 1 Elseif Temp > 2108 And Temp < 3359 Then Call Ledy_(6 , 0) Booz_ = 1 Elseif Temp > 3358 And Temp < 4609 Then Call Ledy_(5 , 0) Booz_ = 1 Elseif Temp > 4608 And Temp < 5859 Then Call Ledy_(4 , 0) Booz_ = 0 Elseif Temp > 5858 And Temp < 7109 Then Call Ledy_(3 , 0) Booz_ = 0 Elseif Temp > 7108 And Temp < 8359 Then Call Ledy_(2 , 0) Booz_ = 0 Elseif Temp > 8358 And Temp < 10000 Then Call Ledy_(1 , 0) Booz_ = 0 Elseif Temp > 9999 Then Call Ledy_(0 , 0) Booz_ = 0 End If End If Waitms 200 Loop // Koniec pętli głównej // Sub Ledy_(nled As Byte , Gd As Byte) Select Case Gd Case 0 : Select Case Nled Case 0 : Ledy = 255 Case 1 : Ledy = 254 Case 2 : Ledy = 252 Case 3 : Ledy = 248 Case 4 : Ledy = 240 Case 5 : Ledy = 224 Case 6 : Ledy = 192 Case 7 : Ledy = 128 Case 8 : Ledy = 0 End Select Case 1 : Select Case Nled Case 0 : Ledy = 255 Case 1 : Ledy = 127 Case 2 : Ledy = 63 Case 3 : Ledy = 31 Case 4 : Ledy = 15 Case 5 : Ledy = 7 Case 6 : Ledy = 3 Case 7 : Ledy = 1 Case 8 : Ledy = 0 End Select End Select B2 = Ledy End Sub Timer0_int: ' Incr Over_count ' If Over_count > 9 Then ' Tcon.4 = 0 Disable Int0 Error.0 = 1 ' End If Return Int0_int: Tcon.4 = 0 Disable Int0 Error.1 = 1 Return End
Wszystkim zainteresowanym z góry dziękuję za odpowiedź i pozdrawiam
Ostatnio zmieniony 5 cze 2010, o 20:55 przez picassek, łącznie zmieniany 1 raz.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 5 cze 2010, o 17:15

Po pierwsze należy Ci się ochrzan za dublowanie tematów. Posprzątałem, ale następnym razem spodziewaj się ostrzeżenia.

Po drugie. Do konwersji tego kodu do C, wystarczy znajomość podstaw C, przeczytaj początkowe rozdziały jakiejś książki lub kursu C. Zamiana formatu pętli, definicji zmiennych czy case'a... i to chyba wszystko. Kod w asm otrzymasz jako przejściowy proces kompilacji, jednak będzie to kod mało czytelny dla człowieka (m.in. brak nazwania zmiennych/rejestrów itp).

Do opisu tego kodu... trochę podstaw Bascoma (choćby przejrzenie helpa online na stronie producenta bascoma) wystarczy.

Wybacz, ale sądzę, że nikomu nie będzie się chciało odrabiać zadań i opisywać tak długiego kodu ZA Ciebie.

Pytaj za to śmiało o konkretne problemy (ogólnie), lub niuanse...

picassek
-
-
Posty: 6
Rejestracja: 5 cze 2010, o 15:26
Lokalizacja: sosnowiec

Postautor: picassek » 5 cze 2010, o 19:12

Sorki za dubla ale nie mogłem się zdecydować gdzie bardziej będzie pasować temat.
Opisałem kod ile potrafiłem ale w paru miejscach nie byłem pewien, mógłby ktoś sprawdzić czy dobrze został opisany kod oraz co powinienem umieścić w brakujących miejscach ?
Żeby nie wklejać całośći od nowa umiścilem w załączniku. Pozdrawiam
Załączniki
opisany kod.rar
opisany kod
(2.44 KiB) Pobrany 323 razy

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 18 gości