1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giải bài tập Vi xử lý chương 3 Lưu Phú full

30 708 19

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 65,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Viết một đoạn chương trình chuyển mảng data chứa trong bộ nhớ RAM nội địa chỉ đầu 30H sang bộ nhớ RAM ngoài địa chỉ đầu 1000H,kết thúc chuyển data khi gặp ký tự NULL=00H...12 14.. Viết m

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA ĐIỆN – ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ -*** -

VI XỬ LÝ BÀI TẬP CHƯƠNG 3

GIÁO VIÊN HƯỚNG DẪN: LƯU PHÚ

Trang 2

TP HCM, ngày 12 tháng 02 năm 2020 Mục lụ

1 Viết mã lệnh,số byte ,số chu kỳ máy và ý nghĩa các lệnh sau đây: 4

2 Viết mã lệnh,số byte ,số chu kỳ máy và ý nghĩa các lệnh sau đây: 5

3 Viết mã lệnh,số byte ,số chu kỳ máy và ý nghĩa các lệnh sau đây: 7

4 Giả sử (PC)=1000H chứa các lệnh sau đây và các nhãn 7

5 Giả sử (PC)=0400H chứa các lệnh sau đây và các nhãn 7

6 Giả sử (PC)=0A00H chứa các lệnh sau đây và các nhãn LAB1=0F6EH,LAB2=088AH,viết các mã lệnh và ý nghĩa của các lệnh sau đây: 8

7 Khi biên dịch đoạn chương trình sau,ASM51 sẽ báo lỗi,vì sao? 8

8 Giả sử (SP)=60H,mô tả hoạt động của PC và stack khi thực hiện lệnh LCALL CTC: 8

9 Giải thích ý nghĩa đoạn chương trình sau: 9

10: Xem đoạn chương trình sau: 10

11:Viết lại đoạn chương trình trên thay lệnh CJNE bằng lệnh DJNZ 11

12 Viết một đoạn chương trình chuyển 100 byte data chứa trong bộ nhớ RAM ngoài địa chỉ đầu 1000H sang bộ nhớ RAM nội địa chỉ đầu 30H 11

13 Viết một đoạn chương trình chuyển mảng data chứa trong bộ nhớ RAM nội địa chỉ đầu 30H sang bộ nhớ RAM ngoài địa chỉ đầu 1000H,kết thúc chuyển data khi gặp ký tự NULL=00H 12

14 Viết một đoạn chương trình chuyển mảng data chứa trong bộ nhớ RAM ngoài địa chỉ đầu 1000H sang vùng nhớ khác địa chỉ đầu 8000H,kết thúc chuyển data khi gặp ký tự NULL=00H 12

Trang 3

15 Viết một chương trình con tên DELAY_100US tạo thời gian trễ đúng 100us 13

16 Viết một chương trình con tên DELAY_10MS tạo thời gian trễ đúng 10ms,sử dụng chương trình con DELAY_100US ở câu 15 13

17 Viết một đoạn chương trình tạo xung mức 1 độ rộng 5µs trên P1.0 13

18 Viết một đoạn chương trình tạo xung mức 0 độ rộng 100µs trên P2.6 14

19 Viết một đoạn chương trình tạo chuỗi xung vuông đối xứng chu kỳ 1ms trên P3.5 14

20 Viết một chương trình con tên COMP_16 so sánh 2 số 16 bit cất trong B-A và R7-R6,kết quả trả về C=0 nếu (B-A)<(R7-R6) và C=1 nếu (B-A)≥(R7-R6) 14

21 Viết một chương trình con tên ADD_16 cộng 2 số 16 bit cất trong các ô nhớ RAM nội (31H-30H) và (33H32H),kết quả trả về cất trong (B-A) và C 15

22 Viết một chương trình con tên SUBB_16 trừ 2 số 16 bit cất trong các ô nhớ RAM nội (31H-30H) và (33H32H),kết quả trả về cất trong (B-A) và C=1 nếu kết quả tràn âm 15

23 Viết một chương trình con tên MUL_16_8 nhân số 16 bit (R1A) và số 8 bit(B),kết quả trả về (R1BA) 16

25 Viết một chương trình con tên HEX_BCD chuyển byte data nhập từ P1 vào thành số BCD nén (B) và (A) 17

