vxl-bt-ch 3

17
BT-VXL-Ch 3 – trang 1 ĐHBK Tp HCM–BMĐT GVPT: HTrung M Bài tp Vi Xử Lý – Chươ ng 3 Bài t p trong ch ươ ng này đượ c chia làm 7 phn: Tóm tt phn cng (3.1+3.2), T p lnh (3.3+3.4), Timer (3.5), Cng ni tiế  p (3.6), Ngt (3.7), Assembler (3.8) và t ng hợ  p. Phn 1 – Tóm t t phn cứ ng 1.1 K tên các nhà sn xut khác (ngoài Intel) có chế to MCU 8051? 1.2 Ta sdng lnh gì để đặt LSB ca byte ở  địa ch25H lên 1? 1.3 Hãy viết các lnh dùng để OR các bit có địa chlà 00H và 01H, k ết quct vào bit có địa ch02H? 1.4 Sau khi thc thi các lnh sau thì nhng bit nào có giá tr 1? MOV R0, #26H MOV @R0, #7AH 1.5 Hãy tìm lnh 1 byte có cùng hiu ng như lnh 2 byte sau: MOV 0E0H, #55H 1.6 Hãy viết các lnh để ct giá tr 0ABH vào RAM ngoài ở  địa ch9A00H. 1.7 Có bao nhiêu thanh ghi chc năng đặc bit đượ c định ngh  ĩ a trong 8051, 8052? 1.8 Sau khi reset hthng, giá tr ca SP ca 8051 là bao nhiêu? 1.9 Ta có thsdng lnh gì để khở i to tr cho SP ca 8031 để to stack 64 byte ở  đỉnh ca RAM ni? 1.10 Mt chươ ng trình con sdng các thanh ghi R0-R7 mở r ng. Hãy minh ha làm cách nào chươ ng trình con này chuyn sang sdng các thanh ghi R ở bank 3 khi vào chươ ng trình con này và tr li  bank thanh ghi cũ khi k ết thúc chươ ng trình con đó? 1.11 MCU 80C31BH–1 hot động vớ i thch anh 16MHz ni vào các ngõ vào XTAL1 và XTAL2 ca nó.  Nếu không có sdng lnh MOVX, tn sca tín hiu ALE là bao nhiêu? 1.12 8051 đượ c sdng vớ i thch anh 4MHz, khi đó chu k máy là bao nhiêu? 1.13 Chu k nhim vca ALE là bao nhiêu? Gisphn mm không truy c p RAM ngoài. (chú ý là chu k nhim v= chu k bn phn = chu k làm vic = duty cycle = thờ i gian ON / chu k ca tín hiu) 1.14 Ta biết r ng 8051 breset nếu chân RST đượ c gi ở mc cao trong ti thiu 2 chu k máy. (chú ý là vớ i đặc tính DC ca 8051 thì mc cao ở RST ti thiu là 2.5V) a)  Nếu 8051 hot động vớ i thch anh 8MHz, khong thờ i gian ti thiu gicho RST ở mc cao để reset hthng là bao nhiêu? b) Hình 2-15a cho thy mch RC dùng để reset bng tay. Trong khi đang n nút reset thì RST=5V và hthng đượ c gi ở tr ng thái reset. Như vy sau khi nút reset đượ c nhra thì 8051 svn gi ở tr ng thái reset trong bao lâu? 1.15 Chân cng P1.7 (chân 8) có thlái đượ c bao nhiêu ti Schottky công sut th p (LS)? 1.16 Lit kê các tín hi u điu khin bus ca 8051 để chn các EPROM ngoài và các RAM ngoài. 1.17 Địa chbit ca MSB ca byte ở  địa ch25H trong vùng dliu ni ca 8051 là bao nhiêu? 1.18 Hãy lit kê nhng lnh dùng để đặt LSB ca thanh ghi tích lũy lên 1 mà không nh hưở ng 7 bit khác? 1.19 Gislnh sau va đượ c thc thi: MOV A, #55H Giá tr ca bit P trong PSW là bao nhiêu? 1.20 Hãy viết các lnh dùng để sao chép ni dung ca R7 vào ô nhớ 100H ở RAM ngoài. 1.21 Gista đang dùng bank 0, hãy ghi các giá tr trong RAM ni ca 8051 sau khi thc thi đon mã sau: MOV R4, #32H MOV R0, #12H MOV R7, #3FH MOV R5, #55H 1.22 Sau khi c p đin cho VXL, hãy cho biết bng cách nào chn bank 2 bng mt lnh. 1.23 Gislnh thnht đượ c thc thi sau khi reset hthng là gi chươ ng trình con. Ni dung ca PC đượ c ct ở nhng địa chnào trong RAM ni tr ướ c khi r nhánh chươ ng trình? 1.24 Skhác bit gia chế độ ngh(idle) và chế độ tt ngun? 1.25 Lnh gì dùng để đưa 8051 vào chế độ tt ngun? 1.26 Tt ccác thanh ghi R0–R7 r ng bao nhiêu bit? Phn lớ n các thanh ghi trong 8051 r ng bao nhiêu  bit? K tên các thanh ghi 16 bit trong 8051. 1.27 Bit P ca PSW là bao nhiêu sau khi thc thi mi lnh sau:

Upload: linh-tran

Post on 07-Apr-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 1/17

BT-VXL-Ch 3 – trang 1

ĐHBK Tp HCM–BMĐTGVPT: Hồ Trung Mỹ 

Bài tập Vi Xử Lý – Chươ ng 3

Bài tậ  p trong chươ ng này đượ c chia làm 7 phần: Tóm tắt phần cứng (3.1+3.2), Tậ p lệnh(3.3+3.4), Timer (3.5), Cổng nối tiế p (3.6), Ngắt (3.7), Assembler (3.8) và tổng hợ  p.

Phần 1 – Tóm tắt phần cứ ng

1.1  K ể tên các nhà sản xuất khác (ngoài Intel) có chế tạo MCU 8051?1.2  Ta sử dụng lệnh gì để đặt LSB của byte ở  địa chỉ 25H lên 1?1.3  Hãy viết các lệnh dùng để OR các bit có địa chỉ là 00H và 01H, k ết quả cất vào bit có địa chỉ 02H?1.4  Sau khi thực thi các lệnh sau thì những bit nào có giá tr ị 1?

MOV R0, #26HMOV @R0, #7AH

1.5  Hãy tìm lệnh 1 byte có cùng hiệu ứng như lệnh 2 byte sau:MOV 0E0H, #55H

1.6  Hãy viết các lệnh để cất giá tr ị 0ABH vào RAM ngoài ở  địa chỉ 9A00H.1.7  Có bao nhiêu thanh ghi chức năng đặc biệt đượ c định ngh ĩ a trong 8051, 8052?

1.8 Sau khi reset hệ thống, giá tr ị của SP của 8051 là bao nhiêu?1.9  Ta có thể sử dụng lệnh gì để khở i tạo tr ị cho SP của 8031 để tạo stack 64 byte ở  đỉnh của RAM nội?

1.10 Một chươ ng trình con sử dụng các thanh ghi R0-R7 mở r ộng. Hãy minh họa làm cách nào chươ ngtrình con này chuyển sang sử dụng các thanh ghi R ở bank 3 khi vào chươ ng trình con này và tr ả lại

 bank thanh ghi cũ khi k ết thúc chươ ng trình con đó?1.11 MCU 80C31BH–1 hoạt động vớ i thạch anh 16MHz nối vào các ngõ vào XTAL1 và XTAL2 của nó.

 Nếu không có sử dụng lệnh MOVX, tần số của tín hiệu ALE là bao nhiêu?1.12 8051 đượ c sử dụng vớ i thạch anh 4MHz, khi đó chu k ỳ máy là bao nhiêu?1.13 Chu k ỳ nhiệm vụ của ALE là bao nhiêu? Giả sử phần mềm không truy cậ p RAM ngoài. (chú ý là chu

k ỳ nhiệm vụ = chu k ỳ bổn phận = chu k ỳ làm việc = duty cycle = thờ i gian ON / chu k ỳ của tín hiệu)1.14 Ta biết r ằng 8051 bị reset nếu chân RST đượ c giữ ở mức cao trong tối thiểu 2 chu k ỳ máy. (chú ý là

vớ i đặc tính DC của 8051 thì mức cao ở RST tối thiểu là 2.5V)

