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
