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.
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:
- 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.pdf