a)   Nếu 8051 hoạt động vớ i thạch anh 8MHz, khoảng thờ i gian tối thiểu giữ cho RST ở mứccao để reset hệ thống là bao nhiêu?

b)  Hình 2-15a cho thấy mạch RC dùng để reset bằng tay. Trong khi đang ấn nút reset thìRST=5V và hệ thống đượ c giữ ở tr ạng thái reset. Như vậy sau khi nút reset đượ c nhả ra thì8051 sẽ vẫn giữ ở tr ạng thái reset trong bao lâu?

1.15 Chân cổng P1.7 (chân 8) có thể lái đượ c bao nhiêu tải Schottky công suất thấ p (LS)?1.16 Liệt kê các tín hiệu điều khiển bus của 8051 để chọn các EPROM ngoài và các RAM ngoài.1.17 Địa chỉ bit của MSB của byte ở  địa chỉ 25H trong vùng dữ liệu nội của 8051 là bao nhiêu?1.18 Hãy liệt kê những lệnh dùng để đặt LSB của thanh ghi tích lũy lên 1 mà không ảnh hưở ng 7 bit khác?1.19 Giả sử lệnh sau vừa đượ c thực thi:

MOV A, #55HGiá tr ị của bit P trong PSW là bao nhiêu?

1.20 Hãy viết các lệnh dùng để sao chép nội dung của R7 vào ô nhớ 100H ở RAM ngoài.1.21 Giả sử ta đang dùng bank 0, hãy ghi các giá tr ị trong RAM nội của 8051 sau khi thực thi đoạn mã sau:

MOV R4, #32HMOV R0, #12HMOV R7, #3FHMOV R5, #55H

1.22 Sau khi cấ p điện cho VXL, hãy cho biết bằng cách nào chọn bank 2 bằng một lệnh.1.23 Giả sử lệnh thứ nhất đượ c thực thi sau khi reset hệ thống là gọi chươ ng trình con. Nội dung của PC

đượ c cất ở những địa chỉ nào trong RAM nội tr ướ c khi r ẽ nhánh chươ ng trình?1.24 Sự khác biệt giữa chế độ nghỉ (idle) và chế độ tắt nguồn?1.25 Lệnh gì dùng để đưa 8051 vào chế độ tắt nguồn?

1.26 Tất cả các thanh ghi R0–R7 r ộng bao nhiêu bit? Phần lớ n các thanh ghi trong 8051 r ộng bao nhiêu bit? K ể tên các thanh ghi 16 bit trong 8051.

1.27 Bit P của PSW là bao nhiêu sau khi thực thi mỗi lệnh sau:

Page 2: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 2/17

BT-VXL-Ch 3 – trang 2

a)  CLR C b) MOV A, #0CH c) MOV A, #0ABH1.28  Những địa chỉ bit nào sau đây có giá tr ị là 1 sau khi thực thi (các) lệnh:

a) MOV 26H, #26H b) SETB P1.1 c) MOV P3, #0CH d) MOV A,#13H

e) MOV 30H, #55H f) MOV R0, #26HXRL 30H, #0AAH MOV @R0, #7AH

1.29 Sau khi thực thi lệnh này thì bank thanh ghi nào đượ c chọn?a) MOV PSW, #0C8H b) MOV PSW, #50H c) MOV PSW, #10H

1.30 Hãy minh họa làm cách nào có thể giao tiế p 2 RAM t ĩ nh (mỗi RAM 32KB) vớ i 8051 để chúng có thể chiếm toàn bộ vùng dữ liệu ngoài 64K.

1.31 Vớ i hình 3.15 trong sách, giả sử RAM ngoài có dung lượ ng là 211x8, các chân P2.0, P2.1, và P2.2đượ c nối vào các chân A8, A9, và A10 tươ ng ứng của RAM. Hãy cho biết:

a) vớ i cách nối này RAM đượ c chia làm bao nhiêu trang? b) muốn truy cậ p đến byte thứ 8 (thứ tự k ể từ 0) của trang 5 thì làm cách nào?c) địa chỉ thật của byte trên là bao nhiêu?d) viết đoạn chươ ng trình để gán tr ị 56H vào địa chỉ 548H.

1.32 Vớ i hệ thống dùng 8051, hãy thiết k ế mạch giải mã địa chỉ cho các tr ườ ng hợ  p sau: (giả sử tín hiệuchọn chip đều là tích cực thấ p [/CS])

Tr ườ ng hợ   p 1 Tr ườ ng hợ  p 2

Tầm địa chỉ Thiết bị  Địa chỉ bắt đầu Kích thướ c Thiết bị 0000H–3FFFH RAM 0000H 8 K x 8 ROM8000H–9FFFH ROM 4000H 16 K x 8 RAM 1E000H–FFFFH I/O (8255 PIA) 8000H 16 K x 8 RAM 2

FF00H 256 x 8 I/O (8255 PIA)

Phần 2 – Tập lệnh

2.1  Hãy cho biết cách định địa chỉ của các lệnh saua) MOV R1, A c) MOV A, #12H e) MOV R6, #28H g) MOVX A, @DPTR i) LJMP 0548H

  b) MOV A, @R1 d) MOV A, 12H f) SJMP LOOP h) ACALL SUB1 j) PUSH B2.2  Mã máy dạng hex của lệnh sau là gì?

INC DPTR 

2.3 Mã máy dạng hex của lệnh sau là gì?DEC R6

2.4 Lệnh nào đượ c biểu diễn bở i mã máy 5DH?2.5 Lệnh nào đượ c biểu diễn bở i mã máy FFH?2.6 Liệt kê tất cả các lệnh 3 byte của 8051 có mã máy tận cùng là 5H.2.7 Hãy minh họa bằng cách nào ta có thể chuyển nội dung của địa chỉ nội 50H vào thanh ghi tích lũy A

vớ i định địa chỉ gián tiế p?2.8 Mã lệnh nào không đượ c định ngh ĩ a trong 8051?2.9 Để nạ p vào R4 giá 65H thì có cần dấu “#” trong lệnh: MOV R4, #65H không?

2.10 Ta xét lệnh sau: MOV 50H, #0FFHa)  Mã lệnh của lệnh này là bao nhiêu?

b)  Lệnh này dài bao nhiêu byte?c)  Giải thích mỗi byte của lệnh này.d)  MCU phải cần bao nhiêu chu k ỳ máy để thực hiện lệnh này?e)   Nếu 8051 hoạt động vớ i thạch anh 16 MHz, MCU phải mất bao lâu mớ i thực thi xong

lệnh này?2.11 Offset tươ ng đối của lệnh sau là bao nhiêu?

SJMP AHEADnếu lệnh này đang ở ô nhớ 0400H và 0401H, và nhãn AHEAD biểu diễn lệnh ở  địa chỉ 041FH.

2.12 Offset tươ ng đối của lệnh sau là bao nhiêu?SJMP BACK 

nếu lệnh này đang ở ô nhớ A050H và A051H, và nhãn BACK biểu diễn lệnh ở  địa chỉ 9FE0H.2.13 Giả sử lệnh AJMP AHEAD

ở bộ nhớ chươ ng trình tại địa chỉ 2FF0H và 2FF1H, và nhãn AHEAD tươ ng ứng vớ i lệnh ở  địa chỉ 2F96H. Những byte mã máy (dạng số hex) của lệnh này là gì?

Page 3: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 3/17

BT-VXL-Ch 3 – trang 3

2.14 Tại một chỗ trong chươ ng trình, nếu ta muốn chươ ng trình r ẽ nhánh đến nhãn EXIT nếu thanh ghi A bằng mã ASCII của “carriage return”. Thì ta phải sử dụng (những) lệnh gì?

2.15 Lệnh SJMP BACK ở bộ nhớ  chươ ng trình tại địa chỉ 0100H và 0101H, và nhãn BACK tươ ng ứng vớ i lệnh ở  địa chỉ 00AEH. Những byte mã máy (dạng số hex) của lệnh này là gì?

