ĐỀ 30
;chuong trinh cong 2 so 4 bytes
;bai1
;dia chi so 1: 49 ->54
;dia so 2: 60->64
;MSB tai o nho co dia chi nho
org 50h
mov R0,#54H
mov R1,#64H
mov R2,#4
clr C
lap:
mov A,@R0
addc A,@R1
mov @R0,A
dec R0
dec R1
DJNZ R2,lap
END
ĐỀ29
;dao dau n byte
; r1 dia chi dau
; r2 dia chi cuoi
mov R1,#50H
mov R2,#100H
lap:
mov A,@R1
cpl A
inc A
mov @R1,A
inc R1
cjne R1,#100h,lap
END
ĐỀ 28
;nhan thanh ghi R0 voi 1 so 2 byte trong bo nho
;coi byte cao la LSB
mov r1,#21h
nhan_R0:
mov b,r0
mov a,@r1
mul ab
mov r7,a
mov r6,b
dec r1
;r7 chua byte thap
;r6 chua byte cao
mov b,r0
mov a,@r1
mul ab
add a,r6
mov r6,a
;cat lsb vao r6
mov A,B
addc A,#0
mov r5,A
;cat msb vao r5
END
ĐỀ 27
;dich so m byte bo nho trong di n vi tri theo lenh RL
;R0 dia chi dau byte thap 20h->22h
; bit cao nhat cua byte cao duoc dich vao bit thap nhat cua byte thap
;gia su co 3 byte, quay 10 lan
mov R7,#10h
dich:
mov R0,#20h ;nhap dia chi byte cao
mov a,@R0
rlc a
;lay co nho cy
mov R0,#22h ; lay byte thap
mov R6,#3
lap:
mov a,R0
rlc a
mov @R0,a
dec R0
djnz R6,lap
djnz R7,dich
here:
sjmp here
ĐỀ 26
;DE26 (DONE)
;Tinh gia tri trung binh cua 10 so 1 byte
;So dau tien o gia tri thap nhat
;gia tri trung binh luu o R2
GiatriTB:
MOV R0,#30h
R0
MOV R7,#10
MOV R2,#0
MOV R3,#0
loop:
MOV A,@R0
MOV B,#10
DIV
AB
vao A, so du luu vao B
ADD A,R2
;nhap dia chi so dau tien vao
;nhap bo dem
;luu thuong so
;luu so du
;chia A cho B, ket qua luu
;Cong cac gia tri thuong so
MOV R2,A
;va luu vao R2
MOV A,B
ADD A,R3
;Cong cac so du va luu vao R3
MOV R3,A
INC R0
;Tang R0 them 1 don vi
DJNZ
R7,loop
;Giam R7 1 don vi, nhay
den nhan loop neu R7#0
hieuchinh:
MOV A,R3
MOV B,#10
DIV AB
ADD A,R2
MOV R2,A
ĐỀ25
;tim so lan lap cua 1 byte cho truoc trong B tim trong n byte bo nho
; R1= dia chi dau R2=do dai
mov R7,#0
lap:
mov A,@R1
cjne A,B,tiep
inc R7
tiep:
djnz R2,lap
here: sjmp here
END
ĐỀ 24
;tao 10 xung, tan so bat ki phat ra tu p0.0 p0.1
; xung chi phat ra khi p1.1=0
mov R7,#10
setb P1.1
mov P0,#00h
loop:
mov R6,250 ; tao delay
wait: jb P1.1,wait
cpl P0.0
cpl P0.1
delay: djnz R6,delay
;cau lenh het 2us =>delay 500us
cpl P0.0
cpl P0.1
djnz R7,loop
END
ĐỀ 23
;viet chuong trinh xoa n byte trong bo nho ngoai
;dia chi bat dau tu 8000H, n<256 co the dung bo dem R0-R7 8bit
n equ 50
mov dptr,#8000h
mov R7,#n
mov A,#00h
lap:
movx @dptr,A
inc dptr
djnz R7,lap
ret
END
;viet chuong trinh xoa n byte trong bo nho ngoai
;dia chi bat dau tu 8000H, 256
;n>65536 ta phoi hop nhieu thanh ghi 8 bit
n equ 510
mov dptr,#8000h
mov R6,#2
lapngoai:
mov R7,#255
laptrong:
mov A,#0
movx @dptr,A
inc dptr
djnz R7,laptrong
djnz R6,lapngoai
ret
END
ĐỀ 22
;viet chuong trinh con doi n so BCD trong bo nho ngoai tu dia chi 4000H sang 2n byte dang
ASCII
;cat tu dia chi 6000H
;45->34 35
n equ 20
mov R7,#n
mov R0,#10h
mov dptr,#4000h
lap:
movx A,@dptr
;Luu gia tri ma DPTR tro toi vao A
anl A,#0fh
;xoa nua cao
add A,#30h
;35h
mov @R0,A
inc R0
; Tro den vi tri tiep theo
movx A,@dptr
swap A
anl A,#0fh ;xoa nua thap
add A,#30h
;34h
mov @R0,A
inc dptr
inc R0
djnz R7,lap
mov dptr,#6000h
lap2:
dec R0
mov A,@R0
n --> 1
movx @dptr,A
inc dptr
CJNE R0,#10,lap2
;tro den #6000 de luu cac so dang ASCII
;Luu lan luot cac so ASCII vao @DPTR Tu so thu
END
ĐỀ 21
;viet chuong trinh doc 16byte tu adc, cat vao bo nho bat dau boi R0
;doc so lieu khi bit 0 cua thanh ghi trang thai ADC_status =1
;bit phai xoa bang phan mem
;coi p0 la port in
;chan wr(p2.0) noi voi soc, rd(p2.1) noi voi OE, cs(p2.2), int(p2.3) voi EOC
mov r7,#16
clr P2.2
;chon ADC
lap:
clr P2.1
setb p2.0
NOP
NOP
clr p2.0
;dung chuyen doi
;kiem tra suon len cua EOC
wait0:
jb p2.3,wait0
;doi EOC dat tich cuc thap
wait1: jnb p2.3,wait1
;doi EOC dat tich cuc cao
setb p2.1 ;cho phep doc tu ADC
NOP
NOP
mov @R0,P0
NOP
inc R0
clr P2.1
; dung doc ADC
djnz R7,lap
ĐỀ 20
;cong 10 so BCD, ket qua o dang ASCII
;input: R1 dia chi dau, R3 do dai, output:
sumhi equ 59h ; dia chi o nho
sumlo equ 60h
mov R0,#30h
mov R3,#10
clr C
mov A,#0
mov sumhi,#30h ;noi dung o nho
lap:
add A,@R1
da A
jnc khongnho
inc sumhi
khongnho:
inc R1
djnz R3,lap
mov sumlo,A
;hieu chinh ascii sumlo o bai 9
ĐỀ 19
;dao vi tri 2 nua byte cua n o nho tro boi DPTR,R3=n
;thanh ghi thay doi: khong
push Acc
push 3
push dph
push dpl
clr A
lap:
movx A,@dptr
swap A
movx @dptr,A
inc dptr
djnz R3,lap
pop dpl
pop dph
pop 3
pop Acc
ret
END
ĐỀ 18
;ta0 byte checksum trong bo nho(n<65536) bang add cac byte
;dptr-> o nho, R2(H) R3(L): do dai sau
;output: byte checksum trong A
;thanh ghi thay doi: khong
tao_checksum:
push 1
push 2
push 3
push dph
push dpl
push Acc
mov R1,#0
lap:
movx A,@dptr
add A,R1
mov R1,A
inc dptr
dec R3
cjne R3,#0FFh,jump
dec R2
;giam R2 neu R3 giam tu 00h xuong 0FFh
jump:
cjne R2,#0,lap
cjne R3,#0,lap
pop Acc
pop dpl
pop dph
pop 3
pop 2
pop 1
END
ĐỀ 17
;doc 10 byte tu p1 cua mcs-51 theo che do doi thoai
;p0.1=ibf,p0.2=stb, so lieu doc duoc cat vao bo nho tro boi DPTR
setb P0.2
mov dptr,#9000h
mov R7,#10
lap:
jb p0.1,lap
mov A,P1
movx @DPTR,A
clr P0.2
setb P0.2
inc dptr
djnz R7,lap
END
ĐỀ16
; viet chuong trinh mcs-51 nhan 1 chuoi ki tu tu cong noi tiep bat dau ki tu #STX,ket thuc la
#EOT
;cat vao bo nho tro boi dptr
;kiem tra tinh san sang cua so lieu
mov TMOD,#20h ; chon timer 1, che do 2, tao baudrate
setb TCON.6
mov SCON,#50h ; chon mode 2, cho phep thu
STX equ 30h
EOT equ 3Fh
mov SBUF,#STX
wait:
jnb RI,wait
;cho co RI len 1 khi bo dem bao day
clr RI
;xoa Ri bang phan mem
mov A,SBUF
;dua du lieu tu bo dem sang A
movx @dptr,A
inc dptr
cjne A,#EOT,wait
here:
sjmp here
END
ĐỀ 15
;dieu khien timer 0 tao ngat de tao xung vuong 50Hz tai bit P1.5
;thach anh tan so 12Mhz => tan so timer 1Mhz
; so nhip dem trong thoi gian muc cao la 10000 => dung mode 1 dem 16 bit
;gia tri nap vao thanh ghi là 65535-10000=55536D=D8F0h
mov tmod,#02h ; chon timer 0, che do 1
setb p1.5
lap:
mov tl0,#0f0h
mov th0,#0d8h
setb tr0
wait: jnb tf0,wait
clr tf0
clr tr0
cpl p1.5
sjmp lap
END
ĐỀ 14
;tim dia chi offset cua 1 so 1 byte(trong B) cho truoc trong mien nho dia chi 1000->1200
;truong hop khong tim thay, tim thay nhieu so
;chua debug duoc
mov dptr,#1000h
mov R0,#0
;dem so bien tim thay
mov R1,#20h
;luu gia tri vi tri cua bien tim thay
mov R7,#0
;la bien dem
lap:
movx A,@dptr
xrl A,B
cjne A,#0,continue
; nhay den nhan neu k trung
inc R0
mov A,dph
mov @R1,A
inc R1
mov A,dpl
mov@R1,A
inc R1
continue:
inc R7
inc dptr
cjne R7,#200,lap
END
ĐỀ 13
; viet chuong trinh dieu khien cong p2 cua mcs-51 thanh cong ra doi thoai
; p1.0=OBF(tich cuc cao),p1.1=ack(thap)
;gui 10 byte trong bo nho dia chi dau trong dptr ra cong theo che do bat tay
setb p1.1
clr p1.0
mov r7,#10
lap:
movx A,@dptr
mov P2,A
wait: jb p1.1,wait
wait2: jnb p1.0,wait2
inc dptr
djnz r7,lap
end
ĐỀ 12
; nhan 100 byte so lieu tu cong noi tiep mcs-51
;cong duoc dinh nghia san che do, kiem tra tinh san sang cua cong
;so lieu cat trong dem dia chi dau trong dptr
;p0 là cong noi tiep, so lieu san sang khi p2.0=1 doc xong gui tin hieu tra loi bang 1 xung am
qua p2.1
setb p2.1
mov R7,#100
lap:
doi: jnb p2.0,doi
clr p2.0
mov A,p0
movx @dptr,A
clr P2.1
setb P2.1
inc dptr
djnz R7,lap
END
;gui tin hieu ack bao nhan xong giu lieu
ĐỀ 11
; viet chuong trinh doi n ky tu thanh chu hoa(neu dang o chu thuong)
;co dia chi dau trong R0, do dai là R7
;chu hoa là 41H-5a,chu thuong là 61H-7a
lap:
mov A,@R0
subb A,#061h
;anl A,#10000000b
;cjne A,#0,chutieptheo ;nhay neu co cy k phat len
jb Acc.7,chutieptheo
subb a,#20h
mov @R0,a
chutieptheo:
inc R0
djnz r7,lap
END
ĐỀ 10
ĐỀ 09
;cong 2 so 5 byte dàn ASCII ket qua dang ASCII luu vao so thu 1
; truong hop ket qua 6 byte ?
; byte LSB so thu 1 tai R0, LSB so thu 2 tai R1
;giong trong danh may
sobyte equ 5
mov R0,#20h
mov R1,#30h
mov R7,#sobyte
clr C
loop1:
mov A,@R0
swap A
anl A,#0f0h
mov @R0,A
mov A,@R1
swap A
anl A,#0f0h
mov @R1,A
jnc khongnho
add A,#10h
khongnho:
add A,@R0
da A
swap A
mov @R0,A
inc R0
inc R1
djnz R7,loop1
mov R0,#20h
mov R7,#sobyte
;doi sang ma ascii
loop2:
mov A,@R0
add A,#30H
mov@R0,A
inc R0
djnz R7,loop2
ĐỀ 08
; viet dieu khien timer 0 tao thanh mach chia tan so che do counter dau ra bit p1.0
;f=f/n => cho timer dem den n/2 thi cpl p1.0
; vi du chia 30 : dem tu fff1h ->ffffh
;lowbyte equ F1h
;highbyte equ FFh
start:
setb p1.0
;mov IE,#10000010b
; cho phep ngat timer 0
mov tmod,#00000101b ; timer 0, che do counter mode 1 auto reload
mov tl0,#0F1h
mov th0,#0FFh
setb tr0
loop:
JNB TF0,loop
clr TF0
CPL P1.0
SJMP loop
END
ĐỀ 07
; dich 1 so n byte di m vi tri theo cach cua lenh RR
;R0 dia chi dau byte thap 20h->22h
; bit thap nhat cua byte thap duoc dich vao bit cao nhat cua byte cao
;gia su co 3 byte, quay 10 lan
mov R7,#10h
dich:
mov R0,#22h ;nhap dia chi byte thap
mov a,@R0
rrc a
;lay co nho cy
mov R0,#20h ; lay byte cao
mov R6,#3
lap:
mov a,@R0
rrc a
mov @R0,a
dec R0
djnz R6,lap
djnz R7,dich
here:
sjmp here
ĐỀ 06
; viet chuong trinh con doi 2n chu so thap phna dang ascii thanh n byte dang BCD
;input R0, output: R1 byte lsb la byte cao
; BCD 0->9 ascii:30->39
mov r7,#20
lap:
mov A,@R0
anl A,#0fh
;xoa bo chu so 3 nam dau tien
mov @R1,A
dec R0
mov A,@R0
anl A,#0fh
swap A
add A,@R1
mov @R1,A
dec R1
dec R0
djnz R7,lap
; xoa bo chu so 3 tiep theo
END
ĐỀ 05
;viet chuong trinh tru 2 so 5 byte trong bo nho, ket qua cat vao so bi tru
;R0: dia chi dau so bi tru, R1: so tru
; thay doi:PSW
clr C
push Acc
mov R7,#5
lap:
mov A,@R0
subb A,@R1
dec R0
dec R1
djnz R7,lap
pop Acc
END
ĐỀ 04
; viet chuong trinh con cong 2 so BCD n chu so trong bo nho ket qua cat trong so hang dau
; luu y truong hop co nho, gia su n=20
;dia chi so dau trong R0, so thu 2 trong R1, byte cao la LSB
DC_so1
EQU 13h
DC_so2
EQU 23h
sobyte
EQU 4
CongNbyte:
MOV
r0,#DC_so1
hang 1
MOV r1,#DC_so2
2
MOV r7,#sobyte
clr
C
loop:
MOV A,@R0
ADDC
A,@R1
DA
A
MOV @R0,ADDC
DEC R0
DEC R1
DJNZ R7,loop
;r0 tro toi byte thap nhat cua so
;r1 tro toi byte thap nhat cua so hang
;so lan loop
;nap so hang 1 vao thanh ghi A
;cong voi so hang 2
;cat kq vao o nho tro boi R0
;giam R0 1 don vi
;giam R1 1 don vi
;giam R7 1 don vi va kt, re
nhanh neu R7=#0
here:
SJMP here
ĐỀ 03
;dem cac so duong trong mien nho ngoai tu 1000H->2000H so dem trong R2 va R3 ( R3 la
byte cao)
;so duong la so co bit D7=0
mov dptr,#1000h
mov R2,#0
mov R3,#0
mov R0,#4 ;nap bo dem
loop1:
mov R1,#250
loop2:
movx A,@dptr
anl A,#10000000b
cjne a,#00h,sotieptheo
inc R2
jnc sotieptheo
inc R3
sotieptheo:
inc dptr
djnz R0,loop1
djnz R1,loop2
END
ĐỀ 02
;viet chuong trinh con dem cac so am trong mien nho ngoai tro boi DPTR
;do dai trong R3, so dem trong R4
; so am la D7=1
mov R4,#0
loop:
movx A,@dptr
anl A,#10000000b
cjne A,#10000000b,sotieptheo
inc R4
sotieptheo:
inc dptr
djnz R3,loop
end
ĐỀ 01
;viet chuong trinh dem 100 xung tu bit P0.6
; bat dau dem khi bit P0.5 chuyen tu 0 len 1
;dem xong dat lai bit P0.7 bang 1
clr p0.7
clr p0.5
mov tmod,#00000100
;timer 0 mode 0: Counter che do 8 bit
mov ie,#10000010
;cho phep ngat Timer0
mov TH0,#0ffh
mov TL0,#09bh
wait: jnb p0.5,wait
setb tr0
loop:
jnb TF0,loop
clr TF0
setb P0.7