1.2 đáp án phần code

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

C:\Users\VietHoang\Downloads\B1\B1.

asm

;BAI 1: Viet chuong trinh con dem 100 xung tu bit P0.6
;Bat dau dem khi bit P0.5 chuyen tu 0 len 1
;Khi dem xong dat bit P0.7 bang 1

demxung:
mov p0,#0h ; nap 0 vao P0
mov R1,#0h; nap 0 vao tahnh ghi R1
clr p0.6 ;dat p0.6 = 0
clr p0.5 ;dat p0.5 = 0
jb p0.5,$ ; neu P0.5 cong vao van la 0 thi nhay tai cho
turn:
jb p0.6,$ ; ; neu P0.6 cong vao van la 0 thi nhay tai cho
inc R1 ; tang so lan dem xung len 1
cjne R1,#101,no_light ; dem len 100, khi chua dem len 100 thi den ko sang
jmp light
no_light:
jb p0.6,$

jmp turn
light:
setb p0.7 ; khi den sang dat P0.7 len 1
ret

; jnb: nhay den nhan khi BIT = 0


; ib : nhay den nhan khi BIT = 1

;BAI 3:Viet chuong trinh con dem cac so duong trong mien nho ngoai tu dia chi
; 1000H den 2000H so dem trong R2 va R3 (R3 la byte cao)

demsoduong:
mov r2,#0;
mov r3,#0; khoi tao R2, R3 bang 0
mov dptr,#1000h ; khoi tao con tro bo nho ngoai o dia chi 1000H
clr c ; dat co C = 0
tran:
movx a,@dptr ;chuyen so vao a ( dia chi o nho 1000H 8bit)
rlc a ;dao bit a de lay co C. Co C = bit thu 7 cua so nam trong A, quyet
dinh la so duong hay so am
jnc count ;nhay den nhan count: neu co C bang 0 <=> , nhay den conut neu so
trong A la so duong
set_dptr:; ham kiem tra xem thanh ghi DPTR dem trong khoang (1000H- 2000H)
inc dptr ; ;tang thanh ghi DPTR them 1 don vi
mov a,dph ;chuyen du lieu tu 8 bit cao cua thanh ghi DPTR vao thanh ghi A
cjne a,#20h,tran ;kiem tra neu A khac 20H thi quay tro lai( tiep tuc dem)
;( kiem tra DPTR da vuot qua gia tri 20xxH chua, neu vuot qua roi
thi tiep tuc kiem)
mov a,dpl ;chuyen du lieu tu 8 bit thap cua thanh ghi DPTR vao thanh ghi A
cjne a,#1h,tran ;kiem tra neu 8 bit thap cua thanh ghi DPTR khac 1H thi quay tro l
ai ham "tran"
;( kiem tra xem so da vuot qua 2000H chua)
jmp here ;
count: ; ham dem so duong
mov a,r2 ;chuyen gia tri cua thanh ghi R2 vao A
add a,#1h ;cong them 1 vao A
mov r2,a ;tang gia tri R2 them 1 ( r2 := a , a = r2)
mov a,r3 ; ( r3 = a)
addc a,#0h ;r3 + c + 0 -> a
mov r3,a ;
jmp set_dptr ; nhay tro lai ham tang thanh ghi DPTR
ret
; Co C chi dung trong chuong trinh con

;BAI 4: Viet chuong trinh con cong 2 so BCD n chu so trong bo nho, ket qua cat trong so da
u

Page: 1
C:\Users\VietHoang\Downloads\B1\B1.asm

; (Luu y truong hop co nho). Chu y viec khai bao chuong trinh con.

;2 so BCD co n chu so, n duoc luu trong r3


;so hang dau bat dau tu dia chi 30h
;so hang thu 2 bawts dau tu dia chi 90h

CTcon:
mov R3,#n
clr c ; dat co C = 0
MOV R0,#30h ; R0=30H
mov r1,#90h ; R1=90H
main:
mov a,@r0 ;chep du lieu tu o nho duc tro boi thanh ghi R0 vao thanh ghi A
addc a,@r1 ;cong thanh ghi A voi du lieu tu o nho duoc tro boi thanh ghi R1 , +
them co nho C
da a ;hieu chinh so BCD cua A sau phep cong vua roi ( cong 0110 neu ket qu
a phep cong lon hon 1001)
mov @r0,a ;chep ket qua cua phep cong vua roi vao o nho duoc tro boi thanh ghi
R0 ( @R0 + @R1 + C -> @R0)
inc r0 ;tang gia tri cua R0 len 1
inc r1 ;(R1 := R1 + 1) ( dich sang chu so tiep theo cua 2 so BCD)
djnz r3,main ;tiep tuc cong 2 chu so tiep theo cua 2 so BCD, den khi nao so R3 =0
nghia la da cong het cac chu so thi cong ket qua voi so du
mov a,#0 ;A:=0
addc a,#0h ;A + C := A ( xac dinh so nho cua phep cong 2 so thu N cua 2 so BCD
N chu so )
mov @r0,a ;truyen so nho cuoi cung vao thanh ghi
RET

