logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Programowanie w Bascom. Czy jest jakiś mniejszy stop? Jak zrobić 0.1ms?

webserver 03 Paź 2006 18:31 1832 7
REKLAMA
  • #1 3081747
    webserver
    Poziom 12  
    Posty: 90
    Ocena: 1
    Witam mam problem w Bascom czy jest jakis mniejszy stop nic waitms 1 ? jak zrobic np. 0.1 milisekuny ?
  • REKLAMA
  • #2 3081760
    ja_dzik
    Poziom 18  
    Posty: 256
    Pomógł: 28
    Ocena: 17
    Jest jeszcze Waitus które daje opóźnienie w mikrosekundach.
    Czyli zeby uzyskać 0.1ms stosujesz Waitus 100 (100us = 0.1ms )
    Pozdrawiam
  • REKLAMA
  • #3 3081847
    Press
    Poziom 24  
    Posty: 566
    Pomógł: 69
    Ocena: 40
    ja_dzik napisał:
    Jest jeszcze Waitus które daje opóźnienie w mikrosekundach.
    Czyli zeby uzyskać 0.1ms stosujesz Waitus 100 (100us = 0.1ms )
    Pozdrawiam


    Wszystko pieknie, ale kolega zapomnial dodac, ze waitus dziala tylko w Bascom dal AVR. w wersji dla '51 to olecenie nie jest dostepne.
  • #4 3081948
    ja_dzik
    Poziom 18  
    Posty: 256
    Pomógł: 28
    Ocena: 17
    Zapomniałem poniewasz Bascom'em 51 wogule sie nie zajmuje i po przeczytaniu postu od razy przyszedł mi na myśl Bascom AVR wiec napisałem co wiedziałem o nim.
  • REKLAMA
  • #5 3082223
    webserver
    Poziom 12  
    Posty: 90
    Ocena: 1
    no i wlansie tu jest problem bo ja uzywam 8051
    z tego co wiem to z avr nie mozna programowac 98s8253
  • REKLAMA
  • #6 3082712
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    Siemka!

    To może spróbuj odmierzyć czas przy pomocy dostępnych w mikrokontrolerze timerów. W Bascomie robi się to stosunkowo prosto. Poszukaj w helpie komend obsługujących timery i w paru linijkach kodu na pewno rozwiążesz ten problem.

    Pozdrawiam! :)
  • Pomocny post
    #7 3082884
    Bęben
    Poziom 16  
    Posty: 180
    Pomógł: 12
    Ocena: 13
    Const odlicz=65436
    rem dla zegara 12MHz odliczy tylko 100 impulsow (100us)

    dim licznik as word
    dim koniec as bit

    Config Timer1 = Timer , Mode = 1 , Gate = Internal
    On Timer1 etykieta
    Counter1 = odlicz

    do
    start timer1
    bitwait koniec,set
    reset koniec

    rem petla powtarza sie co 100 us

    loop

    etykieta:
    licznik = counter1 rem To ma eliminowac czas od momentu
    licznik= licznik+odlicz rem zgloszenia przerwania, do jego obslugi
    counter=licznik
    set koniec
    Return

    Dodano po 7 [minuty]:

    Ewentualnie, cos duzo prostszego!!!

    dim licz as byte

    do
    for licz= 0 to 100
    next licz

    loop

    Ten przyklad pewnie nie odliczy czasu zbyt dokladnie ale jest prosty
    Zalezy jeki masz zegar, jesli 12 MHz to cykl trwa 1MHz czyli 1us
    wiec trzeba tą 1us wykonac 100 razy.
    Problem w tym ze niekture instrukcje są wykonywane w czasie dluzszym niz
    jeden cykl maszynowy
  • #8 3083653
    webserver
    Poziom 12  
    Posty: 90
    Ocena: 1
    dzieki :)

Podsumowanie tematu

✨ W Bascom dla AVR dostępna jest funkcja Waitus umożliwiająca opóźnienia w mikrosekundach, np. Waitus 100 daje 0,1 ms. Jednak w Bascom dla mikrokontrolerów 8051 (np. 98s8253) ta funkcja nie jest dostępna. W przypadku 8051 zaleca się wykorzystanie wbudowanych timerów do precyzyjnego odmierzania krótkich czasów opóźnień. Przykładowy kod pokazuje konfigurację Timer1 do generowania przerwań co 100 µs przy zegarze 12 MHz. Alternatywnie można stosować pętle opóźniające, choć ich dokładność zależy od częstotliwości zegara i czasu wykonywania instrukcji maszynowych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA