Skocz do zawartości

[Kurs] BASCOM - lekcja3 - zaczynamy programować


Ikar

Pomocna odpowiedź

Treker no nie sadze ja juz rozkminilem bascoma i zrobilem magiczna kóle z edw tylko,ze zamiast 20 diod dalem 1 diode w kazdym pinie i wszystko dziala jak zechce po zmianie kodu a Ikara kurs do dzis mi nie dziala a magiczna kola jest o wiele trudniejszym projektem jezeli chodzi o sam kod.

Link do komentarza
Share on other sites

hehe kule widziałem. Całkiem fajna.

Mógłby mi ktoś powiedzieć jak zrobić pętle skończoną. Wiem, że można z powodzeniem użyć while, ale średnio mi się podoba to rozwiązanie. Chodzi o wykonanie zadania x 255 razy.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

misiek1994, fajnie, że znasz jedną komendę w asm i się tym chwalisz 🙂

Nie prościej użyć:

Do
  Blok instrukcji B wykonywany gdy Warunek jest fałszywy
Loop Until (Warunek)

lub

Do
  Blok instrukcji B wykonywany gdy Warunek jest prawdziwy
Loop While (Warunek)
Link do komentarza
Share on other sites

No niezłe pomysły, nigdy bym nie pomyślał że można aż tak usiłować sobie życie utrudnić 😋

A z tym asemblerem to już istny kwiatuszek, tak jak by nie było w bascomie takich instrukcji jak gosub i goto.

Ja proponuję użyć do tego funkcji która została niejako do tego stworzona czyli ’for’:

Dim A As Byte

For A = 1 To 256

'tutaj to co się ma wykonać te 255 razy

Next A

Na przyszłość sugeruję zaglądać do helpa, a dla leniwych polskiego helpa napisanego przez Zbigniewa Gibka.

Link do komentarza
Share on other sites

Ja mam takie pytanie:

Jak napisać obsługę przycisku żeby uzyskać taki efekt:

Nie naciskam przycisku - dioda nie świeci

Naciskam przycisk - dioda świeci

Puszczam przycisk - dioda nadal świeci

Naciskam 2 raz - dioda gaśnie

Pytanie może banalne ale uczę się BASCOM'U od 3 godzin 😉

Link do komentarza
Share on other sites

Witam

Wykonałem układ z pierwszego postu ale mam dziwny problem. Diody ładnie sobie świecą i robią co im każę. Problem jest z przyciskiem. Jeśli obsługuje go jako wejście (pin skonfigurowany jako wejście) to zachowuje się tak jakby cały czas był włączony (jak dotykam palcami styków uC to zaczyna działać tak jak trzeba). Gdy przycisk obsługuje jako wyjście to nie ma problemu (chociaż jeśli przycisk jest na tym samym porcie co diody to diody nie dostają wtedy za dużo prądu i słabo świecą ale przycisk działa tak jak powinien). Przycisk jako wejście na innym porcie niż diody zachowuje się tak samo, co ciekawsze bez żadnego przycisku na pinach tak się one zachowują! Nie pomaga włączanie wewnętrznego podciągania (chociaż nie wiem czy to dobry pomysł w tej sytuacji - dopiero się uczę). Układ zasilam zasilaczem AT od PC (oczywiście 5V). Kondensator 100uF dałem przy samym uC, wszystko na płytce uniwersalnej DIP24, musiałem dodać kilka przewodów aby przeciągnąć + i - do uC.

Można to jakoś naprawić żeby działało tak jak powinno ?

Link do komentarza
Share on other sites

napisalem cos takiego:

$regfile = "m16def.dat" 
$crystal = 8000000

Config Portc = Input
Porta = &B00000000

Config Portd = Output
Portd = &B00000000


Do
If Pinc.0 = 1 Then Portd.4 = 1 End If
If Pinc.3 = 1 Then Portd.6 = 1 End If
If Pinc.3 = 1 And Pinc.0 = 1 Then Portd.4 = 1 And Portd.6 = 1 End If
If Pinc.1 = 1 Then Portd.5 = 1 End If
If Pinc.2 = 1 Then Portd.7 = 1 End If
If Pinc.2 = 1 And Pinc.3 = 1 Then Portd.5 = 1 And Portd.7 = 1 End If
If Pinc.0 = 1 And Pinc.3 = 1 Then Portd.4 = 1 And Portd.7 = 1 End If
If Pinc.1 = 1 And Pinc.3 = 1 Then Portd.5 = 1 And Portd.6 = 1 End If
If Pinc.0 = 1 And Pinc.1 = 1 Then Portd.2 = 1 End If
If Pinc.2 = 1 And Pinc.3 = 1 Then Portd.3 = 1 End If
If Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 1 Then Portd.0 = 1 End If
If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 1 Then Portd.1 = 1 End If
Loop