26 Viết một chương trình con tên BCD_HEX chuyển số BCD nhập từ P3 sang số HEX xuất ra P0 17

27 Viết một chương trình con tên BCDADD_4DG cộng 2 số BCD nén 4 digit (31H-30H) và (33H-32H),kết quả trả về là số BCD (C) và (B-A) 18

28 Viết một chương trình con tên SHIFT_OUT chuyển byte data (A) thành từng bit xuất ra P1.0 MSB trước 18

29 Viết một chương trình con tên SHIFT_IN chuyển từng bit nhập từ P1.0 (MSB nhập trước) vào (A) cho đến khi đủ 8 bit 18

Trang 4

30 Giả sử(R1-A) chứa 4 digit BCD hàng ngàn,trăm,chục và đơn vị.Viết một chương trình con tên BCD_SHIFT4 nhập một số BCD từ 4 bit thấp P2,chuyển vào hàng đơn vị của(R1-A),đồng thời dời các digit từ hàng đơn vị lên chục,chục lên trăm,trăm lên ngàn và hàng ngàn khỏi (R1-A).Ví dụ(R1-A)=1234,nhập (P2)3-0=5→(R1A)=2345 19

31 Đặt X0=P1.0,X1=P1.1,X2=P1.2,Y=P1.3.Viết đoạn chương trình thực hiện các hàm Boolesau,tính thời gian đáp ứng max: 20

32 Viết một đoạn chương trình nhập data từ P2,và thực hiện chuyển điều khiển như sau: 21

33 Viết một đoạn chương trình nhập data từ P1 và thực hiện công việc như sau: 21

34 Viết một chương trình điều khiển LED D1 theo sơ đồ hình BT34: - Khởi động chương trình D1 tối - Nhấn /nhả SW D1 sáng,nhấn/ nhả SW D1 tối - Lập vòng liên tục như trên - Mô phỏng bằng Proteus 22

35 Viết một chương trình nhận dạng nút nhấn như hình BT35: 23

Trang 5

1 Viết mã lệnh,số byte ,số chu kỳ máy và ý nghĩa các lệnh sau đây:

a MOV A,#3FH f MOV P1,30H k PUSH ACC

b MOV A,3FH g MOVX A,@DPTR l PUSH PSW

c MOV 3FH,A h MOVC A,@A+DPTR m POP B

d MOV A,R7 (R7 ở bank 4) i MOVX @R1,A n POP 07H

e MOV @R0,A j MOVC A,@A+PC

Trang 6

i MOVX @R1,A địa chỉ gián tiếp chỉ đến bộ nhớ ngoài @R1, mã lệnh là 11110011B, chiếm 1 byte, 2mc.

j MOVC A,@A+PC (định địa chỉ theo chỉ số) sử dụng thanh ghi nền + với thanh ghi tích lũy làm địa chỉ, mã lệnh :10000011B, chiếm 1 byte, 2mc (A)=(PC+A)

k PUSH ACC :lệnh tác vụ cất dữ liệu vào ngăn xếp, tăng nội dung con trở ngăn xếp SP lên 1 rồi cất nội dung thanh ghi A vào địa chỉ đó (SP)<=(SP)+1, ((SP))<=(A); mã lệnh 0C0H; chiếm 2 bytes, 2mc

l PUSH PSW :lệnh tác vụ cất dữ liệu vào ngăn xếp, tăng nội dung con trở ngăn xếp SP lên 1 rồi cất nội dung thanh ghi PSW(D0H) vào địa chỉ đó (SP)<=(SP)+1,

b ADDC A,4FH g XCHD A,@R0 l RR A

c SUBB A,@R0 h XCH A,B m DA A

d INC DPTR i DEC DPL n SWAP A

e ANL 60H,A j ORL A,#0FH

Bài làm:

a ADD A,#4EH : lệnh cộng, có mã lệnh là 244EH, chiếm 2 bytes, 1 mc; (A)=(A)+4E

Trang 7

b ADDC A,4FH : lệnh cộng, có cộng cờ nhớ C, có mã lệnh là 354FH, chiếm 2 bytes, 1 mc; (A)=(A)+(4E)+(C)

