;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< PK CODE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-------------------- Project máy tính Bỏ Túi dùng 89S52 và LCD ----------------------
;PROJECT ĐÃ DC (TEST)
;CODE DC CHIA LÀM 24 PHẦN TÔI RÁP VÀO RỒI CHỈ CẦN DỊCH LÀ CHẠY DC
;----------------------------------------------------------------- lien quan ban phim
maQuet equ 11111110b ;xuat ra cot
cotPhim equ p2 ;tu p2.0 den p2.4
hangPhim equ p3 ;tu p0.0 den p0.4
;----------------------------------------------------------------- lien quan Lcd
mode4bit equ 28h
curBat equ 0eh
curNhapNhay equ 0fh
curKoNhapNhay equ 0eh
khoangTrang equ 20h
xoaLcd equ 01h
lcdPort equ p1 ;4 duong du lieu ra lcd
lcdMask equ 0f0h
dataMask equ 0fh
dauDong1 equ 80h
cuoiDong1 equ 8fh
apCuoiDong1 equ 8eh
dauDong2 equ 0c0h
cuoiDong2 equ 0cfh
kyTuChia equ 0fdh ;ma ASCII cua ky tu chia
kyTuSangTrai equ 0 ;ghi trong CGRAM
kyTuSangTraiHetRam equ 7fh
kyTuSangPhai equ 1
kyTuSangPhaiHetRam equ 7eh
kyTuDau equ 2
kyTu2nho equ 3
kyTu3nho equ 4
kyTuCan equ 5
kyTu10nho equ 6
kyTu10nhoAm equ 7
byte0cgram equ 1000000b
byte1cgram equ 1001000b
byte2cgram equ 1010000b
byte3cgram equ 1011000b
byte4cgram equ 1100000b
byte5cgram equ 1101000b
byte6cgram equ 1110000b
byte7cgram equ 1111000b
rs bit p1.1
rw bit p1.2
e bit p1.3
;----------------------------------------------------------------- lien quan vung nho bit
ctrl bit 20h.0
hetRam bit 20h.1
nho bit 20h.2
so1am bit 20h.3
so2am bit 20h.4
so3am bit 20h.5
soXam bit 20h.6
soMuAm bit 20h.7
soMu1Am bit 21h.0
soMu2Am bit 21h.1
soMu3Am bit 21h.2
ol bit 21h.3
kqAm bit 21h.4
soMuKqAm bit 21h.5
bool bit 21h.6
chia0 bit 21h.7
can2am bit 22h.0
;----------------------------------------------------------------- lien quan vung nho noi
maxSo equ 10
phimVuaNhan equ 30h
maPhim equ 31h ;ma phim cua phim vua nhan
troLcd equ 32h
soCot equ 33h ;so byte cua lcdx
viTriLoi equ 34h
viTriPhepTinh1 equ 35h
phepTinh1 equ 36h
viTriPhepTinh2 equ 37h
phepTinh2 equ 38h
viTriPhepTinh3 equ 39h
phepTinh3 equ 3ah
viTriA0 equ 3bh
soMu1 equ 3ch
soMu2 equ 3dh
soMu3 equ 3eh
soMuKq equ 2ch
soMu equ 2fh
reset1 equ 2eh
reset2 equ 2dh
bo equ 3fh ;byte bo = rong
lcd equ 40h ;(40h byte: 40h->80h)
lcdTruoc equ 80h ;(40h byte: 80h->0c0h)
maxLcdTruoc equ 40h
lcdSau equ 0c0h ;(40h byte: 0c0h->100h)
maxLcdSau equ 40h
maxLcd equ 40h ;so byte toi da ma vung Lcd chua duoc
maxVungNhoNoi equ 0c0h ;toan vung nho noi (tru cac byte nho rieng)
lcdTam equ 80h ;(40h byte: 80h->0c0h)
lcdNAtruoc equ 80h ;(40h byte: 80h->0c0h)
lcdNAsau equ 0c0h ;(40h byte: 0c0h->100h)
lcdCongTruDau equ 80h ;(40h byte: 80h->0c0h)
lcdRutGon equ 0c0h ;(40h byte: 0c0h->100h)
vungSo equ 80h
maxVungSo equ 80h
so1 equ 84h
so2 equ 90h
so3 equ 9ch
kq equ 0f0h ;10 byte
phu equ 0b4h ;20 byte or 10 byte
tich equ 0cch ;20 byte
thuong equ 0e4h ;10 byte
phuMu2 equ 0e4h ;10 byte
cuoiPhuMu2 equ phuMu2+maxSo-1
can2kq equ 0f0h ;10 byte
cb2 equ 0e4h ;10 byte
can2phu equ 0a8h ;10 byte
cuoiCan2phu equ can2phu+maxSo-1
cbSo1 equ 0d8h ;10 byte
cuoiCbSo1 equ cbSo1+maxSo-1
so2mr equ 0cch ;20 byte
cuoiSo1 equ so1+maxSo-1
cuoiSo2 equ so2+maxSo-1
cuoiSo3 equ so3+maxSo-1
cuoiKq equ kq+maxSo-1
cuoiTich equ tich+2*maxSo-1
cuoiPhu equ phu+2*maxSo-1
cuoiSo2mr equ so2mr+2*maxSo-1
;----------------------------------------------------------------- lien quan vung nho ngoai
dcRamCao equ p2
ram equ 0
maxRam equ 200h
lcdx equ 0 ;(0c0h byte: 0->0c0h)
maxLcdx equ 3*maxLcd
kqx equ 0cch
;----------------------------------------------------------------- tong quat
het equ 0eeh
rong equ 0ffh
x equ 0ddh ;bat chap
y equ 0cch ;ko quan trong
koLoi equ 0ffh
;----------------------------------------------------------------- ma phim cua cac phim
mpCtrl equ 0
mpTrai equ 1
mpPhai equ 2
mpDel equ 3
mpOn equ 4
mp7 equ 5
mp8 equ 6
mp9 equ 7
mpChia equ 8
mpMo equ 9
mp4 equ 0ah
mp5 equ 0bh
mp6 equ 0ch
mpNhan equ 0dh
mpDong equ 0eh
mp1 equ 0fh
mp2 equ 10h
mp3 equ 11h
mpTru equ 12h
mpDau equ 13h
mp0 equ 14h
mpPhay equ 15h
mpBang equ 16h
mpCong equ 17h
mpK equ 18h
mpCan2 equ 19h
mpCan3 equ 1ah
mpMu2 equ 1bh
mpMu3 equ 1ch
mp10mu equ 1dh
mpKtraDongMoXong equ 1eh
mpNhanAnTruoc equ 1fh
mpNhanAnSau equ 20h
mpMoCan equ 26h
mpTruDau equ 27h
pSo equ 0ah
pCongTru equ 9
pNhanChia equ 8
pMo equ 7
pDong equ 6
pPhay equ 5
pDau equ 4
pK equ 3
pCan equ 2
pMu equ 1
p10mu equ 0
so1roi equ 0f1h
so2roi equ 0f2h
;--------------------------------------- PHẦN 2 MÃ SỐ --------------------------------------------
KHOI_TAO: db curBat,xoaLcd,het ;khoi tao lcd
MAPHIM_PHIMVUANHAN: db 'CTPDO','789/(','456x)','123-A','0,=+K','rshbm' ;lay ten phim cua ma phim
MAPHIM_LOAIPHIM: db 3,3,3,2,4, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0 ;lay loai phim tuong ung voi ma phim
MAPHIM_LOAIPHIMHIENTHI:
db x,x,x,x,x, pSo,pSo,pSo,pNhanChia,pMo, pSo,pSo,pSo,pNhanChia,pDong
db pSo,pSo,pSo,pCongTru,pDau, pSo,pPhay,x,pCongTru,pK, pCan,pCan,pMu,pMu,p10mu
MAPHIM_LOAIPHIMMOCAN:
db x,x,x,x,x, y,y,y,y,mpMoCan, y,y,y,y,mpDong, y,y,y,y,y, y,y,x,y,y, mpMoCan,mpMoCan,y,y,y
MAPHIM_TENPHIM: db x,x,x,x,x, '789',kyTuChia,'(456x)123-',kyTuDau,'0,',x,'+K', x,x,kyTu2nho,kyTu3nho,x ;lay ten phim de xuat ra lcd
MAPHIM_DAUCONGTRU: db x,x,x,x,x, y,y,y,y,y, y,y,y,y,y, y,y,y,mpTruDau,mpTruDau, y,y,x,mpCong,y, y,y,y,y,y
MAPHIM_BCD: db x,x,x,x,x, 7,8,9,x,x, 4,5,6,x,x, 1,2,3,x,x, 0,x,x,x,x, x,x,x,x,x
KY_TU_DAC_BIET:
SANG_TRAI: db 2,6,0fh,1fh,0fh,6,2,0 ;0
SANG_PHAI: db 8,0ch,1eh,01fh,1eh,0ch,8,0 ;1
DAU_AM: db 0,0,0,0eh,0,0,0,0 ;2
SO2_NHO: db 0eh,11h,2,4,1fh,0,0,0 ;3
SO3_NHO: db 0eh,11h,6,11h,0eh,0,0,0 ;4
CAN: db 7,4,4,4,14h,0ch,4,0 ;5
SO10_NHO: db 0,0,17h,15h,15h,15h,17h,0 ;6
SO10_NHO_AM: db 0,0fh,0,17h,15h,15h,17h,0,het ;7
CHUOI_CAN2: db kyTuCan,'(',het
CHUOI_CAN3: db kyTu3nho,kyTuCan,'(',het
CHUOI_10MU: db 'x',kyTu10nho,het
CHUOI_10MU_AM: db 'x',kyTu10nhoAm,het
KTRA_DUNG_DAU: db pSo,pMo,pPhay,pDau,pK,pCan,pCongTru,p10mu,het
KTRA_DUNG_TRUOC: db 6,0fah,4,6ah, 7,0feh,7,0feh, 3,95h,7,94h, 4,6ah,7,0feh, 4,6ah,7,0ffh, 7,0b5h
KTRA_DUNG_CUOI: db pSo,pDong,pPhay,pK,pMu,het
MP_SO: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,het
MP_SO_PHAY: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mpPhay,het
MP_SO_PHAY_DAU: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mpPhay,mpDau,het
MP_SO_PHAY_DAU_10MU: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mpPhay,mpDau,mp10mu,het
MP_SO_DAU: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mpDau,het
MP_NHAN_AN_TRUOC: db mp0,mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,mpDong,mpK,het
MP_NHAN_AN_SAU: db mpMo,mpK,mpCan2,mpCan3,het
MP_CONG_DU: db mpMo,mpCan2,mpCan3,mpNhan,mpChia,het
MP_TRUOC_DAU: db mpNhan,mpChia,mpCan2,mpCan3,mpMo,mp10mu,het
MP_RONG_DONG: db rong,mpDong,het
MP_MO_CAN: db mpMo,mpCan2,mpCan3,het
P_MO_CAN: db pMo,pCan,het
MP_TINH: db mpCong,mpTru,mpNhan,mpChia,mpMu2,mpMu3,het
MP_NHAN_CHIA: db mpNhan,mpChia,het
MP_CONG_TRU: db mpCong,mpTru,het
MP_MU: db mpMu2,mpMu3,het
MP_SO_KHAC_0: db mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9,het
MP_0_PHAY_DAU: db mp0,mpPhay,mpDau,het
MP_0_RONG: db 0,rong,het
MP_TRU_DAU: db mpTru,mpDau,het
P_DAU_CONGTRU: db pDau,pCongTru,het
P_SO_DAU_CONGTRU: db pSo,pDau,pCongTru,het
TB_TRAN_SO: db 'Tran so',het
TB_CHIA0: db 'Chia 0',het
TB_CAN2AM: db 'Can bac 2 so am',het
;------------------------------- PHẦN 3 CT CHÍNH --------------------------------------------
org 0
call khoiTao
; mov a,#cuoiDong2
; call lenh
; mov a,#kyTu10nhoAm
; call duLieu
; mov a,#dauDong2
; call lenh
; mov a,#'x'
; call duLieu
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
jmp CHO_NHAN
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mov a,#dauDong1
call xoaVeDauDong
mov a,#dauDong2
call xoaVeDauDong
mov a,#dauDong1
call lenh
mov a,#'a'
call duLieu
mov a,#cuoiDong1
call lenh
mov a,#'c'
call duLieu
mov a,#dauDong2
call lenh
mov a,#'b'
call duLieu
mov a,#cuoiDong2
call lenh
mov a,#'d'
call duLieu
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
jmp $
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CHO_NHAN: call xdPhim
cjne a,#0ffh,CO_PHIM
jmp CHO_NHAN
CO_PHIM: mov maPhim,a
mov dptr,#MAPHIM_PHIMVUANHAN
movc a,@a+dptr
mov phimVuaNhan,a
mov a,maPhim
call xdLoai
mov dptr,#XU_LY_PHIM
jmp @a+dptr
XU_LY_PHIM: acall phimHt
ajmp CHO_NHAN
acall phimBang
ajmp CHO_NHAN
acall phimXoa
ajmp CHO_NHAN
acall phimDich
ajmp CHO_NHAN
acall phimOn
ajmp CHO_NHAN
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ic (datTen.asm)
$ic (maSo.asm)
$ic (xdPhim.asm)
$ic (xdLoai.asm)
$ic (khoiTao.asm)
$ic (phimOn.asm)
$ic (xuLyLcd.asm)
$ic (hamTT.asm)
$ic (hamHT.asm)
$ic (phimXoa.asm)
$ic (phimDich.asm)
$ic (phimHt.asm)
$ic (phimBang.asm)
$ic (xuLyDL.asm)
$ic (kTraLoi.asm)
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;------------------------------------------- PHẦN 4 HÀM HIỂN THỊ --------------------------------
byte2cot: mov dptr,#lcdx
mov r3,#high(maxLcdx)
mov r2,#low(maxLcdx)
mov a,#rong
call setVungNhoNgoai
mov r1,#lcd
mov r0,#lcdx
mov dcRamCao,#0
B2C_BDAU: cjne @r1,#rong,B2C_CHUYEN
mov a,r0
ret
B2C_CHUYEN: cjne @r1,#mpCan2,B2C_KO_PHIM_CAN2
mov dptr,#CHUOI_CAN2
call ghiKyTuDai
jmp B2C_TANG_R1
B2C_KO_PHIM_CAN2: cjne @r1,#mpCan3,B2C_KO_PHIM_CAN3
mov dptr,#CHUOI_CAN3
call ghiKyTuDai
jmp B2C_TANG_R1
B2C_KO_PHIM_CAN3: cjne @r1,#mp10mu,B2C_KO_PHIM_10MU
mov dptr,#CHUOI_10MU
call ghiKyTuDai
jmp B2C_TANG_R1
B2C_KO_PHIM_10MU: mov dptr,#MAPHIM_TENPHIM
mov a,@r1
movc a,@a+dptr
movx @r0,a
inc r0
B2C_TANG_R1: inc r1
jmp B2C_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiKyTuDai: clr a
movc a,@a+dptr
cjne a,#het,GKTD_TIEP
ret
GKTD_TIEP: movx @r0,a
inc r0
inc dptr
jmp ghiKyTuDai
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiToanVungLcdx: mov r0,#lcdx
GTVLX_BDAU: movx a,@r0
cjne a,#rong,GTVLX_XUAT
ret
GTVLX_XUAT: call duLieu
inc r0
jmp GTVLX_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
soCotDenR0: mov r1,#lcd
clr a
SCDR0_BDAU: mov r3,a
mov a,r1
cjne a,0,SCDR0_TIEP
mov a,r3
ret
SCDR0_TIEP: mov a,r3
cjne @r1,#mpCan2,SCDR0_KO_PHIM_CAN2
add a,#2
jmp SCDR0_TANG_R0
SCDR0_KO_PHIM_CAN2: cjne @r1,#mpCan3,SCDR0_KO_PHIM_CAN3
add a,#3
jmp SCDR0_TANG_R0
SCDR0_KO_PHIM_CAN3: cjne @r1,#mp10mu,SCDR0_KO_PHIM_10MU
add a,#2
jmp SCDR0_TANG_R0
SCDR0_KO_PHIM_10MU: inc a
SCDR0_TANG_R0: inc r1
jmp SCDR0_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
muiTenTrai: jb hetRam,MTT_HET_RAM
mov a,#kyTusangTrai
jmp MTT_XUAT
MTT_HET_RAM: mov a,#kyTusangTraiHetRam
MTT_XUAT: call duLieu
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
muiTenPhai: jb hetRam,MTP_HET_RAM
mov a,#kyTusangPhai
jmp MTP_XUAT
MTP_HET_RAM: mov a,#kyTusangPhaiHetRam
MTP_XUAT: call duLieu
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;arg: r2=so byte can ghi ra lcd
; r0->byte dau tien trong vung lcdx can ghi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiTuDau: movx a,@r0
call duLieu
inc r0
djnz r2,ghiTuDau
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;arg: r2=so byte can ghi ra lcd
; r0->byte cuoi cung trong vung lcdx can ghi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiTuCuoi: mov a,r0
clr c
subb a,r2
inc a ;a=r0-r2+1
mov r0,a
call ghiTuDau
ret
;-------------------------------- PHẦN 5 HÀM TT --------------------------------------------------
setVungNhoNoi:
setSo: mov @r0,a
inc r0
djnz r2,setVungNhoNoi
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
clrSo: clr a
call setSo
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;fun: lam rong r3:r2 byte cua vung nho ngoai bat dau tu dptr
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
setVungNhoNgoai: inc r2
inc r3
SVNN_BDAU: djnz r2,SVNN_SET
djnz r3,SVNN_SET
ret
SVNN_SET: movx @dptr,a
movx @dptr,a
inc dptr
jmp SVNN_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dichTrai1buoc: mov 1,r0
inc r1
DT1B_BDAU: cjne @r1,#rong,DT1B_KO_RONG
mov @r0,#rong
ret
DT1B_KO_RONG: call mov10inc
jmp DT1B_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dichPhai1buoc: push 0
call soByte
pop 0
mov r2,a
add a,r0
mov r0,a
mov 1,r0
dec r1
call mov10dec2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mov10inc: mov a,@r1
mov @r0,a
inc r0
inc r1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mov10dec: mov a,@r1
mov @r0,a
dec r0
dec r1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mov10inc2: mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r2,mov10inc2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mov10dec2: mov a,@r1
mov @r0,a
dec r0
dec r1
djnz r2,mov10dec2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;fun: so byte khac rong, tinh tu r0
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
soByte: mov a,r0
SB_BDAU: cjne @r0,#rong,SB_TIEP
xch a,r0
clr c
subb a,r0
ret
SB_TIEP: inc r0
jmp SB_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dichTraiR1R0: cjne @r1,#rong,DTRR_DICH_TIEP
call xoaTuR0denHet
ret
DTRR_DICH_TIEP: call mov10inc
jmp dichTraiR1R0
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xoaTuR0denHet: mov @r0,#rong
inc r0
cjne @r0,#rong,xoaTuR0denHet
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xoaTraiR2byteTuR0: mov @r0,#rong
dec r0
djnz r2,xoaTraiR2byteTuR0
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rongVungNhoTuR0: cjne @r0,#rong,RVNTR0_TIEP
ret
RVNTR0_TIEP: mov @r0,#rong
inc r0
jmp rongVungNhoTuR0
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
n2x: mov a,@r1
cjne a,#rong,N2X_TIEP
ret
N2X_TIEP: movc a,@a+dptr
mov @r0,a
inc r0
inc r1
jmp n2x
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
byte2bit: cjne a,#8,$+3
jc B2B_A_BE
mov r6,#0
add a,#-8
call byte2bit2
mov r5,a
ret
B2B_A_BE: mov r5,#0
call byte2bit2
mov r6,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
byte2bit2: jnz B2B2_KHOI_TAO
inc a
ret
B2B2_KHOI_TAO: mov r2,a
mov a,#1
B2B2_TIEP: rl a
djnz r2,B2B2_TIEP
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
chuyenVungNho:
chuyenVungNhoNoi:
chuyenSo: mov a,@r1
cjne a,#rong,CVN_CHUYEN
ret
CVN_CHUYEN: mov @r0,a
inc r0
inc r1
jmp chuyenVungNho
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
minAr7: cjne a,7,$+3
jc MINAR7_A_BE
ret
MINAR7_A_BE: mov r7,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraLoaiMaPhim: clr a
movc a,@a+dptr
cjne a,#het,KTLMP_KTRA
clr c
ret
KTLMP_KTRA: cjne a,b,KTLMP_TANG_TRO
setb c
ret
KTLMP_TANG_TRO: inc dptr
jmp kTraLoaiMaPhim
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
soSanhDau: anl a,#11b
jz SSD_CUNG_DAU
cjne a,#3,SSD_KHAC_DAU
SSD_CUNG_DAU: setb c
ret
SSD_KHAC_DAU: clr c
ret
;---------------------------------- PHẦN 6 Khởi Tạo -----------------------------------------
khoiTao: mov a,reset1
cjne a,#78h,TEST1
mov a,reset2
cjne a,#34h,TEST1
;jmp TEST2
TEST1: mov reset1,#78h
mov reset2,#34h
;----------------------------------------------------------------- khoi tao Lcd mode 4 bit
mov tmod,#01h ;t0 mode 1 count 16bit
mov th0,#high(-50000) ;50ms>40ms
mov tl0,#low(-50000)
setb tr0 ;bat dau dem
jnb tf0,$ ;cho du 50ms
clr tr0 ;ngung dem
clr rw
clr rs
mov a,#mode4bit ;mode 4 bit
call nibble
mov a,#mode4bit
call lenh
;----------------------------------------------------------------- ghi CGRAM
call ghiKyTuDacBiet
TEST2: mov dptr,#KHOI_TAO
call chuoiLenh
;----------------------------------------------------------------- lam rong vung nho
khoiTaox: mov bo,#rong ;vung nho noi
mov r0,#lcd
mov r2,#maxVungNhoNoi
mov a,#rong
call setVungNhoNoi
mov dptr,#ram
mov r2,#low(maxRam)
mov r3,#high(maxRam)
mov a,#rong
call setVungNhoNgoai
;----------------------------------------------------------------- khoi tao cac thanh phan khac
mov troLcd,#lcd ;troLcd-> lcd
clr ctrl ;vo hieu ctrl
ret
;---------------------------------- PHẦN 7 XD PHÍM -----------------------------------------
xdPhim: mov r2,#10
XDP_KT_NHAN: call quetPhim
cjne a,#0ffh,XDP_CO_NHAN
jmp XDP_TRO_VE
XDP_CO_NHAN: djnz r2,XDP_KT_NHAN
push acc
XDP_CHUA_BUONG: mov r2,#10
XDP_KT_BUONG: call quetPhim
cjne a,#0ffh,XDP_CHUA_BUONG
djnz r2,XDP_KT_BUONG
pop acc
XDP_TRO_VE: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
quetPhim: mov r4,#0 ;r4 la maPhim
mov r3,#maQuet ;maQuet=1111.1110
QP_XUAT_MA_QUET:
mov a,r3
anl a,#00011111b
mov r5,a
mov a,cotPhim
anl a,#11100000b
orl a,r5 ;ko lam thay doi cac chan .5 .6 .7
mov cotPhim,a
mov a,hangPhim
anl a,#00111111b
cjne a,#00111111b,QP_CHUYEN_HANG ;co nhan phim ko?
cjne r3,#011101111b,QP_CHUYEN_COT
mov a,#0ffh
ret
QP_CHUYEN_COT: inc r4
mov a,r3
rl a
mov r3,a
jmp QP_XUAT_MA_QUET
QP_CHUYEN_HANG:
rrc a
jnc QP_XD_PHIM_XONG
push acc
mov a,r4
add a,#5
mov r4,a
pop acc ;maPhim+=5
jmp QP_CHUYEN_HANG
QP_XD_PHIM_XONG:
mov a,r4
ret
;---------------------------------- PHẦN 8 XD LOẠI -----------------------------------------
xdLoai: mov dptr,#MAPHIM_LOAIPHIM
movc a,@a+dptr ;a=(loai phim)
mov b,#4
mul ab ;a=(loai phim) x 4
ret
;---------------------------------- PHẦN 9 PHÍM HIỂN THỊ -----------------------------------------
phimHt: mov r0,#lcd+maxLcd-2
cjne @r0,#rong,PHT_XONG
mov r0,troLcd
cjne @r0,#rong,PHT_DICH_PHAI
PHT_LUU_MA_PHIM: mov r0,troLcd
mov @r0,maPhim
inc troLcd
call htDong1
PHT_XONG: ret
PHT_DICH_PHAI: call dichPhai1buoc
jmp PHT_LUU_MA_PHIM
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ic (htDong1.asm)
;---------------------------------- PHẦN 10 PHÍM DỊCH -----------------------------------------
phimDich: mov a,maPhim
cjne a,#mpCtrl,PD_KO_PHIM_CTRL
cpl ctrl
PD_XONG: call htDong1
ret
PD_KO_PHIM_CTRL: mov r0,troLcd
cjne a,#mpTrai,PD_KO_PHIM_TRAI
cjne r0,#lcd,PD_TRAI_DICH
jmp PD_XONG
PD_TRAI_DICH: jb ctrl,PD_TRAI_DICH_CTRL
dec troLcd
jmp PD_XONG
PD_TRAI_DICH_CTRL: mov a,#lcd
xch a,r0
clr c
subb a,r0
cjne a,#10,$+3
jc PD_TRAI_RESET_TROLCD
mov a,troLcd
clr c
subb a,#10
mov troLcd,a
jmp PD_XONG
PD_TRAI_RESET_TROLCD:
mov troLcd,#lcd
jmp PD_XONG
PD_KO_PHIM_TRAI: cjne @r0,#rong,PD_PHAI_DICH
jmp PD_XONG
PD_PHAI_DICH: jb ctrl,PD_PHAI_DICH_CTRL
inc troLcd
jmp PD_XONG
PD_PHAI_DICH_CTRL: mov r0,troLcd
call soByte
cjne a,#10,$+3
jc PD_PHAI_CUOI_LCD
mov a,troLcd
add a,#10
mov troLcd,a
jmp PD_XONG
PD_PHAI_CUOI_LCD: add a,troLcd
mov troLcd,a
jmp PD_XONG
;---------------------------------- PHẦN 11 PHÍM DEL -----------------------------------------
phimXoa: mov r0,#lcd
cjne @r0,#rong,PX_BDAU
ret
PX_BDAU: mov r0,troLcd
jb ctrl,PX_CTRL
cjne @r0,#rong,PX_DICH_TRAI
dec r0
mov @r0,#rong
dec troLcd
jmp PX_XONG
PX_DICH_TRAI: mov 1,r0
inc r1
call dichTraiR1R0
jmp PX_XONG
PX_CTRL: cjne @r0,#rong,PX_CTRL_XOA_PHAI
mov r0,#lcd
call soByte
cjne a,#11,$+3
jc PX_CTRL_XOA_SACH
mov r0,troLcd
dec r0
mov r2,#10
call xoaTraiR2byteTuR0
mov a,troLcd
clr c
subb a,#10
mov troLcd,a
jmp PX_XONG
PX_CTRL_XOA_SACH: mov r0,#lcd
call rongVungNhoTuR0
mov troLcd,#lcd
jmp PX_XONG
PX_CTRL_XOA_PHAI: call soByte
cjne a,#11,$+3
jc PX_CTRL_XOA_DEN_HET
mov a,troLcd
mov r0,a
add a,#10
mov r1,a
call dichTraiR1R0
jmp PX_XONG
PX_CTRL_XOA_DEN_HET: call xoaTuR0denHet
PX_XONG: call htDong1
ret
;---------------------------------- PHẦN 12 PHÍM ON -----------------------------------------
phimOn: mov bo,#rong ;vung nho noi
mov r0,#lcd
mov r2,#maxVungNhoNoi
mov a,#rong
call setVungNhoNoi
mov dptr,#ram
mov r2,#low(maxRam-135h)
mov r3,#high(maxRam-135h)
mov a,#rong
call setVungNhoNgoai
;----------------------------------------------------------------- khoi tao cac thanh phan khac
mov troLcd,#lcd ;troLcd-> lcd
clr ctrl ;vo hieu ctrl
mov a,#xoaLcd
call lenh
ret
;---------------------------------- PHẦN 13 PHÍM BẰNG -----------------------------------------
phimBang: call kTraLoi
cjne a,#koLoi,PB_HIEN_THI_LOI
call xuLyDL
call tinhToan
ret
PB_HIEN_THI_LOI: call hienThiLoi
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hienThiLoi: add a,#lcd
mov troLcd,a
call htDong1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ic (tinhToan.asm)
$ic (htDong2.asm)
;---------------------------------- PHẦN 14 HT DÒNG 1 -----------------------------------------
htDong1: jb ctrl,HTD1_CURSOR_NHAP_NHAY
mov a,#curKoNhapNhay
jmp HTD1_CHON_TRO
HTD1_CURSOR_NHAP_NHAY:
mov a,#curNhapNhay
HTD1_CHON_TRO: call lenh
mov a,#dauDong1
call xoaVeDauDong
mov r0,#lcd
cjne @r0,#rong,HTD1_BDAU
ret
HTD1_BDAU: mov r0,#lcd+maxLcd-11
cjne @r0,#rong,HTD1_HET_RAM
clr hetRam
jmp HTD1_BDAU1
HTD1_HET_RAM: setb hetRam
HTD1_BDAU1: mov dcRamCao,#0
call byte2cot
mov soCot,a
cjne a,#16,$+3
jc HTD1_KO_DAY_DONG
mov r0,troLcd
cjne @r0,#rong,HTD1_KO_DAY_DONG_TRAI
call muiTenTrai ;day dong trai
mov r2,#14
mov r0,soCot
dec r0
call ghiTuCuoi
ret
HTD1_KO_DAY_DONG: call ghiToanVungLcdx
mov r0,troLcd
call soCotDenR0
add a,#dauDong1
call lenh
ret
HTD1_KO_DAY_DONG_TRAI:
inc r0
cjne @r0,#rong,HTD1_KO_VUA_DAY_DONG_TRAI
call muiTenTrai ;vua day dong trai
mov r2,#15
mov r0,soCot
dec r0
call ghiTuCuoi
mov a,#cuoiDong1
call lenh
ret
HTD1_KO_VUA_DAY_DONG_TRAI:
mov r0,troLcd
call soCotDenR0
cjne a,#15,$+3
jc HTD1_DAY_DONG_PHAI
push acc
call muiTenTrai ;day dong trai phai
pop 0
;dec r0
mov r2,#14
call ghiTuCuoi
call muiTenPhai
mov a,#apCuoiDong1
call lenh
ret
HTD1_DAY_DONG_PHAI: push acc
mov r2,#15
mov r0,#lcdx
call ghiTuDau
call muiTenPhai
pop acc
add a,#dauDong1
call lenh
ret
;---------------------------------- PHẦN 15 XL LCD -----------------------------------------
duLieu: call sanSang
clr rw
setb rs
jmp DL_L
lenh: call sanSang
clr rw
clr rs
DL_L: push acc
call nibble
pop acc
swap a
call nibble
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nibble: orl lcdPort,#lcdMask ;lcdMask=0fh
orl a,#dataMask ;dataMask=0f0h
anl lcdPort,a
setb e
clr e
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
sanSang: clr rs
setb rw
orl lcdPort,#lcdMask
jmp SS_1
SS_0: clr e
setb e
SS_1: clr e
setb e
jb lcdPort.7,SS_0
clr e
setb e
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
chuoiLenh: clr a
movc a,@a+dptr
cjne a,#het,CL_TIEP
ret
CL_TIEP: call lenh
inc dptr
jmp chuoiLenh
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiCgram: mov a,r0
call lenh ;thiet dat dia chi CGRAM
clr a
movc a,@a+dptr
cjne a,#het,GCG_GHI_DAU_AM
ret
GCG_GHI_DAU_AM: call duLieu
inc r0
inc dptr
jmp ghiCgram
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiKyTuDacBiet: mov r0,#byte0cgram
mov dptr,#KY_TU_DAC_BIET
call ghiCgram
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xoaVeDauDong: push acc
call lenh ;dua con tro ve dau dong 1 hoac 2
mov r2,#16
XVDD_TIEP: mov a,#khoangTrang
call duLieu
djnz r2,XVDD_TIEP
pop acc
call lenh
ret
;---------------------------------- PHẦN 16 XỪ LÝ DL -----------------------------------------
xuLyDL: call xuLyDau
call rutGonDau
call rutGonCongDu
call phanBietTruAm
call lcd2nhanAn
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
danhDauNhanAn: inc r0
mov 4,@r0
mov r3,#0
cjne @r0,#rong,DDNA_KTRA
ret
DDNA_KTRA: mov a,r3
movc a,@a+dptr
cjne a,#het,DDNA_KTRA_TIEP
jmp danhDauNhanAn
DDNA_KTRA_TIEP: cjne a,4,DDNA_TIM_TIEP
mov @r0,b
jmp danhDauNhanAn
DDNA_TIM_TIEP: inc r3
jmp DDNA_KTRA
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuLyDau: mov dptr,#MAPHIM_DAUCONGTRU
mov r0,#lcdCongTruDau
mov r1,#lcd
call n2x
mov r0,#lcdCongTruDau-1
XLD_BDAU: inc r0
clr nho
cjne @r0,#rong,XLD_KTRA
ret
XLD_KTRA: cjne @r0,#mpTruDau,XLD_KTRA_TIEP
cpl nho
mov @r0,#mpCong
XLD_TANG_R0: inc r0
jmp XLD_KTRA
XLD_KTRA_TIEP: cjne @r0,#mpCong,XLD_KTRA_NHO
jmp XLD_TANG_R0
XLD_KTRA_NHO: jnb nho,XLD_BDAU
dec r0
mov @r0,#mpTru
inc r0
jmp XLD_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rutGonDau: mov r0,#lcdRutGon
call rongVungNhoTuR0
mov r0,#lcdRutGon
mov r1,#lcdCongTruDau
RGD_BDAU: cjne @r1,#rong,RGD_KO_RONG
ret
RGD_KO_RONG: cjne @r1,#mpCong,RGD_KO_CONG
inc r1
cjne @r1,#mpCong,RGD_KO_CONG_2
jmp RGD_BDAU
RGD_KO_CONG_2: cjne @r1,#mpTru,RGD_KO_TRU_2
jmp RGD_GHI_TRU
RGD_KO_CONG: cjne @r1,#mpTru,RGD_KO_TRU
RGD_GHI_TRU: mov @r0,#mpTru
RGD_TANG_TRO: inc r0
inc r1
jmp RGD_BDAU
RGD_KO_TRU: mov a,r1
add a,#lcd-lcdCongTruDau
push 0
mov r0,a
mov a,@r0
pop 0
mov @r0,a
jmp RGD_TANG_TRO
RGD_KO_TRU_2: mov @r0,#mpCong
inc r0
jmp RGD_KO_TRU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rutGonCongDu: mov r0,#lcdTam
call rongVungNhoTuR0
mov r0,#lcdTam
mov r1,#lcdRutGon
RGCD_BDAU: cjne @r1,#rong,RGCD_KO_RONG
mov r0,#lcdTam
cjne @r0,#mpCong,RGCD_XONG
call dichTrai1buoc
RGCD_XONG: ret
RGCD_KO_RONG: mov dptr,#MP_CONG_DU
mov b,@r1
call kTraLoaiMaPhim
jc RGCD_CONG_DU
RGCD_KO_CONG_DU: mov a,@r1
mov @r0,a
RGCD_TANG_TRO: inc r0
inc r1
jmp RGCD_BDAU
RGCD_CONG_DU: inc r1
cjne @r1,#mpCong,RGCD_KO_CONG
dec r1
mov a,@r1
mov @r0,a
inc r1
jmp RGCD_TANG_TRO
RGCD_KO_CONG: dec r1
jmp RGCD_KO_CONG_DU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
phanBietTruAm: mov r0,#lcdTam-1
PBTA_BDAU: inc r0
PBTA_KTRA: cjne @r0,#rong,PBTA_KO_RONG
mov r0,#lcdTam
cjne @r0,#mpTru,PBTA_XONG
mov @r0,#mpDau
PBTA_XONG: ret
PBTA_KO_RONG: mov dptr,#MP_TRUOC_DAU
mov b,@r0
call kTraLoaiMaPhim
jnc PBTA_BDAU
PBTA_MP_TRUOC_DAU: inc r0
cjne @r0,#mpTru,PBTA_KTRA
mov @r0,#mpDau
jmp PBTA_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd2nhanAn: mov dptr,#lcdx
mov r3,#high(maxLcdx)
mov r2,#low(maxLcdx)
mov a,#rong
call setVungNhoNgoai
mov dcRamCao,#high(lcdx)
mov r0,#low(lcdx)-1
mov r1,#lcdTam-1
L2NA_BDAU: inc r1
L2NA_TANG_R0: inc r0
L2NA_KTRA_RONG: cjne @r1,#rong,L2NA_KO_RONG
ret
L2NA_KO_RONG: mov a,@r1
movx @r0,a
mov dptr,#MP_NHAN_AN_TRUOC
mov b,@r1
call kTraLoaiMaPhim
jnc L2NA_BDAU
inc r0
inc r1
mov dptr,#MP_NHAN_AN_SAU
mov b,@r1
call kTraLoaiMaPhim
jnc L2NA_KTRA_RONG
mov a,#mpNhan
movx @r0,a
jmp L2NA_TANG_R0
;---------------------------------- PHẦN 17 KT LỖI -----------------------------------------
kTraLoi: mov r0,#lcdTruoc
mov r2,#maxLcdTruoc+maxLcdSau
mov a,#rong
call setVungNhoNoi
mov dptr,#MAPHIM_LOAIPHIMHIENTHI
mov r1,#lcd
mov r0,#lcdTam
call n2x
call kTraDungTruoc
mov r7,a
call kTraDungDau
call minAr7
call kTraDungCuoi
call minAr7
call kTraDauPhay
call minAr7
call kTra10Mu
call minAr7
;call kTra10MuPhay
;call minAr7
call kTraDongMo
call minAr7
mov a,r7
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDungTruoc: mov r1,#lcdTruoc
mov r0,#lcdSau
call chuyenVungNho
mov dptr,#KTRA_DUNG_TRUOC
mov r0,#lcdTruoc
mov r1,#lcdSau+1
KTDT_BDAU: cjne @r1,#rong,KTDT_KTRA
mov a,#koLoi
ret
KTDT_KTRA: mov a,@r1
mov b,#2
mul ab ;a=2*@r1
push acc
movc a,@a+dptr
mov r3,a
pop acc
inc a ;a=2*@r1+1
movc a,@a+dptr
mov r4,a
mov a,@r0
call byte2bit
mov a,r3
orl a,r5
cjne a,3,KTDT_LOI
mov a,r4
orl a,r6
cjne a,4,KTDT_LOI
inc r0
inc r1
jmp KTDT_BDAU
KTDT_LOI: mov a,r1
add a,#-lcdSau
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDungDau: mov dptr,#KTRA_DUNG_DAU
mov r0,#lcdTam
mov 3,@r0
call kTraDungDauCuoi
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDungCuoi: mov dptr,#KTRA_DUNG_CUOI
mov r0,#lcdTam
call soByte
dec a
mov r4,a
add a,#lcdTam
mov r0,a
mov 3,@r0
call kTraDungDauCuoi
jz KTDC_VI_TRI_LOI
ret
KTDC_VI_TRI_LOI: mov a,r4
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDungDauCuoi: clr a
movc a,@a+dptr
cjne a,#het,KTDDC_TIEP
clr a
ret
KTDDC_TIEP: cjne a,3,KTDDC_TANG_TRO
mov a,#koLoi
ret
KTDDC_TANG_TRO: inc dptr
jmp kTraDungDauCuoi
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDauPhay: mov r0,#lcdTam-1
clr nho
KTDP_BDAU: inc r0
cjne @r0,#rong,KTDP_KTRA_PHAY
mov a,#koLoi
ret
KTDP_KTRA_PHAY: cjne @r0,#pPhay,KTDP_KTRA_SO
jb nho,KTDP_LOI
setb nho
jmp KTDP_BDAU
KTDP_LOI: mov a,r0
clr c
subb a,#lcdTam
ret
KTDP_KTRA_SO: cjne @r0,#pSo,KTDP_XONG_CHUOI
jmp KTDP_BDAU
KTDP_XONG_CHUOI: clr nho
jmp KTDP_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTra10mu: mov r0,#lcdTam-1
KT10M_BDAU: inc r0
cjne @r0,#rong,KT10M_KO_RONG
mov a,#koLoi
ret
KT10M_KO_RONG: cjne @r0,#p10mu,KT10M_BDAU
inc r0
mov dptr,#P_DAU_CONGTRU
mov b,@r0
call kTraLoaiMaPhim
jnc KT10M_KO_DAU
inc r0
KT10M_KO_DAU: inc r0
cjne @r0,#pSo,KT10M_BDAU
inc r0
cjne @r0,#pSo,KT10M_BDAU
mov a,r0
add a,#-lcdTam
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTra10muPhay: mov r0,#lcdTam-1
KT10MP_BDAU: inc r0
cjne @r0,#rong,KT10MP_KO_RONG
mov a,#koLoi
ret
KT10MP_KO_RONG: cjne @r0,#p10mu,KT10MP_BDAU
KT10MP_TIEP: inc r0
cjne @r0,#pPhay,KT10MP_KO_PHAY
mov a,r0
add a,#-lcdTam
ret
KT10MP_KO_PHAY: mov dptr,#P_SO_DAU_CONGTRU
mov b,@r0
call kTraLoaiMaPhim
jnc KT10MP_BDAU
jmp KT10MP_TIEP
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
kTraDongMo: mov r0,#lcdTam-1
KTDM_BDAU: inc r0
cjne @r0,#rong,KTDM_KTRA_DONG
mov a,#koLoi
ret
KTDM_KTRA_DONG: cjne @r0,#pDong,KTDM_BDAU
mov 1,r0
KTDM_TIM_MO: dec r1
cjne @r1,#rong,KTDM_TIEP
mov a,r0
add a,#-lcdTam
ret
KTDM_TIEP: mov dptr,#P_MO_CAN
mov b,@r1
call kTraLoaiMaPhim
jnc KTDM_TIM_MO
mov @r0,#mpKtraDongMoXong
mov @r1,#mpKtraDongMoXong
jmp KTDM_BDAU
;---------------------------------- PHẦN 18 TÍNH TOÁN -----------------------------------------
tinhToan: mov dcRamCao,#high(lcdx)
clr so1am
clr so2am
clr so3am
clr soXam
clr ol
clr chia0
clr can2am
mov r2,#maxVungSo
mov a,#rong
mov r0,#vungSo
call setVungNhoNoi
call moCanTrongCung
cjne r0,#-1,TT_CO_MO_CAN
TT_BDAU: call phepTinhThu1 ;ko mo can
jc TT_PTT1_CO
;ko co phep tinh
mov r0,#low(lcdx)
movx a,@r0
cjne a,#so1roi,TT_CHUYENLCDX
TT_LUU_KQ: mov r1,#so1
mov r0,#kq
call chuyenSo
mov c,so1am
mov kqAm,c
mov soMuKq,soMu1
mov c,soMu1Am
mov soMuKqAm,c
call htDong2
call luuKqx
ret
TT_CHUYENLCDX: call chuyenLcdx2so1
jmp TT_LUU_KQ
TT_PTT1_CO: mov b,phepTinh1
mov dptr,#MP_MU
call kTraLoaiMaPhim
jnc TT_PTT1_KO_MU
mov a,#1 ;so1=so1^2,3
call xulyMu
jmp TT_BDAU
TT_PTT1_KO_MU: mov dptr,#MP_NHAN_CHIA
call kTraLoaiMaPhim
jnc TT_PTT1_KO_NHAN_CHIA
mov a,#12h ;so1=so1x/so2
call xuLyNhanChia
jmp TT_BDAU
TT_PTT1_KO_NHAN_CHIA:
call phepTinhThu2
jc TT_PTT2_CO
call xuLyCongTru
jmp TT_LUU_KQ
TT_PTT2_CO: mov b,phepTinh2
mov dptr,#MP_MU
call kTraLoaiMaPhim
jnc TT_PTT2_KO_MU
mov a,#2 ;so2=so2^2,3
call xuLyMu
jmp TT_BDAU
TT_PTT2_KO_MU: mov dptr,#MP_NHAN_CHIA
call kTraLoaiMaPhim
jnc TT_PTT2_KO_NHAN_CHIA
mov a,#23h ;so2=so2x/so3
call xuLyNhanChia
jmp TT_BDAU
TT_PTT2_KO_NHAN_CHIA:
call xuLyCongTru
jmp TT_BDAU
TT_CO_MO_CAN: movx a,@r0
cjne a,#mpCan2,TT_CMC_KO_CAN2
call can2
call TT_LUU_KQ
ret
TT_CMC_KO_CAN2: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
moCanTrongCung: mov r0,#-1
mov dcRamCao,#high(lcdx)
mov r1,#low(lcdx)-1
MCTC_BDAU: inc r1
mov dptr,#MP_RONG_DONG
movx a,@r1
mov b,a
call kTraLoaiMaPhim
jnc MCTC_KTRA_MOCAN
ret
MCTC_KTRA_MOCAN: mov dptr,#MP_MO_CAN
call kTraLoaiMaPhim
jnc MCTC_BDAU
mov 0,r1
jmp MCTC_BDAU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
phepTinhThu1: mov dcRamCao,#high(lcdx)
mov r0,#low(lcdx)
call timPhepTinh
jc PTT1_CO
ret
PTT1_CO: mov viTriPhepTinh1,r0
movx a,@r0
mov phepTinh1,a
setb c
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
phepTinhThu2: mov r0,viTriPhepTinh1
call timPhepTinh
jc PTT2_CO
ret
PTT2_CO: mov viTriPhepTinh2,r0
movx a,@r0
mov phepTinh2,a
setb c
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
timPhepTinh: inc r0
movx a,@r0
cjne a,#rong,TPT_KO_RONG
clr c
ret
TPT_KO_RONG: mov dptr,#MP_TINH
mov b,a
call kTraLoaiMaPhim
jnc timPhepTinh
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuLyMu: cjne a,#1,XLM_KHAC_SO1
mov a,phepTinh1
cjne a,#mpMu2,XLM_KHAC_MU2
call tachSo1
mov r1,#so1
mov r0,#so2
call chuyenSo
call danhDau1
clr so1am
mov soMu2,soMu1
call congSoMu12
mov r0,#cuoiSo1
mov r1,#cuoiSo2
call nhan
mov soMu1,a
mov r0,#so1
call tich2so
ret
XLM_KHAC_MU2: call tachSo1
mov r1,#so1
mov r0,#so2
call chuyenSo
mov soMu2,soMu1
call congSoMu12
mov r0,#cuoiSo1
mov r1,#cuoiSo2
call nhan
mov soMu1,a
mov r0,#so1
call tich2so
mov r1,#so1
mov r0,#so2
call chuyenSo
mov soMu2,soMu1
call tachSo1
call congSoMu12
mov r0,#cuoiSo1
mov r1,#cuoiSo2
call nhan
mov soMu1,a
mov r0,#so1
call tich2so
call danhDau1
XLM_KHAC_SO1: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuLyNhanChia: cjne a,#12h,XLNC_TACH23
call tachSo1
call tachSo2
call danhDau12
mov r0,#cuoiSo1 ;luu kq vao @r0
mov r1,#cuoiSo2
mov a,phepTinh1
cjne a,#mpNhan,XLNC_KO_NHAN
call congSoMu12
call nhan
jb acc.7,XLNC_AM1
clr soMu1am
XLNC_LUU_SM: mov soMu1,a
mov r0,#so1
call tich2so
jmp XLNC_XLDAU12
XLNC_AM1: cpl a
inc a
setb soMu1am
jmp XLNC_LUU_SM
XLNC_KO_NHAN: mov r0,#so1
mov r1,#so2
call xdSoLon
jnc XLNC_CHIA_SO1_LON_BANG
inc soMu2
XLNC_CHIA_SO1_LON_BANG:
call truSoMu12
jb acc.7,XLNC_CHIA_SMAM
clr soMu1am
XLNC_CHIA_SMAM_LUU: mov soMu1,a
mov r0,#cuoiSo1
mov r1,#cuoiSo2
call chia
mov r0,#so1
mov r1,#thuong
call chuyenSo
XLNC_XLDAU12: mov c,so1am
mov acc.0,c
mov c,so2am
mov acc.1,c
call soSanhDau
jc XLNC_CUNG_DAU
setb so1am
ret
XLNC_CUNG_DAU: clr so1am
ret
XLNC_CHIA_SMAM: setb soMu1am
cpl a
inc a
jmp XLNC_CHIA_SMAM_LUU
XLNC_TACH23: call tachSo2
call tachSo3
call danhDau23
mov r0,#cuoiSo2 ;luu kq vao @r0
mov r1,#cuoiSo3
mov a,phepTinh2
cjne a,#mpNhan,XLNC_KO_NHAN23
call congSoMu23
call nhan
jmp XLNC_XLDAU23
XLNC_KO_NHAN23: mov r0,#so2
mov r1,#so3
call xdSoLon
jnc XLNC_CHIA23_SO2_LON_BANG
inc soMu3
XLNC_CHIA23_SO2_LON_BANG:
call truSoMu23
jb acc.7,XLNC_CHIA23_SMAM
clr soMu2am
XLNC_CHIA23_SMAM_LUU:
mov soMu2,a
mov r0,#cuoiSo2
mov r1,#cuoiSo3
call chia
mov r0,#so2
mov r1,#thuong
call chuyenSo
XLNC_XLDAU23: mov c,so2am
mov acc.0,c
mov c,so3am
mov acc.1,c
call soSanhDau
jc XLNC_CUNG_DAU23
setb so2am
ret
XLNC_CUNG_DAU23: clr so2am
ret
XLNC_CHIA23_SMAM: setb soMu2am
cpl a
inc a
jmp XLNC_CHIA23_SMAM_LUU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuLyCongTru: call tachSo1
call tachSo2
call canBangSo
mov a,phepTinh1
cjne a,#mpTru,XLCT_KO_TRU
cpl so2am
XLCT_KO_TRU: mov c,so1am
mov acc.0,c
mov c,so2am
mov acc.1,c
call soSanhDau
jc XLCT_CUNG_DAU
;call canBangSo
mov r0,#so1
mov r1,#so2
call xdSoLon
cjne a,#2,XLCT_SO2_KO_LON_HON
mov c,so2am
mov so1am,c
mov r1,#cuoiSo2
mov r0,#cuoiSo1
call tru
ret
XLCT_SO2_KO_LON_HON: mov r1,#cuoiSo1
mov r0,#cuoiSo2
call tru ;r0->so nho hon ;luu ket qua vao @r0
mov r1,#so2
mov r0,#so1
call chuyenSo
ret
XLCT_CUNG_DAU: call cong
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xdSoLon: mov a,@r0
cjne a,#rong,XDSL_TIEP
clr a ;hai so bang nhau
clr c
ret
XDSL_TIEP: mov 3,@r1
cjne a,3,XDSL_KHAC
inc r0
inc r1
jmp xdSoLon
XDSL_KHAC: jc XDSL_SO1_BE
mov a,#1 ;so1 lon hon
clr c
ret
XDSL_SO1_BE: mov a,#2 ;so2 lon hon
setb c
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
chuyenLcdx2so1:
; mov dptr,#lcdx
; movx a,@dptr
; cjne a,#mpDau,CL2S1_KO_AM
; setb so1am
; inc dptr
; CL2S1_KO_AM: movx a,@dptr
; cjne a,#mp10mu,CL2S1_KO_10MU
call tachSo1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
danhDau1: mov dptr,#lcdx
DD1_TIEP: mov a,#so1roi
movx @dptr,a
inc dptr
mov a,dpl
cjne a,viTriPhepTinh1,DD1_TIEP
mov a,#so1roi
movx @dptr,a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
danhDau12: mov r0,#low(lcdx)
DD12_TIEP: mov a,#so1roi
movx @r0,a
inc r0
mov a,r0
cjne a,viTriPhepTinh1,DD12_TIEP
DD12_TIEP2: mov a,#so1roi
movx @r0,a
inc r0
movx a,@r0
mov b,a
mov dptr,#MP_SO_PHAY_DAU_10MU
call kTraLoaiMaPhim
jc DD12_TIEP2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
danhDau23: mov r0,viTriPhepTinh2
DD23_TIEP: mov a,#so2roi
movx @r0,a
dec r0
movx a,@r0
mov b,a
mov dptr,#MP_SO_PHAY_DAU_10MU
call kTraLoaiMaPhim
jc DD23_TIEP
mov r0,viTriPhepTinh2
DD23_TIEP2: mov a,#so2roi
movx @r0,a
inc r0
movx a,@r0
mov b,a
mov dptr,#MP_SO_PHAY_DAU_10MU
call kTraLoaiMaPhim
jc DD23_TIEP2
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
congSoMu12: mov a,soMu1
jb soMu1am,CSM12_1AM
CSM12_TIEP: mov r3,a
mov a,soMu2
jb soMu2am,CSM12_2AM
CSM12_TRO_VE: add a,r3
ret
CSM12_1AM: cpl a
inc a
jmp CSM12_TIEP
CSM12_2AM: cpl a
inc a
jmp CSM12_TRO_VE
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
truSoMu12: mov a,soMu1
jb soMu1am,TSM12_1AM
TSM12_TIEP: mov r3,a
mov a,soMu2
jnb soMu2am,TSM12_2DUONG
TSM12_TRO_VE: add a,r3
ret
TSM12_1AM: cpl a
inc a
jmp TSM12_TIEP
TSM12_2DUONG: cpl a
inc a
jmp TSM12_TRO_VE
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
congSoMu23: mov a,soMu2
jb soMu2am,CSM23_1AM
CSM23_TIEP: mov r3,a
mov a,soMu3
jb soMu3am,CSM23_2AM
CSM23_TRO_VE: add a,r3
ret
CSM23_1AM: cpl a
inc a
jmp CSM23_TIEP
CSM23_2AM: cpl a
inc a
jmp CSM23_TRO_VE
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
truSoMu23: mov a,soMu2
jb soMu2am,TSM23_1AM
TSM23_TIEP: mov r3,a
mov a,soMu3
jb soMu3am,TSM23_2AM
TSM23_TRO_VE: add a,r3
ret
TSM23_1AM: cpl a
inc a
jmp TSM23_TIEP
TSM23_2AM: cpl a
inc a
jmp TSM23_TRO_VE
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
luuKqx: mov dptr,#kqx
mov r1,#kq
LKQX_TIEP: mov a,@r1
movx @dptr,a
inc r1
inc dptr
cjne @r1,#rong,LKQX_TIEP
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ic (tachSo.asm)
$ic (cong.asm)
$ic (tru.asm)
$ic (nhan.asm)
$ic (chia.asm)
$ic (can2.asm)
;---------------------------------- PHẦN 19 TÁCH SỐ -----------------------------------------
tachSo1: mov dcRamCao,#high(lcdx)
mov r7,#low(lcdx)
mov r6,#so1
call tachSo
mov c,soXam
mov so1am,c
mov c,soMuAm
mov soMu1Am,c
mov soMu1,soMu
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tachSo2: mov r0,#low(lcdx)
call timDauSo
mov 7,r0
mov r6,#so2
call tachSo
mov c,soXam
mov so2am,c
mov c,soMuAm
mov soMu2Am,c
mov soMu2,soMu
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tachSo3: mov r0,viTriPhepTinh1
call timDauSo
mov 7,r0
mov r6,#so3
call tachSo
mov c,soXam
mov so3am,c
mov c,soMuAm
mov soMu3Am,c
mov soMu3,soMu
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tachSo: mov r2,#maxSo
mov 0,r6
clr a
call setSo
mov 0,r7
movx a,@r0
cjne a,#mpCan2,TS_KO_CAN2
inc r7
mov 0,r7
movx a,@r0
;jmp TS_KO_K
TS_KO_CAN2: cjne a,#mpK,TS_KO_K
mov dptr,#kqx
mov 0,r6
TS_CHUYEN: movx a,@dptr
mov @r0,a
inc dptr
inc r0
cjne @r0,#rong,TS_CHUYEN
mov c,kqAm
mov soXam,c
mov c,soMuKqAm
mov soMuAm,c
mov soMu,soMuKq
ret
TS_KO_K: cjne a,#mpDau,TS_KO_DAU
setb soXam
TS_KO_DAU: call timA0
jc TS_CO_A0
ret
TS_CO_A0: call xdSoMu
jc TS_SO_QUA_BE
jb ol,TS_SO_QUA_BE
call ghiAi
TS_SO_QUA_BE: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
timA0: mov 0,r7
movx a,@r0
cjne a,#mp10mu,TA0_KO_10MU
mov viTriA0,#-1
setb c
ret
TA0_KO_10MU: mov dptr,#MP_SO_KHAC_0
movx a,@r0
mov b,a
call kTraLoaiMaPhim
jnc TA0_KO_PHIM_SO_KHAC_0
mov viTriA0,r0
setb c
ret
TA0_KO_PHIM_SO_KHAC_0:
mov dptr,#MP_0_PHAY_DAU
movx a,@r0
mov b,a
call kTraLoaiMaPhim
jc TA0_0_PHAY_DAU
clr c
ret
TA0_0_PHAY_DAU: inc r0
jmp TA0_KO_10MU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xdSoMu: mov a,viTriA0
cjne a,#-1,XDSM_KHAC_AM_1
mov soMu,#0
jmp XDSM_TIM_10MU
XDSM_KHAC_AM_1: call timViTriDauPhay
mov a,viTriA0
cjne a,0,$+3
jc XDSM_VTA0_BE
jmp XDSM_TRU
XDSM_VTA0_BE: inc a
XDSM_TRU: xch a,r0
clr c
subb a,r0
mov soMu,a
XDSM_TIM_10MU: call timSoMu10mu
add a,soMu
jb acc.7,XDSM_AM
clr soMuAm
cjne a,#100,$+3
jc XDSM_SOMU_BE_100
setb ol
ret
XDSM_SOMU_BE_100: mov soMu,a
clr c
ret
XDSM_AM: setb soMuAm
cpl a
inc a ;a=-a
cjne a,#100,$+3
jc XDSM_SOMU_AM_BE_100
setb c ;so mu <-99
ret
XDSM_SOMU_AM_BE_100: mov soMu,a
clr c
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
timViTriDauPhay: mov 0,r7
dec r0
TVTDP_BDAU: inc r0
movx a,@r0
cjne a,#mpPhay,TVTDP_KHAC_PHAY
ret
TVTDP_KHAC_PHAY: mov dptr,#MP_SO_DAU
mov b,a
call kTraLoaiMaPhim
jc TVTDP_BDAU
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
timSoMu10mu: mov 0,r7
dec r0
TSM10M_BDAU: inc r0
movx a,@r0
cjne a,#mp10mu,TSM10M_KO_10MU
inc r0
clr nho
movx a,@r0
cjne a,#mpDau,TSM10M_KO_DAU
inc r0
setb nho
TSM10M_KO_DAU: mov dptr,#MAPHIM_BCD
movx a,@r0
movc a,@a+dptr
mov r3,a
inc r0
mov dptr,#MP_SO
movx a,@r0
mov b,a
call kTraLoaiMaPhim
jnc TSM10M_KO_SO
mov dptr,#MAPHIM_BCD
movx a,@r0
movc a,@a+dptr
mov r4,a
mov a,r3
mov b,#10
mul ab
add a,r4
TSM10M_KTRA_NHO: jnb nho,TSM10M_DUONG
cpl a
inc a ;a=-a
TSM10M_DUONG: ret
TSM10M_KO_SO: mov a,r3
jmp TSM10M_KTRA_NHO
TSM10M_KO_10MU: mov dptr,#MP_SO_PHAY_DAU
mov b,a
call kTraLoaiMaPhim
jc TSM10M_BDAU
clr a
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ghiAi: mov r1,viTriA0
mov 0,r6
cjne r1,#-1,GAI_KO_AM_1A
mov @r0,#1
ret
GAI_KO_AM_1A: mov r2,#maxSo
GAI_KO_AM_1: mov dptr,#MAPHIM_BCD
movx a,@r1
movc a,@a+dptr
mov @r0,a
djnz r2,GAI_TANG_TRO
ret
GAI_TANG_TRO: inc r0
inc r1
mov dptr,#MP_SO
movx a,@r1
mov b,a
call kTraLoaiMaPhim
jc GAI_KO_AM_1
movx a,@r1
cjne a,#mpPhay,GAI_KO_PHAY
dec r0
jmp GAI_TANG_TRO
GAI_KO_PHAY: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
timDauSo: inc r0
movx a,@r0
cjne a,#rong,TDS_KO_RONG
ret
TDS_KO_RONG: mov dptr,#MP_SO_PHAY_DAU_10MU
mov b,a
call kTraLoaiMaPhim
jc timDauSo
inc r0
ret
;---------------------------------- PHẦN 20 CỘNG -----------------------------------------
cong: ;call canBangSo
; clr nho
mov r2,#maxSo
mov r1,#cuoiSo2
mov r0,#cuoiSo1
; CONG_TIEP: mov a,@r1
; mov c,nho
; addc a,@r0
; cjne a,#10,$+3
; jc CONG_A_BE10
; clr c
; subb a,#10
; setb nho
; CONG_LUU: mov @r0,a
; dec r0
; dec r1
; djnz r2,CONG_TIEP
call congz
jb nho,CONG_VUOT
ret
CONG_VUOT: jb soMu1am,CONG_SM1_AM
mov a,soMu1
cjne a,#99,$+3
jc CONG_KO_TRAN ;soMu1<99
setb ol
ret
CONG_SM1_AM:
CONG_KO_TRAN: mov a,#1
mov r0,#cuoiSo1
call dichPhaiSo
mov r0,#so1
mov @r0,#1
inc soMu1
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
canBangSo: mov a,soMu1
mov c,soMu1am
mov nho,c
call cong99
mov r3,a
mov a,soMu2
mov c,soMu2am
mov nho,c
call cong99
mov r4,a
mov a,r3
cjne a,4,CBS_SM1_KHAC
ret
CBS_SM1_KHAC: jc CBS_SM1_BE
clr c ;soMu1 lon hon soMu2
subb a,r4
mov r0,#cuoiSo2
call dichPhaiSo
ret
CBS_SM1_BE: mov a,r4
clr c
subb a,r3
mov r0,#cuoiSo1
call dichPhaiSo
mov soMu1,soMu2
mov c,soMu2am
mov soMu1am,c
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cong99: jb nho,CONG99_AM
add a,#99
ret
CONG99_AM: mov b,#99
xch a,b
clr c
subb a,b
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dichPhaiSo: cjne a,#maxSo,$+3
jc DPS_TDAT
DPS_XOA: mov @r0,#0
dec r0
cjne @r0,#rong,DPS_XOA
ret
DPS_TDAT: mov r1,a
mov a,r0
clr c
subb a,r1
mov r1,a ;r1=r0-a
DPS_BDAU: cjne @r1,#rong,DPS_DICH
jmp DPS_XOA
DPS_DICH: mov a,@r1
mov @r0,a
dec r0
dec r1
jmp DPS_BDAU
;---------------------------------- PHẦN 21 TRỪ -----------------------------------------
tru: clr nho
mov r2,#maxSo
TRU_TIEP: mov a,@r1
mov c,nho
subb a,@r0
jc TRU_CO_NHO
clr nho
TRU_LUU: mov @r0,a
dec r0
dec r1
djnz r2,TRU_TIEP
ret
TRU_CO_NHO: add a,#10
setb nho
jmp TRU_LUU
;---------------------------------- PHẦN 22 NHÂN -----------------------------------------
nhan: push acc
mov 6,r0 ;so thu 1
mov 7,r1 ;so thu 2
call nhanAi
pop acc
mov r0,#tich
cjne @r0,#0,NHAN_KHAC_0
NHAN_TIEP: jb acc.7,NHAN_SM_AM
cjne a,#100,$+3
jc NHAN_KO_TRAN
setb ol
ret
NHAN_KHAC_0: inc a
jmp NHAN_TIEP
NHAN_SM_AM:
NHAN_KO_TRAN: ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nhanAi: mov r5,#0 ;chi so
clr a
mov r0,#tich
mov r2,#2*maxSo
call setSo
NHANAI_BDAU: mov 3,@r1
push 1
call nhan1chuSo
mov r1,#phu
mov a,r5
call dichTraiAbuoc
mov r0,#cuoiTich
mov r1,#cuoiPhu
call congz
inc r5
pop 1
dec r1
cjne @r1,#rong,NHANAI_BDAU
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nhan1chuSo: clr a
mov r0,#phu
mov r2,#20
call setSo
cjne r3,#0,N1CS_BDAU
ret
N1CS_BDAU: mov r1,#cuoiPhu
mov r4,#0
mov 0,r6
N1CS_KTRA: mov a,@r0
cjne a,#rong,N1CS_TIEP
mov @r1,4
ret
N1CS_TIEP: mov b,r3
mul ab
add a,r4
mov b,#10
div ab
mov r4,a
mov @r1,b
dec r1
dec r0
jmp N1CS_KTRA
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
dichTraiAbuoc: jnz DTAB_BDAU
ret
DTAB_BDAU: cjne @r1,#0,DTAB_KO_0
inc r1
jmp DTAB_BDAU
DTAB_KO_0: cjne @r1,#rong,DTAB_KO_RONG
ret
DTAB_KO_RONG: clr c
subb a,r1
cpl a
inc a
mov r0,a
DTAB_TIEP: mov a,@r1
mov @r0,a
inc r0
inc r1
cjne @r1,#rong,DTAB_TIEP
DTAB_ZERO: mov @r0,#0
inc r0
cjne @r0,#rong,DTAB_ZERO
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
congz: clr nho
CONGZ_TIEP: mov a,@r1
mov c,nho
addc a,@r0
cjne a,#10,$+3
jc CONGZ_A_BE10
clr c
subb a,#10
setb nho
CONGZ_LUU: mov @r0,a
dec r0
dec r1
cjne @r0,#rong,CONGZ_TIEP
ret
CONGZ_A_BE10: clr nho
jmp CONGZ_LUU
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
tich2so: mov r1,#tich
T2S_KTRA0: cjne @r1,#0,T2S_KHAC_0
inc r1
jmp T2S_KTRA0
T2S_TIEP:
T2S_KHAC_0: cjne @r1,#rong,T2S_KO_RONG
ret
T2S_KO_RONG: mov a,@r1
mov @r0,a
inc r0
inc r1
cjne @r0,#rong,T2S_TIEP
;---------------------------------- PHẦN 23 CHIA -----------------------------------------
chia: mov 6,r0
mov 7,r1
mov a,r1
clr c
subb a,#maxSo
inc a
mov r1,a
cjne @r1,#0,CHIA_BDAU
setb chia0
ret
CHIA_BDAU: mov 1,r7
call chiaAi
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
chiaAi: clr bool
mov r5,#0
mov r0,#thuong
mov r2,#maxSo
call clrSo
mov r0,#phu
mov r2,#2*maxSo
call clrSo
mov r0,#cuoiPhu
mov 1,r6
CHIAAI_CHUYEN: call mov10dec
cjne @r1,#rong,CHIAAI_CHUYEN
mov r0,#so2mr
mov r2,#2*maxSo
call clrSo
mov r0,#cuoiSo2mr
mov 1,r7
CHIAAI_CHUYEN2: call mov10dec
cjne @r1,#rong,CHIAAI_CHUYEN2
CHIAAI_KTRA: mov r0,#phu
mov r1,#so2mr
call xdSoLon
cjne a,#2,CHIAAI_SO2_NHO_BANG
mov a,#1
mov r1,#phu
call dichTraiAbuoc
jnb bool,CHIAAI_KO_ZERO
mov a,r5
add a,#thuong
mov r0,a
mov @r0,#0
inc r5
cjne r5,#maxSo,CHIAAI_KO_ZERO
ret
CHIAAI_KO_ZERO:
setb bool
jmp CHIAAI_KTRA
CHIAAI_SO2_NHO_BANG: mov r4,#0
CHIAAI_SO2_NHO_BANG1:
mov r1,#cuoiPhu
mov r0,#cuoiSo2mr
;push 4
call truz
;pop 4
inc r4
mov r0,#phu
mov r1,#so2mr
call xdSoLon
cjne a,#2,CHIAAI_SO2_NHO_BANG1
mov a,r5
add a,#thuong
mov r0,a
mov @r0,4
inc r5
clr bool
cjne r5,#10,CHIAAI_KTRA
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
truz: clr nho
TRUZ_TIEP: mov a,@r1
mov c,nho
subb a,@r0
jc TRUZ_CO_NHO
clr nho
TRUZ_LUU: mov @r1,a
dec r0
dec r1
cjne @r0,#rong,TRUZ_TIEP
ret
TRUZ_CO_NHO: add a,#10
setb nho
jmp TRUZ_LUU
;---------------------------------- PHẦN 24 HT DÒNG 2 -----------------------------------------
htDong2: mov a,#dauDong2
call xoaVeDauDong
jnb can2am,HTD2_KO_CAN2AM
mov dptr,#TB_CAN2AM
call thongBao
jmp HTD2_TROVE
HTD2_KO_CAN2AM: jnb ol,HTD2_KO_TRAN
mov dptr,#TB_TRAN_SO
call thongBao
jmp HTD2_TROVE
HTD2_KO_TRAN: jnb chia0,HTD2_KO_CHIA0
mov dptr,#TB_CHIA0
call thongBao
jmp HTD2_TROVE
HTD2_KO_CHIA0: jb soMuKqAm,HTD2_SOMUKQAM
mov a,soMuKq ;so mu kq duong
cjne a,#10,$+3
jc HTD2_XUAT_TAT_CA
call xuatMuLon9
HTD2_SOMUKQAM: mov a,soMuKq
cjne a,#10,$+3
jc HTD2_XUAT_TAT_CA_SMKQAM
call xuatMuLon9 ;so mu kq am nho hon 9
jmp HTD2_TROVE
HTD2_XUAT_TAT_CA_SMKQAM:
call xuatMuLonAm10
HTD2_TROVE: call htDong1
ret
HTD2_XUAT_TAT_CA: call xuatMuBe10
jmp HTD2_TROVE
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuatMuLonAm10: mov r0,#kq
cjne @r0,#0,XMLA10_BDAU
mov a,#cuoiDong2
call lenh
mov a,#'0'
call duLieu
ret
XMLA10_BDAU: call soSoYnghia
add a,soMuKq
;inc a
mov r7,#10
call minAr7
mov a,#cuoiDong2
clr c
subb a,r7
jnb kqAm,XMLA10_KQ_DUONG
call themDauAm
XMLA10_KQ_DUONG: call lenh
mov a,#'0'
call duLieu
mov a,#','
call duLieu
mov a,soMuKq
dec a
jz XMLA10_XUAT_SO_CO_NGHIA
mov r2,a
XMLA10_XUAT_0: mov a,#'0'
call duLieu
djnz r2,XMLA10_XUAT_0
XMLA10_XUAT_SO_CO_NGHIA:
mov a,r7 ;so cot-1
clr c
subb a,soMuKq
mov r2,a
XMLA10_XUAT_SCN: mov a,@r0
add a,#'0'
call duLieu
inc r0
djnz r2,XMLA10_XUAT_SCN
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuatMuBe10: mov r0,#kq
cjne @r0,#0,XMB10_BDAU
mov a,#cuoiDong2
call lenh
mov a,#'0'
call duLieu
ret
XMB10_BDAU: mov r3,soMuKq
inc r3
inc r3
mov r0,#kq
call soSoYnghia
mov r4,a
cjne a,3,$+3
jc XMB10_NGUYEN
setb nho
mov a,#cuoiDong2
clr c
subb a,r4
jmp XMB10_KTRA_AM
XMB10_NGUYEN: clr nho
mov a,#cuoiDong2
clr c
subb a,soMuKq
XMB10_KTRA_AM: jnb kqAm,XMB10_DUONG
call themDauAm
XMB10_DUONG: call lenh
mov r2,soMuKq
inc r2
XMB10_TIEP: mov a,@r0
add a,#'0'
call duLieu
inc r0
djnz r2,XMB10_TIEP
jb nho,XMB10_XUAT_PHANTP
ret
XMB10_XUAT_PHANTP: mov a,#','
call duLieu
clr nho
mov a,r4
setb c
subb a,soMuKq
mov r2,a
jmp XMB10_TIEP
ret
; XMB10_BDAU: mov r2,soMuKq
; inc r2
; call soSoYnghia
; mov r3,a
; mov 4,r2
; inc r4
; cjne a,4,$+3
; jnc XMB10_CO_PHANTP
; clr nho
; mov a,#cuoiDong2
; jmp XMB10_TRU
; XMB10_CO_PHANTP: setb nho
; mov a,#cuoiDong2-2
; XMB10_TRU: clr c
; subb a,soMuKq
; XMB10_KTRA_AM: jnb kqAm,XMB10_KQ_DUONG
; call themDauAm
; XMB10_KQ_DUONG: call lenh
; XMB10_TIEP: mov a,@r0
; add a,#'0'
; call duLieu
; inc r0
; djnz r2,XMB10_TIEP
; jb nho,XMB10_XUATTP
; ret
; XMB10_XUATTP: mov a,#','
; call duLieu
; mov a,r3
; setb c
; subb a,soMuKq
; mov r2,a
; clr nho
; jmp XMB10_TIEP
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
soSoYnghia: mov a,r0
add a,#10
mov r1,a
SSYN_KTRA: mov dptr,#MP_0_RONG
mov b,@r1
call kTraLoaiMaPhim
jc SSYN_TIEP
mov a,r1
clr c
subb a,r0
inc a
ret
SSYN_TIEP: dec r1
jmp SSYN_KTRA
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuatMuLon9: mov r0,#kq
cjne @r0,#0,XML9_BDAU
mov a,#cuoiDong2
call lenh
mov a,#'0'
call duLieu
ret
XML9_BDAU: call soSoYnghia
mov r4,a
cjne a,#1,XML9_CO_PHANTP
clr nho
mov a,#cuoiDong2-2
jmp XML9_TRU
XML9_CO_PHANTP: setb nho
mov a,#cuoiDong2-2
clr c
subb a,r4
XML9_TRU: mov r3,soMuKq
cjne r3,#10,$+3
jc XML9_SMKQ_BE10
dec a
XML9_SMKQ_BE10: dec a
jnb kqAm,XML9_KQ_DUONG
call themDauAm
XML9_KQ_DUONG: call lenh
mov r2,#1
XML9_TIEP: mov a,@r0
add a,#'0'
call duLieu
inc r0
djnz r2,XML9_TIEP
jb nho,XML9_XUAT_PHANTP
call xuatSoMuKq
ret
XML9_XUAT_PHANTP: mov a,#','
call duLieu
clr nho
mov 2,r4
dec r2
jmp XML9_TIEP
; XML9_BDAU: mov r2,#1
; mov r0,#kq
; call soSoYnghia
; cjne a,#1,XML9_CO_PHANTP
; clr nho
; add a,#cuoiDong2-3
; jmp XML9_1
; XML9_CO_PHANTP: setb nho
; cpl a
; inc a ;a=-a
; add a,#cuoiDong2-2
; XML9_1: ;add a,#dauDong2+12
; mov r3,soMuKq
; cjne r3,#10,$+3
; jc XML9_SMKQ_BE10
; clr c
; subb a,#2
; jmp XML9_KTRA_AM
; XML9_SMKQ_BE10: dec a
; XML9_KTRA_AM: jnb kqAm,XML9_KQ_DUONG
; call themDauAm
; XML9_KQ_DUONG: call lenh
; XML9_TIEP: mov a,@r0
; add a,#'0'
; call duLieu
; inc r0
; djnz r2,XML9_TIEP
; jb nho,XML9_XUAT_PHANTP
; call xuatSoMuKq
; ret
; XML9_XUAT_PHANTP: mov a,#','
; call duLieu
; push 0
; mov r0,#kq
; call soSoYnghia
; pop 0
inc r0
; dec a
; mov r2,a
; clr nho
; jmp XML9_TIEP
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
themDauAm: push acc
dec a
call lenh
mov a,#kyTuDau
call duLieu
pop acc
ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xuatsoMuKq: jb soMuKqAm,XSMKQ_AM
mov dptr,#CHUOI_10MU
XSMKQ_XUAT: call chuoiDuLieu
mov a,soMuKq
mov b,#10
div ab
add a,#'0'
call duLieu
mov a,b
add a,#'0'
call duLieu
ret
XSMKQ_AM: mov dptr,#CHUOI_10MU_AM
jmp XSMKQ_XUAT
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; xuatCanhPhai: mov r0,#kq
; mov r2,soMuKq
; inc r2
; mov a,#dauDong2+15
; clr c
; subb a,soMuKq
; jnb kqAm,XCP_KQ_DUONG
; dec a
; call lenh
; mov a,kyTuDau
; call duLieu
; inc a
; XCP_KQ_DUONG: call lenh
; cjne @r0,#0,XCP_TIEP
; mov a,#'0'
; call duLieu
; ret
; XCP_TIEP: mov a,@r0
; add a,#30h ;bcd 2 ascii
; call duLieu
; inc r0
; djnz r2,XCP_TIEP
; ret
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
chuoiDuLieu:
thongBao: clr a
movc a,@a+dptr
cjne a,#het,TB_XUAT
ret
TB_XUAT: call duLieu
inc dptr
jmp thongBao
;_______________________________________________________________________________________
END