1. Trang chủ
  2. » Công Nghệ Thông Tin

Khảo sát một số tập lệnh cơ bản của MSC

15 280 0

Đ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 15
Dung lượng 240,55 KB

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

Nội dung

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Trang 1

BÀI 2:

KHẢO SÁT MỘT SỐ LỆNH TIÊU BIỂU MSC-51

I Mục ñích bài thí nghiệm

Bài thực hành nhắm giúp học viên:

- Khảo sát một số lệnh cơ bản của MSC-51

- Nắm ñược cấu trúc của chương trình viết cho MSC-51

- Thực thi một số chương trình ñơn giản của MSC-51

II Cơ sở lý thuyết

Lập trình có cấu trúc thường thấy rõ ràng nhất trong các ngôn ngữ C, Pascal, VB … Trong hợp ngữ thì khó hình dung ñối với các bạn mới làm quen với chúng ðể ñơn giản hoá, một số lệnh có cấu trúc tương ñương ñược trình bài bên dưới giúp cho các bạn sinh viên hình dung về lập trình có cấu trúc trong hợp ngữ

Repeat

<action>

Ngôn ngữ Assembly

LOOP:

JUMP_if_not_<condition>,LOOP

Ví dụ:: Cấu trúc “repeat… until”

Repeat

Ngôn ngữ Assembly

LOOP:

JNZ LOOP

while <condition> do <action>

Ngôn ngữ Assembly

Ví dụ: Cấu trúc “while… do”

R7 = 0

