You are on page 1of 47

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:

^SMOD ∗ Fxtal HZ
Baud =
^ − �� ∗ ∗ ∗ − ��

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
mov TH1, #-3 //lấy đảo của (256-253) = -3
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



Created by Lê Hải Trung – K49KMT – TNUT 32
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

You might also like