Bài tập dài Kỹ thuật vi xử lý
Họ và tên : Nguyễn Văn Hùng
Lớp : TBĐ1-K52
MSSV : 20071415
Email :
No
Yes
cjne
Bài 1 : Viết CT đảo dấu 100 byte dữ liệu từ ô nhớ 100H tại Ram ngoài :
chương trình :
Org 0000h
ljmp start
org 0003h ; int ex0
nop
reti
org 000bh
nop
reti ; int timer0
org 0013h ; int ex1
nop
reti
org 001bh
nop
reti ; int timer1
org 0023h ; ngat truyen tin khong dung
nop
reti
org 0100h
Start:
Crl EA
mov dptr , #0100H
Bài 2 : Viết chương trình chuyển 2 mảng dữ liệu
50 byte. Biết mảng 1 có địa chỉ 50H trong Ram
trong và mảng 2 có địa chỉ 1234H trong Ram
ngoài .
Chương trình :
Org 0000h
ljmp start
org 0003h ; int ex0
nop
reti
org 000bh
nop
reti ; int timer0
org 0013h ; int ex1
nop
reti
Start
R0 #50H
dptr #1234H
R1 #00H
A @R0
R2 A
A @dptr
@R0 A
A R2
dptr + 1
Ro + 1
R1 + 1
Ro =
Bài 3 : Viết chương trình cộng hai số BCD 4 chữ số trong Ram trong , kết quả cất vào số
thứ 1 . Biết số thứ nhất đặt tại ô nhớ 40H , và số thứ 2 đặt tại ô nhớ 50H
Chương trình :
Org 0000h
ljmp start
org 0003h ; int ex0
nop
reti
org 000bh
nop
reti ; int timer0
org 0013h ; int ex1
nop
reti
org 001bh
nop
reti ; int timer1
org 0023h ; ngat truyen tin khong dung
nop
reti
org 0100h
Start
C #00H
R0 #40H
R1 #50H
R2 #00H
A @R0
A A + @R1 + (C)
DAA
@R0 A
Ljmp start
org 0003h ; int ex0
nop
reti
org 000bh
nop
reti ; int timer0
org 0013h ; int ex1
nop
reti
org 001bh
nop
reti ; int timer1
org 0023h ; ngat truyen tin khong dung
nop
reti
Org 0100h
Start :
Clr EA
Clr C
mov R0 , #60H
mov R1 , #00H
mov dptr , #1000H
Start
C # 00H
R0 #60H
R1 #00H
dptr #1000H
A @dptr
A A - @R0 – (C)
.f
thạch anh
=
1
12
.12 ( MHZ ) = 1 MHZ từ đó tần số
T
đt
=
1
6
10
= 1µs
Số nhịp đồng hồ : n =
5000
1
= 5000 nhịp
Xác định giá trị nạp vào timer :
65536 – 5000 = 60536D = EC67H
Giá trị nạp vào là : TL0 = 78H ; TH0 = ECH.
Yes
No
JNB
SJMP
Chương trình :
ORG 0000H
LJMP START
ORG 0003H ; INT EX0
NOP
RETI
TH0 #0ECH
P1.5 P1.5
MOV TH0 , #0ECH
CPL P1.0
SJMP BACK
END
Bài 6 : Viết chương trình tạo xung 1HZ tại chân P1.7 . Biết xung nhịp thạch anh 12 MHZ
( T
on
= 70 % , T
off
= 30% )
Ta có :
Với f
thạch anh
= 12 MHZ thì theo trên ta có T
định thời
= 1µs
Xung tại chân P1.7 có :
f
xung
= 1 Hz => T
xung
= 1s => T
on
= 700 ms , T
off
= 300 ms
chọn giá trị ban đầu là : TL0 = B0H , TH0 = 3CH
từ đó ta có sau mỗi chu kỳ bộ timer đếm được
P1.7 P1.7
P1.7 = 0
R3 #06H
R3 #0EH
ORG 0000H
LJMP START
ORG 0003H ; INT EX0
NOP
RETI
ORG 000BH
NOP
RETI ; INT TIMER0
ORG 0013H ; INT EX1
NOP
RETI
ORG 001BH
NOP
RETI ; INT TIMER1
ORG 0023H ; NGAT TRUYEN TIN KHONG DUNG
OP
RETI
ORG 0100H
START:
MOV TMOD , #01H
MOV TH0 , #3CH
MOV TL0 , #0B0H
SETB P1.7
MOV R0 , #00H
SETB TR0
LAP: JNB TF0 , LAP
movx @dptr , A
inc dptr
int R0
cjne R0 , #FAH , lap
mov R0 , #FAH
inc R1
cjne R1 , #02H , lap
ret
read
R0 #00H
R1 #00H
dptr #0456h
RI = 1
A sbuf
@dptr A
dptr + 1
R0 + 1
R0 =
#FAH
R0 #FAH
R1 + 1
R1 =
#02H
ret
R2 = 0
No
No
djnz
djnz
sjmp
TH0 # 03CH
TLO #0B0H
R1 #14H
R2 #19H
P1.0 = 0
P1.1 = 1
P1.2 = 1
P1.3 = 1
P1.4 = 1
P1.5 = 0
TR0 = 1
R2 = 0
delay
R2 - 1
P1.0 = 1
P1.1 = 0
R2 #03H
delay
R2 -1
R2 = 0
P1.1 = 1
P1.2 = 0
P1.3 = 0
P1.5 = 1
R2 # 21H
delay
R2 - 1
P1 3 = 1
P1.4 = 0
R2 #03H
delay
No
No
Yes
Yes
jnb
djnz
djnz R2 , back4
ljmp back1
delay : jnb TF0 , delay
mov TH0,#3CH
mov TL0,#0B0H
mov R1 ,#14H
djnz R1 , delay
ret
TF0 =
1
TH0 #3CH
TL0 #0B0H
R1 #14H
R1 - 1
R1 =
0
ret
Bài 9 : viết chương trình hiển thị 2 LED 7 thanh đếm lùi từ 20s với sơ đồ phần cứng SV tự đề
xuất
sjmp
Chương trình :
Org 0000h
.
djnz
No
Yes
cjne
No
Yes
No
Yes
mov TL0 , #0B0H
mov R2 , #0AH
mov A , R1
djnz R0 , back
back1: dec R2
add A ,@ R2
mov P0 , A
cjne R2 , #00H , back1
ret
sjmp start
lap
TF0
=1
TH0 #3CH
TL0 #0B0H
R2 #0AH
A R1
R0 - 1
R0 =
#00H
R 2 – 1
A A + @R2