2.16 Lệnh sau thực hiện gì ?SETB 0D7H

Có cách nào tốt hơ n thực hiện cùng tác vụ này? Tại sao?2.17 Sự khác biệt giữa 2 lệnh sau là gì?

INC AINC ACC

2.18 Hãy viết những byte mã máy cho lệnh sauLJMP ONWARD

nếu nhãn ONWARD biểu diễn lệnh ở  địa chỉ 0A0F6H.2.19 Giả sử thanh ghi tích lũy A chứa 5AH. Nội dung trong thanh ghi A là gì sau khi thực thi lệnh:

XRL A, #0FFH2.20 Giả sử PSW chứa 0C0H và thanh ghi A chứa 50H tr ướ c khi thực thi lệnh RLC A. Nội dung của

thanh ghi A sau khi thực thi lệnh trên là bao nhiêu?2.21 Hãy viết (các) lệnh tươ ng đươ ng để thực hiện:

a) Xóa nội dung thanh ghi A b) Lấy bù 1 giá tr ị ở thanh ghi A và cất lại vào A2.22  Hãy viết các lệnh thực hiện:

a) Chia nguyên nôïi dung của A cho 16 (giả sử A < 256). b) Nhân nguyên nội dung của A cho 8 (giả sử A <32).

2.23  Nội dung của thanh ghi A là bao nhiêu sau khi 8051 thực hiện các lệnh sau:a) MOV A, #15H c) MOV A, #15 e) MOV A, #7FH

MOV R2, #13H MOV R5, #15 MOV 50H, #29HADD A, R2 ADD A, R5 MOV R0, #50H

  b) MOV R4, #25H d) MOV A, #25 XCHD A, @R0MOV A, #1FH MOV R7, #18HADD A, R4 ADD A, R7

2.24 Hãy viết mã máy cho các đoạn chươ ng trình trong 2.23, giả sử là đang sử dụng bank thanh ghi 0.2.25 Các lệnh nào không hợ  p lệ trong các lệnh sau?1) MOV R3, #500 5) MOV R1, #50 9) MOV A, #255H 13) MOV R7, #002) MOV A, #50H 6) MOV A, #F5H 10) ADD R3, #50H 14) MOV R9, #50H3) ADD A, R5 7) ADD A, #50H 11) ADD A, #F5H 15) ADD R7, R44) ADD R3, A 8) ADD A, #255H 12) MOV A, @R3 16) PUSH A

2.26 Mỗi lệnh sau chiếm bao nhiêu byte và thực hiện trong bao lâu (giả sử XTAL 12MHz):a) MOV A, #55H e) MOV A, R1

  b) MOV R3, #3 f) MOV R3, Ac) INC R2 h) ADD A, R2d) ADD A, #0 i) MOVX A, @DPTR 

2.27 Giá tr ị của cờ CY sau đoạn mã sau:

a) CLR CCPL C

 b) MOV A, #54HADD A, #0C4H

c) MOV A, #00ADD A, #0FFH

d) MOV A, #250ADD A, #05

2.28 Viết các đoạn chươ ng trình 8051:a)  Điền giá tr ị 48H vào các ô nhớ trong RAM nội từ địa chỉ 40H đến 89H bằng cách dùng lệnh định

địa chỉ gián tiế p và vòng lặ p. b)  Xóa 20 ô nhớ trong RAM nội vớ i địa chỉ bắt đầu là 80H.c)  Sao chép 10 ô nhớ từ RAM nội có địa chỉ đầu là 35H đến vùng nhớ khác có địa chỉ đầu là 60H.

2.29 Viết chươ ng trình cộng 2 số 16 bit. Các số là 3CE7H và 3B8DH. Đặt byte cao của tổng ở R7 và bytethấ p của tổng ở R6.

2.30 Viết các lệnh 8051 để thực hiện các tác vụ sau:a) Chuyển giá tr ị dữ liệu 55H vào cổng 1

 b) Đặt bit 3 của Port 3 lên 1c) Cộng dữ liệu ở  địa chỉ đượ c chứa trong R0 vào thanh ghi tích lũy.d) So sánh dữ liệu trong R0 vớ i giá tr ị 10H và nhảy đến nhãn Label1 nếu chúng khác nhau.

Page 4: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 4/17

BT-VXL-Ch 3 – trang 4

e) Đợ i ở  địa chỉ hiện hành cho đến khi ở Port 3 bit 0 thay đổi từ 1 sang 0.2.31 Viết chươ ng trình lấy dữ liệu hex (có giá tr ị 00H–FFH) từ cổng P1 và đổi nó sang thậ p phân. Cất các

số lần lượ t vào các thanh ghi R5 (chứa hàng tr ăm), R6 (chứa hàng chục), R7 (chứa đơ n vị).2.32 Giả sử có 5 dữ liệu BCD 2 ký số (digit) đượ c đặt liên tiế p trong RAM nội vớ i địa chỉ bắt đầu là 40H.

Hãy viết chươ ng trình tính tổng của 5 dữ liệu này, k ết quả đượ c cất vào RAM nội vớ i địa chỉ bắt đầulà 50H (byte thấ p để ở  địa chỉ thấ p). Giả sử các dữ liệu BCD là: (40H)=71H, (41H)=11H,(42H)=65H, (43H)=59H và (44h)=37H; hãy kiểm tra lại chươ ng trình vớ i các dữ liệu này.

2.33  Nội dung của các thanh ghi và các ô nhớ trong 8051 là:Thanh ghi Nội dung Địa chỉ bộ nhớ nội Nội dung

A 42H 22H 25HB 5AH 23H F5H

R0 (bank 0) 15H 24H 17HR1 (bank 0) 09H 25H 5CH

SP 22H 26H 8AHPC B100H 27H 06H

Sau khi thực thi đọan chươ ng trình sau thì bảng giá tr ị trên sẽ thay đổi như thế nào?MOV A, #1HMOV B, #8HMUL AB

MOV R0, #27HADD A, @R0PUSH ACC

Giả sử XTAL=12MHz, hãy viết mã máy đọan chươ ng trình trên và cho biết đoạn chươ ng trình trênđượ c thực thi trong bao lâu?2.34  Nội dung của các thanh ghi và các ô nhớ trong 8051 là:

Thanh ghi Nội dung Địa chỉ bộ nhớ nội Nội dung

A 42H 2FH 25HB 5AH 30H F5H

R0 (bank 0) 33H 31H 17HSP 2FH 32H 05HPC 8100H 33H 06H

Sau khi thực thi đoạn chươ ng trình sau thì bảng giá tr ị trên sẽ thay đổi như thế nào?PUSH ACCMOV A, 32HADD A, @R0MOV 31H, ARL AANL A, #0F6HDEC R0MOV @R0, B

Giả sử XTAL=12MHz, hãy viết mã máy đoạn chươ ng trình trên và cho biết đoạn chươ ng trình trênđượ c thực thi trong bao lâu?2.35 Hãy biểu diễn các tr ị số ở stack và con tr ỏ ngăn xế p cho mỗi dòng của đoạn chươ ng trình sau:

ORG 0MOV R0, #66HMOV R3, #7FHMOV R7, #5DHPUSH 0PUSH 3PUSH 7CLR AMOV R3, AMOV R7, APOP 3

POP 7POP 0

Page 5: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 5/17

BT-VXL-Ch 3 – trang 5

Đoạn chươ ng trình có tr ả lại các tr ị cũ cho các thanh ghi R0, R3, và R7 không? Nếu không thì phảiđổi gì để lưu lại giá tr ị.2.36 Hãy viết các lệnh dùng để tạo ra xung xuống mức thấ p trong 5 μs ở P1.7? Giả sử P1.7 ban đầu ở mức

cao và 8051 làm việc vớ i thạch anh 12MHz.2.37 Viết chươ ng trình tạo ra sóngvuông 83.3KHz ở P1.0 (giả sử hoạt động 12MHz).2.38 Viết chươ ng trình tạo ra xung mức cao trong 4 μs ở chân P1.7 cứ sau 200 μs.2.39 Viết các chươ ng trình để cài đặt các phép toán logic như ở hình E.3-1.

