Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 2: Khảo sát một số lệnh tiêu biểu MSC-51

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.

pdf15 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 1655 | Lượt tải: 2download
Tóm tắt nội dung Tài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 2: Khảo sát một số lệnh tiêu biểu MSC-51, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
MAIN 
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 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
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 
 LJPM MAIN 
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 
MOV A, #0 
LAP: MOV P0, A 
CALL DELAY_XS 
INC A 
CJNE A, #10, LAP 
JMP $ 
DELAY_XS: 
 MOV R1, #20 
L1: MOV R2, #200 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-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 ñể 
kiểm chứng. 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-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 
1 0 0 0 0 0 0 0 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-11 
0 1 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 1 
ORG 0000H 
LJMP MAIN 
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. 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-13 
- 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 
1 0 0 0 0 0 0 0 
1 1 0 0 0 0 0 0 
1 1 1 0 0 0 0 0 
1 1 1 1 0 0 0 0 
1 1 1 1 1 0 0 0 
1 1 1 1 1 1 0 0 
1 1 1 1 1 1 1 0 
1 1 1 1 1 1 1 1 
- 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ả. 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-14 
- 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 
1 0 0 0 0 0 0 0 
1 1 0 0 0 0 0 0 
1 1 1 0 0 0 0 0 
1 1 1 1 0 0 0 0 
1 1 1 1 1 0 0 0 
1 1 1 1 1 1 0 0 
1 1 1 1 1 1 1 0 
1 1 1 1 1 1 1 1 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-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 
0 0 0 0 0 0 0 1 
0 0 0 0 0 0 1 1 
0 0 0 0 0 1 1 1 
0 0 0 0 1 1 1 1 
0 0 0 1 1 1 1 1 
0 0 1 1 1 1 1 1 
0 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 
 Bài 2: Khảo sát một số tập lệnh cơ bản của MSC-51 
Trang II-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 0 0 0 0 0 0 0 
1 1 0 0 0 0 0 0 
1 1 1 0 0 0 0 0 
1 1 1 1 0 0 0 0 
1 1 1 1 1 0 0 0 
1 1 1 1 1 1 0 0 
1 1 1 1 1 1 1 0 
1 1 1 1 1 1 1 1 
0 1 1 1 1 1 1 1 
0 0 1 1 1 1 1 1 
0 0 0 1 1 1 1 1 
0 0 0 0 1 1 1 1 
0 0 0 0 0 1 1 1 
0 0 0 0 0 0 1 1 
0 0 0 0 0 0 0 1 
0 0 0 0 0 0 0 0 
Bài tập bắt buộc làm thêm: 
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----------- 

File đính kèm:

  • pdfTài liệu hướng dẫn thực tập Vi điều khiển MSC-51 - Bài 2 Khảo sát một số lệnh tiêu biểu MSC-51.pdf