while R7 <> 10 do {

R7 = R7 + 1

Trang 2

Ngôn ngữ Assembly

if <condition> then

<action 1>

Ngôn ngữ Assembly

JUMP_if_not_<condition>,ELSE

<action 1>

Ví dụ: Cấu trúc “if… then… else”

if P0.1 = 0 then

R7 = R7 + 1

Ngôn ngữ Assembly

Ví dụ: Cấu trúc “case… of…”

case P1 of

#11111110b: P2.0 = 1

#11111101b: P2.1 = 1

#11111011b: P2.2 = 1 else P2 = 0

end

Ngôn ngữ Assembly

Trang 3

2 Cơ sở lý thuyết

Trang 6

III Phần thực hành

1 Thiết bị thực hành

Board thực hành ET-LAB3A PC, module SCAN-7SEGMENT&LED

Một máy tính ñể soạn chương trình, biên dịch và nạp chương trình xuống board thí nghiệm

Dây kết nối với máy tính

2 Thực hành các lệnh cơ bản

a Nhóm lệnh di chuyển dữ liệu và chuyển ñiều khiển không ñiều kiện

Bài 1: Dùng Keil soạn thảo ñoạn chương trình mẫu ñiều khiển module SCAN-7SEGMENT&LED theo chu trình sau: 4 bit thấp trên PORT1 sáng  4 bit cao trên PORT1 tắt  4 bit thấp trên PORT1 tắt  4 bit cao trên PORT1 sáng và lặp lại quá trình trên

ORG 0000H LJMP MAIN MAIN:

MOV P1,#0F0H ; 4 bit thap cua PORT1 sang, 4 bit cao tat

CALL DELAY_xS

MOV P1,#0FH ; 4 bit thap cua PORT1 tat, 4 bit cao sang

CALL DELAY_xS

LJMP MAIN

DELAY_xS: MOV R1, #20

L1: MOV R2, #200

L2: MOV R3, #255

DJNZ R3, $ DJNZ R2, L2 DJNZ R1, L1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Hãy biên dịch và nạp chương trình trên cho Vi ñiều khiển Kết nối PORT1 của Vi ñiều khiển với Moduke LED và sau ñó ấn nút Reset ñể thực thi chương trình Quan sát kết quả trên 8 LED ñơn

Trang 7

- Giải thích ý nghĩa của lệnh DJNZ R3, $ ñược sử dụng trong chương trình con Delay Lệnh này lặp lai bao nhiêu lần trong chương trình con Lệnh này có thể viết lại khác ñược không ? Nếu ñược hãy viết lại nó Biên dịch cho cho thực thi chương trình ñể kiểm chứng

- Nếu bỏ lệnh LJMP MAIN, thì chương trình trên sẽ hoạt ñộng như thế nào ? Giải thích tại sao ? Hãy kiểm chứng bằng cách biên dịch và cho chạy lại chương trình

- Lệnh MOV P1,#0F0H và MOV P1,0F0H có khác nhau không ?

- Sửa lại chương trình sao cho 4 bit on/off chỉ hoạt ñộng chỉ 10 lần trong chương trình

- Sửa lại chương trình cho 8 LED sáng tắt xen kẽ nhau luân phiên nhau, quá trình này ñược lặp lại liên tục

Bài 2: Viết chương trình xuất dữ liệu ra PORT1 theo qui luật như bảng bên dưới, và lặp lại khi chạy hết chu kỳ:

ðoạn code mẫu  cấu trúc cơ bản của chương trình hợp ngữ cho AT89C51 Làm quen với lệnh MOV

ORG 0000H

MAIN: MOV A, #81H

MOV P1, A CALL DELAY MOV A, #42H

CALL DELAY MOV A, #24H MOV P1, A CALL DELAY MOV A, #18H CALL DELAY

Trang 8

MOV A, #18H MOV P1, A CALL DELAY MOV A, #24H CALL DELAY MOV A, #42H MOV P1, A CALL DELAY MOV A, #81H

CALL DELAY

DELAY: MOV R0, #50

LAP1: MOV R1, #100

DJNZ R1, $ DJNZ R0, LAP1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Soạn thảo và kiểm tra lỗi, biên dịch ñoạn chương trình trên sau ñó load xuống vi ñiều khiển

- Chạy chương trình và quan sát kết quả xem có ñúng như bảng mô tả hoạt ñộng của PORT1 không ?

- Thử thay thế các giá trị nạp vào R0 và R1 sao cho kết quả dễ quan sát nhất Cho biết khoảng giá trị nhỏ nhất và giá trị lớn nhất có thể nạp cho R0 và R1 sao cho kết quả dễ quan sát nhất Từ ñó hãy cho biết thời gian Delay tương ứng với giá trị của R0 và R1

- Nếu cho thanh ghi R0 =0, thì lệnh DJNZ R1, $ lặp lại bao nhiêu lần ?

- Hãy viết lại chương trình trên bằng phương pháp khác sao cho có thể ñiều khiển PORT1 hoạt ñộng như bảng trên (Gợi ý: Dùng lệnh MOVC A,

@A+DPTR và bảng dữ liệu TABLE … chứa các giá trị cần xuất ra PORT1)

b Nhóm lệnh rẽ nhánh có ñiều kiện

Bài 1: Dùng Keil soạn thảo ñoạn chương trình mẫu ñiều khiển module

SCAN-7SEGMENT&LED theo chu trình sau: xuất ra PORT0 của vi ñiều khiển các giá trị từ

0 ñến 9

ORG 0000H

LJMP MAIN

MAIN:

MOV P0,#0FFH;8 bit cua PORT0 sáng

CALL DELAY_XS

MOV P0,#00H; 8 bit cua PORT0 tắt

CALL DELAY_XS

LAP: MOV P0, A CALL DELAY_XS INC A

CJNE A, #10, LAP JMP $

DELAY_XS:

MOV R1, #20

Trang 9

L2: MOV R3, #255

DJNZ R3, $ DJNZ R2, L2

DJNZ R1, L1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Hãy biên dịch và nạp chương trình trên cho Vi ñiều khiển Kết nối PORT0 của Vi ñiều khiển với Moduke LED và sau ñó ấn nút Reset ñể thực thi chương trình Quan sát kết quả trên 8 LED ñơn Mô tả hoạt ñộng của chương trình và vẽ lưu ñồ thực chương trình

- Nếu muốn cho chương trình thực thi vô hạn thì chúng ta phải làm sao ? Biên dịch và nạp chương trình cho vi ñiều khiển ñể kiểm chứng

Bài 2: Viết chương trình kiểm tra nội dung của thanh ghi A Nếu nội dung thanh ghi A

nhỏ hơn 10 thì xuất nội dung của thanh ghi A ra PORT1, nếu nội dung thanh ghi A lớn hơn hoặc bằng 10 thì xuất giá trị 10 ra PORT1 ðoạn chương trình mẫu bên dưới ORG 0000H

LJMP MAIN

MAIN:

MOV A, #11

CJNE A,#10,KHACNHAU ; So sanh A voi 10

JMP XUAT10 ; neu bang A thi xuat gia tri 10

KHACNHAU:

JC XUATA ; Neu CF=1, vi lay A-10 neu A<10 thi phai muon

; -> CF =1 XUAT10: ; Xuat noi dung trong A ra P1

MOV P1,#10

SJMP EXIT

XUATA:

MOV P1,A

EXIT:

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Soạn thảo và biên dịch ñoạn chương trình mẫu trên Sau ñó nạp chương trình xuống vi ñiều khiển ñể kiểm chứng

- Hãy thử thay ñổi các giá trị trong thanh ghi A sao cho 10 <=A<= 0 ñể

Trang 10

- Sửa chương trình ñể so sánh 2 số X và Y Nếu X=>Y thì xuất ra PORT0 giá trị 0F0H, ngược lại nếu X<Y thì xuất ra giá trị 0FH ra PORT0

- Sửa chương trình ñể so sánh 2 số X và Y Nếu X=>Y thì xuất ra PORT0 giá trị 0F0H on/off 3 lần, ngược lại nếu X<Y thì xuất ra giá trị 0FH ra PORT0 on/off 3 lần

c Nhóm lệnh thao tác trên bit

Bài 1: Viết chương trình cho LED nhấp nháy

Dùng Keil ñể soạn thảo và biên dịch ñoạn chương trình bên dưới

ORG 0000H LJMP MAIN MAIN:

SETB P2.0

ACALL DELAY

CLR P2.0

ACALL DELAY

SJMP MAIN

DELAY:

MOV R6, #0FFH L1: MOV R7, #0FFH

DJNZ R7, $ DJNZ R6, L1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Nhìn vào ñoạn Code trên, sinh viên hãy tự kết nối PORTx ñiều khiển với module diều khiển LED 7 ñoạn và LED

- Biên dịch và nạp chương trình cho vi ñiều khiển Quan sát kết quả chương trình

- Sửa lại chương trình trên sao cho khi ấn SW1 (tác ñộng cạnh xuống)  LED sáng một lúc rồi tắt Giả sử sử dụng Px.2 (hoặc Px.3) làm SW1 (ngõ vào  tác ñộng cạnh xuống) và P2.0 là ngõ ra dùng ñiều khiển LED ñơn Các bạn có thể sử dụng gợi ý như sau: khi P3.0 dùng làm ngõ vào thì phải SETB Px.2; JNB Px.2, $; JB Px.2, $; Biên dịch và cho thực thi chương trình ñể kiểm chứng Sau ñó sửa lại chương trình Delay ñể cho LED sáng/tắt với thời gian lâu hơn

Bài 2: Viết chương trình xuất dữ liệu ra PORT1 theo qui luật như bảng bên dưới, và lặp lại khi chạy hết chu kỳ:

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

Trang 11

0 1 0 0 0 0 0 0

ORG 0000H

MAIN:

MOV P1,#0FFH

CLR P1.7

CALL DELAY_XS

SETB P1.7

CLR P1.6

CALL DELAY_XS

SETB P1.6

CLR P1.5

CALL DELAY_XS

SETB P1.5

CLR P1.4

CALL DELAY_XS

SETB P1.4

CLR P1.3

CALL DELAY_XS

SETB P1.3

CLR P1.2 CALL DELAY_XS SETB P1.2

CLR P1.1 CALL DELAY_XS SETB P1.1

CLR P1.0 CALL DELAY_XS SETB P1.0

LJPM MAIN

;DELAY_XS:

MOV R1, #20 L1: MOV R2, #200 L2: MOV R3, #255 L3: DJNZ R3, L3

DJNZ R2, L2 DJNZ R1, L1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Soạn thảo và kiểm tra lỗi, biên dịch ñoạn chương trình trên sau ñó load xuống vi ñiều khiển

Trang 12

- Chạy chương trình và quan sát kết quả xem có ñúng như bảng mô tả hoạt ñộng của PORT1 không ? Hãy sửa lại thời gian trì hoãn trong chương trình con DELAY_xS sao cho led hiển thị dễ quan sát nhất Kiểm chứng lại sự thay ñổi này ?

- Lệnh DJNZcó thể thay thế bằng lệnh CJNE hay không ? Nếu ñược hãy thay thế lệnh DJNZ R1, L1 bằng lệnh CJNE xy, yy,zz Hãy biên dịch và chạy chương trình trên vi ñiều khiển ñể kiểm chứng

- Sửa lại chương trình ñể cho LED hoạt ñộng như bảng sau:

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

- Hãy viết lại chương trình trên bằng phương pháp khác sao cho có thể ñiều khiển PORT1 hoạt ñộng như bảng trên (Gợi ý: Dùng lệnh MOVC A,

@A+DPTR và bảng dữ liệu TABLE … chứa các giá trị cần xuất ra PORT1)

d Nhóm lệnh số học

Bài 1: Thực thi chương trình sau và kiểm tra kết quả:

ORG 0000H

JMP MAIN

MAIN:

MOV A,#19h ADD A,#72h MOV P0,A END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Sửa lại chương trình trên sao cho nếu kết quả phép toán cộng có tràn thì xuất giá trị 0F0h ra PORT0, ngược lại xuất 0Fh ra PORT0 sau khi ñã xuất kết quả của phép toán cộng ra PORT0 Chú ý phải viết thêm chương trình con Delay trì hoãn ñể xem kết quả

Trang 13

- Sửa lại ñoạn chương trình trên sao cho có thể cộng ñược 2 con số 4 byte, lần lượt xuất từng byte kết quả ra PORT0 Chú ý phải có Delay trì hoãn ñể xem kết quả Gợi ý dùng lệnh ADDC cho phép cộng với cờ CF (dĩ nhiên

ñể kết quả cộng byte ñầu tiên chính xác chúng ta nên dùng CLR C ñể xoá

cờ CF) DJNZ ñể lặp lại 4 lần cộng mỗi lần 1 byte …

- Làm lại chương trình mẫu trên nếu thay lệnh ADD bằng lệnh SUBB

Bài 2: Thực thi chương trình sau và kiểm tra kết quả:

ORG 0000H

JMP MAIN

MAIN:

MOV A,#57h MOV B,#10 DIV AB MOV P0,A CALL DELAY_XS MOV A,B

MOV P0,A CALL DELAY_XS

DELAY_XS:

MOV R1, #20 L1: MOV R2, #200 L2: MOV R3, #255 L3: DJNZ R3, L3 DJNZ R2, L2 DJNZ R1, L1 RET

END

• Sinh viên hãy thực hiện các yêu cầu sau:

- Sửa lại chương trình trên ñể thực hiện phép toán nhân nội dung của hai thanh ghi A và B

e Nhóm lệnh logic

Bài 1: Thực thi chương trình hoạt ñộng như bảng bên dưới

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

Trang 14

ORG 0000H

LJMP MAIN

MAIN:

CLR C

MOV R7, #8 ; số lần quay phải

MOV A, #7FH

LAP:

MOV P1, A

RRC A

CPL C

CALL DELAY_XS

DJNZ R7, LAP DELAY_XS:

MOV R1, #20 L1: MOV R2, #200 L2: MOV R3, #255 L3: DJNZ R3, L3 DJNZ R2, L2

DJNZ R1, L1 RET

END

Sinh viên hãy thực hiện các yêu cầu sau:

- Kiểm chứng kết quả với các trạng thái hoạt ñộng cho nhu bảng bên trên

- Hãy cho biết phương thức thiện lệnh RRC

- Sửa lại lệnh RRC thành lệnh RLC, cho chạy lai chương trình, kiểm tra kết quả

- Sửa lại chương trình sao cho nó hoạt ñộng như bảng bên dưới Cho chay chương trình và kiểm tra kết quả

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

Trang 15

- Sửa lại chương trình sao cho nó hoạt ñộng như bảng bên dưới và lặp lại chu trình này Cho chay chương trình và kiểm tra kết quả

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

1 Viết chương trình ñổi số thập phân (có kích thước 1 byte) ra số nhị phân 8 bit Xuất kết quả ra PORT1

2 Viết chương trình ñổi số thập lục phân (có kích thước 1 byte) ra số nhị phân

8 bit Xuất kết quả ra PORT1

3 Viết chương trình ñổi số nhị phân 8 bit ra số thập phân (có kích thước 1 byte) Xuất kết quả ra PORT1

-Hết -

Ngày đăng: 23/10/2014, 12:38

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w