Hình E.3-1. Các bài toán lậ p trình logic: (a) NOR 3 ngõ vào; (b) NAND 8 ngõ vào; và (c) Phép toánlogic dùng 3 cổng.

2.40 Vớ i hình E.3-1(a), thờ i gian trì hoãn truyền tr ườ ng hợ  p xấu nhất từ lúc có chuyển tiế p ở ngõ vào đếnlúc có chuyển tiế p ở ngõ ra là bao nhiêu?

2.41 Sau khi thực thi nhóm lệnh sau, nội dung của thanh ghi A là bao nhiêu?MOV A, #7FHMOV 50H, #29HMOV R0, #50HXCHD A, @R0

2.42 Hãy viết những byte mã máy cho lệnh sau?SETB P2.6

2.43 Ta phải sử dụng những lệnh gì để chép cờ 0 (F0) trong PSW vào chân cổng P1.5?2.44 Dướ i tình huống nào thì ASM51 (của Intel) sẽ chuyển lệnh JMP chung (tổng quát) thành LJMP?2.45 Bộ nhớ nội của 8051 đượ c khở i tạo tr ị như sau, ngay tr ướ c khi thực thi lệnh RET:

Địa chỉ nội Nội dung SFRs Nội dung

0BH 9AH SP 0BH0AH 78H PC 0200H09H 56H A 55H08H 34H07H 12H

 Nội dung của PC sau khi thực thi lệnh RET là bao nhiêu?2.46 Viết một đoạn ngắn mã 8051 đọc liên tục 1 byte dữ liệu từ Port 1 và ghi nó ra Port 2, cho đến khi

 byte đọc đượ c bằng 4AH thì dừng lại.

2.47 Cho đoạn mã sau: RTN: PUSH PSWLOOP: MOV A, @R0

Page 6: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 6/17

BT-VXL-Ch 3 – trang 6

MOV @R1, AINC R0INC R1DJNZ B, LOOPPOP PSWRET

a) Chươ ng trình con RTN làm gì? b) Thanh ghi nào đượ c dùng làm địa chỉ nguồn?c) Thanh ghi nào đượ c dùng làm địa chỉ đích?d) Thanh ghi B đượ c dùng làm gì trong chươ ng trình con?e) Ta nên thay đổi chươ ng trình con trên như thế nào để không ảnh hưở ng đến các thanh ghi trongchươ ng trình gọi RTN?

2.48 Cho chươ ng trình con 8051 như sau:SUB: MOV R0, #20HLOOP: MOV @R0, #0

INC R0CJNE R0, #80H, LOOPRET

a)  Chươ ng trình con này làm gì?

 b) 

Mỗi lệnh trong chươ ng trình con trên thực thi mất mấy chu k ỳ máy?c)  Mỗi lệnh dài bao nhiêu byte?d)  Chươ ng trình con trên thực thi mấy bao nhiêu? (giả sử hoạt động 12MHz)

2.49 Một DIP switch 4 bit và LED 7 đoạn anode chung đượ c nối vào 8051 như đượ c chỉ trong hình E.3-2.Hãy viết chươ ng trình liên tục đọc mã 4 bit từ DIP switch và cậ p nhật các LED để hiển thị ký tự hexthích hợ  p. Thí dụ, nếu đọc đượ c mã 1100B thì sẽ xuất hiện ký tự hex “C”, như vậy các đoạn từ a đếng tươ ng ứng sẽ là ON, OFF, OFF, ON, ON, ON, và OFF. Chú ý là việc đặt chân cổng ở 8051 là 1 sẽ làm cho đoạn

tươ ng ứng ON.

Hình E.3-2. 8051 giao tiế p vớ i DIP SW và LED 7 đoạn.2.50 Xét chươ ng trình sau:

MOV R0, #20HMOV R1, #30HMOV R2, #2 ; ###

CLR C  NEXT: MOV A, @R0ADDC A, @R1

Page 7: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 7/17

BT-VXL-Ch 3 – trang 7

MOV @R0, AINC R0INC R1DJNZ R2, NEXT ; ***

a) Sau khi thực thi lệnh thứ ba (có chú thích ###), nội dung của R0, R1, và R2 là bao nhiêu? b) Lệnh có nhãn NEXT đượ c thực thi bao nhiêu lần?c) Sau khi hoàn tất chươ ng trình trên thì nội dung của R0, R1, và R2 là bao nhiêu?d) Nếu nội dung của các ô nhớ như sau:

(20H) = 45H(21H) = 23(30H) = 89H(31H) = 67H

•  Cho biết nội dung của các ô nhớ trên sau khi thực thi chươ ng trình trên?•  Chức năng của chươ ng trình trên?•  Các toán hạng đượ c cất trong bộ nhớ như thế nào?

2.51 Xét chươ ng trình 8051 sau:start: MOV R0, #05H

MOV R1, #40HMOV R2, #0H ; ###

MOV @R1, #0Hagain:MOV DPTR, #TABLEMOV A, R2MOVC A, @A + DPTR ADD A, @R1MOV @R1, AINC R2DJNZ R0, againAJMP EXIT

TABLE: DB 10H, 11H, 12H, 13H, 14HEXIT: END

a) Sau khi thực thi lệnh (có chú thích ###) thì nội dung của R0, R1, và R2 là bao nhiêu? b) Lệnh có nhãn again đượ c thực thi bao nhiêu lần?c) Sau khi hoàn tất chươ ng trình trên thì nội dung của R0, R1, và R2 là bao nhiêu?d) Nội dung của ô nhớ 40H sau khi thực thi chươ ng trình trên?e) Chức năng của chươ ng trình trên?f) Nếu k ết quả của chươ ng trình trên đượ c cất vào ô nhớ 50H thì lệnh nào cần sửa đổi và đổi như thế nào?

2.52 Xét chươ ng trình sau (giả sử LED là địa chỉ của 1 bit xuất nào đó).BLINK: CPL LED

CALL DELAYJMP BLINK 

DELAY: MOV R1, #145DLY2: MOV R2, #199DLY1: MOV R3, #210

DJNZ R3, $DJNZ R2, DLY1DJNZ R1, DLY2RET

a) Giả sử XTAL có tần số 6MHz, hãy tính thờ i gian ON và thờ i gian OFF của LED b) Tính thờ i gian ON của LED trong đoạn sau vớ i XTAL là 12MHz

DELAY: MOV R1, #136DLY2: MOV R2, #136

DLY1: MOV R3, #136DJNZ R3, $DJNZ R2, DLY1

Page 8: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 8/17

BT-VXL-Ch 3 – trang 8

DJNZ R1, DLY2RET

2.53 Cho đoạn mã sau:RTN: PUSH BLP: MOV B, @R0

CJNE A, B, NEXTMOV R1, #01HSJMP FIN

  NEXT: INC R0DJNZ R1, LPMOV R1, #0H

FIN: POP BRET

a) Chươ ng trình con RTN làm gì? b) Thanh ghi nào đượ c dùng làm mẫu dữ liệu tìm kiếm?c) Thanh ghi nào đượ c dùng chứa k ết quả?d) Thanh ghi B đượ c dùng làm gì trong chươ ng trình con?e) Giải thích hoạt động của các lệnh PUSH và POP trong chươ ng trình con.

2.54 Các ô nhớ RAM nội vớ i địa chỉ 3FH và 40H chứa các giá tr ị 42H và 04H tươ ng ứng. Hãy tìm các giá

tr ị các các thanh ghi sau khi thực thi đoạn chươ ng trình sau:- các thanh ghi A & B và cờ CY sau khi thực thi lệnh MUL- các thanh ghi A & B và cờ CY sau khi thực thi lệnh DIV

MOV A, 3FHMOV 0F0H, 40HMUL ABDIV AB

2.55 Hãy cho biết các giá tr ị cờ trong PSW của 8051 sau khi thực thi các lệnh sau: (giả sử giá tr ị đầu củaPSW là 00H)

MOV A, #7FHMOV 0F0H, #21HADD A, B

MOV 0F0H, #80HSUBB A, B2.56 Viết chươ ng trình tìm kiếm trong 1 bảng chứa 16 byte dữ liệu bắt đầu ở  địa chỉ 40H trong RAM nội

