Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

BASCOM - jak wystawiac bity z bajtu z okreslonym opóźnieniem

al555 29 Sep 2004 02:25 1942 7
  • #1
    al555
    Level 20  
    Witam

    Jak transmitowac dane z bajtu - bit po bicie ( na dowolnym porcie ) z okreslonym opóźnieniem ( rzedu 1ms )
    W asemblerze to takie proste - ale jak to zrobić w BASCOMIE ?? szkoda ze nie mam czasu na pisanie w asemblerze !

    Wolałbym o odpowiedź na temat maskowania bit po bicie i uzyciu instrukcji "waitms 1" niz uzywania Timera do generowania opoznien.

    JAK MASKOWAC JEDEN BIT Z BAJTU W BASCOMIE ?

    Pozdrawiam
  • #2
    wmr
    Level 17  
    witam.

    moim skromnym zdaniem bascom sie do tego nie nadaje. takie opoznienia i to jeszcze z przesuwanie bajtu powinno sie napisac w assemblerze tym bardziej, ze dokladnie wyliczysz sobie co i jak. jezeli chodzi o maskowanie bitu to nie za bardzo rozumiem co masz na mysli. bit mozna zamaskowac instrukcja [anl] ale nie wyrzucasz go. mozesz rowniez skasowac [cy] i odpowiednio przesunac/pomnozyc. prawdopodobnie w bascomie tez mozesz tak zrobic. za to znacznie gorzej jest z utrzymaniem stalych czasowych. - pzdr. wmr
  • #3
    Dexter77
    Level 28  
    W Bascomie masz gotowa procedure SHIFTOUT. Spojrzyj do helpa zeby zobaczyc jak dziala i jakie parametry trzeba jej podac.
    Blizniacza procedura SHIFTIN sluzy do odbierania bajtu.
    Pozdro
    Dexter
  • #4
    wmr
    Level 17  
    Witam.

    Jezeli np. chodzi o mnie to programuje TYLKO i WYLACZNIE w assemblerze. Ci, ktorzy tak programuja wiedza, ze da sie zrobic na prawde cuda. Pytanie do kol.Dexter77 czym bascom zdobyl tak popularnosc. Czy tylko latwoscia programowania ? Czy w Bascomie da sie wyliczyc ile bedzie trwala dana petla i np. jaki czas maxymalnie moze zabrac jej wywolane np. !INT0? pzdr. wmr
  • #5
    przemo.t
    Level 27  
    Dopiero zaczynam programowac ale wydaje mi sie ze mozna zrobic cos takeigo w Bascomie:
    Code:

    Dim Bajt As Byte
    Dim i As Byte
    Dim Opuznienie As Byte
    Port Alias P3.0
    Opuznienie=1

    For i=0 to 7 Step 1
     if Bajt.i=1 Then
     Set Port
     end if
     if Bajt.i=0 Then
     Reset Port
     end if
     Waitms Opuznienie
    Next i


    Ale zupelnie nie wiem o co chodzi z tym maskowaniem bitow :?
  • #6
    ucy74
    Level 20  
    Dobrym rozwiązaniem opóźnienia jest assemblerowa instrukcja NOP. Znając prędkość zegara można ustalić ile trwa jeden cykl uC, a wykonanie NOP'a zajmuje właśnie jeden cykl. A potem Portx.y = Byte.z, ale to tylko wtedy gdy nie wysyłamy całego bajtu, albo jego bity w zmienionej kolejności. W komendzie Shiftout też można ustawić opóźnienie. Waitms podobno nie jest zbyt precyzyjny.

    BTW wystawienie stanu na port zajmuje dwa cykle zegara.
  • #7
    zumek
    Level 39  
    przemo.t wrote:
    Dopiero zaczynam programowac ale wydaje mi się ze mozna zrobic cos takeigo w Bascomie:
    ...
    Ale zupelnie nie wiem o co chodzi z tym maskowaniem bitow :?


    Maska jak nazwa wskazuje służy do zasłaniania np.twarzy :wink:
    Do tego wykorzystuje się logiczne "AND" i "OR".
    Przykład:
    Do x chcemy skopiować najstarszy i najmłodszy bit z y.
    x=y AND 129 (129 to właśnie maska czyli binarnie 10000001)
    w wyniku tego stan bitów 7 i 1 z y zostanie skopiowany do x,a reszta bitów w x zostanie wyzerowana.
    A teraz chcemy ustawić 8 i 7 bit w x nie zmieniając stanu pozostałych czyli:
    x=x OR 192 (czyli binarnie 11000000)
    Teraz wyzerujmy dwa najmłodsze bity w x pozostałe bez zmian:
    x=x AND 252 ( binarnie 11111100)

    Czy to Ci wystarczy :?:

    Pzdr.
    Piotrek Sz.
    PS
    Jest jeszcze XOR ale to inna bajka.
  • #8
    Robot_
    Level 18  
    Witam,
    Włóż to w procedure obsługi przerwania od licznika, w srodku moze byc jeszcze jakas dodatkowa zmienna aby zwiekszyc zakres opóźnienia. W tym przypadku opóżnienie bedzie wynosiło czas pomiędzy przerwaniami razy dodatkowa zmienna. BASCOM to nie mój język, ale jak będzie CI bardzo zależało to postaram się napisać procedurke.
    Pozdrawiam.
    PS funkcja Waitms nie jest zbyt dokładna. napisz jaka procedurke mam napisać.