- 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 | Lượt xem: 410 | 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
TRNG ĐI HC KỸ THUT CÔNG NGHIP
KHOA ĐIN T
B MÔN: TIN H C CÔNG NGHIP
TÀI LIU ÔN THI ậ ĐÁP ÁN NGỂN HÀNG CỂU HI
. HC PHN: VI X LÝ ậ VI ĐIU KHIN
. MÃ HP: TEE408
BIÊN SON: LÊ HI TRUNG
THÁI NGUYÊN, 2015
ÔN THI VI X LÝ ậ VI ĐIU KHIN
PHN: VI ĐIU KHIN 8051
Các code mình vit đu đư test hot đng bình thng, s dụng phn mm
Keil µVision 5 và Proteus 8.1. Ni dung đ bài đợc ly t ngân hàng câu hi thi
kt thúc hc phn VXL ậ VĐK, có bổ sung thêm mt số dng bài thng gặp.
Phn I. Các bài toán led đơn, led 7 thanh (dng cơ bn)
1. Thiết kế mch gồm một công tắc và 2 LED 7 thanh. Hiển th số ln bm 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 cu khong
thi 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ế mch đếm số ln 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ế mch cu H điều khiển động cơ 1 chiều. Xoay trái 3s – Dừng 1s –
Xoay phi 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ế mch đế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ế mch đế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ế mch gồm 6 LED đơn. Trong đó có 1 LED nhp nháy di chuyển từ
trái qua phi và ngợc li.
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ế mch và viết chơng trình đếm số ln nhn 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ế mch và viết chơng trình hiển th các LED sáng liên tiếp trong mch
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
li tắtầ., LED 2 sáng, các LED còn li tắtầ). (khong thi gian trễ tùy chn
để phù hợp vi 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ế mch và viết chơng trình hiển th mch có 8 LED đợc nối vào port
P1 của vi điều khiển các LED sáng ln lợt từ LED1 đến LED8 (khong thi
gian trễ tùy chn để phù hợp vi 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ế mch và viết chơng trình hiển th mch có 8 LED đợc nối vào port
P3 của vi điều khiển các LED sáng ln lợt từ LED giữa sang dn 2
bên(khong thi gian trễ tùy chn để phù hợp vi 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 phi đến xếp bên cnh Led 1, Led 3 di
chuyển từ ngoài cùng bên phi đến xếp bên cnh 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 bm. Nút thứ nht (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) gim số hiển th trên
LED 7 thanh. Yêu cu khong 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
PHN II. Các bài toán Timer hoặc Truyn thông nối tip
TIMER
*Bng các chế độ của Timer cn nắm vững:
M1 M0 Ch đ Ch đ hot đng
0 0 0 Bộ đnh thi 13 bit: 8 bit là bộ đnh thi/bộ
đếm, 5 bit đt trc.
0 1 1 Bộ đnh thi 16 bit: không có đt trc.
1 0 2 Bộ đnh thi 8 bit: tự np li.
1 1 3 Chế độ bộ đnh thi chia tách.
Dựa vào bng này ta chn chế độ cho timer (timer mode – tmod)
Ví dụ:
TMOD = 0000 0001 (01H): chế độ 1 của bộ đnh thi Timer 0 đợc chn.
TMOD = 0010 0000 (20H): chế độ 2 của bộ đnh thi Timer 1 đợc chn.
TMOD = 0001 0010 (12H): chế độ 1 của bộ đnh thi Timer 1 và chế độ 2
của Timer 0 đợc chn.
16. Sử dụng Timer 0 hoc Timer 1 viết chơng trình to 2 xung trên 2 chân P1.0 và
P1.1 vi tn số ln lợt là 2KHz và 4KHz (Sử dụng osillocope để quan sát).
Biết tn số thch anh là 12MHz
Gii: Vì tn số thch anh là 12Mhz nên chu kỳ bộ đnh thi là:
12/12Mhz = 1us
Chn timer0 chế độ 1 (16 bit)
Để to xung vi tn số là f = 2kHz chu kỳ là 1/f = 1/2kHz = 500us
Thi gian ON/OFF của xung là 500us/2 = 250us
Ta có: 1 nhp 1us
? nhp 250us vậy số nhp là 250.
Ta ly 65536 – 250 = 65286 là điểm bắt đu np (FF 06h)
Để to xung vi tn số là 4khz Ta cho chu kỳ xung ứng vi tn số 2kHz
gim đi một nửa, bởi chu kỳ luôn tỉ lệ nghch vi tn số.
Tuy nhiên trong thao tác cu hình thi gian trễ b sai số, thng là do câu lệnh
làm tăng thi 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 cn lu ý:
+Tốc độ Baud: tốc độ truyền thông
+Tn số Fxtal: Tn số thch anh
+Tn số FOSC: Tn số máy
+SMOD: Chế độ x2 tốc độ Baud (mc đnh SMOD = 0)
+Thanh ghi TH1
+C TR (Timer run): Bằng 1 thì timer hot độ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 gn, thanh∗∗ ghi ∗TH1 đợc− �� tính nh sau:
TH1 = 256 - = 256 -
��� ���
Các bc viết code thực hi∗ện ch∗�ức năng truyn: ∗�
1. Np thanh ghi TMOD: thng dùng là timer 1 mode 2
2. Np thanh ghi TH1: để xác đnh chế độ baud
3. Np thanh ghi SCON (vi 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ự cn phi 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ề bc 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.
Gii:
Đổ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 bc viết code thực hiện chức năng nhn:
1. Np thanh ghi TMOD: thng dùng là timer 1 mode 2
2. Np thanh ghi TH1: để xác đnh chế độ baud
3. Np thanh ghi SCON (vi 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. Lu 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ề bc 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 tn số
thch anh Fxtal = 11.0592
Gii: 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 HI THNG GP:
1. Viết chơng trình cho 8051 để truyền nối tiếp, liên tiếp một ký tự ‘B’ vi tốc
độ 19200 baud liên tục, Fxtal = 11.0592 MHz
Gii:
Ta có giá tr thanh ghi TH1 = 256 - = 254,5. Vì mc đnh là SMOD = 0 nên
vi giá tr TH1 lẻ (254.5), ta sẽ ly TH1 – 1,5. Nh thế TH1 = 253 = FDh
∗
Chn 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 ln. 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 phi 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
Gii chi tit ngân hàng câu hi VXL ậ VĐK phn 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 đon lu dữ liệu
ORG 2000H V trí ô nh bắt đu để lu dữ liệu
SRC DW 01H, 02H mng define word mỗi giá tr chứa 2 byte dữ liệu bộ nh
ROM
Cú pháp đnh nghĩa: Tên bin ậ kiu dữ liu ậ giá tr
.CODE Khai báo đon bắt đu viết code
MOV AX, @DATA Truy xut đa chỉ rom nội
MOV DS, AX Khởi to thanh ghi đon DS
DS là 1 thanh ghi đon dữ liu. AX là 1 thanh ghi 16 bit. DS chứa đa chỉ bắt đu
của dữ liu
Có khai báo DS thì mi chứa đợc DST , SRC
Created by Lê Hải Trung – K49KMT – TNUT 39
Lệnh LEA ĐệCH Nguồn : Np đa chỉ hiệu dụng vào thanh ghi
LEA SI, SRC Lu 2000H vào đây. Nguồn là tên biến trong đon DS
LEA DI, DST Lu 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ó ngoc là ly đa chỉ Ly
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 phi cùng độ
dài.
SI = 2000h
DI = 3000H
Trc:
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: gim thanh ghi CX xuống 1 đơn v và nhy về nhãn AGAIN nếu CX
cha bằng 0.
Ban đu CX = 05h Vậy lp 5 ln. Sau 5 ln đó Dữ liệu 2 mng đợc chuyển cho
nhau
Vy: Đây là chơng trình chuyn đổi dữ liu giữa 2 mng data word
Câu lnh quan trng nht: XCHG
DW ậ Kiu dữ liu define word lu 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 lu vào AX
Ngi 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 ngi ta đa kết qu từ AX vào C
Bài 3:
MOV AX, A ly đa chỉ của A đa vào AX. Nhng mà ly luôn giá tr bởi đó là
giá tr lu trong biến, không phi mng.
MOV BX, B ly đ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:
Mng sum sẽ gồm 2 phn tử: 9999h, 9999h
Chơng trình này thực hiện cộng 2 phn tử 32 bit không du
Created by Lê Hải Trung – K49KMT – TNUT 42
Bài 5:
Chơng trình này để trừ hai số vi 32 bit
Có 2 mng 1 mng DIFF cha có giá tr
SUB AX, NUM2+2. Ly AX – NUM2+2 và kết qu lu vào AX. Sau đó li đa vào
DIFF
Kết qu lu 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 lu vào AH
Thơng lu vào AL
-Nguồn 16 bit: DXAX / nguồn
D lu vào DX
Thơng lu vào AX
Created by Lê Hải Trung – K49KMT – TNUT 43
Bài 6:
Chơng trình nhân hai số vi nguồn 8 bit
Ngi 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 đó ngi 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 du hai số vi nguồn là 16 bit.
MUL BX AX*BX kết qu thu đợc lu vào DX, AX. Để ly đợc DX AX, ngi
ta truy xut đến v trí ô nh của mng PROD. V trí số 1 lu AX, v trí số 2 lu 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
trng hợp trên nguồn là 8 bit nhng 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 lu AL, R lu AH.
Bài 9:
Tơng tự bài 8. Nhng 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 thy AX gán cho A. Nên phép toán sẽ là DIV BL = AX/BL.
Thơng lu vào AL. D lu 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 trng là: DIV BX. Đây là phép toán chia vi nguồn là BX (16
bit)
DIV BX sẽ tơng đơng vi DXAX/BX. Vì DX = 0 nên phép toán đợc rút
gn li là AX/BX.
- Sau khi thực hiện phép toán, AX lu thơng chuyển vào Q, DX lu 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 to. Q, R không chứa giá tr khởi to
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