của 8051 vớ i byte dữ liệu đượ c đọc từ Port 2a) Khi hoàn tất tìm kiếm thì đặt bit 1 của Port 1 lên 1.

 b) Nếu tìm thấy dữ liệu thì đặt bit 2 của Port 1 lên 1.c) Nếu không tìm thấy dữ liệu thì xóa bit 2 của Port 1 về 0.

2.57 Cho tr ướ c đoạn chươ ng trình 8051 sau và các giá tr ị đầu, hãy tìm các giá tr ị trong các thanh ghi vàcác ô nhớ . Các giá tr ị đầu ở các ô nhớ là: (55H) = 03H, (A003H) = 05H, (A005H) = 07H.

MOV R1, 55HMOV A, R1MOV DPTR, #0A000H

MOVC A, @A+DPTR MOVC A, @A+DPTR MOV R1, AMOV 55H, R1

2.58 Cho tr ướ c đoạn chươ ng trình 8051 sau, hãy tìma) Các ô nhớ bị ảnh hưở ng và các giá tr ị của chúng.

  b) Tổng số byte cần cho chươ ng trìnhc) Tổng thờ i gian cần để thực thi đoạn chươ ng trình này (k ể cả lệnh RET và giả sử tần số thạchanh là 12MHz)

RTN: MOV R0, #80HLOOP1: MOV @R0, #0FFH

DEC R0CJNE R0, #20H, LOOP1MOV R1, #90H

Page 9: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 9/17

BT-VXL-Ch 3 – trang 9

LOOP2: MOV @R1, #00HINC R1CJNE R1, #0F0H, LOOP2RET

2.59 Hãy viết mã máy cho đoạn chươ ng trình sau:ORG 300HMOV A, #20HMOV R0, #34HMOV DPTR, #LABELADD A, R0AJMP LABEL

ORG 400HLABEL: LJMP 0300H

2.60 Đoạn chươ ng trình sau chạy vô tận. Giả sử dùng XTAL 6MHz cho clock của 8031. Như vậy ta đọcđượ c tần số bao nhiêu ở scope nếu đo ở chân P1.0

CLR CLOOP1: MOV A, #47LOOP2: DJNZ A, LOOP2

MOV P1.0, CCPL CAJMP LOOP1

Vớ i cùng chươ ng trình trên thì tần số ở chân ALE là bao nhiêu?

2.61 Viết chươ ng trình con đổi 1 ký số BCD trong thanh ghi A thành biểu diễn ASCII tươ ng ứng trong ônhớ  đượ c chỉ bở i thanh ghi R0. Nếu giá tr ị trong A không phải BCD thì đặt bit có địa chỉ 00H có giátr ị 1. Từ đó hãy phát triển thành chươ ng trình con đổi 2 ký số BCD trong thanh ghi A thành biểu diễnASCII của chúng, k ết quả đượ c cất vào các ô nhớ có địa chỉ bắt đầu cho trong R0, ký số BCD cótr ọng số cao sẽ đượ c cất ở  địa chỉ thấ p. Làm lại vớ i chuyển đổi số Hex sang ASCII.

2.62 Viết chươ ng trình con đổi biểu diễn ASCII đượ c cất trong ô nhớ  đượ c chỉ bở i thanh ghi R0 thành kýsố BCD tươ ng ứng trong thanh ghi A. Nếu giá tr ị trong A không phải BCD thì đặt bit có địa chỉ 00H

có giá tr ị 1. Từ đó hãy phát triển thành chươ ng trình con đổi 2 ký số dạng ASCII đượ c cất trong ônhớ  đượ c chỉ bở i thanh ghi R0 (ký số có tr ọng số cao sẽ đượ c cất ở  địa chỉ thấ p). thành BCD trongthanh ghi A. Làm lại vớ i chuyển đổi ASCII sang số Hex.

2.63 Viết chươ ng trình con BINTOBCD đổi 1 số nhị phân 8 bit thành biểu diễn BCD tươ ng ứng của nó (3ký số BCD) để trong các ô nhớ có địa chỉ bắt đầu ở trong R0, ký số BCD có tr ọng số cao nhất sẽ ở  địa chỉ thấ p nhất.

2.64 Viết chươ ng trình con BCDTOBIN đổi số BCD có 2 ký số trong thanh ghi A thành số nhị phân trongô nhớ  đượ c chỉ bở i R0.

2.65 Viết chươ ng trình xác định xem có bao nhiêu byte có tr ị là 0, < 0, > 0 trong một khối bộ nhớ ; ô nhớ  40H sẽ chứa số byte có tr ị bằng 0, ô nhớ 41H sẽ chứa số byte có tr ị < 0, ô nhớ 42H sẽ chứa số bytecó tr ị > 0. Ô nhớ 43H chứa địa chỉ đầu khối bộ nhớ , ô nhớ 44H chứa số byte trong khối đó (chiều dàikhối). Thí dụ: (43H)=45H, (44H)=06, (45H)=68H, (46H)=F2H, (47H)=87H, (48H)=00H,

(49H)=59H, (50H)=2AH thì sau khi chạy đoạn chươ ng trình này thì (41H)=1, (42H)=2, (43H)=3.2.66 Tính bù 2 của một số 16 bit có địa chỉ đầu đượ c chỉ bở i R6 (byte cao ở  địa chỉ thấ p) và k ết quả đượ c

cất vào bộ nhớ vớ i địa chỉ đầu đượ c chỉ bở i R7. Thí dụ: (R6)=40H, (R7)=42H, (40H)=45H,(41H)=2AH thì k ết quả ở (42H)=BAH, (43H)=D6H. Hãy trình bày các giải pháp có thể có.

2.67 Viết chươ ng trình tìm phần tử nhỏ nhất trong 1 khối dữ liệu. Chiều dài của khối dữ liệu ở trong ô nhớ  41H và địa chỉ bắt đầu khối ở trong ô nhớ 42H. Chứa phần tử nhỏ nhất đó trong ô nhớ 40H, giả sử khối dữ liệu chứa các số nhị phân không dấu. Làm lại vớ i tìm phần tử lớ n nhất.

2.68 Viết chươ ng trình SORT sắ p thứ các số trong 1 khối dữ liệu. Chiều dài của khối dữ liệu ở trong ônhớ 41H và địa chỉ bắt đầu khối ở trong ô nhớ 42H. K ết quả đượ c lưu vào trong vùng nhớ khối dữ liệu ban đầu. (HD: dùng phươ ng pháp bubble sort, xem trong các sách về cấu trúc dữ liệu và giảithuật)

2.69 Viết chươ ng trình con nhân 2 số nguyên 8 bit có dấu, dùng bù 2 để biểu diễn cho các số âm. K ết quả là số nguyên 16 bit có dấu để trong thanh ghi R6 (byte cao) và R7 (byte thấ p).

Page 10: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 10/17

BT-VXL-Ch 3 – trang 10

2.70 Viết chươ ng trình con tr ừ số nguyên 16 bit có dấu X (đượ c cất ở R6 và R7, byte cao ở R6) vớ i số nguyên 16 bit có dấu Y (đượ c cất ở R4 và R5, byte cao ở R4), dùng biểu diễn bù 2 cho các số âm.

2.71 Viết chươ ng trình con SOSANH nhận 2 tham số 8 bit và so sánh chúng vớ i nhau. K ết quả đượ c đặt ở  thanh ghi ACC. Nếu gọi các tham số là X và Y thì k ết quả cất trong thanh ghi ACC là: -1 nếu X < Y;0 nếu X = Y; và 1 nếu X > Y.

2.72 Viết chươ ng trình con tính tổng số bit 1 trong 1 byte cho tr ướ c ở thanh ghi A. Làm lại vớ i tính tổngsố bit 0. Hãy viết chươ ng trình con cho k ết quả tổng số bit 1 và tổng số bit 0 trong thanh ghi A.

2.73 Viết chươ ng trình con tính trung bình cộng của một dãy các tr ị số 1 byte không dấu vớ i số đầu có địachỉ ở R6, chiều dài của dãy số ở R7. K ết quả đượ c cất vào R5.