; BAI 5: Viet chuong trinh con tru hai so 5 byte trong bo nho, ket qua cat vao so bi tru
; input: R0 -> dia chi dau so bi tru
; R1 -> dia chi dau so tru
; thay doi: PSW

; truong hop don gian X1 > X2, X1 va X2 deu duong

main:
mov r0,#30h ;dia chi dau so bi tru
mov r1,#40h ;dia chi dau so tru
mov r2,#5 ;so byte cua 2 so
clr c ;gan C = 0
turn:
mov a,@r0 ;chep du lieu tu o nho duoc tro boi thanh ghi R0 vao A
subb a,@r1 ;tru du lieu do voi du lieu tu o nho duoc tro boi thanh ghi R1 :
mov @r0,a ;@R0 - @R1 -> @R0
inc r1 ;
inc r0 ;
djnz r2,turn ;tang len bit tiep theo cua 2 so roi tiep tuc thuc hien phep tru

RET
; voi truong hop khac thi viet chuong trinh con dao ma bu 2
; xoa co nho c de tranh luu co nho o chuong trinh truoc

; BAI 6: Viet chuong trinh con doi 2n chu so thap phan dang ASCII thanh n byte dang BCD (p
arked)
; input: R0 -> so dang ASCII
; output: R1 -> so dang BCD

CONVERT:
MOV R7, #N
LAP:
MOV A,@RO ;nap so ASCII dau tien vao A
ANL A, #00001111B ;Xoa 4 bit dau (0011), giu lai 4 bit sau de thanh 1 so BCD sdang ne

Page: 2
C:\Users\VietHoang\Downloads\B1\B1.asm

n
;( ma hexa cua so thap phan la 3x, nen can xoa so 3 di)
MOV @R1. A ;nap lai gia tri BCD vao R1
DEC R0 ;chuyen den so ASCII tiep theo
MOV A,@R0 ;nap so ASCII do vao A
SWAP A ;doi 4 bit thap len 4 bit cao
ANL A, 11110000B ;xoa 4 bit cuoi ( 0011),giu lai 4 bit dau de thanh 1 so BCD dang ne
n
;( ma hexa cua so thap phan khi dao la x3, nen can xoa so 3 di)
ADD A, @r1 ;cong voi so BCD ban dau de tao thanh 1 so BCD dang nen
MOV @R1, A ;nap so BCD vao thanh ghi R1
DEC R1 ;nhay den dia chi luu tiep thep
DEC R0 ;nhay den so ASCII tiep theo
DJNZ R7, LAP ;
RET

; BAI 7: Viet chuong trinh con dich 1 so n byte, m vi tri theo cach cua lenh RR

DICHPHAI:
MOV R0, #30H ; dia chi so dau tien
MOV R3, #m ; so vi tri dich
LAP_NGOAI:
CLR C
MOV R@,#n ; so byte can dich
LAP_TRONG:
MOV A,@R0
RRC A
MOV @R0, A
INC R0
DJNZ R2, LAP_TRONG

CLR A ; A=00000000H
RRC A ; dich co C vao bit thu 7 cua A
;( A=C0000000, co C la bit thu 0 cua so cuoi cung dc dich)
MOV R0, @30H ;
ADD A,@R0 ; cong bit thu 0 cua so cuoi cung(LSB) vao bit thu 7 cua so dau tien (MSB
)
MOV @R0, A ;
DJNZ R3, LAP_NGOAI ;
RET
;lenh RRC co dich sang D7, D7 sang D6,....., D1 sang D0, D0 dich sang co C

; BAI 8: Viet chuong trinh dieu khien Timer 0 de tao thanh mach chia tan so (che do COunte
r)
; Dau ra la bit P1.0

ORG 000H
MOV TMOD, #5H ; timer 0, che do counter, mode 1 - 16bit
SETB P1.0 ; P1.0=1
MAIN:
MOV TH0,#0FFH ;
MOV TL0,#0FFH ; do rong xung la 1/2 , dem trong 1 chu ki la FFFFH thi dao bit P1.0 (
tuc la counter bi tran)
SETB TR0 ;bat timer 0
JNB TF0,$ ;Nhay tai cho neu TF=0 (timer chua tran)

CLR TR0 ; khi timer tran, tat timer


CLR TF0 ; xoa co tran
DAO_BIT:
CPL P1.0 ; het 1 chi ki thi dao bit P1.0
JMP MAIN
END

; BAI 9: Viet chuong trinh con cong 2 so 5 byte dang ASCII trong bo nho, ket qua

Page: 3
C:\Users\VietHoang\Downloads\B1\B1.asm

; dang ASCII cat vao so thu nhat.


; Truong hop ket qua la so 6 byte?

