5. Bài 3: Start
Code: org 00h
nop
R0 #30H
sjmp start
R1 #60H
org 03h ;int ex0
R2 4D
nop
C 0
reti
org 0bh ;int timer0
A @R0 nop
A+@R1+C reti
@R0 A org 13h ;int ex1
R0+ 1 nop
R1 + 1 reti
R2-1 org 1bh ;int timer1
R2-1 nop
reti
R2 = 0 org 23h; int serial
nop
reti
org 50h
End
Start:
mov R0,#30H
6. mov R1,#60H
mov R2,4D
clr C
lap
acall cong
inc R0
inc R1
djnz R2,lap
jnc thoat
inc R3
thoat :
RET
cong:
mov A,@R0
addc A,@R1
da A
mov @R0,A
RET
END
7. Start
Bài 4:
Code: org 00h
Xóa cờ C
nop
R2 8D
sjmp start
R0 #30H
org 03h ;int ex0
dptr #1234H
nop
reti
A @R0
org 0bh ;int timer0
R1 @dptr
nop
A – R1
reti
@dptr A
org 13h ;int ex1
Dptr + 1
nop
R0 + 1
reti
R2 - 1
org 1bh ;int timer1
nop
reti
R2 = 0
org 23h; int serial
nop
reti
End start
clr C
mov R0,#30H
8. mov dptr,#1234H
mov R2,#8D
lap
acall tru
inc R0
inc R1
djnz R2,lap
jnc thoat
inc R3
thoat :
RET
tru:
mov A,@R0
mov R1,@dptr
sub A,R1
mov @dptr,A
RET
END
Bài 5: Tính toán :
Ta có: T = = 20ms
Nửa chu kỳ cho phần cao: 0,5.T = 10ms
9. 10
Số nhịp đồng hồ : n=
1μ
= 1000
(do xung nhịp thạch anh là 12Mhz nên ta sẽ tính được xung nhịp của vxl là
1Mhz)
Tính giá trị cần nạp TH và TL là: 65536 – 10000=55536
Chuyển sang mã hex là: D8F0
Vậy ta có giá trị cần nạp là TH = D8H và TL = F0H
Lưu đồ thuật toán:
10. Start
code: org 00h
Xóa P1.0 nop
TMOD #10H sjmp start
org 03h ;int ex0
nop
TL1 #0F0H
reti
TH1 #0D8H
org 0bh ;int timer0
TR1 1
nop
reti
no org 13h ;int ex1
TF1 = 0
nop
yes reti
org 1bh ;int timer1
Xóa TR1
nop
Đảo P1.7
reti
Xóa TF1
org 23h; int serial
sjmp nop
reti
org 50h
start :
mov tmod,#10H
again : mov TL1,#0F0H
11. mov TH1,#0D8H
setb SR1
back : jnb TF1,back
clr TR1
cpl p1.7
clr TF1
sjmp again
12. Bài 6: Tính toán:
Chu kỳ song T = = 1s
Thời gian của phần cao 0,7.T = 0,7s
,
Số xung nhịp là n = = 700000 > 216 do đó không thể nạp được
1μ
Giá trị của TL và TH. Nên ta phải sử dụng bộ đếm giữ chậm để tăng
được T. Giả sử ta giữ xung nhịp 20 lần khi đó số xung nhịp cần nạp
là 70000 do đó ta tính được giá trị nạp vào TH là 77H và TL là 48H
Mã lệnh:
org 00h
nop
sjmp start
org 03h ;int ex0
nop
reti
org 0bh ;int timer0
nop
reti
org 13h ;int ex1
nop
reti
org 1bh ;int timer1
13. Lưu đồ thuật toán:
Start nop
reti
org 23h; int serial
tmod #10H
nop
reti
R3 #20h
org 50H
TL1 #48h
start :
TH1 #77h
mov tmod,#10H
TR1 1
again : mov R3,#20h
mov TL1,#48H
TF1 = 0 no mov TH1,#77H
yes setb TR1
back : jnb TF1,back
Xóa TR1
clr TR1
Đảo P1.1
cpl p1.1
Xóa TF1
clr TF1
R3 - 1
djnz R3,again
no R3 = 0
yes
14. Start
Bài 7:
Giả sử baud = 9600 và XTAL=12Mhz
dptr #456H
Code:
R7 300D
org 50H
tmod #20H
start:
TH1 -3D
mov tmod,#20H
SCON #50H
mov TH1,#-3D
TR1 1
mov scon,#50H
mov dptr,#456H
mov R7,#300D
CLR RI
setb TR1
A SBUF
here : jnb RI,here
@dptr A
mov A,sbuf
Dptr + 1
mov @dptr,A
R7 - 1
clr RI
inc dptr
no R7 = 0 djnz R7,here
RET
yes
Ret