2.74 Hãy mô tả stack, SP và nội dung của các thanh ghi bị ảnh hưở ng trong đoạn chươ ng trìnhsau. Giả sử  ban đầu (SP)=07H.

MOV R2, #55HMOV R5, #0CCHMOV R1, #0ADHPUSH 2PUSH 5PUSH 1POP 2POP 1

POP 52.75 Viết chươ ng trình xóa ACC và cộng 5H vào ACC 10 lần bằng cách dùng vòng lặ p.2.76 Có 2KB RAM dữ liệu đượ c gắn vào 8051 (bắt đầu ở  địa chỉ 8000H). Viết chươ ng trình (bắt đầu từ 

2030H): a) Điền toàn bộ RAM 2K vớ i tr ị 55H; b) kiểm tra lại giá tr ị ở mỗi ô nhớ có bằng 55Hkhông? Nếu có sai thì cho P1.1=1 và cho biết bao nhiêu ô nhớ bị sai (cất vào R7).

2.77 Viết chươ ng trình con ATOH đổi 1 byte ASCII sang số hex tươ ng ứng (0–9 và A–F; tươ ng ứngASCII là 30H–39H và 41H–46H). Nếu byte ASCII không thuộc 30H–39H hay 41H–46H thì đặt cờ  C lên 1. Aùp dụng chươ ng trình con ATOH để đổi 2 byte ASCII liên tiế p trong RAM nội của 8051(thí dụ byte cao ở 40H và byte thấ p ở 41H) thành mã hex 1 byte ở 1 ô nhớ trong RAM nội 8051 (thídụ ở 42H). Thí dụ: (40H)=36H và (41H)=42H thì k ết quả (42H)=6BH.

2.78 Viết chươ ng trình cài đặt logic cho các hàm sau theo 2 cách: bằng các lệnh xử lý logic vớ i biếnBoole, và bằng các lệnh r ẽ nhánh theo điều kiện vớ i bit. Giả sử các biến X, Y, Z, V, W và F tươ ng

ứng vớ i các chân P0.0 đến P0.5.a)  F = (X(Y+Z)). Z. (V+W) b)  F = (XYZ)’ + Z + V + Wc)  F = X’Y+ Y’Z+ Z’V’Wd)  F = (X’+Y’)(Z+V)(X+W’)e)  F = ((XY + X’Z )’⊕ V)’

2.79 Viết chươ ng trình copy 16 byte trong bộ nhớ mã ngoài (1000H–100FH) đến RAM nội từ 30H–3FH.2.80 Viết chươ ng trình copy 16 byte bộ nhớ dữ liệu ngoài (1000H–100FH) đến RAM nội từ 30H–3FH.2.81 Viết chươ ng trình con đổi 1 số BCD 2 ký số thành 2 mã (LED) 7 đoạn. Số BCD đượ c đọc từ cổng P0

và k ết quả đượ c xuất ra P1 và P2 (P1 ứng vớ i ký số hàng chục, P2 ứng hàng đơ n vị). Dạng k ết nối phần cứng cho P1 và P2 tươ ng tự trong hình E.2.81.

Page 11: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 11/17

BT-VXL-Ch 3 – trang 11

Hình E.2.81

Page 12: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 12/17

BT-VXL-Ch 3 – trang 12

Phần 3 – Timer

Trong phần Timer này, ta sẽ giả sử là 8051 đượ c sử dụng vớ i thạch anh 12MHz nếu bài tậ p không cho biết tần số thạch anh.

3.1 Viết chươ ng trình 8051 tạo sóng vuông ở P1.5 có tần số 100KHz (Hướ ng dẫn: Không sử dụngtimer).

3.2 Hiệu ứng của lệnh sau là gì ?a) SETB 8EH

  b) MOV TMOD, #11010101B3.3 Hãy cho biết cần nạ p tr ị cho TMOD là bao nhiêu để 

a)  Timer 1 chạy chế độ 2, Timer 0 chạy chế độ 1 b)  Timer 1 chạy chế độ 0, Timer 0 chạy chế độ 2

3.4 Có bao nhiêu cách để dừng Timer đang chạy?3.5 Xét chươ ng trình 3 lệnh ở thí dụ tạo dạng xung (thí dụ đầu trong phần 3.5.8). Tần số và chu k ỳ nhiệm

vụ của dạng sóng đượ c tạo ra ở chân P1.0 của 8051 hoạt động vớ i thạch anh 16MHz?3.6 Hãy tính thờ i gian trì hoãn của chươ ng trình con DELAY sau vớ i tần số thạch anh là: a) 12 MHz và

 b) 11.0592 MHz.DELAY: MOV R3,#250 ; 1 MC (1 chu k ỳ máy)

HERE: NOP ; 1 MC  NOP ; 1 MC  NOP ; 1 MC  NOP ; 1 MCDJNZ R3,HERE ; 2 MCRET ; 1 MC

3.7 Viết lại bài giải của thí dụ giao tiế p buzzer (thí dụ cuối trong phần 3.5.8). để bao gồm chế độ “restart” (bắt đầu lại). Nếu chuyển tiế p 1 sang 0 xảy ra khi buzzer phát tiếng kêu, bắt đầu lại vòngđịnh thì để tiế p tục cho buzzer kêu trong giây k ế, xem minh họa ở hình E.3.7.

Hình E.3.7

3.8 Viết chươ ng trình 8051 tạo sóng vuông ở P1.2 có tần số 12KHz theo cách: a) dùng Timer 0; và b)không dùng timer.

3.9 Viết chươ ng trình 8051 dùng timer 1 để tăng nội dung của ô nhớ TIME (trong RAM nội) thêm 1 cứ sau 20 ms.

3.10 Viết chươ ng trình con MOTGIAY theo 2 cách: a) dùng Timer 0; và b) không dùng timer. Aùp dụngchươ ng trình con trên để tạo dạng sóng vuông tuần hoàn có chu k ỳ 10 s, 20 s và 30 s tươ ng ứng vớ icác chân P1.0, P1.1 và P1.2.

3.11 Viết chươ ng trình 8051 dùng timer:a) để tạo xung vuông 500Hz có chu k ỳ nhiệm vụ là 70% ở chân P1.0.

 b) Tươ ng tự a) nhưng chu k ỳ nhiệm vụ là 40% và xung này chỉ tồn tại trong 10s.3.12 Thiết k ế ứng dụng “cửa xoay” (turnstile) dùng Timer 1 để phát hiện lúc nào có ngườ i thứ 10 000 đi

vào khu vực hội chợ . Giả sử (a) cảm biến cửa xoay nối vào T1 và tạo ra 1 xung khi có ngườ i đi vàolàm xoay cửa, và (b) đèn đượ c nối vào chân P1.7 (chú ý thực tế có thêm mạch giao tiế p từ P1.7 vớ iđèn) và sáng khi P1.7=1 và tắt khi P1.7=0. Như vậy 8051 sẽ đếm số “sự kiện” ở T1 và làm sáng đènở P1.7 khi ngườ i thứ 10 000 đi vào khu vực hội chợ (xem hình E.3.12).

Page 13: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 13/17

BT-VXL-Ch 3 – trang 13

Hình E.3.12

3.13 Chuẩn điều hưở ng (hay còn gọi là cộng hưở ng) quốc tế cho các thiết bị âm nhạc là “A trên D trung”(La trên Đô trung) ở tần số 440 Hz. Viết chươ ng trình 8051 để tạo ra tần số điều hưở ng này và phátra tone 440 Hz ở loa nối ở P1.1 (xem hình E.3.13). Do việc làm tròn các giá tr ị đặt ở TL1/TH1, có 1sai số nhỏ trong tần số ra. Tần số ra chính xác là bao nhiêu và phần tr ăm sai số là bao nhiêu? Muốncó đượ c chính xác 440 Hz vớ i chươ ng trình bạn đã viết thì giá tr ị của thạch anh là bao nhiêu?

Hình E.3.13

3.14 Viết chươ ng trình 8051 để tạo ra tin hiệu 500 Hz ở P1.0 dùng timer 0. Dạng sóng có chu k ỳ nhiệm vụ 30%.

