Tải bản đầy đủ (.doc) (21 trang)

Bài tập Kỹ thuật vi xử lý pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (149.11 KB, 21 trang )

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


mov Ro ,#00H
lap :

Start
dptr #0100H
Ro #00H
A @dptr
A A
A A + #01H
@dptr A
dptr + 1
Ro + 1
Ro =
64H
Ro =
64H
En
d
No
Yes
Yes
movx A , @dptr
cpl A
add A , #01H
movx @dptr , A
inc dptr
inc Ro
cjne R0 , #64H , lap
End
===================================

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 =

32H
En
d
org 001bh
nop
reti ; int timer1
org 0023h ; ngat truyen tin khong dung
nop
reti
org 0100h
Start:
Crl EA
mov A , #50H
mov dptr , #1234H
mov R1 , #00H
lap :
mov A , @R0
mov R2 , A
movx A , @dptr
mov @R0 , A
mov A , R2
movx @dptr , A
inc dptr
inc R0
inc R1
cjne R1 , #32H , lap
End
No
Yes
Cjne

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

R0 + 1
R1 + 1
R2 + 1
R2 = #
04H
End
Start:
Clr EA
Clr C
mov R0 , #40H
mov R1 , #50H
mov R2 , #00H
lap :
mov A , @R0
addc A , @R1
da a
mov @R0 , A
inc R0
int R1
inc R2
cjne R3 , #04H , lap
End
========================
Bài 4 : Viết chương trình trừ hai số 8 byte kết quả cất vào ô thứ 2 . Biết số thứ nhất đặt tại ô nhớ
60H tại Ram trong , số thứ 2 đặt tại Ram ngoài 1000H.
No
cjne
Yes
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 :
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)

@dptr A
dptr + 1
R0 + 1
R1 + 1
R1 = #08H
End
lap:
movx A , @dptr
subb A , @R0
movx @dptr , A
inc dptr
inc R0
inc R1
cjne R1 , #08H , lap
end
Bài 5 : viết chương trình sử dụng timer tạo xung tần 100HZ tại chân P1.0 . Biết xung nhịp thạch
anh 12 MHZ ( Ton = 50% , Toff = 50% ).
Ta có :
Xung tại chân P1.0 có :
f
xung
= 100 Hz => T
xung
= 0,01 => thời gian cao và thấp là : 0,5 T = 0,005 = 5000 µs
Bộ định thời có :
f
đt
=
1
12

.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

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 :
CLR EA
CLR P1.0
MOV TMOD , #10H
MOV TL1 , #1AH
MOV TH0 , #0ECH
SETB TR0
BACK : JNB TFO , BACK
MOV TL1 , #1AH
Start
CLR P1.0
TMOD #10H
TL0 #78H
TH0 #0ECH
TR0 = 1
TF0 = 0
TL0 #78H

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

FFFFH - 3CBOH = 16
4
– 15536 = 50 000 lần tức là : 50 000 . 1µs = 0.05s = 50 ms
Vậy ta cần thiết kế sao cho bộ timer đếm được : 700 / 50 = 14 lần . rồi chân P1.7 đổi trạng thái
và đếm được : 300/50 = 6 lần . cứ như thế ta sẽ đáp ứng được yêu cầu của bài.
NO
NO
NO
YES
YES
YES
JNB
JNB
CJNE
SJMP
SJMP
Chương trình :
Start
TMOD #01H
TH0 #3CH
TL0 #0B0H
P1.7 = 1
R3 # 00H
TR0 = 1
TF0 = 0
TH0 #3CH
TL0 #0B0H
R3 + 1
R3 =
#0EH

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

MOV TH0 , #3CH
MOV TL0,#B0H
INC R3
CJNE R3 , LAP
CPL P1.7
JNB P1.7 , TOFF
MOV R0,#0EH
SJMP LAP
TON: MOV R0,#06H
SJMP LAP
END
Bài 7 : Viết chương trình con đọc 500 byte dữ liệu từ cổng nối tiếp và cất vào vùng nhớ có địa
chỉ đầu 456H . Biết cổng nối tiếp đã được khởi tạo sẵn , cổng cho phép đọc khi cờ RI = 1 , và cờ
RI sẽ tự xóa khi đọc xong 1 byte.
No
No
No
Yes
Yes
Yes
cjne
cjne
jnb
Giải thuật và chương trình :
Read:
mov R0 , #00H
mov R1 , #00H
mov dptr , #0456H
lap : jnb RI , lap
mov A , sbuf

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

Yes
Yes
djnz
No
Bài 8 : viết chương trình điều khiển đèn giao
thông tại 1 ngã tư theo yêu cầu :
Điều khiển 0 là đèn sáng , 1 là đèn tắt.
ta có sơ đồ điều khiển trạng thái như sau :
1 2 3 4 1
X1 P1.0 0 1 1 1 0
V1 P1.1 1 0 1 1 1
Đ1 P1.2 1 1 0 0 1
X2 P1.4 1 1 0 1 1
V2 P1.4 1 1 1 0 1
Đ2 P1.5 0 0 1 1 0
Chương trình :
Org 0000h
.
.
.
reti
org 0100h
Start : ; back 1
mov TMOD,#01H
mov TH0,#3CH
mov TL0,#0B0H
mov R1 , #14H
mov R2 , #19H
start
TMOD #01H

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
R2 - 1
R2 = 0
djnz
Yes
setb P1.0
setb P1.1
setb P1.2
setb P1.3
setb P1.4
clr P1.5
setb TR0
back2 : lcall delay
djnz R2 , back2
setb P1.0
clr P1.1
mov R2 ,#03H
back2 : lcall delay
djnz R2 , back2
setb P1.1
clr P1.2
clr P1.3
setb P1.5
mov R2,#21H
back3 : lcall delay
djnz R2 , back3
setb P1.3
clr P1.4
mov R2,#03H
back4: lcall delay1s

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
.

.
.
reti
org 0100h
start :
clr EA
mov TMOD , #01H
mov TH0 , #3CH
mov TL0 , #0B0H
mov R0, #14H
mov P0, #20H
setb TR0
mov R1 , #10H
lcall lap
mov R1 , #00H
lcall lap
lap:
back: jnb TF0 back
mov TH0, #3CH
start
TMOD #01H
TH0 #3CH
TL0 #0B0H
R0 #14H
P0 #20H
TR0 = 1
R1 #10H
lap
R1 #00H
lap

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

P0 A
R2 =
#00H
ret

×