Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak to napisać ? ;p - dziwne pytanie

Ostatnio zmodyfikowano 2011-04-10 12:39
Autor Wiadomość
mesajah
Temat założony przez niniejszego użytkownika
Jak to napisać ? ;p - dziwne pytanie
» 2011-04-09 12:18:30
Uczę się już sporo c++ , niestety ominąłem rozdział o bitach ponieważ nie sądziłem że się przyda. Dlatego zwracam się do was , aby ktoś z was pomógł napisać mi takie coś :

najpierw ustawić pierwsze 4 bity na 1 z portów na 1010
potem na 1001
0101
0110
po kazdej z kombinacji dać zwloke czasową
i potem to powtórzyć 3razy z mniejszą zwloką czasową


Spróbowałem napisać to w asemblerze , lecz wyszło mi takie coś :

ORG 100H
STEP1:
    SETB P3.1
    CLR  P3.2
    SETB P3.3
    CLR  P3.4
TIMES1:
    MOV, R3#10100
    MOV, R2#11001000
    DATA:
        MOV,R1#11111010
        DJNZ, R1 DATA
        DJNZ, R2 DATA
        DJNZ, R3 DATA
STEP2:
    SETB P3.1
    CLR  P3.2
    CLR  P3.3
    SETB P3.4
  LCALL TIMES1
STEP3:
    CLR  P3.1
    SETB P3.2
    CLR  P3.3
    SETB P3.4
  LCALL TIMES1
STEP4:
    CLR  P3.1
    SETB P3.2
    SETB P3.3
    CLR  P3.4
  LCALL TIMES1
       MOV, R4#110
       DJNZ, R4 STEP1
SPEED STEP1:
         SETB P3.1
         CLR  P3.2
         SETB P3.3
         CLR  P3.4
  TIMES2:
        MOV, R3#110
        MOV, R2#11001000
      DATA:
        MOV,R1#11111010
        DJNZ, R1 DATA
        DJNZ, R2 DATA
        DJNZ, R3 DATA
SPEED STEP2:
    SETB P3.1
    CLR  P3.2
    CLR  P3.3
    SETB P3.4
  LCALL TIMES2
SPEED STEP3:
    CLR  P3.1
    SETB P3.2
    CLR  P3.3
    SETB P3.4
  LCALL TIMES2
SPEED STEP4:
    CLR  P3.1
    SETB
P3.2
    SETB P3.3
    CLR  P3.4
  LCALL TIMES2
      MOV, R4#11000
      DJNZ, R4 SPED STEP1
P-30476
yoogi
» 2011-04-09 15:59:10
hmmmm... nie znam się na assemblerze, ale możesz poprostu użyć funkcji asm() ;] może zadziała.
P-30485
mesajah
Temat założony przez niniejszego użytkownika
» 2011-04-09 16:29:08
ale to może być napisane w c++
P-30487
yoogi
» 2011-04-09 16:41:39
Tak, może być, zajrzyj tu:
http://www.lukaszczerwinski.pl/asm.html
P-30488
mesajah
Temat założony przez niniejszego użytkownika
» 2011-04-09 18:22:28
yogi przecież mówię że próbowałem w asemblerze , a nie że chce żeby ktoś mi napisał asemblera w c++ !!!
Przeczytaj 1 post
P-30498
absflg
» 2011-04-09 18:53:02
Zakładam, że nie umiesz tego wyliczyć, bo asm nie znam:
C/C++
char bajt;
//tu pobierasz to co jest obecnie ustawione do zmiennej bajt
bajt &= 15; //00001111 w zapisie dziesiętnym, (& to AND bitowe) wyzeruje ci pierwsze bity
bajt |= xxx; //to co wstawiasz na początek z dopisanym na końcu 0000 w systemie dziesiętnym (| to OR bitowe), np. 1010, więc 10100000 to w dziesiętnym 160.
//wstawiasz na port

Z tego co widziałem zwykle wstawia się to i pobiera zwykle asm.
Spróbuj przypisać ręcznie adres portu do wskaźnika char*, ale nie wiem czy zadziała na systemie NT.

Do opóźnienia i wyliczania opóźnienia użyj zwykłych pętli.
Do przerywania pracy używać możesz funkcji sleep(ms) przyjmującej liczbę milisekund do czekania. (musisz dołączyć nagłówek windows.h)
P-30501
mesajah
Temat założony przez niniejszego użytkownika
» 2011-04-09 19:10:25
prosiłbym o gotowy kod , bo sam pewnie coś zniszcze
P-30502
absflg
» 2011-04-09 19:25:01
C/C++
char v1 = xxx; //10100000 w dziesiętnym, sam sobie policz
char v2 = xxx; //10010000
char v3 = xxx; //01010000
char v4 = xxx; //01100000

char * port = xxxx; //w miejsce xxxx wpisz adres portu

int zwloka_czasowa = xx; //początkowa zwłoka czasowa
int zmniejszanie = xx; //o ile ma się skracać zwloka czasowa co cykl

for( int i = 0; i > 4; i++ ) {
    char bajt = * port;
   
    bajt &= 15; //zerowanie pierwszych
    bajt |= v1;
    * port = bajt;
    Sleep( zwloka_czasowa );
   
    bajt &= 15; //zerowanie pierwszych
    bajt |= v2;
    * port = bajt;
    Sleep( zwloka_czasowa );
   
    bajt &= 15; //zerowanie pierwszych
    bajt |= v3;
    * port = bajt;
    Sleep( zwloka_czasowa );
   
    bajt &= 15; //zerowanie pierwszych
    bajt |= v4;
    * port = bajt;
    Sleep( zwloka_czasowa );
   
    zwloka_czasowa -= zmniejszanie;
    Sleep( zwloka_czasowa );
}

Ale tak jak pisałem, nie wiem czy przypisanie adresu zadziała na systemie NT.

@down niedobry C uwzględnia wielkość liter...
P-30504
« 1 » 2
  Strona 1 z 2 Następna strona