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
21 trang |
Chia sẻ: maiphuongtt | Lượt xem: 2750 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài tập dài Kỹ thuật vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 : hungbkpro_2007@yahoo.com
Bài 1 : Viết CT đảo dấu 100 byte dữ liệu từ ô nhớ 100H tại Ram ngoài :
cjne
Yes
No
Ro = 64H
Ro = 64H
A @dptr
A A
A A + #01H
@dptr A
dptr + 1
Ro + 1
Start
dptr #0100H
Ro #00H
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
End
nop
reti
org 0100h
Start:
Crl EA
mov dptr , #0100H
mov Ro ,#00H
lap :
movx A , @dptr
cpl A
add A , #01H
movx @dptr , A
Start
inc dptr
inc Ro
R0 #50H
dptr #1234H
R1 #00H
cjne R0 , #64H , lap
End
===================================
Bài 2 : Viết chương trình chuyển 2 mảng dữ liệu
A @R0
R2 A
A @dptr
@R0 A
A R2
dptr + 1
Ro + 1
R1 + 1
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 .
Yes
End
Ro = 32H
Chương trình :
Org 0000h
ljmp start
org 0003h ; int ex0
nop
reti
org 000bh
No
nop
reti ; int timer0
Yes
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 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
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
Start
Chương trình :
Cjne
Yes
No
End
R2 = # 04H
A @R0
A A + @R1 + (C)
DAA
@R0 A
R0 + 1
R1 + 1
R2 + 1
C #00H
R0 #40H
R1 #50H
R2 #00H
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 , #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.
End
R1 = #08H
A @dptr
A A - @R0 – (C)
@dptr A
dptr + 1
R0 + 1
R1 + 1
C # 00H
R0 #60H
R1 #00H
dptr #1000H
Start
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
cjne
org 001bh
nop
reti ; int timer1
org 0023h ; ngat truyen tin khong dung
nop
No
reti
Org 0100h
Yes
Start :
Clr EA
Clr C
mov R0 , #60H
mov R1 , #00H
mov dptr , #1000H
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ó :
fxung = 100 Hz => Txung = 0,01 => thời gian cao và thấp là : 0,5 T = 0,005 = 5000 µs
Bộ định thời có :
fđt = .fthạch anh = .12 ( MHZ ) = 1 MHZ từ đó tần số
Tđt = = 1µs
Số nhịp đồng hồ : n = = 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.SJMP
JNB
No
Yes
TL0 #78H
TH0 #0ECH
P1.5 P1.5
TF0 = 0
TL0 #78H
TH0 #0ECH
TR0 = 1
CLR P1.0
TMOD #10H
Start
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
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
( Ton = 70 % , Toff = 30% )
Ta có :
Với fthạch anh = 12 MHZ thì theo trên ta có Tđịnh thời = 1µs
Xung tại chân P1.7 có :
fxung = 1 Hz => Txung = 1s => Ton = 700 ms , Toff = 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 = 164 – 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.
SJMP
SJMP
CJNE
JNB
JNB
YES
YES
YES
NO
NO
NO
R3 #06H
R3 = #0EH
P1.7 P1.7
R3 #0EH
P1.7 = 0
TF0 = 0
TH0 #3CH
TL0 #0B0H
R3 + 1
TMOD #01H
TH0 #3CH
TL0 #0B0H
P1.7 = 1
R3 # 00H
TR0 = 1
Start
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:
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.
ret
R0 = #FAH
R1 = #02H
R0 #FAH
R1 + 1
A sbuf
@dptr A
dptr + 1
R0 + 1
RI = 1
R0 #00H
R1 #00H
dptr #0456h
read
Giải thuật và chương trình :
Read:
mov R0 , #00H
mov R1 , #00H
mov dptr , #0456H
lap : jnb RI , lap
jnb
mov A , sbuf
No
movx @dptr , A
Yes
inc dptr
cjne
int R0
cjne R0 , #FAH , lap
mov R0 , #FAH
inc R1
cjne R1 , #02H , lap
cjne
Yes
Yes
No
No
ret
Bài 8 : viết chương trình điều khiển đèn giao
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
start
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.
delay
R2 - 1
P1.0 = 1
P1.1 = 0
R2 #03H
R2 = 0
delay
R2 -1
R2 = 0
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
djnz
.
.
Yes
No
.
reti
org 0100h
Start : ; back 1
mov TMOD,#01H
mov TH0,#3CH
djnz
mov TL0,#0B0H
No
Yes
mov R1 , #14H
sjmp
djnz
No
R2 = 0
delay
R2 - 1
P1..3 = 1
P1.4 = 0
R2 #03H
P1.1 = 1
P1.2 = 0
P1.3 = 0
P1.5 = 1
R2 # 21H
R2 = 0
delay
R2 - 1
mov R2 , #19H
setb P1.0
setb P1.1
setb P1.2
djnz
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
Yes
setb P1.5
mov R2,#21H
back3 : lcall delay
djnz R2 , back3
setb P1.3
clr P1.4
mov R2,#03H
delay
back4: lcall delay1s
jnb
djnz R2 , back4
No
TF0 = 1
ljmp back1
delay : jnb TF0 , delay
Yes
mov TH0,#3CH
TH0 #3CH
TL0 #0B0H
R1 #14H
R1 - 1
mov TL0,#0B0H
djnz
mov R1 ,#14H
djnz R1 , delay
ret
No
R1 = 0
Yes
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
lap
R1 #00H
lap
R1 #10H
TMOD #01H
TH0 #3CH
TL0 #0B0H
R0 #14H
P0 #20H
TR0 = 1
start
Chương trình :
Org 0000h
.
.
.
reti
org 0100h
start :
clr EA
mov TMOD , #01H
mov TH0 , #3CH
sjmp
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
Yes
Y
No
Yes
No
cjne
No
Yes
Y
djnz
TF0 =1
ret
R0 = #00H
R2 = #00H
R 2 – 1
A A + @R2
P0 A
TH0 #3CH
TL0 #0B0H
R2 #0AH
A R1
R0 - 1
lap
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