Program na DSM

Tutaj będą przenoszone tematy, którymi dalej nie warto się zajmować, co jakiś czas zawartość tego forum jest kasowana.
Zablokowany
DSM
-
Posty: 1
Rejestracja: 17 sty 2008, 22:01
Lokalizacja: Warszawa

Program na DSM

Post autor: DSM » 17 sty 2008, 22:09

Prosze o sprwdzenie i poprawienie programu.Program symyluje gre NIM1 na DSM-51.Na końcu jest intrukcja tej gry :

Kod: Zaznacz cały

 R6 ILOSC KAMIENI
 LJMP START
 ORG 100H
START:

 MOV R7,#00000001B	; CZYSZCZENIE
 LCALL LCD_INSTRUKCJA

 MOV R7,#00001100B	; WYSWIETL WLACZ
 LCALL LCD_INSTRUKCJA


 MOV R7,#01000000B	; SET CG_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#KRESKI
 LCALL LCD_DANE


 MOV R7,#10000000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA



; wyswietlanie instrukcji
 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST1
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST2
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST3
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST4
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST5
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST6
 LCALL LCD_DANE
 MOV A,#10
 LCALL DELAY_100MS

 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#INST7
 LCALL LCD_DANE


 MOV R6,#16 ; LOSOWANIE

LOSOWANIE:
 MOV A,R6
 DEC A
 JNZ L_02
 MOV A,#16

L_02:
 MOV R6,A

 MOV R0,#21H
 MOVX A,@R0
 CPL A

 JB ACC.1,L_03
 JB ACC.2,L_04

 LJMP LOSOWANIE

L_03:
 LCALL OBLICZ
 LCALL WYS_KAM
 MOV A,#5
 LCALL DELAY_100MS
 LCALL RUCH_OSOBY

 LJMP DALEJ


L_04:
 LCALL OBLICZ
 LCALL WYS_KAM

L_05:
 MOV A,R6
 MOV B,#4
 DIV AB

 MOV A,B
 DEC A
 JNZ L_06
 DEC R6
 LCALL WYS_KAM
 LCALL RUCH_OSOBY
 LJMP L_05

L_06:
 MOV A,B
 SUBB A,#1
 MOV R5,A

 MOV A,R6
 SUBB A,R5
 MOV R6,A

 LCALL WYS_KAM




DALEJ:

 

 LJMP $






INST1:
 DB 'Zabierz         ',0
INST2:
 DB '1,2,3 kreski.   ',0
INST3:
 DB 'Pamietaj ze     ',0
INST4:
 DB 'OSTATNIA kreska ',0
INST5:
 DB 'przegrywa...    ',0
INST6:
 DB 'Kto zaczyna?    ',0
INST7:
 DB '1-TY       2-DSM',0

TRUCH_OSOBY:
 DB 'Nacisnij 1-3    ',0


CZYSC:
 DB '                ',0


JEDEN:
 DB 1,0


DWA:
 DB 2,0

KRESKI:
  DB 10000000B
  DB 10000000B
  DB 10000000B
  DB 10000000B
  DB 10000000B
  DB 10000000B
  DB 10000000B
  DB 10000000B

  DB 10000000B
  DB 10001000B
  DB 10001000B
  DB 10001000B
  DB 10001000B
  DB 10001000B
  DB 10000000B
  DB 10000000B

  DB 10000000B
  DB 10001010B
  DB 10001010B
  DB 10001010B
  DB 10001010B
  DB 10001010B
  DB 10000000B
  DB 10000000B

  DB 0

; PODPROGRAMY

LCD_DANE:
 MOV R0,#81H       ; ZAPIS DANYCH
 MOV R1,#82H       ; ODCZYT STANU

 MOV R2,#0

BUSSY1:
 MOVX A,@R1
 JB ACC.7,BUSSY1

 MOV A,R2

 MOVC A,@A+DPTR
 MOVX @R0,A
 MOV A,R2
 INC A

 MOV R2,A
 MOVC A,@A+DPTR
 JNZ BUSSY1

 RET


LCD_INSTRUKCJA:
 MOV R0,#80H       ; ZAPIS INSTRUKCJI
 MOV R1,#82H       ; ODCZYT STANU

BUSSY4:
 MOVX A,@R1
 JB ACC.7,BUSSY4

 MOV A,R7
 MOVX @R0,A
 RET


WYS_KAM:
 MOV R7,#10000000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA


 MOV DPTR,#CZYSC
 LCALL LCD_DANE

 MOV A,R6
 MOV B,#2
 DIV AB

 MOV R5,A
 MOV R7,#10000000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

L_01:
 MOV DPTR,#DWA
 LCALL LCD_DANE
 DJNZ R5,L_01

 MOV A,B
 JZ WYS_KAM_RET
 MOV DPTR,#JEDEN
 LCALL LCD_DANE
WYS_KAM_RET:
 RET


OBLICZ:
 MOV A,R6
 ADD A,#14
 MOV R6,A

 MOV R7,#10000000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA
 RET


RUCH_OSOBY:
 MOV R7,#10101000B	; SET DD_RAM
 LCALL LCD_INSTRUKCJA

 MOV DPTR,#TRUCH_OSOBY
 LCALL LCD_DANE

OBLICZ_01:
 MOV R0,#21H
 MOVX A,@R0
 CPL A

 JB ACC.1,OBLICZ_02
 JB ACC.2,OBLICZ_03
 JB ACC.3,OBLICZ_04
 LJMP OBLICZ_01


OBLICZ_02:
 MOV A,R6
 SUBB A,#1
 LJMP OBLICZ_05
OBLICZ_03:
 MOV A,R6
 SUBB A,#2
 LJMP OBLICZ_05
OBLICZ_04:
 MOV A,R6
 SUBB A,#3

OBLICZ_05:
 MOV R6,A

 LCALL WYS_KAM

 RET
Obrazek
Obrazek

ZbeeGin

Post autor: ZbeeGin » 18 sty 2008, 7:18

Do czasu wyjaśnienia sprawy zdublowanego konta, temat przeniesiono do kosza.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 18 sty 2008, 10:44


Zablokowany