CONG_ASCII:
MOV R7, #5 ; so byte cua 1 so
MOV R0,#45H ; dia chi LSB cua so thu nhat
MOV R1,#55H ; dia chi LSB cua so thu hai
CLR C;
ASCII_TO_BCD:
MOV A,@R0
SWAP A
ANL A,#F0H
MOV @R0, A
MOV A,@R1
SWAP A
ANL A,#F0H
JNC Khong_nho
ADDC A,#10H ; cong co nho
Khong_nho:
ADD A,@R0
DA A
SWAP A
MOV @R0,A
DEC R0
DEC R1
DJNZ R7,ASCII_TO_BCD
MOV R7,#5 ;neu 2 so o MSB (41H va 51H) cong lai co nho thi R7=6, neu ket qua khong
tran thi R7 = 5
JNC CHUYEN_ASCII ;neu khong nho thi bat dau chuyen so ASCII sang BCD
MOV R7, #6 ;neu co nho thi phai them 1 byte de bieu dien ket qua
CLR A ;
ADDC A,#0 ;cong A voi co nho C
MOV @R0, A ;chuyen ket qua vao o nho 40H
CHUYEN_ASCII:
MOV R0, #45H
LOOP:
ADD A,#30H ; chuyen ma BCD sang ASCII
MOV @R0,A
DEC R0
DJNZ D7,LOOP
RET

; BAI 10: Viet chuong trinh dieu khien DAC 10 bit de tao xung rang cua, tan so tuy y

; NOP x 2 tuc la dung 2 chu ki may tuc la chu ki phat 1 xung la 2 chu ki may
; chu y 20h la thanh ghi 8bit va 0h la bit thu 0 cua thanh ghi 20H. TUONG TU VOI 1H
org 0h
start:
mov a,#0h ; nap gia tri 0 vao thanh ghi a
mov 20h,#0 ; nap gia tri 0 vao o nho 20h
mov r2,#0 ; nap gia tri 0 vao thanh ghi R2
main:
mov 20h,r2 ; chuyen gia tri thanh ghi R2 vao o nho 20H
mov c,0h ; nap thanh ghi bit 0H vao co nho C
mov p2.0,c ; nap gia tri co nho C vao P2.0 dang bit
mov c,1h ; nap thanh ghi bit 1h vao co nho C
mov p2.1,c ; nap gia tri co nho C vao P2.1 dang bit
lo_op:
mov p0,a ; nap gia tri thanh ghi a vao port P0
nop ; dung VXL trong 1 chu ky may
nop
inc a ; tang a len 1
cjne a,#0,lo_op ; nhay ve lo_op neu a khac 0, khi thanh ghi a bi tran vuot qua 255 th
i se reset ve 0

Page: 4
C:\Users\VietHoang\Downloads\B1\B1.asm

inc r2 ; tag r2 len 1


cjne r2,#4,main ; nhay ve main neu r2 khac 5
jmp start ; nhay khong dieu kien ve start
end

;BAI 11: viet chuong trình con doi n ki tu thanh chu hoa(neu dang la chu thuong) . Biet c
huoi ky tu luu trong bo nho co dia chi dau trong R0, do dai luu trong R7
;A,B,C,.... co ma la 41H,42H,43H,...
;a,b,c,....co ma la 61H,62H,63H,...
; bai lam
; 61H VÀ 7AH trong bang ma ascii la bang chu cai thuong tu a => z
DOICHU:
mov r0,#30h ; luu dia chi o nho 30H vao R1
mov r7,#5h ; luu do dai 5 cua chuoi vao R7
lo_op:
clr c ; xoa co nho c
mov a,@r0 ; gan gia tri thanh ghi 30H vao a
subb a,#61h ; lay gia tri cua a tru di 61H va tru di co nho C o tren , neu ra am thi c
o nho C = 1 (co nho duoi)
jc exit ; nhay den exit neu co c =1 ( tuc la a la ki tu khong phai chu)
mov a,@r0 ; gan gia tri thanh ghi 30H vao a
subb a,#7ah ; lay gia tri cua a tru di 7BH va tru di co nho C o tren , neu ra am thi c
o nho C = 1 (co nho duoi)
jnc exit ; nhay den exit neu co nho C=0 ( Tuc la a la ki tu ko phai chu)
clr c ; xoa co nho C
mov a,@r0 ; gan lai gia tri o nho 30H vao a
subb a,#20h ; CHUYEN chu THUONG THANH CHU HOA
mov @r0,a ; gan lai gia tri chu hoa vua chuyen vao o nho 30H
exit:
inc r0 ; tang len 1 o nho
djnz r7,lo_op ; lap lo_op cho den khi R7 ve 0
ret

;BAI 12: Viet chuong trinh nhan 100 byte so lieu tu cong noi tiep cua MCS 51, cong ra da d
uoc d?nh nghia che do
; - kiem tra tinh san sang cua cong
; - so lieu cat trong D/c dau trong DPTR
; bai lam
DEMXUNG:
( cai dat truyen du lieu)
MOV TMOD,#20H ; thiet lap Timer 1 len che do 8 bit nap lai ( mode 2)
MOV TH1,#0FDH ; TH1 = 253 , thiet lap baude rate = 9600
MOV SCON,#50H ; thiet lap che do truyen noi tiep 1( data bit = 8, 1 start, 1 bit sto
p)
SETB TR1 ; cho phep Timer 1 dem xung
MOV DPTR,#1000H
NHAN_DU_LIEU:
JNB RI,$ ; vong lap kiem tra co nhan RI, neu co nhan RI = 1 thi bat dau nhan du lieu
MOV A,SBUF ; luu du lieu nhan duco vao thanh ghi A
CLR RI ; xoa co RI sau khi nhan xong
MOVX @DPTR,A ; chuyen du lieu nhan duoc tu A vao con o nho duoc tro boi con tro DPTR
INC DPTR; Tang con tro DPTR lên 1 de tro den o nho tiep theo
MOV A,DPL; ( chuyen du lieu cua 8 bit thap trong con tro DPTR vao A)
CJNE A,#64H,NHAN_DU_LIEU; ( khi nhan duoc den byte thu 100 thi dung lai)
RET