End

i moze mi ktos bardziej rozgarniety niz ja powiedziec co jest zle, ze nawet skompilowac nie moge??

Link do komentarza
Share on other sites

Tak, And jest operatorem logicznym, czy jak to się tam nazywa... może występowac tylko w warunkach, a nie w operacjach które maja zostać wykonane w wypadu spełnienia jakiegoś warunku 😉

   $regfile = "m16def.dat" 
   $crystal = 8000000

   Config Portc = Input
   Porta = &B00000000

   Config Portd = Output
   Portd = &B00000000


   Do
    If Pinc.0 = 1 Then
     Portd.4 = 1
    End If

    If Pinc.3 = 1 Then
     Portd.6 = 1
    End If

    If Pinc.3 = 1 And Pinc.0 = 1 Then
     Portd.4 = 1
     Portd.6 = 1
    End If

    If Pinc.1 = 1 Then
     Portd.5 = 1
    End If

    If Pinc.2 = 1 Then
     Portd.7 = 1
    End If

    If Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.5 = 1
     Portd.7 = 1
    End If

    If Pinc.0 = 1 And Pinc.3 = 1 Then
     Portd.4 = 1
     Portd.7 = 1
    End If

    If Pinc.1 = 1 And Pinc.3 = 1 Then
     Portd.5 = 1
     Portd.6 = 1
    End If

    If Pinc.0 = 1 And Pinc.1 = 1 Then
     Portd.2 = 1
    End If

    If Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.3 = 1
    End If

    If Pinc.1 = 1 And Pinc.2 = 1 And Pinc.3 = 1 Then
     Portd.0 = 1
    End If

    If Pinc.0 = 1 And Pinc.1 = 1 And Pinc.2 = 1 Then
     Portd.1 = 1
    End If
   Loop

   End

To się kompiluje bez najmniejszego problemu;)

Link do komentarza
Share on other sites

dzieki 🙂 teraz bede wiedzial 🙂

i lipa tamto nadal nie chodzi. wkurzylem sie i wpisalem taki kod:

$regfile = "m16def.dat" 
$crystal = 8000000

Config Porta = Input
Porta = &B00000000

Config Portd = Output
Portd = &B00000000



do                                         'pętla nieskończona

  If Pina.0 = 1 Then                                       'jeżeli przycisk 1 wciśnięty
  portd.0=1                                'zapal diode
  Elseif Pina.1 = 1 Then                                   'jeżeli przycisk 2 wciśnięty
  portd.0=0                                'zgaś diodę
  endif                                    'koniec bloku warunkowego

loop                                       'koniec pętli

End

wyglada na to, ze sie dobrze programuje, ale na koncu wyskakuje komunikat difference at 00000 i procek martwy;/ zasilanie sprawdzalem jest rowne 5v. i teraz to ja juz nic nie wiem;/;/;/ prosze o pomoc

[ Dodano: 02 Lut 09 09:44 ]

juz wszystko lata. musialem zastosowac logike odwrotna. czyli tam gdzie jedynki dac zera, a tam gdzie zera jedynki....

a i napisalem kod stosujac takie formulki:

If Porta = &B00001001 Then Portd = &B00000001 end if

to tylko przyklad do pokazania o co chodzi:) i procek smiga, az milo. wiec spokojnie mozna pisac tak program, co w moim przypadku bardzo skraca i upraszcza kod...

Link do komentarza
Share on other sites

Musisz chyba poszukać biblioteki odpowiedniej dla tego mikroprocesora. Spróbuj poszukać coś na stornie producenta. Mam napisany samodzielnie taki kod i proszę o jego poprawę.

$regfile = "attiny2313.dat" 
$crystal = 1000000


config portd=input
     portd=&B11111111
config portb=output
     portb=&B11111111
do
     wait	4	
     sound portb.1, 	6	18
     wait	15	
     sound portb.1, 	7	20
     wait	36	
     sound portb.1, 	3	10
wait	41	
sound portb.1, 	7	16
wait	38	
sound portb.1, 	7	7
wait	2	
sound portb.1, 	1	12
loop

end

Dodam jeszcze, co powinien robić- powinien wywoływać buczenie w niskiej częstotliwości (15-40 kHz) tak, by odstraszał kuny i im podobne kreatury.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.