c SUBB A,@R0: lệnh trừ có cờ nhớ, có mã lệnh là 96H, chiếm 1 byte ,1 mc; ((R0))-(C)

(A)=(A)-d INC DPTR : tăng thêm một cho đối tượng des, có mã lệnh là A3H, chiếm 1 byte, 2mc;(DPTR)=(DPTR)+1

e ANL 60H,A : mã lệnh là 5260; chiếm 2 bytes, 1mc; (60H) (60H) AND (A)

f XRL B,R6: (B) (B) XOR (R6); mã lệnh 6EF0; chiếm 2 bytes, 1mc

g XCHD A,@R0: (A) và ((R0)) hoán đổi 4 bit thấp; mã lệnh là D6; chiếm 1 byte, 1mc

h XCH A,B: (A) và (B) hoán đổi; mã lệnh là C5F0 ; chiếm 2 bytes, 1mc

i DEC DPL: (DPL)=(DPL)-1; mã lệnh là 15H; chiếm 1 byte, 1mc

j ORL A,#0FH: (A) (A) OR 0FH; mã lệnh là 440F; chiếm 2 bytes, 1mc

k RLC A: quay trái (A) qua (C) 1 bit; mã lệnh là 33H; chiếm 1 byte, 1mc

l RR A: quay phải (A) 1 bit ;mã lệnh là 03H; chiếm 1 byte, 1mc

m DA A: hiệu chỉnh (A) thành số BCD sau phép cộng 2 số BCD ;mã lệnh là 0D4H; chiếm 1 byte, 1mc

n SWAP A: hoán vị nibble cao và thấp của (A);mã lệnh là 0C4H; chiếm 1 byte, 1mc

Trang 8

3 Viết mã lệnh,số byte ,số chu kỳ máy và ý nghĩa các lệnh sau đây:

4 Giả sử (PC)=1000H chứa các lệnh sau đây và các nhãn

LOOP1=104FH,LOOP2=0F37H,viết mã lệnh và ý nghĩa của các lệnh sau đây:

Bài làm:

a 404F JC LOOP1: (C)=1 nhảy đển 104FH, (C)=0 lệnh kế tiếp

b 5037 JNC LOOP2: (C)=0 nhảy đển 0F37H, (C)=1 lệnh kế tiếp

c 20904F JB P1.0,LOOP: bit (P1.0)=1 nhảy đến 104FH, bit (P1.0)=0: lệnh kế

d 309037 JNB P1.0,LOOP2: bit (P1.0)=1 nhảy đến 0F37H, bit (P1.0)=1: lệnh kế

e 604F JZ LOOP1: (A)=0: nhảy đến địa chỉ 104FH

f 20E737 JB ACC.7,LOOP2: bit (ACC.7)=1 nhảy đến 0F37H, (ACC.7)=0: lệnh kế

g 107F4F JBC 7FH,LOOP1: bit trỏ bởi (7FH)=1 nhảy đến 104FH và xóa bit, (7FH)=0:

lệnh kế

5

Giả sử (PC)=0400H chứa các lệnh sau đây và các nhãn

HERE=043DH,THERE=038AH,viết các mã lệnh và ý nghĩa của các lệnh sau đây:

Bài làm

Trang 9

Mã lệnh Lệnh/Mô tả

a 803D SJMP HERE: nhảy đến địa chỉ 043DH

b 808A SJMP THERE: nhảy đến địa chỉ 038AH

c DF3D DJNZ R7,HERE: (R7)(R7)-1, nếu =0 nhảy đến đ/c 043DH, =1: lệnh kế

d D58A DJNZ 30H,THERE

e B5203D CJNE A,20H,HERE

f B45A8A CJNE R7,#’Z’,THERE

6 Giả sử (PC)=0A00H chứa các lệnh sau đây và các nhãn LAB1=0F6EH,LAB2=088AH,viết các mã lệnh và ý nghĩa của các lệnh sau đây:

Bài làm

a 018A AJMP LAB2: nhảy đến địa chỉ 088AH trong trang PCHH

b 116E ACALL LAB1: gọi CTC, nhảy đến địa chỉ 0F6EH trong trang PCHH

