- Chương trình trên thực hiện việc chia một số 16 bit cho một số 16 bit (nguồn là
16 bit)
- Phép toán quan trӑng là: DIV BX. Đây là phép toán chia với nguồn là BX (16
bit)
DIV BX sẽ tương đương với DXAX/BX. Vì DX = 0 nên phép toán được rút
gӑn lại là AX/BX.
- Sau khi thực hiện phép toán, AX lưu thương chuyển vào Q, DX lưu dư chuyển
vào R
- A, B, Q, R đều là biến được khai báo kiểu define word (kiểu từ 2 byte). A, B
chứa giá trӏ khởi tҥo. Q, R không chứa giá trӏ khởi tҥo
47 trang |
Chia sẻ: linhmy2pp | Ngày: 19/03/2022 | Lượt xem: 299 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tài liệu ôn thi và đáp án ngân hàng câu hỏi môn Vi xử lý - Vi điều khiển - Lê Hải Trung, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TR NG Đ I H C KỸ THU T CÔNG NGHI P
KHOA ĐI N T
B MÔN: TIN H C CÔNG NGHI P
TÀI LI U ÔN THI ậ ĐÁP ÁN NGỂN HÀNG CỂU H I
. H C PH N: VI X LÝ ậ VI ĐI U KHI N
. MÃ HP: TEE408
BIÊN SO N: LÊ H I TRUNG
THÁI NGUYÊN, 2015
ÔN THI VI X LÝ ậ VI ĐI U KHI N
PH N: VI ĐI U KHI N 8051
Các code mình vi t đ u đư test ho t đ ng bình th ng, s dụng ph n m m
Keil µVision 5 và Proteus 8.1. N i dung đ bài đ ợc l y t ngân hàng câu h i thi
k t thúc h c ph n VXL ậ VĐK, có bổ sung thêm m t số d ng bài th ng gặp.
Ph n I. Các bài toán led đơn, led 7 thanh (d ng cơ b n)
1. Thiết kế m ch gồm một công tắc và 2 LED 7 thanh. Hiển th số l n b m công
tắc từ 00 99 trên 2 LED.
org 0
;Khoi tao
mov p2, #0xFF
mov p3, #0
mov dptr, #maled
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
//(common anode)
Created by Lê Hải Trung – K49KMT – TNUT 1
hienthi macro ts1, ts2
mov a, ts1
movc a, @a+dptr
mov p2, a
setb ts2
clr ts2
endm
main:
jb p1.0, OK
inc r0
cjne r0, #100, SoSanh
mov r0, #0
SoSanh:
ChoDoi:
jnb p1.0, ChoDoi
OK:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
hienthi r1, p3.0
hienthi r2, p3.1
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 2
2. Viết ch ơng trình đếm số từ 00-99 hiển th lên 2 LED 7 thanh. Yêu c u kho ng
th i gian delay là 1s
org 0
//khởi tạo
mov r0, #0
mov p2, #0
mov dptr, #maled
jmp main
maled: db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h,
80h, 90h
hienthi macro led_data, pin_ic_chot
mov a, led_data
Created by Lê Hải Trung – K49KMT – TNUT 3
movc a, @a+dptr
mov p1, a
setb pin_ic_chot
clr pin_ic_chot
endm
main:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
hienthi r1, p2.0
hienthi r2, p2.1
call delay1s
inc r0
cjne r0, #100, main
mov r0, #0
jmp main
Created by Lê Hải Trung – K49KMT – TNUT 4
delay1s: //hàm delay 1 giây
mov r7, #20
mov tmod, #01h
Lap:
mov th0, #03ch
mov tl0, #0b0h
setb tr0
jnb tf0, $
clr tf0
clr tr0
djnz r7, Lap
ret
end
3. Thiết kế m ch đếm số l n n 1 công tắc trên chân p1.0 từ 0 9 hiển th lên 1
LED 7 thanh.
Created by Lê Hải Trung – K49KMT – TNUT 5
org 0
;khoi tao
mov p2, #0xFF
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
hienthi macro ts1
mov a, ts1
mov dptr, #maled
movc a, @a+dptr
mov p2, a
endm
main:
jb p1.0, OK
inc r0
cjne r0, #10, SoSanh
mov r0, #0
SoSanh:
ChoDoi:
jnb p1.0, ChoDoi
OK:
hienthi r0
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 6
4. Thiết kế m ch c u H điều khiển động cơ 1 chiều. Xoay trái 3s – Dừng 1s –
Xoay ph i 2s.
org 0
jmp main
DUNG equ 0
PHAI equ 64
TRAI equ 128
main:
mov p3, #TRAI
call delay
call delay
call delay
Created by Lê Hải Trung – K49KMT – TNUT 7
mov p3, #DUNG
call delay
mov p3, #PHAI
call delay
call delay
mov p3, #DUNG
call delay
jmp main
delay:
mov r7, #20
mov tmod, #01h
loop:
mov th0, #03ch
mov tl0, #0B0h
setb tr0
jnb tf0, $
clr tf0
clr tr0
djnz r7, loop
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 8
5. Thiết kế m ch đếm số thứ tự từ 0 đến 9 hiển th trên 1 LED 7 thanh.
org 0
mov p2, #0xFF
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
hienthi macro ts1
mov a, ts1
mov dptr, #maled
movc a, @a+dptr
mov p2, a
call delay
endm
Created by Lê Hải Trung – K49KMT – TNUT 9
main:
hienthi r0
inc r0
cjne r0, #10, OK
mov r0, #0
OK:
hienthi r0
jmp main
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 10
6. Thiết kế m ch đếm số thứ tự từ 00 đến 99 hiển th trên 2 LED 7 thanh.
org 0
mov dptr, #maled
mov p2, #0xFF
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
hienthi macro ts1, ts2
mov a, ts1
movc a, @a+dptr
mov p2, a
Created by Lê Hải Trung – K49KMT – TNUT 11
setb ts2
clr ts2
endm
main:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
hienthi r1, p3.0
hienthi r2, p3.1
call delay
inc r0
cjne r0, #100, main
mov r0, #0
jmp main
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 12
7. Thiết kế m ch gồm 6 LED đơn. Trong đó có 1 LED nh p nháy di chuyển từ
trái qua ph i và ng ợc l i.
org 0
mov p2, #0
jmp main
trai_phai macro ts1, ts2
setb ts1
clr ts2
call delay
endm
main:
setb p2.0
trai_phai p2.1, p2.0
trai_phai p2.2, p2.1
Created by Lê Hải Trung – K49KMT – TNUT 13
trai_phai p2.3, p2.2
trai_phai p2.4, p2.3
trai_phai p2.5, p2.4
trai_phai p2.4, p2.5
trai_phai p2.3, p2.4
trai_phai p2.2, p2.3
trai_phai p2.1, p2.2
trai_phai p2.0, p2.1
clr p2.0
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 14
8. Thiết kế m ch và viết ch ơng trình đếm số l n nh n công tắc trên chân P3.2
hiển th trên 1 LED 7 thanh.
org 0
;khoi tao
mov p2, #0xFF
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
hienthi macro ts1
mov a, ts1
mov dptr, #maled
movc a, @a+dptr
mov p2, a
endm
main:
jb p3.2, OK
inc r0
cjne r0, #10, SoSanh
mov r0, #0
Created by Lê Hải Trung – K49KMT – TNUT 15
SoSanh:
ChoDoi:
jnb p3.2, ChoDoi
OK:
hienthi r0
jmp main
end
9. Thiết kế m ch và viết ch ơng trình hiển th các LED sáng liên tiếp trong m ch
có 8 LED đ ợc nối vào port P2 của vi điều khiển.( LED1 sáng, các LED còn
l i tắtầ., LED 2 sáng, các LED còn l i tắtầ). (kho ng th i gian trễ tùy ch n
để phù hợp v i hiển th )
org 0
mov p2, #0
jmp main
display macro ts1
setb ts1
call delay
mov p2, #0
endm
main:
display p2.0
display p2.1
display p2.2
display p2.3
display p2.4
Created by Lê Hải Trung – K49KMT – TNUT 16
display p2.5
display p2.6
display p2.7
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
10. Thiết kế m ch và viết ch ơng trình hiển th m ch có 8 LED đ ợc nối vào port
P1 của vi điều khiển các LED sáng l n l ợt từ LED1 đến LED8 (kho ng th i
gian trễ tùy ch n để phù hợp v i hiển th )
org 0
mov p1, #0
jmp main
hienthi macro ts1
setb ts1
call delay
endm
Created by Lê Hải Trung – K49KMT – TNUT 17
main:
hienthi p1.0
hienthi p1.1
hienthi p1.2
hienthi p1.3
hienthi p1.4
hienthi p1.5
hienthi p1.6
hienthi p1.7
mov p1, #0
call delay
jmp main
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 18
11. Thiết kế m ch và viết ch ơng trình hiển th m ch có 8 LED đ ợc nối vào port
P3 của vi điều khiển các LED sáng l n l ợt từ LED giữa sang d n 2
bên(kho ng th i gian trễ tùy ch n để phù hợp v i hiển th )
org 0
mov p3, #0
jmp main
sang_2ben macro ts1, ts2, ts3, ts4
setb ts1
setb ts2
call delay
setb ts3
setb ts4
call delay
endm
main:
sang_2ben p3.3, p3.4, p3.2, p3.5
sang_2ben p3.1, p3.6, p3.0, p3.7
mov p3, #0
call delay
jmp main
Created by Lê Hải Trung – K49KMT – TNUT 19
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
12. Viết ch ơng trình 6 LED xếp bi theo cơ chế stack. Led 1 sáng ngoài cùng bên
trái, Led 2 di chuyển từ ngoài cùng bên ph i đến xếp bên c nh Led 1, Led 3 di
chuyển từ ngoài cùng bên ph i đến xếp bên c nh Led 2... cứ nh vậy đến khi
đủ 6 Led cùng sáng
Created by Lê Hải Trung – K49KMT – TNUT 20
org 0
jmp main
surf macro ts1, ts2
setb ts1
clr ts2
endm
main:
mov p3, #0
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
surf p3.1, p3.2
call delay
surf p3.0, p3.1
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
surf p3.1, p3.2
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
Created by Lê Hải Trung – K49KMT – TNUT 21
surf p3.3, p3.4
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
setb p3.5
call delay
mov p3, 0xFF
call delay
mov p3, #0
jmp main
delay:
mov r7, #3
dl1: mov r6, #200
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 22
13. Viết ch ơng trình gồm có 5 nút n. Hiển th giá tr khi n từng nút lên 1 LED 7
thanh. Ví dụ: n nút số 1 thì hiển th số 1, chuyển qua n nút số 2 thì hiển th số
2... trên LED 7 thanh.
org 0
mov p2, #0xFF
D1 equ 0F9h
D2 equ 0A4h
D3 equ 0B0h
D4 equ 99h
D5 equ 92h
display macro ts1, ts2, ts3, ts4, ts5
jb ts1, next1
mov p2, #D1
jmp xong
next1:
jb ts2, next2
mov p2, #D2
jmp xong
next2:
jb ts3, next3
mov p2, #D3
jmp xong
next3:
jb ts4, next4
mov p2, #D4
jmp xong
next4:
jb ts5, xong
Created by Lê Hải Trung – K49KMT – TNUT 23
mov p2, #D5
xong:
endm
jmp main
main:
display p1.0, p1.1, p1.2, p1.3, p1.4
jmp main
end
14. Viết ch ơng trình gồm 2 nút b m. Nút thứ nh t (nối vào chân p1.0) tăng số
hiển th trên LED 7 thanh, nút thứ hai (nối vào chân p1.1) gi m số hiển th trên
LED 7 thanh. Yêu c u kho ng giá tr hiển th trên LED 7 thanh là từ 00 đến 99
org 0
mov r0, #0
mov p2, #0xFF
mov p3, #0
mov dptr, #maled
jmp main
maled: db 0C0h, 0F9h, 0A4h, 0B0h, 99h, 92h, 82h, 0F8h,
80h, 90h
display macro ts1, ts2
Created by Lê Hải Trung – K49KMT – TNUT 24
mov a, ts1
movc a, @a+dptr
mov p2, a
setb ts2
clr ts2
endm
main:
NUT1:
jb p1.0, hienthi
inc r0
cjne r0, #100, OK
mov r0, #0
OK:
jnb p1.0, $
hienthi:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
display r1, p3.2
display r2, p3.3
NUT2:
jb p1.1, hienthi1
dec r0
cjne r0, #0, OK1
mov r0, #63h
OK1:
jnb p1.1, $
hienthi1:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
display r1, p3.2
display r2, p3.3
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 25
15. Viết ch ơng trình gồm 3 nút n để điều chỉnh hiển th dữ liệu lên LED 7 thanh.
n nút 1 (nối chân p1.0) thì tăng 1 giá tr , n nút 2 (nối chân p1.1) tăng 5 giá
tr , n nút 3 (nối chân p1.2) tăng 10 giá tr .
org 0
mov p2, #0xFF
mov p3, #0
mov r0, #0
mov dptr, #maled
jmp main
maled: db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h,
80h, 90h
display macro ts1, ts2
mov a, ts1
movc a, @a+dptr
mov p2, a
setb ts2
clr ts2
endm
hienthi_nut macro ts1, ts2
mov a, r0
mov b, #10
div ab
mov ts1, a
mov ts2, b
display ts1, p3.2
display ts2, p3.3
endm
Created by Lê Hải Trung – K49KMT – TNUT 26
main:
NUT1: //tang 1 don vi
jb p1.0, hienthi
inc r0
cjne r0, #100, OK
mov r0, #0
OK:
jnb p1.0, $
hienthi:
hienthi_nut r1, r2
NUT2: //tang 5 don vi
jb p1.1, hienthi1
mov a, r0
add a, #5
mov r0, a
cjne r0, #100, OK1
mov r0, #0
OK1:
jnb p1.1, $
hienthi1:
hienthi_nut r1, r2
NUT3: //tang 10 don vi
jb p1.2, hienthi2
mov a, r0
add a, #10
mov r0, a
cjne r0, #100, OK2
mov r0, #0
OK2:
jnb p1.2, $
hienthi2:
hienthi_nut r1, r2
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 27
PH N II. Các bài toán Timer hoặc Truy n thông nối ti p
TIMER
*B ng các chế độ của Timer c n nắm vững:
M1 M0 Ch đ Ch đ ho t đ ng
0 0 0 Bộ đ nh th i 13 bit: 8 bit là bộ đ nh th i/bộ
đếm, 5 bit đ t tr c.
0 1 1 Bộ đ nh th i 16 bit: không có đ t tr c.
1 0 2 Bộ đ nh th i 8 bit: tự n p l i.
1 1 3 Chế độ bộ đ nh th i chia tách.
Dựa vào b ng này ta ch n chế độ cho timer (timer mode – tmod)
Ví dụ:
TMOD = 0000 0001 (01H): chế độ 1 của bộ đ nh th i Timer 0 đ ợc ch n.
TMOD = 0010 0000 (20H): chế độ 2 của bộ đ nh th i Timer 1 đ ợc ch n.
TMOD = 0001 0010 (12H): chế độ 1 của bộ đ nh th i Timer 1 và chế độ 2
của Timer 0 đ ợc ch n.
16. Sử dụng Timer 0 ho c Timer 1 viết ch ơng trình t o 2 xung trên 2 chân P1.0 và
P1.1 v i t n số l n l ợt là 2KHz và 4KHz (Sử dụng osillocope để quan sát).
Biết t n số th ch anh là 12MHz
Gi i: Vì t n số th ch anh là 12Mhz nên chu kỳ bộ đ nh th i là:
12/12Mhz = 1us
Ch n timer0 chế độ 1 (16 bit)
Để t o xung v i t n số là f = 2kHz chu kỳ là 1/f = 1/2kHz = 500us
Th i gian ON/OFF của xung là 500us/2 = 250us
Ta có: 1 nh p 1us
? nh p 250us vậy số nh p là 250.
Ta l y 65536 – 250 = 65286 là điểm bắt đ u n p (FF 06h)
Để t o xung v i t n số là 4khz Ta cho chu kỳ xung ứng v i t n số 2kHz
gi m đi một nửa, bởi chu kỳ luôn tỉ lệ ngh ch v i t n số.
Tuy nhiên trong thao tác c u hình th i gian trễ b sai số, th ng là do câu lệnh
làm tăng th i gian trễ. Do đó, ta tăng giá tr TL0 cho hợp lý.
Created by Lê Hải Trung – K49KMT – TNUT 28
org 0
jmp main
main:
//p1.0 la 2KHZ, p1.1 la 4kHz
call delay
cpl p1.1
call delay
cpl p1.1
cpl p1.0
jmp main
delay:
mov tmod, #01h
mov th0, #0xFF
mov tl0, #0x92 //giá trị này tùy chỉnh do sai số
setb tr0
jnb tf0, $
clr tf0
clr tr0
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 29
TRUYỀN THÔNG NỐI TIẾP
1. Truyền thông Gửi (Transmit)
2. Truyền thông Nhận (Receive)
Một số khái niệm c n l u ý:
+Tốc độ Baud: tốc độ truyền thông
+T n số Fxtal: T n số th ch anh
+T n số FOSC: T n số máy
+SMOD: Chế độ x2 tốc độ Baud (m c đ nh SMOD = 0)
+Thanh ghi TH1
+C TR (Timer run): Bằng 1 thì timer ho t động
+C TI (Transmit Interrupt): c ngắt truyền
+C RI (Receive Interrupt): c ngắt nhận
+Thanh ghi TMOD: Chế độ làm việc của timer
Vì baud đ ợc tính nh sau:
Baud =
^SMOD ∗ Fxtal HZ
Nên một ^ − �� cách thu g n, thanh∗ ∗ ghi ∗ TH1 đ ợc− �� tính nh sau:
TH1 = 256 - = 256 -
�� � �� �
Các b c viết code thự c hi∗ệ n ch∗ �ức năng truy n: ∗ �
1. N p thanh ghi TMOD: th ng dùng là timer 1 mode 2
2. N p thanh ghi TH1: để xác đ nh chế độ baud
3. N p thanh ghi SCON (v i giá tr 50H để báo chế độ nối tiếp. 1 để đóng
khung 8 bit dữ liệu, 1 bit start và 1 bit stop. Vì 50H = 0101.0000)
4. Bật c TR1 = 1 (để khởi động timer 1)
5. Byte kí tự c n ph i truyền đ ợc ghi vào thanh ghi SBUF
6. Ch đến khi c TI = 1 “xx:JNB TI, xx”
7. Xóa bit c TI bằng lệnh CLR TI
8. Truyền ký tự tiếp theo thì quay về b c 5
Ví dụ: Sử dụng cơ chế UART (truyền) để truyền ký tự ‘A’ vào máy tính. Biết Fxtal =
11,0592 MHz và tốc độ baud là 9600.
Gi i:
Đổi 11,0592 MHz = 11059200Hz
Tính toán giá tr thanh ghi TH1
TH1 = 256 - = 253 = FDh (hexa)
∗
Created by Lê Hải Trung – K49KMT – TNUT 30
Chế độ timer là timer 1 mode 2, thanh ghi SCON sẽ có giá tr là 50h
Ch ơng trình nh sau:
org 0
mov TMOD, #20h
//l o c a (256-253) = -3
mov TH1, #-3 ấy đả ủ
mov TL1, TH1
mov SCON, #50h
setb TR1
jmp main
main:
mov SBUF, #'A'
ChoDoi: jnb TI, ChoDoi
clr TI
call delay
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 31
Các b c viết code thực hiện chức năng nh n:
1. N p thanh ghi TMOD: th ng dùng là timer 1 mode 2
2. N p thanh ghi TH1: để xác đ nh chế độ baud
3. N p thanh ghi SCON (v i giá tr 50H để báo chế độ nối tiếp. 1 để đóng
khung 8 bit dữ liệu, 1 bit start và 1 bit stop. Vì 50H = 0101.0000)
4. Bật c TR1 = 1 (để khởi động timer 1)
5. Ch đến khi c nhận đủ dữ liệu: RI = 1. “xx:JNB RI, xx”
6. Khi RI đ ợc thiết lập thì trong SBUF đư có 1 byte. L u nội dung đó vào nơi
an toàn
7. Xóa c ngắt RI: CLR RI
8. Để nhận tiếp thì quay về b c 5
Ví dụ: Hãy lập trình cho vi điều khiển 8051 để nhận các byte dữ liệu nối tiếp và đ t
chúng vào cổng P1. Đ t tốc độ baud là 4800, 8 bit dữ liệu và 1 bit stop. Cho t n số
th ch anh Fxtal = 11.0592
Gi i: Ta có TH1 = 256 - = 250
32
Created by Lê Hải Trung – ∗ K49KMT – TNUT
Ch ơng trình nh sau:
org 0
mov TMOD, #20h
mov TH1, #-6
mov TL1, TH1
mov SCON, #50h
setb TR1
main:
jnb RI, main
mov A, SBUF
mov P1, A
clr RI
SJMP main
end
CÂU H I TH NG G P:
1. Viết ch ơng trình cho 8051 để truyền nối tiếp, liên tiếp một ký tự ‘B’ v i tốc
độ 19200 baud liên tục, Fxtal = 11.0592 MHz
Gi i:
Ta có giá tr thanh ghi TH1 = 256 - = 254,5. Vì m c đ nh là SMOD = 0 nên
v i giá tr TH1 lẻ (254.5), ta sẽ l y TH1 – 1,5. Nh thế TH1 = 253 = FDh
∗
Ch n timer 1 mode 2. Nh vậy TMOD sẽ là 20h
Giá tr thanh ghi SCON = 50h
Created by Lê Hải Trung – K49KMT – TNUT 33
Ch ơng trình nh sau:
org 0
mov TMOD, #20h
mov TH1, #-3
mov TL1, TH1
mov SCON, #50h
setb TR1
jmp main
main:
mov SBUF, #'B'
ChoDoi:
jnb TI, ChoDoi
clr TI
call delay
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Created by Lê Hải Trung – K49KMT – TNUT 34
2. Viết ch ơng trình truyền thông chữ ‘READY’ chỉ một l n. Biết tốc độ là 19200
Baud và Fxtal = 11, 0592 MHz
ORG 0
LJMP MAIN
MAIN:
MOV TMOD, #20H
MOV TH1, #-3
MOV TL1, TH1
MOV SCON, #50H
SETB TR1
TRUYEN:
MOV A, #"R"
CALL GUI
CALL DELAY
MOV A, #"E"
CALL GUI
CALL DELAY
MOV A, #"A"
CALL GUI
CALL DELAY
MOV A, #"D"
CALL GUI
CALL DELAY
MOV A, #"Y"
CALL GUI
CALL DELAY
CALL CHECK
Created by Lê Hải Trung – K49KMT – TNUT 35
JMP TRUYEN
GUI:
MOV SBUF, A
JNB TI, $
CLR TI
RET
DELAY:
MOV R7, #1
DL1: MOV R6, #255
DL2: MOV R5, #255
DL3: DJNZ R5, DL3
DJNZ R6, DL2
DJNZ R7, DL1
RET
CHECK:
JNB RI, $
MOV A, SBUF
MOV P2, A
CLR RI
CJNE A, #97H , THOAT
RET
THOAT:
RET
END
Created by Lê Hải Trung – K49KMT – TNUT 36
3. Viết ch ơng trình truyền thông nối tiếp nhận các ký tự T, P, D để điều khiển
động cơ xoay trái khi n ký tự ‘T’, xoay ph i khi n ký tự ‘P’, dừng khi n ký
tự ‘D’. Biết tốc độ Baud = 19200 và Fxtal = 11,0592 MHz
org 0
mov p2, #0
mov tmod, #20h
mov th1, #-3
mov tl1, th1
mov scon, #50h
setb tr1
jmp main
DUNG equ 0
TRAI equ 1
PHAI equ 2
main:
jnb RI, $
Created by Lê Hải Trung – K49KMT – TNUT 37
mov a, sbuf
clr RI
cjne a, #'D', next1
mov p2, #DUNG
jmp xong
next1:
cjne a, #'T', next2
mov p2, #TRAI
jmp xong
next2:
cjne a, #'P', xong
mov p2, #PHAI
jmp xong
xong:
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 38
Gi i chi ti t ngân hàng câu h i VXL ậ VĐK ph n vi x lý 80x86
Bài 1:
Bài đ u tiên sẽ trình bày chi tiết. Các bài sau quá trình phân tích t ơng tự.
.MODEL SMALL Xác đ nh kích cỡ ch ơng trình (Tiny, Small, Medium, Large
hay Huge)
.DATA Khai báo đo n l u dữ liệu
ORG 2000H V trí ô nh bắt đ u để l u dữ liệu
SRC DW 01H, 02H m ng define word mỗi giá tr chứa 2 byte dữ liệu bộ nh
ROM
Cú pháp đ nh nghĩa: Tên bi n ậ ki u dữ li u ậ giá tr
.CODE Khai báo đo n bắt đ u viết code
MOV AX, @DATA Truy xu t đ a chỉ rom nội
MOV DS, AX Khởi t o thanh ghi đo n DS
DS là 1 thanh ghi đo n dữ li u. AX là 1 thanh ghi 16 bit. DS chứa đ a chỉ bắt đ u
của dữ li u
Có khai báo DS thì m i chứa đ ợc DST , SRC
Created by Lê Hải Trung – K49KMT – TNUT 39
Lệnh LEA ĐệCH Nguồn : N p đ a chỉ hiệu dụng vào thanh ghi
LEA SI, SRC L u 2000H vào đây. Nguồn là tên biến trong đo n DS
LEA DI, DST L u 3000H vào đây.
MOV CX, 05H Truyền giá tr 5 cho thanh ghi CX
MOV AX, [SI] Giá tr nằm trong ô nh SI. Không có ngo c là l y đ a chỉ L y
giá tr trong ô nh thứ 2000H
XCHG AX, [DI] Tráo đổi dữ liệu giữa đích và nguồn. Đích và nguồn ph i cùng độ
dài.
SI = 2000h
DI = 3000H
Tr c:
AX = 01h
DI = 06h
XCHG đổi dữ liệu
Sau đó thì AX = 06h và DI = 01h
ADD SI, 02H Tăng giá tr của SI lên 02h. Ban đ u SI = 2000h Cộng lên là
2002h
DI cũng t ơng tự
LOOP AGAIN: gi m thanh ghi CX xuống 1 đơn v và nh y về nhãn AGAIN nếu CX
ch a bằng 0.
Ban đ u CX = 05h Vậy l p 5 l n. Sau 5 l n đó Dữ liệu 2 m ng đ ợc chuyển cho
nhau
V y: Đây là ch ơng trình chuy n đổi dữ li u giữa 2 m ng data word
Câu l nh quan tr ng nh t: XCHG
DW ậ Ki u dữ li u define word l u t 2 byte
Created by Lê Hải Trung – K49KMT – TNUT 40
Bài 2:
Ch ơng trình này để cộng hai số 16 bit.
Kết qu l u vào AX
Ng i ta đư sử dụng 3 biến A, B, C kiểu define word 2 byte. A và B chứa giá tr , C
không chứa giá tr . Sau khi tính toán ng i ta đ a kết qu từ AX vào C
Bài 3:
MOV AX, A l y đ a chỉ của A đ a vào AX. Nh ng mà l y luôn giá tr bởi đó là
giá tr l u trong biến, không ph i m ng.
MOV BX, B l y đ a chỉ của B đ a vào BX
SUB AX, BX: trừ AX - BX
Created by Lê Hải Trung – K49KMT – TNUT 41
Bài 4:
MOV SUM, AX chuyển giá tr vào SUM
Kết qu bài 4:
M ng sum sẽ gồm 2 ph n tử: 9999h, 9999h
Ch ơng trình này thực hiện cộng 2 ph n tử 32 bit không d u
Created by Lê Hải Trung – K49KMT – TNUT 42
Bài 5:
Ch ơng trình này để trừ hai số v i 32 bit
Có 2 m ng 1 m ng DIFF ch a có giá tr
SUB AX, NUM2+2. L y AX – NUM2+2 và kết qu l u vào AX. Sau đó l i đ a vào
DIFF
Kết qu l u vào DIFF
Lệnh: MUL nguồn
-Nguồn 8 bit: nguồn * AL AX
-Nguồn 16 bit: nguồn * AX DXAX
Lệnh: DIV nguồn
-Nguồn 8 bit : AX / nguồn
D l u vào AH
Th ơng l u vào AL
-Nguồn 16 bit: DXAX / nguồn
D l u vào DX
Th ơng l u vào AX
Created by Lê Hải Trung – K49KMT – TNUT 43
Bài 6:
Ch ơng trình nhân hai số v i nguồn 8 bit
Ng i ta đư khai báo hai biến A kiểu DB (1 byte) có giá tr 22h, B kiểu DB(1 byte) có
giá tr 32h
Sau đó ng i ta chuyển A vào thanh ghi AL. Vì là thanh ghi AL nên chỉ có 8 bit mà
thôi.
Bài 7:
Ch ơng trình thực hiện nhân ko d u hai số v i nguồn là 16 bit.
MUL BX AX*BX kết qu thu đ ợc l u vào DX, AX. Để l y đ ợc DX AX, ng i
ta truy xu t đến v trí ô nh của m ng PROD. V trí số 1 l u AX, v trí số 2 l u DX.
Created by Lê Hải Trung – K49KMT – TNUT 44
Bài 8:
Ch ơng trình trên thực hiện phép chia một số 8 bit bởi một số 8 bit
Vì AH=0 lên AX chỉ còn AL. Gán AL bằng A thì AL là 56h. Khi chia đáng lẽ ra trong
tr ng hợp trên nguồn là 8 bit nh ng sẽ chia theo cách AX/nguồn = AL/nguồn =
AL/BL
Sau phép chia này AL sẽ chứa th ơng, AH sẽ chứa d . Kết qu đ ợc truyền vào 2
biên Q và R. Q l u AL, R l u AH.
Bài 9:
T ơng tự bài 8. Nh ng ch ơng trình này thực hiện phép chia một số 8 bit bởi một số
16 bit. Để ý ta th y AX gán cho A. Nên phép toán sẽ là DIV BL = AX/BL.
Th ơng l u vào AL. D l u vào AH. Nh thế Q sẽ chứa AL, R sẽ chứa AH
Created by Lê Hải Trung – K49KMT – TNUT 45
Bài 10:
- Ch ơng trình trên thực hiện việc chia một số 16 bit cho một số 16 bit (nguồn là
16 bit)
- Phép toán quan tr ng là: DIV BX. Đây là phép toán chia v i nguồn là BX (16
bit)
DIV BX sẽ t ơng đ ơng v i DXAX/BX. Vì DX = 0 nên phép toán đ ợc rút
g n l i là AX/BX.
- Sau khi thực hiện phép toán, AX l u th ơng chuyển vào Q, DX l u d chuyển
vào R
- A, B, Q, R đều là biến đ ợc khai báo kiểu define word (kiểu từ 2 byte). A, B
chứa giá tr khởi t o. Q, R không chứa giá tr khởi t o
Created by Lê Hải Trung – K49KMT – TNUT 46
Các file đính kèm theo tài liệu này:
- tai_lieu_on_thi_va_dap_an_ngan_hang_cau_hoi_mon_vi_xu_ly_vi.pdf