3.15 Mạch ở hình E.3.15 sẽ cung cấ p tín hiệu r ất chính xác 60 Hz (vớ i điều kiện áp AC này có tần số ổnđịnh) vào T0 bằng cách lấy từ thứ cấ p của một biến áp. Khở i động Timer 0 sao cho nó lấy xung nhị ptừ T0 và tràn 1 lần/giây. Ở mỗi lần tràn, cậ p nhật giá tr ị thờ i gian trong ngày đượ c chứa trong bộ nhớ  

nội của 8051 ở các vị trí 50H (giờ ), 51H (phút), và 52H (giây).

Hình E.3.15

Phần 4 – Cổng nối tiếp (Serial Port)

4.1 Hãy tìm giá tr ị của TH1 (dạng thậ p phân và hex) để đặt tốc độ baud cho các tr ườ ng hợ  p sau nếuSMOD=1: a) 9600 baud; b) 4800 baud. Giả sử r ằng XTAL=11.0592 MHz

4.2 Tìm tốc độ baud nếu TH1=–2, SMOD = 1 và XTAL =11.0592MHz.4.3 Giả sử r ằng cổng nối tiế p 8051 đượ c nối vào cổng COM của máy vi tính, và ở PC ta sử dụng chươ ng

trình terminal.exe để gửi và nhận dữ liệu nối tiế p. P1 và P2 của 8051 đượ c nối vào các LED và các

công tắc tươ ng ứng. Viết chươ ng trình 8051 để: a) gửi đến máy vi tính thông điệ p “We Are Ready!”; b) nhận bất cứ dữ liệu nào đượ c gửi từ máy vi tính và xuất nó ra các LED đang gắn ở P1; và c) lấy dữ 

Page 14: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 14/17

BT-VXL-Ch 3 – trang 14

liệu trên các công tắc nối vào P2 và gửi nối tiế p dữ liệu đó đến máy vi tính. Chươ ng trình thực a) mộtlần, nhưng các phần b) và c) liên tục. Sử dụng tốc độ baud là 4800.

4.4 Giả sử XTAL=11.0592 MHz vớ i chươ ng trình sau, hãy cho biết: a) chươ ng trình này làm gì, b) tínhtần số đượ c sử dụng bở i timer1 để đặ tốc độ baud, và c) tìm tốc độ baud của việc chuyển dữ liệu.

MOV A, PCONSETB ACC.7MOV PCON, AMOV TMOD, #20HMOV TH1, -3MOV SCON, #50HSETB TR1MOV A, # “B”

LOOP: CLR TIMOV SBUF, AJNB TI, $SJMP LOOP

4.5 Sử dụng cổng nối tiế p làm cổng hiển thị: Cho mạch ở hình E.4.5 

Hình E.4.5 Mạch nối bên ngoài vớ i cổng nối tiế p 8051.Vớ i lệnh: MOV SBUF, ADữ liệu nhị phân từ ACC sẽ đượ c truyền ra bên ngoài bắt đầu từ bit thấ p nhất qua chân

RXD của cổng nối tiế p sau khi thực thi lệnh trên. Khi k ết thúc truyền bit SCON.1 sẽ tự động

đượ c đặt lên 1. IC 74LS164 trong hình là thanh ghi dịch 8 bit vào nối tiế p ra song song (SIPO).Dữ liệu nhị phân 8 bit vào nối tiế p sẽ đượ c xuất ra song song. Các IC 74LS164 mắc k ế tiế p nhauđể giá tr ị ban đầu đượ c hiện trên hiển thị sẽ dịch từ phải sang trái khi có thêm giá tr ị mớ i.

LED 7 đoạn là loại anode chung, do đó khi đưa mức thấ p vào có thể làm sáng các đoạnnày (thí dụ: đoạn a sẽ sáng khi Q1 của 74LS164 là 0). Theo nguyên tắc này ta có thể cho hiện 1ký tự trên hiển thị nếu các ngõ ra tươ ng ứng của 74LS164 ở mức thấ p. Thí dụ để hiện đượ c ký tự “2” thì cần làm sáng các đoạn a, b, g, e và d, vì vậy các ngõ ra tươ ng ứng Q7, Q6, Q3, Q1 và Q0

 phải đượ c đặt ở mức thấ p và các ngõ ra Q5, Q4 và Q2 giữ ở mức cao. Do đó ta cần gửi byte 34Hra bộ đệm dữ liệu nối tiế p. Dữ liệu 34H đượ c gọi là mã ký tự của ký tự “2”. Bảng mã ký tự chocác ký tự từ “0” đến “F” như sau:

Ký tự  D7 D6 D5 D4 D3 D2 D1 D0  Mã ký tự 

Page 15: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 15/17

BT-VXL-Ch 3 – trang 15

  b g c dp e f a d 0  0 1 0 1 0 0 0 0  50H 1  0 1 0 1 1 1 1 1  5FH 2  0 0 1 1 0 1 0 0 34H 3 0 0 0 1 1 1 0 0  1CH 4  0 0 0 1 1 0 1 1  1BH 5  1 0 0 1 1 0 0 0  98H 6  1 0 0 1 0 0 0 0  90H 7  0 1 0 1 1 1 0 1  5DH 8  0 0 0 1 0 0 0 0  10H 9  0 0 0 1 1 0 0 1  19H A  0 0 0 1 0 0 0 1  11H B  1 0 0 1 0 0 1 0  92H C  1 1 1 1 0 0 0 0  F0H D  0 0 0 1 0 1 1 0  16H E  1 0 1 1 0 0 0 0  B0H F  1 0 1 1 0 0 0 1  B1H 

Chú ý:

o  để làm cho tất cả các đoạn sáng ta ấn nút SWo  để làm cho tất cả các đoạn tắt ta dùng lệnh MOV SBUF, #FF

Hãy viết các lệnh để:a) Hiển thị các ký tự “0”, “1”, “2”, “3”, và “4” từ phải sang trái. Có nhận xét gì về k ết quả 

hiển thị? b) Hiển thị ký tự “A” trên bảng hiển thị?

Các vấ n đề sau (4.6 đế n 4.14) là các chươ ng trình tiêu bi ể u để giao ti ế  p vớ i các thi ế t b ị  đầu

cuố i (terminal) hoặc các thi ế t b ị nố i ti ế  p khác vớ i máy vi tính. Gi ả sử cổ ng nố i ti ế  p đượ c khở i 

động ở mode UART 8 bit và t ố c độ baud đượ c cung cấ  p bở i Timer 1. 4.6 Viết chươ ng trình con OUTSTR gửi 1 chuỗi ký tự ASCII k ết thúc bở i ký tự NULL đến thiết bị nối tiế p nối vớ i cổng nối tiế p của 8051 . Giả sữ chuỗi mã ASCII ở trong bộ nhớ mã bênngoài và chươ ng trình gọi đặt địa chỉ của chuỗi trong DPTR tr ướ c khi gọi OUTSTR. Chuỗiký tự k ết thúc bằng NULL là chuỗi byte ASCII k ết thúc vớ i byte 00H. 

4.7 Viết chươ ng trình con INLINE nhậ p 1 dòng các mã ASCII từ thiết bị nối vớ i cổng nối toế pcủa 8051 và đặt nó vào bộ nhớ dữ liệu nội bắt đầu ở 50H. Giả sử dòng k ết thúc bằng CR (carriage return). Đặt mã CR vào trong bộ đệm dòng cùng vớ i các mã khác và r ồi k ết thúc bộ đệm bằng byte NULL (00H). 

4.8 Viết chươ ng trình gửi liên tục bộ mẫu tự từ a tớ i z đến thiết bị gắn vào cổng nối tiế p, dùngchươ ng trình con OUTCHR (có sẵn ) . 

4.9 Giả sử cho tr ướ c chươ ng trình con OUTCHR, hãy viết chươ ng trình gửi liên tục bộ ASCIIhiển thị đượ c (các mã từ 20H đến 7EH) đến thiết bị đang gắn vào cổng nối tiế p của 8051. 4.10 Sửa đổi lại lờ i giải của bài tậ p trên để treo và cho xuất tiế p lại ra màn hình dùng các mã

XOFF và XON nhận đượ c từ bàn phím. Tất cả các mã khác bị bỏ qua (chú ý: XOFF =CONTROL-S = 13H và XON=CONTROL-Q=11H).