;BAI 13:viet chuong trinh dieu khine cong P2 cua MCS 51 thanh cong ra, che do doi thoai:
; P1.1=OBF
; P1.0=ACK
; gui 10 byte trong bo nho dia chi dau trong DPTR ra cong theo che do bat tay

; tin hieu OBF duoc kiem tra o chan P1.0

Page: 5
C:\Users\VietHoang\Downloads\B1\B1.asm

; ACK dc kiem tra o P1.1


ORG 000H
MOV DPTR,#1000H
CLR P1.0 ;(OBF tich cuc muc cao)
SETB P1.1 ;(ACK(tich cuc thap)
MAIN:
MOVX A,@DPTR
MOV P2,A ; gui len Latch
SETB P1.0; OBF=1 bao da co du lieu o Latch
WAIT:
JB P1.1,WAIT; cho den khi ACK = 0 ( da doc xong) thi lam cau lenh tiep theo
CLR P1.0 ;xoa OBF
INC DPTR
MOV A, DPL ;
CJNE A, #0AH, MAIN
SJMP $
END

;BAI 14: Viet chiong trình tim dia chi offset cua 1 so 1 byte trong B ( cho truoc trong mi
en nho dia chui tu 1000H toi 2000H
; giai quyet cac truogn hop ko tim thay so, tim thay nhieu so

;ko tim dc p1.0=1


;tim dc 1 so p1.1=1
;nhieu hon 1 so thi tim dia chi so dau tien va p1.2=1
add_l equ r4
add_h equ r5
n equ 20h ; so 1 byte la N = 20H, tim diua
num_p equ r3
no_p bit p1.0
one_p bit p1.1
more_p bit p1.2
org 0h
start:
mov p1,#0 ; P1 = 0000000
mov b,#n ; B := N
mov num_p,#0 ;
setb no_p ; P1.0 len 1 vi chua co so nao
mov dptr,#1000h ;khoi tao con tro tu o nho 1000H
; mov dptr,#para
main:
movx a,@dptr; truy cap den o nho thu cua con tro DPTR ( o nho 1000H)
; mov a,#0
; movc a,@a+dptr
clr c ;
subb a,b ; A - B -> A
jz count ; nhay den count neu A = 0 ( 20H = @DPTR , tim duoc 1 so giong 20H trong b
o nho tu 1000H den 2000H)
jmp continue ; neu A # 0( @DPTR # 20H) thi nhay den continue, tiep tuc kiem tra o nho
tiep theo trong ram
count: ;(A = 0 <=> @DPTR = 20H)
inc num_p ;( tang bien do so num_p them 1)
mov a,num_p ; chep vao a
clr c ; xoa co nho c
subb a,#1; A- 1 -> A
jz one_offset ; neu A = 0 ->tim duoc 1 so -> nhay den one_offset
clr c ; de tinh toan tiep xoa co nho C
mov a,num_p ;
subb a,#2 ;
jz more_offset; neu tim duoc 2 so thi nhay den more offset
one_offset:
clr c
clr no_p ; xoa tin hieu no_p vi da tim duoc 1 so

Page: 6
C:\Users\VietHoang\Downloads\B1\B1.asm

setb one_p ; bat tin hieu one_p vi tim duoc 1 so


mov a,dph ; chuyen 8 byte cao cua con tro DPTR(dia chi o nho ) vao A
subb a,#10h; @DPTR - 10H ( tim dia chi offset cua so do)
mov add_h,a;
mov add_l,dpl; chep dia chi 16 bit cua o nho vao 2 byte add_h va add_l
jmp continue ;
more_offset:
clr one_p ; xoa tin hieu one_p
setb more_p; bat tin hieu more_p
jmp here ; nhay den here, khong tiep tuc qua trinh tim nua. Ket qua xuat ra la dia chi
offset cua so thu nhat tim dc.
continue:
inc dptr; tang con tro DPTR de tiep tuc kiem tro nho nho tiep theo
mov a,dph;
cjne a,#20,main
mov a,dpl
cjne a,#1,main; kiem tra den khi nao tro den o nho 2000H thi dung lai
; cjne a,#7h,main
here: jmp here
; org 1000h
; para: db 23h,24h,20h,12h,20h,45h
end
; ban chat cua bai toan la tim trong cac o nho tu 1000H toi 2000H co o nho nao chua so 1 b
yte co gia tri luu trong B,
; sau do xuat ra dia chi offset cua o nho chua so do

;BAI 15: Dieu khien mach Timer 0 ngat de tao xung vuong 50Hz tai bit P1.5. Thach anh cua M
CS51 co tan so la 12MHz

;tao xung co tan so 50 hz


;p1.5 chan phat xung
org 0h
jmp main
org 0bh
jmp timer_0
org 50h
main:
mov ie,#10000010b ; cho phep ngat toàn cuc, cho phep ngat bo dinh thoi 0 TF0
mov tmod,#00000001b ; timer 0 mode 1
mov th0,#0D8H ; cai dat chu ki
mov tl0,#0F0H ; cai dat chu ki
setb tr0 ; cho phep dem xung
here: jmp here ; 8051 se lap vo han trong vong lap nay vo han
; neu he thong co chuong trinh giam sat thi khong can den vong lap nay
; khi su dung thanh ghi IE thì bo ngat dinh thoi TF0 tu dong rst ve 0
; khi TF0 ve 0 thi 8051 se bi ngat bat chap thuc hien chuong trinh gi và nhay
den di chi vecto ngat la 0BH
timer_0:
clr tr0 ; khong cho phep dem xung
cpl p1.5 ; dao bit p1.5
mov th0,#0D8H ; nap lai gia tri cua th0
mov tl0,#0F0H ; nap lai gia tri cua tl0
setb tr0 ; cho phep dem xung
reti ; cho phep thoat chuong trinh ngat
end

;BAI 16:Viet chuong trinh tren MCS51 de co the nhan 1 chuoi ky tu tu cog noi tiep bat dau
boi ky tu #STX, ket thuc boi @EOT,
;chuoi ki tu duoc cat vao bo nho tro boi DPTR
;Chu y kiem tra tinh san sang cua so lieu

Page: 7
C:\Users\VietHoang\Downloads\B1\B1.asm

org 0h
mov DPTR,#1000h; gan gia tri o nho ma dptr tro den
main:
mov tmod,#00100000b ; timer 1 mod 2
mov th1,#0fdh ;baund=9600
mov scon,#01010000b ; mode 1 8 bit-uart(CO THE THAY DOI BAUND RATE), cho phep nhan du
lieu RxD)
setb tr1 ; cho phep phat xung timer 1
check_stx:
jnb ri,$ ; lap tai cho neu RI=0, khi nhan xong du lieu thi RI=1 thoat vong lap
mov a,sbuf ; truyen du lieu vua nhan vao thanh ghi A(du lieu vua nhan duoc luu vao tha
nh ghi SBUF)
clr ri ; RI=0
cjne a,#02H,check_stx ; lap ham check_stx cho den khi A=stx
movx @DPTR, A ; chep STX vao o nho
inc DPTR
nhandulieu:
jnb ri,$ ; lap cho den khi nhan duoc du lieu
mov a,sbuf ; truyen du lieu vua nhan duoc vao A
clr ri ; RI= 0
movx @dptr, A ; truyen du lieu vao o nho
inc DPTR ; tang len tro dne o nho tiep theo
cjne A,#04H,nhandulieu ; kiem tra den khi nao gap EOT thi dung lai( EOT duoc luu vao c
huoi du lieu)
here: jmp here
end

