Język C

kocyk89
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 mar 2009, o 18:53
Płeć: Mężczyzna

Język C

Post autor: kocyk89 »

Mam prośbę! Czy mógłby mi ktoś napisać program zliczający liczbę obiektów w języku C? Z góry dziekuję!
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Język C

Post autor: matshadow »

jakich objektów?
kocyk89
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 mar 2009, o 18:53
Płeć: Mężczyzna

Język C

Post autor: kocyk89 »

Chodzi o obiekty poruszające się w pewnym obszarze rejestrowane podczerwienią.
Mam ten program podany w asemblerz do programowania w DSM- 51, a potrzebuje przerobić go na język C wygląda to tak:

ORG 13H
;obsługa przerwania z wejścia INT1
PUSH ACC ;przechowanie akumulatora
PUSH PSW ;i rejestru stanu na stosie

MOV R1,#CSIC ;odczyt ze sterownika przerwań
MOVX A,@R1 ;numeru przerwania
ANL A,#03H
MOVX @R1,A ;skasowanie przerwania

CJNE A,#3,INT_NO3 ;inne przerwanie

;przerwanie IPB - TOR 1
INC R7 ;licznik kolejnych faz ruchu obiektu
MOV A,R7
JB ACC.0,T1_KIER_OK
INC R5 ;przy kierunku nieprawidłowym przerwanie
;IPB dla 2 i 4 fazy ruchu
SJMP OBIEKT
T1_KIER_OK: ;przy kierunku prawidłowym przerwanie
INC R6 ;IPB dla 1 i 3 fazy ruchu
SJMP OBIEKT

INT_NO3:
CJNE A,#2,INT_END ;inne przerwanie-nie wystąpi

;przerwanie IPA - TOR 2
INC R7 ;licznik kolejnych faz ruchu obiektu
MOV A,R7
JNB ACC.0,T2_KIER_OK
INC R5 ;przy kierunku nieprawidłowym przerwanie
;IPA dla 1 i 3 fazy ruchu
SJMP OBIEKT
T2_KIER_OK: ;przy kierunku prawidłowym przerwanie
INC R6 ;IPB dla 1 i 3 fazy ruchu

OBIEKT:
MOV R1,#CS55C ;odczyt stanu na porcie C 8255
MOVX A,@R1
ANL A,#0FH ;tylko młodsza część jest wejściem

CJNE A,#6,INT_END ;czy obiekt w którymś torze podczerwieni

;obiekt już poza licznikiem - analiza kierunku ruchu i prawidłowości przesuwu
CJNE R7,#4,INT_ERROR ;nie było czterech faz ruchu
CJNE R6,#4,OK_NO ;ruch nie był 4 razy sklasyfikowany
;jako w prawidłowym kierunku
INC R2 ;ruch prawidłowy - zwiększam licznik
OK_NO:
CJNE R5,#4,INT_ERROR ;ruch nie był 4 razy sklasyfikowany
;jako w kierunku przeciwnym
DEC R2 ;ruch w kierunku przeciwnym

INT_ERROR:
MOV R7,#0 ;zerownie liczników jednego obiektu
MOV R6,#0
MOV R5,#0

INT_END:
POP PSW ;odtworzenie rejestrów na koniec przerwania
POP ACC
RETI

;**************************************
ORG 0100H
START:
MOV R1,#CS55D ;ustawienie układu 8255
MOV A,#SET_8255
MOVX @R1,A

DEC R1
MOV A,#11101111B ;włączenie nadajnika IR
MOVX @R1,A

LCALL LCD_CLR ;wypisanie napisu na wyświetlaczu LCD
MOV DPTR,#TEXT
LCALL WRITE_TEXT

;zerowanie sterownika przerwań
MOV R1,#CSAD ;skasowanie ewentualnego przerwania
MOVX A,@R1 ;wystawianego przez przetwornik A/C

MOV R1,#CSIC ;skasowanie przerwań 0..3
CLR A ;w sterowniku przerwań
MOVX @R1,A
INC A
MOVX @R1,A
INC A
MOVX @R1,A
INC A
MOVX @R1,A

CLR A
MOV R7,A ;wyzerowanie liczników pojedyńczego obiektu
MOV R6,A
MOV R5,A

MOV R2,A ;wyzerowanie liczników obiektów
MOV R3,A

SETB EA ;włączenie przerwań z wejścia INT1
SETB EX1 ;- tj. sterownika przerwań
CLR INT55 ;uaktywnienie sterownika na przerwania
;z układu 8255

LOOP:
MOV A,R2
CJNE A,B0R3,WRITE ;zapis na LCD dla nowej wartości licznika
SJMP LOOP

WRITE:
MOV R3,A ;zapamiętanie nowej wartości licznika
ACALL KURSOR_2L ;przesunięcie kursora o 2 pozycje w lewo
MOV A,R3
LCALL WRITE_HEX ;wyświetlenie nowej wartości licznika
SJMP LOOP

;**************************************
TEXT:
DB 'Liczba obiektow GORA -> DOL 00',0

;**************************************
;podprogram przesuwający kursor o 2 pozycje w lewo
KURSOR_2L:
MOV A,#10H ;kod rozkazu dla wyświetlacza LCD
LCALL WRITE_INSTR ;przesunięcia kursora w lewo
MOV A,#10H
LCALL WRITE_INSTR
RET
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Język C

Post autor: spajder »

a tak w 5-6 zdaniach co ten program ma robić? Bo kodu asemblera analizować nie zamierzam a to co napisałeś to za mało
kocyk89
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 mar 2009, o 18:53
Płeć: Mężczyzna

Język C

Post autor: kocyk89 »

Ten program ma zliczać ilość obiektów przesuwających sie w takiej rynience podłączanej do DSM- 51 dzięki dwóm układom podczerwieni.
ODPOWIEDZ