4.11 Giả sử cho tr ướ c các chươ ng trình con INCHAR và OUTCHR, hãy viết chươ ng trình nhậ pcác ký tự từ bàn phím và và hiển thị chúng lại trên màn hình, đổi những ký tự chữ in thườ ngsang chữ in hoa.

4.12 Giả sử cho tr ướ c các chươ ng trình con INCHAR và OUTCHR, hãy viết chươ ng trình nhậ pcác ký tự từ thiết bị đang gắn ở cổng nối tiế p 8051 và hiển thị chúng lại vớ i dấu chấm (“.”) sẽ thay thế cho các ký tự điều khiển (có các mã ASCII 00H đến 1FH, và 7FH). 

4.13 Giả sử cho tr ướ c chươ ng trình con OUTCHR, hãy viết chươ ng trình xóa màn hình VDTđang gắn ở cổng nối tiế p 8051 và r ồi gửi tên của bạn đến VDT 10 lần trên 10 dòng. Chức

Page 16: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 16/17

BT-VXL-Ch 3 – trang 16

năng xóa VDT đượ c thực hiện bằng cách truyền CONTROL-Z vớ i nhiều terminal hoặcchuỗi ký tự thoát <ESC>[2J trên terminal có hỗ tr ợ ANSI (American National StandardsInstitute). Sử dụng cả 2 phươ ng pháp trong bài giải. 

4.14 Hình 3.32 trong sách minh họa k ỹ thuật mở r ộng khả năng xuất của 8051. Giả sử vớ i cấuhình như vậy, hãy viết chươ ng trình khở i động cổng nối tiế p vớ i chế độ thanh ghi dịch và r ồiánh xạ nội dung của ô nhớ nội 20H ra 8 ngõ ra phụ, mỗi giây thực hiện 10 lần. 

Phần 5 – Ngắt (Interrupt)

5.1 Cho biết nhiệm vụ của bit SMOD trong 8051? Hãy nêu các bướ c để thiết lậ p Timer dùngngắt để trì hoãn (làm tr ễ) một khoảng thờ i gian nhất định? 

5.2 Hãy viết các lệnh để: a) cho phép ngắt nối tiế p, ngắt timer 0 và ngắt phần cứng bên ngoài 1;và b) cấm ngắt timer 0; và c) cấm tất cả các ngắt chỉ bằng 1 lệnh. 

5.3 Sau khi thực thi đoạn chươ ng trình sau: MOV IE, #99HMOV IP, #10H 

a) Các ngắt nào đượ c cho phép? b) Ngắt nào có ưu tiên cao nhất? 

5.4 Thứ tự phục vụ các ngắt nhứ thế nào nếu tất cả các ngắt đượ c cho phép xảy ra đồng thờ i? 5.5 Trong 1 hệ dùng 8051 cho phép các ngắt /INT0, /INT1 và Timer 1 và cấm tất cả các ngắtkhác. Nếu ngắt /INT1 tích cực thì sẽ tạo ra sóng vuông 500 Hz ở chân P1.0 (dùng ngắt Timer 1). Sóng vuông này sẽ chấm dứt khi /INT0 tích cực. Viết đoạn chươ ng trình khở i tạo tr ị chocác ngắt và đợ i ngắt trong chươ ng trình chính và các chươ ng trình ISR. 

5.6 Viết chươ ng trình lấy liên tục dữ liệu 8 bit từ P0 và gửi nó đến P1 trong khi đó đồng thờ i tạora sóng vuông có chu k ỳ 200 µs ở chân P2.1 (sử dụng Timer 0 để tạo sóng vuông) 

5.7 Giả sử chân /INT1 đượ c nối vào công tắc bình thườ ng ở mức cao, khi chân này xuống mứcthấ p thì nó sẽ làm sáng đèn LED. Đèn LED này đượ c nối vào chân P1.3 và bình thườ ng thìtắt, khi có mức thấ p ở /INT1 thì nó sẽ sáng trong khi /INT1 vẫn ở mức thấ p. 

5.8 Giả sử chân /INT1 đượ c nối vào bộ tạo xung, viết chươ ng trình nhận biết khi có cạnh xuống

của xung thì sẽ đặt bit P1.3 lên 1 và làm cho đèn LED gắn ở P1.3 sáng (vẽ mạch cứng). Ngh ĩ a là LED sẽ sáng (ON) và tắt (OFF) cùng vớ i tốc độ của xung đưa vào chân /INT1. 5.9 Viết chươ ng trình 8051 lấy dữ liệu từ P1 và gửi nó đến P2 liên tục, trong khi đó dữ liệu đến

từ cổng nối tiế p đượ c gửi đến P0. Giả sử tốc độ baud là 9600. 5.10 Tạo sóng vuông 1 kHz ở chân P1.7 dùng ngắt. 5.11 Tạo xung vuông 7 kHz vớ i chu k ỳ nhiệm vụ 30% chân P1.6 dùng ngắt. 5.12 a) Viết chươ ng trình phục vụ ngắt cho timer 0 để tạo xung vuông 500Hz có chu k ỳ nhiệm vụ 

là 70% ở chân P1.0 b) Tươ ng tự a) nhưng chu k ỳ nhiệm vụ là 40% và xung này chỉ tồn tại trong 10s.

5.13 Hãy ghép chươ ng trình “tạo sóng vuông bằng ngắt của timer” (trang 218) vớ i chươ ng trình“Xuất ký tự bằng ngắt” (trang 221) thành 1 chươ ng trình. 

5.14 Hãy viết lại chươ ng trình “Xuất ký tự bằng ngắt” (trang 221) sao cho gửi 1 ký tự/1 giây(hướ ng dẫn: sử dụng timer và xuất ký tự trong ISR của timer). 

Phần 6 – Assembler

6.1  Hãy viết lại các lệnh sau vớ i dạng dữ liệu tức thờ i là nhị phân:a) MOV A, #255 c) MOV A, #1AH

  b) MOV A, #11Q d) MOV A, #’A’6.2  Có gì sai trong lệnh sau: ORL 80H, #F0H6.3  Hãy tìm các ký hiệu nào bị đặt tên sai:

?byte.bit @GOOD_bye 1ST  _FLAG MY_PROGRAM6.4  Hãy viết các lệnh tươ ng đươ ng các lệnh sau vớ i dữ liệu tức thờ i là tr ị số hex:

a) MOV DPTR, # ‘0’ EQ 48 c) MOV DPTR, #HIGH ‘AB’  b) MOV DPTR, # –1 d) MOV DPTR, #NOT (275 MOD 256)

Page 17: VXL-BT-Ch 3

8/6/2019 VXL-BT-Ch 3

http://slidepdf.com/reader/full/vxl-bt-ch-3 17/17

BT-VXL-Ch 3 – trang 17

6.5  Sự khác biệt giữa DB và DW?6.6  Hãy ghi các giá tr ị ô nhớ của đoạn sau:

ORG 0FHDW 5 SHL 4DB 65535

DW ‘0’6.7  Viết định ngh ĩ a 1 macro dùng để điền 1 hằng số dữ liệu vào 1khối trong bộ nhớ  dữ liệu

ngoài. Truyền địa chỉ bắt đầu, chiều dài, và hằng số dữ liệu cho các tham số macro.6.8  Viết định ngh ĩ a cho các macro sau:JGE – nhảy đến LABEL nếu thanh ghi tích lũy có tr ị >= VALUEJLT – nhảy đến LABEL nếu thanh ghi tích lũy có tr ị < VALUEJLE – nhảy đến LABEL nếu thanh ghi tích lũy có tr ị <= VALUEJOR – nhảy đến LABEL nếu thanh ghi tích lũy có tr ị ngoài tầm của đoạn từ LOWER  đếnUPPER.6.9  Viết định ngh ĩ a 1 macro có tên là CJNE_DPTR mà sẽ nhảy đến nhãn LABEL nếu con tr ỏ dữ 

liệu không chứa giá tr ị VALUE. Định ngh ĩ a macro sao cho nội dung của tất cả các thanh ghivà các ô nhớ không bị ảnh hưở ng.