;BAI 17: viet chuong trinh dieu khien de doc 10 byte tu cong P1 cua MCS 51 theo che do co
doi thoai
; P0.1 = IBF, bao trang thai san sang
; P0.2 = STB, xung thap pahi tra loi sau khi doc
; So lieu duoc cat vào bo nho tro boi DPTR

ORG 000H
MOV DPTR,#1000H
BATDAU:
WAIT:
JB P0.2, WAIT ; cho cho den khi STB=0 thi lam lenh tiep theo( cho phep du lieu doc vao )
tuc du lieu da san sang
SETB P0.1 ;IBF = 1, ko nhan du lieu nua
MOV A, P1 ;doc va cat vao DPTR
MOVX @DPTR, A ;
CLR P0.1 ;luc nay du lieu tren Latch da het; IBF=0
SETB P0.2 ;STB=1
INC DPTR ;tro den o nho tiep theo
MOV A, DPL ;
CJNE A,#0AH, BATDAU ;doc du 10 byte thi dung lai
SJMP $
END

;BAI 18: viet chuong trinh con tao byte checksum cua n byte trong bo nho (n<65536)
; bang cach ADD cac byte voi nhau
;INPUT : DPTR => o nho R2,R3 => do dai (R3=byte cao )
;OUTPUT : byte checksum trong A
; thanh ghi thay doi : khong

org 0h
PUSH 00H
PUSH 02H
PUSH 03H
PUSH DPH
PUSH DPL
MOV DPTR, #1000H ;( bat dau tu o nho 1000H)

Page: 8
C:\Users\VietHoang\Downloads\B1\B1.asm

