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
|
|
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. |
|
mesajah Temat założony przez niniejszego użytkownika |
» 2011-04-09 16:29:08 ale to może być napisane w c++ |
|
yoogi |
» 2011-04-09 16:41:39 Tak, może być, zajrzyj tu: http://www.lukaszczerwinski.pl/asm.html |
|
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 |
|
absflg |
» 2011-04-09 18:53:02 Zakładam, że nie umiesz tego wyliczyć, bo asm nie znam:
char bajt;
bajt &= 15; bajt |= xxx;
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) |
|
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 |
|
absflg |
» 2011-04-09 19:25:01 char v1 = xxx; char v2 = xxx; char v3 = xxx; char v4 = xxx;
char * port = xxxx;
int zwloka_czasowa = xx; int zmniejszanie = xx;
for( int i = 0; i > 4; i++ ) { char bajt = * port; bajt &= 15; bajt |= v1; * port = bajt; Sleep( zwloka_czasowa ); bajt &= 15; bajt |= v2; * port = bajt; Sleep( zwloka_czasowa ); bajt &= 15; bajt |= v3; * port = bajt; Sleep( zwloka_czasowa ); bajt &= 15; 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... |
|
« 1 » 2 |