c 120F6E LCALL LAB1: gọi CTC, nhảy đến địa chỉ 16 bit 0F6EH

7 Khi biên dịch đoạn chương trình sau,ASM51 sẽ báo lỗi,vì sao?

Sửa lại như thế nào để biên dịch tốt?

Bài làm :

Sửa CLR A → CLR A.7 ; lệnh CLR bit

Trang 10

8 Giả sử (SP)=60H,mô tả hoạt động của PC và stack khi thực hiện lệnh LCALL CTC:

Trang 11

Ý nghĩa : phục hồi (A) từ stack

Cho biết nội dung (A) sau khi thực hiện đoạn chương trình trên,nếu DAT=07H

Bài làm:

Trang 12

a Cho biết công việc của đoạn chương trình trên?

b Dịch sang mã máy đoạn chương trình trên

c Tính thời gian thực hiện từng lệnh

d Tính thời gian thực hiện đoạn chương trình trên

Trang 16

DJNZ R1, TIEP END

17 Viết một đoạn chương trình tạo xung mức 1 độ rộng 5µs trên P1.0

Trang 17

DELAY_500uS : MOV R1,#500

LAP NOP

DJNZ R1,LAPXUNGVUONG : SETB P3.5

LCALL DELAY_500uSCLR P3.5

LCALL DELAY_500uSLCALL XUNGVUONG

Trang 19

Viết một chương trình con tên MUL_16_8 nhân số 16 bit (R1A)

và số 8 bit(B),kết quả trả về (R1BA)

Trang 21

DA AMOV B, AMOV A, R1

Trang 23

Giả sử(R1-A) chứa 4 digit BCD hàng ngàn,trăm,chục và đơn vị.Viết một chương trình con tên BCD_SHIFT4 nhập một số BCD từ 4 bit thấp P2,chuyển vào hàng đơn vị của(R1-A),đồng thời dời các digit từ hàng đơn vị lên chục,chục lên trăm,trăm lên ngàn

và hàng ngàn khỏi (R1-A).Ví dụ(R1-A)=1234,nhập (P2)3-0=5→(R1A)=2345

BCD_SHIFT4: CLR B

MOV 0F3, P2.3MOV 0F2, P2.2MOV 0F1, P2.1MOV 0F0, P2.0MOV RO, #0F0SWAP A

XCHD A, @R0MOV R2, AMOV A, R1SWAP AANL A, #11110000BADD A, B

MOV R1, AMOV A, R2

Trang 25

Viết một đoạn chương trình nhập data từ P2,và thực hiện chuyển điều khiển như sau:

- Nếu (P2)>’z’: nhảy đến nhãn GREAT

- Nếu (P2)<’z’: nhảy đến nhãn LOW

- Nếu (P2)=’z’: nhảy đến nhãn SAME

Trả lời :

ORIG 0MOV A,P2CJNE A,#’z’,CTC

Trang 26

SOSANH: JC C LOW

GREAT: ……

33

Viết một đoạn chương trình nhập data từ P1 và thực hiện công việc như sau:

- Nếu (P1) là số BCD nhảy đến nhãn TIEP

- Nếu (P1) không phải số BCD,chuyển sang số BCD và nhảy đến nhãn TIEP

Trang 28

Viết một chương trình điều khiển LED D1 theo sơ đồ hình BT34: - Khởi động chương trình D1 tối - Nhấn /nhả SW D1 sáng,nhấn/ nhả SW D1 tối - Lập vòng liên tục như trên - Mô phỏng bằng Proteus.

(File mô phỏng bao gồm file hex và file project ở phần file đính kèm.)

35 Viết một chương trình nhận dạng nút nhấn như hình BT35:

- Nếu SW1 nhấn,phát một xung mức 1 độ rộng 100us ra P2.0,sau đó chờ SW1 nhả

- Nếu SW2 nhấn,phát một một xung mức 1 độ rộng 100us ra P2.1,sau đó chờ SW2 nhả

- Lập vòng liên tục như trên

- Mô phỏng chương trình bằng Proteus

org 00h

Trang 29

CLR P2.0

CLR P2.1

KT: MOV A, #49

JNB P1.0, X1JNB P1.1, X2

Trang 30

END

Ngày đăng: 23/10/2020, 20:40

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w