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

BAI GIAI VI XU LY NGUYEN THANH PHONG g1002398

11 636 24

Đ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

Nội dung

1 Hãy viết lệnh để đặt LSB byte địa 25H lên 1? Ở byte địa 25H 25H=0010 0101 Bit 2F 2E 2D 2C 2B 2A 29 LSB 28 1 0 0 LSB: “ LOW STATUS BIT” Suy lệnh là: SETB 28H Trọng số Hãy viết lệnh dùng để OR bit có địa 00H 01H, kết cất vào bit có địa 02H? MOV C, 00H; Đưa bit địa 00H vào C ORL C, 01H; Thực phép OR, kết cất vào C MOV 02H, C; Cất kết vào 02H Chú ý: C cary “ cờ nhớ tạm thời ” Hãy cho biết bit có giá trị sau thực đoạn chương trình sau: MOV R0, #26H MOV @R0, #7AH Giống câu Sau lệnh byte nhớ thứ 26H (chưa bit 37-30) chưa giá trị 7AH: MSB Bit 37 36 35 34 33 32 Trọng số 1 1 31 30 Các bit có giá trị bàng bit địa chỉ: 31H, 33H, 34H, 35H, 36H Các bit thứ: 3, 6, ghi R0 tính từ MSB R0 = 0010 0110 Hãy tìm lệnh byte có tác dụng lệnh byte sau: MOV 0E0H, #55H Tra bảng ta có lệnh có tác dụng sử dụng byte là: MOV A, #55H Hãy viết lệnh để cất giá trị 0ABH vào RAM ngồi địa 9A00H MOV A, #0ABH ;Gán A số 0ABH MOV DPTR, #9A00H ;Gán giá trị ghi 9A00H MOVX @DPTR, A ;chép nội dung ghi A vào nhớ ngồi DPTR Sau reset hệ thống, giá trị SP 8051 bao nhiêu? SP: “Stack Pointer” sau reset lại nằm bit MSB 07H bảng học Sau reset hệ thống giá trị củ a SP củ a 8051 07H Một chương trình sử dụng ghi R0-R7 mở rộng Hãy minh họa làm cách chương trình chuyển sang sử dụng ghi R bank vào chương trình trả lại bank ghi cũ kết thúc chương trình đó? (Thanh ghi trạng thái D0H, chứa bit trạng thái sau: CY AC F0 RS1 RS0 OV P Ta quan tâm tới RS1 RS0 bít dùng để chọn bank ghi tích cực chúng xố sau reset hệ thống thay đổi phần mềm cần RS1 0 1 RS0 1 Bank 0: địa 00H-07H 1: địa 08H-0FH 2: địa 10H-17H 3: địa 18H-1FH Giải: Giả sử chương trình có tên CTCON  CTCON: PUSH 0D0H  SETB RS0 ; Gán bit =1  SETB RS1 ; Gán bit =1  …  …  POP 0D0H  RET MCU “MicroSystems” 8051 sử dụng với thạch anh 4MHz, chu kỳ máy bao nhiêu? Liệt kê tín hiệu điều khiển bus 8051 để chọn EPROM ngồi RAM ngồi - EPROM o /EA →0 (CHÂN SỐ 31) o ALE (CHÂN SỐ 30) o /PSEN (CHÂN SỐ 29) - RAM o ALE o /RD (CHẤN SỐ 17) o /WR (CHÂN SỐ 16) 10 Địa bit MSB byte địa 25H vùng liệu nội 8051 bao nhiêu? Địa bit MSB byte địa 25H vùng liệu nội 8051 2FH 11 Hãy thực lệnh để đặt LSB ghi tích lũy lên mà khơng ảnh hưởng bit khác? Thanh ghi tích luỹ A(Accummulator) ký hiệu ACC tương ứng với địa E0H , định địa bit SETB ACC.7 ; bỏ qua bit tính từ MSB nên khơng ảnh hưởng 12 Hãy viết lệnh dùng để chép nội dung R7 vào nhớ 100H RAM ngồi Giống câu 9: MOV A, R7 MOV DPTR, #100H MOVX @DPTR, A 13 Lệnh dùng để đưa 8051 vào chế độ tắt nguồn? SETB PD Hoặc SETB PCON.1 14 Hãy minh họa làm cách giao tiếp RAM tĩnh (mỗi RAM 32KB) với 8051 để chúng chiếm tồn vùng liệu ngồi 64K Cách hiểu hình này: A15 0 0 0 0 1 1 1 1 A14 0 0 1 1 0 0 1 1 A13 0 1 0 1 0 1 0 1 A12 1 1 1 1 A11 1 1 1 1 1 1 A10 1 1 1 1 1 1 A9 1 1 1 1 1 1 A8 1 1 1 1 1 1 A7 1 1 1 1 1 1 Miền thể cho RAM1 32K Còn miền lại thể cho RAM2 32K A6 1 1 1 1 1 1 A5 1 1 1 1 1 1 A4 1 1 1 1 1 1 A3 1 1 1 1 1 1 A2 1 1 1 1 1 1 A1 1 1 1 1 1 1 A0 1 1 1 1 1 1  Biểu diễn 8000H-9FFFH chiếm trang (8KB), tổng số đường địa cần : 8.210=213(A12-A0)( hay nói cách khác từ 8000H-9FFFH tất địa điều thay đổi có A15=1,A14=0,A13=0 ln khơng đổi) 8051 A0-A12 ROM 8KB A0-A12 A0-A12 A13 A14 /cs A15  Biểu diễn E000H-FFFFH chiếm trang (8KB), tổng số đường địa cần : 8.210=213(A12-A0)( hay nói cách khác từ E000H-FFFFH tất địa điều thay đổi có A15=1,A14=1,A13=1 ln khơng đổi) Trường Hợp 2: Tầm địa 0000H 4000H 8000H Kích thước 8K x 16K x 16K x b/ Ta có bảng giá trị sau: A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 1 1 0 1 A8 1 Thiết Bị ROM RAM RAM A7 1 A6 1 ROM 8K  2^3.2^10=2^13 CĨ 13 ĐƯỜNG ĐỊA CHỈ RAM 16K CĨ 14 ĐƯỜNG ĐỊA CHỈ TA CĨ MẠCH THIẾT KẾ SAU: A5 1 A4 1 A3 1 A2 1 A1 1 A0 1 B Tập lệnh : 16 Hãy cho biết cách định địa lệnh sau: a) MOV R4, A; Thanh ghi b) MOV A, #0A3H:Tức thời c) MOV 6, #0B6H : Trực tiếp d) LJMP 0548H: Dài e) MOVX A, @DPTR: Chỉ số f) MOV A, @R1; gián tiếp g) MOV A, 12H; Trực tiế p h) ACALL DELAY;Tuyệt đối i) SJMP LOOP; Tương đối Cách chi tiết: a/ MOV R4,A : chép liệu từ ghi A vào ghi R4 b/ MOV A,#0A3H : Gán A số A3H c/ MOV 6, #0B6H : Gán nội dung nhớ giá trị B6H d/ LJMP 0548H Nhảy đến nhản 0548H e/ MOVX A,@DPTR : chép vào A byte từ nhớ ngồi có địa trỏ DPTR f/ MOV A,@R1:Chép liệu từ nhớ R1 vào ghi A g/ MOV A, 12H : Chép liệu từ nhớ 12H vào ghi A h/ ACALL DELAY: Gọi thực thi chương trình có tên “DELAY” Sau thực thi chương trình con, VXL thực câu lệnh phía sau câu lệnh gọi i/ SJMP LOOP: Nhảy đến nhãn LOOP 17 Xét lệnh sau: MOV 50H, #0FFH a Mã lệnh lệnh bao nhiêu? Ta có ý nghĩa mả lệnh là: MOV direct,#0FFH [(direct)#data] tra bảng NHĨM LỆNH CHUYỄN DỮ LIỆU TRANG 4/8 TA ĐƯỢC: 01110101 aaaaaaaa dddddddd b Lệnh dài byte? byte c Giải thích byte lệnh Byte chứa opcode, byte thứ hai chứa địa trực tiếp (tức nhớ 50H RAM nội, byte thứ chưa data tức FFH d MCU phải cần chu kỳ máy để thực lệnh này? e Nếu 8051 hoạt động với thạch anh 16 MHz, MCU phải thực thi xong lệnh này? Mất chu kỳ nên ta có: 18 Offset tương đối lệnh “SJMP AHEAD” lệnh nhớ 0400H 0401H, nhãn AHEAD biểu diễn lệnh địa 041FH Lưu ý: lệnh SJMP có mã lệnh: 10000000 eeeeeeee (2 byte) “hoạt động” lệnh SJMP rel sau: (PC)←(PC)+2 (PC)←(PC)+byte_2 Đối chiếu vào đề ta có (PC) ←(PC)đầu+2 với (PC)đầu=0400H 041FH =(PC)cuối ←(PC)+byte_2 Offset=byte_2=041FH-0400H-2H=1DH CÁCH KHÁC: Ta có: Tra bảng lệnh SJMP rel hoạt động sau: (PC)←(PC)đầu+2 (PC)cuối←(PC)+rel Suy ra: rel=(PC)cuối – (PC)=(PC)cuối –(PC)đầu – 2H=041FH0400H-2H=1DH 19 Hãy cho biết khác biệt lệnh “INC A” “INC ACC” INC A INC ACC Có số byte 1, mã đối tượng là: 00000100 Có số byte 2, mã đối tượng là: 00000101 aaaaaaaa Dùng cách định địa ghi Dùng cách định địa trực tiếp 20 Hãy cho biết nội dung ghi A sau thực đoạn chương trình sau: MOV A, #7FH; A←7FH MOV 50H,#29H; Ơ NHỚ 50H CHỨA GIÁ TRỊ 29H MOV R0, #50H; R0 CHỨA GIÁ TRỊ 50 XCHD A, @R0; HỐN ĐỔI NỮA THẤP NỘI DUNG THANH GHI A VỚI Ơ NHỚ ĐƯỢC CHỨA TRONG R0 (TỨC LÀ Ơ NHỚ 50H) Đáp án: #79H 21 Viết chương trình chuyển chuỗi liệu gồm 10 byte RAM ngồi có địa đầu 5F00H đến vùng RAM nội có địa đầu 40H Cách 1:Dùng vòng lặp CJNE: ORG 0000H MOV DPTR, #5F00H; DPTR trỏ tới địa ngồi 5F00H MOV R0,#40H; R0 trỏ tới địa 40H RAM nội LOOP: MOV A,@DPTR; Chép vào A byte từ nhớ ngồi DPTR MOVX @R0,A; Chép nội dung A địa trỏ R0 INC R0; tăng số địa R0 INC DPTR ; tăng số địa DPTR CJNE R0,#4AH,LOOP; END đủ 10 byte chưa? Cách 2: Dùng vòng lặp DJNZ: ORG 0000H MOV DPTR, #5F00H; DPTR trỏ tới địa ngồi 5F00H MOV R0,#40H; R0 trỏ tới địa 40H RAM nội MOV R7, #10; R7 chứa số lần lặp 10 LOOP: MOV A,@DPTR; Chép vào A byte từ nhớ ngồi DPTR MOVX @R0,A; Chép nội dung A địa trỏ R0 INC R0; tăng số địa R0 INC DPTR ; tăng số địa DPTR DJNZ R7,LOOP; END đủ 10 byte chưa? 22 Cho chuỗi liệu gồm 20 byte liên tiếp RAM nội, địa 20H Hãy viết chương trình xuất kiệu Port Dùng vòng lặp DJNZ ORG MOV MOV LOOP: MOV MOV INC 0000H R0,#20H; R7, #20; A,@R0; P1,A; R0; DJNZ R7,LOOP; END R0 trỏ tới địa 20H RAM nội R7 chứa số lần lặp 20 Chép vào A byte từ nhớ R0 Xuất nội dung ghi A port Tăng số địa R0 Đủ 20 byte chưa? 23 Cho chuỗi ký tự dạng mã ASCII RAM nội, dài 20 byte, địa 50H Viết chương trình đổi ký tự in hoa có chuỗi thành ký tự thường Biết mã ASCII ký tự thường mã ASCII ký tự in hoa cộng thêm 32 ASCII thường=ASCII hoa +32 Suy để đổi ký tự in hoa có chuỗi thành ký tự thường ta xố bit (hay trừ 32) mã ASCII ký tự in hoa ORG MOV MOV LOOP: XCH ANL XCH INC 0000H R0,#50H; R0 trỏ tới địa 50H RAM nội R7, #20; R7 chứa số lần lặp 20 A,@R0; Hốn đổi nội dung A nhớ trỏ R0 A,#11011111B; Xố bit mã ASCII,các bit khác giữ ngun A,@R0; Cất kết trở lại nhớ trỏ R0 R0; Tăng số địa R0 DJNZ R7,LOOP; END Đủ 20 byte chưa? 24 Cho chuỗi số 16 bit khơng dấu RAM nội gồm 10 số nhớ 30H theo ngun tắc nhớ có địa nhỏ chứa byte cao nhớ có địa lớn chứa byte thấp (Ví dụ: byte cao số 16 bit cất nhớ 30H byte thấp số 16 bit cất nhớ 31H) Hãy viết chương trình cộng chuỗi số cất kết vào nhớ 2EH:2FH + Ngun tắc: cộng byte thấp lại với lấy số dư cộng byte cao code: CLR A CLR R0 MOV R1,#30H MOV R2,#31H LOOP_1: ADD A,@R2 INC R2 INC R2 JC NHAN_1 ; Nếu có dư chuyển sang NHAN_1 để thêm số dư NHAN_2 CJNE R2,#43H,LOOP_1 MOV 2FH,A MOV A,R0 LOOP_2 ADD R0,@R1 INC R1 INC RI CJNE R1,#42H,LOOP_2 MOV 2EH,A NHAN_1 INC R0 CLR C SJMP NHAN_2 25 Viết chương trình tạo sóng vng 83.3KHz P1.0 (giả sử MCU hoạt động với xung clock 12MHz) fosc= 12MHz -> fM=fosc/12=1 MHz-> TM=1  s f=83.3KHz -> T=0.012ms=12  s sóng vng đối xứng tH=tL=6  s =6TM chương trình: ORG 0000H LOOP: CPL P1.0; s MOV R7, #3; s DJNZ R7,$; 2x3=6  s SJMP LOOP; s END Hãy xác định tần số sóng vng chân P1.5 cho đoạn chương trình sau: HERE: MOV TL0, #0F2H MOV TH0, #0FFH CPL P1.5 ACALL DELAY SJMP HERE DELAY: SETB TR0 AGAIN: JNB TF0,AGAIN CLR TR0 CLR TF0 RET DỤ MỘT SỐ BÀI: Bài 1: Viết chương trình lấy 10 byte RAM nội, địa bắt đầu 30H ghi RAM ngồi địa bắt đầu 2000H Giải: Cách 1: dùng vòng lặp CJNE: ORG 0000H MOV R0,#30H; R0 trỏ tới địa 30H RAM nội MOV DPTR, #2000H; DPTR trỏ tới địa ngồi 2000H LOOP: MOV A,@R0; Ghi nội dung nhớ trỏ R0 vào A MOVX @DPTR,A; chép nội dung A địa trỏ DPTR INC R0; tăng số địa R0 INC DPTR ; tăng số địa DPTR CJNE R0,#3AH,LOOP; END đủ 10 byte chưa? Chú ý: lệnh MOVX có độ dài 1byte nên muốn 10 byte phải tăng đến 3AH, chưa tới LOOP kết thúc chương trình Cách 2: dùng vòng lặp DJNZ ORG 0000H MOV R0, #30H; R0 trỏ tới địa 30H RAM nội MOV DPTR, #2000H; DPTR trỏ tới địa ngồi 2000H MOV R7, #10; R7 chứa số lần lặp 10 LOOP: MOV A, @R0; Ghi nội dung nhớ trỏ R0 vào A MOVX @DPTR, A; chép nội dung A địa trỏ DPTR INC R0; tăng số địa R0 INC DPTR ; tăng số địa DPTR DJNZ R7,LOOP; đủ 10 byte chưa? END Bài 2: Viết chương trình tạo sóng vng tuần hồn đối xứng chân P1.0 có tần số f=10KHz Giả sử fosc=12 MHz Giải: fosc=12MHz TM=1  s f=10KHz  T=0,1 ms= 100  s sóng vng đối xứng  TH=TL=50  s =50TM chương trình: ORG 0000H LOOP: CPL P1.0 MOV R7, #23; R7 chứa số lần lặp 23 DJNZ R7, $ SJMP LOOP ; lặp lại với chu kỳ tuần hồn END Note: $ LOOP Một số lưu ý sau: Có kiểu định địa họ MCS-51: -Thanh ghi ( register) -Trực tiếp ( direct ) -Gián tiếp ( indirect ) -Tức thời ( immediate ) -Tương đối ( relative ) -Tuyệt đối ( absolute ) -Dài ( long ) -Chỉ số ( index) ... khơng ảnh hưởng bit khác? Thanh ghi tích luỹ A(Accummulator) ký hiệu ACC tương ứng với địa E0H , định địa bit SETB ACC.7 ; bỏ qua bit tính từ MSB nên khơng ảnh hưởng 12 Hãy vi t lệnh dùng để chép... R0 CHỨA GIÁ TRỊ 50 XCHD A, @R0; HỐN ĐỔI NỮA THẤP NỘI DUNG THANH GHI A VỚI Ơ NHỚ ĐƯỢC CHỨA TRONG R0 (TỨC LÀ Ơ NHỚ 50H) Đáp án: #79H 21 Vi t chương trình chuyển chuỗi liệu gồm 10 byte RAM ngồi có... R7,LOOP; END đủ 10 byte chưa? 22 Cho chuỗi liệu gồm 20 byte liên tiếp RAM nội, địa 20H Hãy vi t chương trình xu t kiệu Port Dùng vòng lặp DJNZ ORG MOV MOV LOOP: MOV MOV INC 0000H R0,#20H; R7, #20;

Ngày đăng: 26/08/2017, 09:46

TỪ KHÓA LIÊN QUAN

w