main:
mov 20H,r2 ; chuen gia tri cua thanh ghi R2 vao o nho byte_l ( 20H)
mov 21H,r3 ; chuyen gia tri thanh ghi R3 vao o nho byte_h ( 21H)
mov r2,#0 ;
mov r3,#0 ;
mov r0,#0; ; reset gia tri cac thanh ghi R0, R2 ,R3 ve 0 de chuan bi tinh toan( R0
la bien tong cua cac byte )
checksum: ; ham checksum
movx a,@dptr ; chep gia tri cua o nho tro boi DPTR vao thanh ghi A
add a,r0 ; cong gia tri cua R0 vao o nho do
mov r0,a ; chep lai ket qua vao thanh ghi R0
inc dptr ; tang DPTR de tro vao o nho tiep theo ( byte tiep theo)
clr c ; xoa co nho C
mov a,r2 ; chep gia tri cua R2 vao A
add a,#1 ; cong gia tri cua R2 voi 1
mov r2,a ; chuyen ket qua vao lai R2
mov a,r3 ; chuyen gia tri cua thanh ghi R3 vao thanh ghi A
addc a,#0 ; cong gia tri cua thanh ghi A voi co nho C
mov r3,a ; cong R3 voi co nho C
mov a,r3 ; kiem tra xem R3 da vuot byte cao chua
cjne a,21H,checksum ;
mov a,r2 ;
cjne a,20H,checksum ; neu vuot qua byte cao roi thi kiem tra xem R2 da vuot byte thap
chua
mov a,r0 ;
CPL A;
ADD A, #1 ; tao ma bu 2 cho tong
POP DPL
POP DPH
POP 03H
POP 02H
POP 00H
here: jmp here
end

; BAI 19 :viet chuong trinh con dao vi tri hai nua byte cua n o nho tro boi DPTR
; INPUT : DPTR=> o nho
;R3=n
;thanh ghi khong thay doi

;do gia tri thanh ghi khong thay doi nen phai dung PUSH va POP
DAO_VI_TRI:
PUSH DPL ; cat gia tri ban dau cua DPL vao ngan xep
PUSH DPH ; cat gia tri ban dau cua DPH vao ngan xep
PUSH A ; cat gia tri ban dau cau A vao ngan xep
PUSH 03H ; cat gia tri ban dau cau 03H vao ngan xep
CLR A ; xoa thanh ghi A
LOOP: ;
MOVX A,@DPTR; truyen gia tri cua o nho ma DPTR tro den va luu vao thanh ghi A
SWAP A ; dao vi tri 4 bit cao cho 4 bit thap
MOVX @DPTR, A ; gan lai gia tri cua A vao o nho mà DPTR tro den
INC DPTR ; tang len o nho tiep theo
DJNZ R3, LOOP ; lap tro den khi het b byte

POP 03H ; lap lai gia tri ban dau cua 03H
POP A ;lap lai gia tri ban dau cua A
POP DPL ;lap lai gia tri ban dau cua DPL
POP DPH ;lap lai gia tri ban dau cua DPH
RET

;BAI 20 :viet chuong trinh con cong 10 so BCD. ket qua luu o dang ASCII
; INPUT : R1 => dia chi dau , R3 => do dai
; OUTPUT : R0 =>ket qua

Page: 9
C:\Users\VietHoang\Downloads\B1\B1.asm

TONG_10_SO:
MOV R6,#0 ; R6 luu hang tram
MOV R7,#0 ; R7 luu hang chuc, hang don vi
MOV R3,#10 ; 10 so BCD de bai cho
CLR C ; xoa co nho C
MOV A,#0 ; xoa thanh ghi A
CONG:
ADDC A,@R1 ; A = A + so BCD + CY
DA A ; Hieu chinh so BCD
MOV R7,A ; luu hang chuc hang don vi vua tinh vao R7
MOV A,#0 ; xoa thanh ghi A
ADDC A,R6 ; cong A voi co nho C ra hang tram
DA A ; hieu chinh so bcd
MOV R6,A ; luu hang tram vao R6
INC R1; tang len so tiep theo de cong
DJNZ R3, CONG ; lap cho den khi cong het 10 so
CONVERT: ; chuyen so BCD sang ASCII
MOV A, R6 ;
ADD A,#30H; chuyen hang tram
MOV @R0,A ;

INC R0 ; tang dia chi len

MOV A,R7 ;
SWAP A ;
ANL A,#0FH ; chuyen hang chuc
ADD A,#30H ;
MOV R0,A ;

INC R0 ; tang dia chi len

MOV A,R7 ;
ANL A,#0FH ;
ADD A,30H ;chuyen hang don vi
MOV @R0,A ;
RET

;Bai 21: Viet chuong trinh con 16 byte tu ADC, cat vao bo nho bat dau boi R0.
; Doc so lieu khi bit 0 cua thanh ghi trang thai ADC_Status = 1 (Ready). Bit se phai x
oa bang phan mem

;CS noi voi P2.2


;WR noi voi P2.0
;INTR nôi voi P2.3
;RD noi voi P2.1
DOC_DU_LIEU:
MOV R7,#16h ; doc 16 byte tu ADC
CLR P2.2 ; CS=0
CLR P2.0 ; WR=0
LOOP:
SET P2.3; INTR =1 thong bao chua chuyen doi xong
SET P2.0; WR =1 bat dau chuyen du lieu tu ADC
CLR P2.1;RD=0 ; khong cho phep ADC doc
WAIT: JB P2.3, WAIT ; thoat khoi vong lap WAIT khi INTR =0 ( CHUYEN DOI XONG)
CLR P2.0 ; WR =0
SETB P2.1 ; cho phep ADC doc
MOV @R0, P0 ; du lieu doc se duoc gui qua P0 va duoc luu vao R0
INC R0 ; tang R0 len de luu byte tiep theo
DJNZ R7, LOOP; lap cho den khi het 16 byte
RET

Page: 10
C:\Users\VietHoang\Downloads\B1\B1.asm

;BAI 22: Viet chuong trinh con doi n so BCD trong bo nho ngoai tu dia chi 4000H sang 2n
byte ASCII cat tu dia chi 6000H
;
;
DOI_BCD_ASCII:
MOV R0,#0H ;bien dem so byte ASCII
MOV R3,#0H ;R3 la bien dem so, dem so byte BCD
MOV R4,#n ;luu n so BCD can doi vao R4
LOOP:
MOV DPH,#40H ;DPH = 40H
MOV DPL,R3 ;DPL = R3, dia chi o nho duc tro boi DPTR la 40xxH , voi xx la gia tri tro
ng thanh ghi R3
MOVX A,@DPTR ;chuyen gia tri tu o nho vao A

ANL A,#0FH ;
ADD A,#30H ;chuyen so BCD sang so ASCII cho 4 bit thap
MOV R1,A ;luu ma ASCII cua 4byte thap vao R1

MOVX A,@DPTR ;
ANL A,#11110000B ;
SWAP A ;chuyen BCD sang ASCI cho 4 bit cao
ADD A,#30H ;
MOV R2,A ;luu ma ASCII cua 4 bit cao vao R2

MOV DPH, #60H ;


MOV DPL, R0 ;dat dia chi bat dau cho DPTR la 6000H, de luu ma ASCII
MOV A,R1 ;
MOVX @DPTR,A ;luu ma ASCII cua 4 bit thap
INC R0 ;tang R0 len de luu vao o nho tiep theo
MOV DPL, R0 ;
MOV A,R2 ;
MOVX @DPTR,A ;luu ma ASCII cua 4 bit cao

INC R3 ;tang R3 len, tiep tuc chuyen byte BCD tiep theo
DNJZ R4,LOOP ; chuyen du n byte BCD thi dung lai
RET

;BAI 23: Viet chuong trinh xoa n byte trong bo nho ngoai. Dia chi bat dau tu 8000H
; Phan biet khi : n<256
; 256<n<65536
; n>65536
ORG 000H
MOV DPTR,#8000H ;dat dia chi dau cho DPTR
MOV R7,#n ;chon la chuyen n byte
LOOP:
MOVX @DPTR,#0 ;xoa o nho trong DPTR
INC DPTR ;tang len o nho tiep theo
DJNZ R7, LOOP ;xoa den khi du n byte thi dung lai
END
;neu n<256 => chi can dung 1 thanh ghi 8bit R0 -> R7
;neu 256<n<65536 => can dung 2 thanh ghi 8 bit
;neu N>65536 => can dung nhieu hon 2 thanh ghi 8 bit

;BAI 24: viet chuong trinh tao 10 xung, tan so bat ky phat ra tu bit 0 va bit 1
; cua cong P0 cua MCS-51. xung chi phat ra trong khi bit P1.1=0

; PHAT XUNG THEO CACH THAY DOI MUC LOGIC


org 0h
main:
setb p1.1
clr p0.0
clr p0.1

Page: 11
C:\Users\VietHoang\Downloads\B1\B1.asm

start:
mov r0,#10h ; phat 10 xung
jb p1.1,$ ; thoat khoi vong lap khi P1.1 =0 se nhay tiep xuong duoi
pulse:
nop ;dung 1 chu ki may
nop
setb p0.0 ; P0.0=1
setb p0.1 ;P0.1 =1
nop
nop
clr p0.0 ; P0.0 =0
clr p0.1 ;P0.1 =0
djnz r0,pulse; lap cho den khi phat du 10 xung
jnb p1.1,$ ; lap tai cho xem den khi P1.1=1 thi thoat
jmp start ; nhay den start cho lan lap tiep theo
end

;BAI bai 25 : viet chuong trinh tim so lan lap cua mot byte cho truoc (trong thanh ghi B)
;trong n byte cua bo nho voi R1 = dia chi dau; R2 = do dai

;dia chi luu o r1


;do dai n luu o r2
org 0h
mov r7,#0 ; coi r7 la bien dem so lan lap
main:
clr c; xoa co nho c
mov a,@r1 ; chuyen gia tri can so sanh voi b lap vao a
subb a,b ; tru gia tri cua b cho a de so sanh ket qua luu vao a
jz find ; neu a=0 thi se nhay den find (trung voi b)
jmp check ; nhay den check de kiem tra dia chi tiep theo
find:
inc r7 ; tang so lan lap len
check:
inc r1 ;tang den dia chi tiep theo
djnz r2,main ; lap main cho den khi het do dai chuoi
here: jmp here ; dung vxl tai cho
end

;BAI 26 : viet chuong trinh con tinh gia tri trung binh cua 8 so 1 byte
; cac so nam trong bo nho dia chi tu 30h - 37h ket qua cat trong A chua dia chi dau
; ket qua luu trong acc

tinhtb:
mov r0,#30h ; dia chi luu so dau tien cua 8 so
mov r2,#8d ; tong so can tinh gia tri trung binh
mov r3,#0 ; luu so du
mov r1,#0 ; luu thuong
tinh:
mov a,@r0 ; nap so dau tien vao a
mov b,#8d ; nap 8 vao b de tinh trung binh
div ab; chia a cho b, ket qua luu o a , so du luu o b
add a,r1 ; cong thuong truoc voi thuong vua tính
mov r1,a ; luu thuong vao r1
mov a,b ; chuyen so du vua tính vao a
add a,r3 ; cong voi so du truoc
mov r3,a ; luu so du vao r3
inc r0 ; tang len so tiep theo
djnz r2,tinh; lap tinh cho den khi het 8 so
trungbinh:
mov a,r3 ; nap tong so du vua tinh vao a
mov b,#8d
div ab ; chia a cho 8
add a,r1 ; cong thuong vua tinh vao a ra thuong

Page: 12
C:\Users\VietHoang\Downloads\B1\B1.asm

ret

;BAI 27: viet chuong trinh con dich 1 so m byte cua bo nho trong
; n vi tri theo lenh RL
; co R0 la dia chi dau, byte thap
; bit cao nhat cua byte cao se dich vao bit thap nhat cua byte thap

dichbit:
mov r3,#n ; so vi tri can dich
mov r0,#30h ; gia su dia chi dau bat dau tu 30h
lapngoai:
clr c ; xoa co nho c
mov r2,#m ; so co m byte
laptrong:
mov a,@r0 ; nap gia tri byte dau tien vao a
rlc a ; dich phai a voi co nho c (gia tri co c se dua vao bit 0, bit0 => bit 1...., b
it 7 sang co nho c)
mov @r0,a ; luu gia tri vua dich vao r0
inc r0 ; tang den byte tiep theo
djnz r2,laptrong ; lap laptrong cho den khi dich het m byte
mov ro,#30h ; lay lai byte dau tien vao r0
mov a,@r0
addc a,#0h ; cong them co nho c vao byte dau tien (co nho c luc nay la bit7 cau byte t
hu m)
mov @r0,a ; lu lai vao 30h
djnz r3,lapngoai; lap lapngoai cho den khi dich het n vi tri
ret

;BAI 28 : viet chuong trinh nhan thanh ghi R0 voi 1 so 2 byte trong bo nho
;neu thay R0 = dptr hay trinh bay huong giai quyet

; 20h 21h
; r0
;------------------------
; B_1 A_1
; B_2 A_2
;------------------------
; r5 r6 r7
nhan2so:
mov r1,#21h ; nap dia chi 21h vao r1 (21h la LSB)
mov b,r0 ;nap gia tri thanh ghi r0 vao b
mov a,@r1 ; nap gia tri cua o nho ma r1 tro den
mul ab ; byte thap luu vao a, byte cao luu vao b
mov r7,a ; luu byte thap vao r7 (A_1)
mov r6,b; luu byte cao vao r6 (B_1)
dec r1 ; giam r1 den 20h (MSB)
mov b,r0 ; tuong tu nhu byte LSB
mov a,@r1
mul ab ; byte thap luu vao a (A_2), byte cao luu vao b (B_2)
add a,r6 ; cong hang chuc B_1 + A_2 luu vao a
mov r6,a ; nap gia tri cua tinh vao r6
mov a,b ; nap B_2 vao a
addc a,#0 ; cong them co nho c neu phep tinh hang chuc du 1
mov r5,a ; hang tram
ret

;BAI 29 : hoan thien chuong trinh con dao dau n byte trong bo nho (n<256) sau
; SBR: dao dau n byte
; Input : R1 = dia chi dau, R2 = dia chi cuoi
; thay doi : none

Page: 13
C:\Users\VietHoang\Downloads\B1\B1.asm

;r1 la dia chi dau


; r2 la dia chi cuoi
tinhdodai:
mov a,r2 ; nap dia chi cuoi vao a
subb a,r1 ; tru dia chi cuoi cho dia chi dau R2-R1
add a,#1 ; cong theo 1 ra do dai cua so
mov r3,a ; nap vao r3
tran:
mov a,@r1 ; nap gia tri dau vao a
cpl a ; dao dau a(ma bu 1)
add a,#01h ; cong them 1 ra ma bu 2
mov @r1,a ; nap vao r1
inc r1 ; tang den gia tri tiep theo
djnz r3,tran ;lap cho den khi het do dai cua so
ret

;BAI 30 : viet chuong trinh con cong 2 so 4 byte. hai so deu trong bo nho
; ket qua cat vao so dau. chu y byte MSB duoc cat tai o co dia chi nho

; r0 luu so hang 1
; r1 luu so hang 2
CTCON:
mov r0,#13h ; nap gia tri so hang 1
mov r1,#23h ;nap gia tri so hang 2
mov r7,#n ; so co n byte
clr c; xoa co nho c
lap:
mov a,@r0 ; nap so hang 1 vao a
addc a,@r1 ; cong voi so hang 2 va co nho c
mov @r0,al ;luu lai vao o nho chua so hang 1
dec r0 ; den byte tiep theo cua so hang 1
dec r1 ; den byte tiep theo cua so hang 2
djnz r7,lap ; lap cho den khi het n byte
clr a; xoa a
addc a,#0h ; cong a voi co nho c la so nho cua byte thu n
mov @r0,a; nap vao o nho cuoi cung cua r0
ret

Page: 14

You might also like