2 LỜI NÓI ĐẦU Với sự phát triển và thành công của ngành vi mạch bán dẫn và kỹ thuật truyền thông đã cho ra đời khái niệm Kết nối vạn vật (Internet of Things). Trong công nghệ này, các máy tính đa dụng (general purpose computer) được thu nhỏ thành các máy tính có chức năng xác định (specific purpose computer) được nhúng vào trong các thiết bị thu nhỏ nhằm để tính toán và xử lý dữ liệu. Nhờ đó, các thiết bị trở nên thông minh hơn bởi có sự hỗ trợ xử lý của máy tính cũng như dễ dàng kết nối với nhau hơn bởi các máy tính loại này cũng được hỗ trợ các chuẩn truyền thông nhằm trao đổi dữ liệu trước và sau quá trình xử lý. Việc khảo sát một máy tính có chức năng xác định như vi điều khiển là thực sự cần thiết đối với sinh viên ngành Kỹ thuật Máy tính nói riêng cũng như sinh viên ngành Kỹ thuật Điện tử nói chung.
Tài liệu này nhằm hướng dẫn người đọc khảo sát một dạng máy tính trên chip là vi điều khiển họ 8051. Qua đó, tài liệu này trình bày những nét sơ lược chung về mặt kiến trúc phần cứng của vi điều khiển như thanh ghi, kích thước dữ liệu, phương pháp đánh địa chỉ và mở rộng bộ nhớ được thể hiện cụ thể qua các ứng dụng minh họa cơ bản cũng như các câu hỏi ôn tập. Ngoài ra, chuẩn truyền thông giữa máy tính đa đụng và máy tính trên chip như UART cũng được trình bày, từ đó người đọc có thể hiểu hơn về phương pháp giao tiếp và điều khiển từ máy tính. Phương pháp tiếp cận của tài liệu này là hướng dẫn người đọc xem xét các khái niệm lý thuyết thông qua các câu hỏi cũng như thực hành các đoạn mã nguồn sử dụng ngôn ngữ hợp ngữ (assembly) và mã nguồn cấp cao (C) trên một kiến trúc máy tính xác định.
Bên cạnh đó, những phương pháp giao tiếp giữa vi điều khiển và các thiết bị ngoại vi cũng như bộ nhớ giúp người đọc dễ tiếp cận hơn về khía cạnh sử dụng máy tính trên chip để điều khiển thiết bị và xử lý các thông tin đơn giản. Phạm Văn Khoa 3 4 LỜI CẢM ƠN Để hoàn thành được cuốn sách này, tác giả đã nhận được sự hỗ trợ rất nhiều từ bạn bè, đồng nghiệp, Khoa Điện - Điện tử và Trường Đại học Sư phạm Kỹ thuật trong quá trình giảng dạy và nghiên cứu. Phạm Văn Khoa 5 6 MỤC LỤC PHẦN I: Khảo sát kiến trúc phần cứng 8051 và ngôn ngữ hợp ngữ. 9 PHẦN II: Khảo sát tập lệnh được hỗ trợ đối với vi điều khiển họ 8051.
19 Bài thực hành số 1: Chương trình di chuyển và trao đổi dữ liệu. 20 Bài thực hành số 2: Chương trình tính toán số học. 26 Bài thực hành số 3: Chương trình lệnh xử lý luận lý và bộ đếm. 32 Bài thực hành số 4: Chương trình chuyển đổi giá trị hệ thống số.
38 PHẦN III: Lập trình giao tiếp 8051 và ngoại vi sử dụng ASM. 41 Bài thực hành số 1: Lệnh tính số học để thiết kế bộ cộng/trừ 2 số nhị phân. 42 Bài thực hành số 2: Bộ định thời tạo xung dao động tần số xác định. 46 Bài thực hành số 3: Ngắt ngoài để giao tiếp với bàn phím ma trận.
51 Bài thực hành số 4: Thiết kế máy tính để cộng/trừ số có 2 chữ số. 60 PHẦN IV: Lập trình giao tiếp 8051 và ngoại vi sử dụng C. 75 Bài thực hành số 1: Giao tiếp LED đơn. 84 Bài thực hành số 2: Giao tiếp LED 7 đoạn.
89 Bài thực hành số 3: Giao tiếp bàn phím ma trận. 100 7 Bài thực hành số 4: Giao tiếp màn hình tinh thể lỏng LCD. 114 Bài thực hành số 5: Giao tiếp bộ chuyển đổi tương tự sang số ADC. 125 Bài thực hành số 6: Giao tiếp truyền thông nối tiếp UART.
133 Bài thực hành số 7: Giao tiếp bộ nhớ RAM/ROM. 153 Tài liệu tham khảo. 169 8 PHẦN I: KHẢO SÁT PHẦN CỨNG 8051 VÀ NGÔN NGỮ HỢP NGỮ Mục đích chung của phần này nhằm giúp người học ôn tập một số vấn đề về kiến trúc máy tính từ việc sử dụng thiết kế của một máy tính trên chip là vi điều khiển họ 8051. Bên cạnh đó, kiến trúc tập lệnh được hỗ trợ cho họ vi điều khiển này cũng được khái quát sơ lược thông qua một số câu hỏi ôn tập.
Việc khảo sát ngôn ngữ hợp ngữ và ý nghĩa của các quá trình biên dịch mã nguồn thành mã máy cũng được trình bày trong phần này. 9 Trong kiến trúc máy tính, các thanh ghi được sử dụng để lưu trữ thông tin một cách tạm thời, trong đó thông tin có thể là dữ liệu theo byte đã được xử lý, hoặc là con trỏ địa chỉ trỏ đến dữ liệu được nạp. Đối với máy tính trên chip họ 8051, các thanh ghi hầu hết là 8-bit. Nó được thể hiện như hình dưới đây, trong đó D0 là LSB và D7 là MSB.
Hình 1: Thanh ghi 8-bit Cũng giống như trên một kiến trúc máy tính thông thường, các vi điều khiển (máy tính trên chip) cũng có các thanh ghi thông dụng như thể hiện bởi hình sau đây: Hình 2: Các thanh ghi đa dụng được hỗ trợ trên họ 8051 10 Trong đó, chức năng của từng thanh ghi có thể liệt kê như sau: Thanh ghi A Được sử dụng cho hầu hết các lệnh về toán học và logic Thanh ghi DPTR Là con trỏ dữ liệu (data pointer) Thanh ghi PC Là bộ đếm chương trình (program counter) Thanh ghi B, R0, R1, R2, Là các thanh ghi đa dụng R3, R4, R5, R6, R7 Khảo sát cấu trúc phần cứng của vi điều khiển họ 8051 và sử dụng phần mềm mô phỏng 8051 (EdSim51DITM hoặc Keil) để trả lời các câu hỏi sau: 1. Chỉ ra số lượng bit (8 hoặc 16) cho mỗi thanh ghi sau: PC = A= B= R0 = R1 = R2 = R7 = 2. Chỉ ra giá trị lớn nhất (hệ 10) mà mỗi thanh ghi sau có thể chứa được là bao nhiêu? PC = A= B= R0 = R1 = R2 = R7 = 3. Chỉ ra giá trị lớn nhất (hệ 16) mà mỗi thanh ghi sau có thể chứa được là bao nhiêu? PC = A= B= R0 = R1 = R2 = R7 = 4.
Hãy chỉ ra các tập tin sau được tạo ra từ đâu? Ý nghĩa của mỗi tập tin sau là gì?. Chỉ ra giá trị của cờ CY sau khi các lệnh dưới đây được thực hiện là bao nhiêu? MOV A,#85H ADD A,#92H MOV A,#15H ADD A,#72H MOV A,#0F5H ADD A,#52H MOV A,#0FF INC A 6. Hãy chỉ ra vào lúc reset giá trị của thanh ghi SP (stack pointer) là bao nhiêu? 7. Hãy chỉ ra vào thời điểm đưa (push) dữ liệu vào stack, giá trị của SP được tăng hay giảm? 8.
Hãy chỉ ra vào thời điểm lấy (pop) dữ liệu ra khỏi stack, giá trị của SP được tăng hay giảm? 9. Người lập trình có thể thay đổi thanh ghi SP không? Nếu được thì cần thay đổi trong những trường hợp nào? 10. Vào thời điểm reset, tất cả các port trên 8051 được cấu hình là ngõ vào hay ngõ ra? 11. Để cho tất cả các bit trên một port nào đó là ngõ vào thì cần ghi giá trị mã hex là bao nhiêu đến cổng đó? 12.
Những cổng nào trên 8051 là có thể truy cập theo bit? 13. Giải thích đặc tính “read-modify-write” trên port? 14. Viết Chương trình để theo dõi bit P2. Nếu chân nào xuống mức thấp hãy gửi giá trị 55H ra port 1.
Giải thích sự khác nhau giữa hai lệnh sau: 12 MOVC A,@A+DPTR MOV A,@R0 16. Hãy chỉ ra lệnh nào sau đây là lệnh sai MOV A,@R1 MOV A,@R2 MOVC A,@R0+DPTR MOV @R3,A 17. Giải thích sự khác biệt giữa hai lệnh sau: MOV A,40H MOV A,#40H 18. Giải thích sự khác biệt giữa hai lệnh sau: MOV 40H,A MOV 40H,#0A 19.
Hãy cho biết địa chỉ trên RAM của mỗi thanh ghi sau: A= B= R0 = R2 = PSW = SP = DPL = DPH = 20. Giải thích sự khác biệt giữa hai lệnh ADD và ADDC. Có thể sử dụng lệnh “DA A” để chuyển dữ liệu 9CH thành định dạng BCD mà không cần thực hiện lệnh ADD không? Giải thích. Đối với 8051, khi thực hiện phép chia 1 byte cho 1 byte khác, giá trị lớn nhất đối với tử số và mẫu số là bao nhiêu? Thể hiện câu trả lời ở dạng số HEX và DEC.
Đối với 8051, khi thực hiện phép chia 1 byte cho 1 byte khác, giá trị lớn nhất cho số chia và phần dư là bao nhiêu? Thể hiện câu trả lời ở dạng số HEX và DEC. Đối với 8051, khi thực hiện phép nhân 2 số, giá trị lớn nhất cho mỗi số là bao nhiêu? 13 25. Giải thích vai trò của cờ OV trong các lệnh nhân và chia. Xét về hiệu năng, khi thực hiện bình phương (square) của các số từ 0 đến 9 phương pháp nào sau đây sẽ nhanh hơn? Giải thích (a) Sử dụng lệnh MUL (b) Sử dụng bảng tra (look-up table) 27.
Giá trị trong thanh ghi A sẽ là bao nhiêu (số HEX) sau khi thực hiện lệnh sau: MOV A,#45H A= RR A RR A RR A MOV A,#45H A= RL A RL A RL A CLR A A= XRL A,#0FFH CLR A A= CPL A XRL A,#0FFH 28. Giả sử 8051 không được hỗ trợ lệnh “SWAP A”, làm thế nào để thực hiện được hoạt động này? 29. Lệnh SWAP có thể thực hiện với mọi thanh ghi không? 30. Trong kiến trúc tập lệnh (Instruction set architecture) được hỗ trợ cho vi điều khiển họ 8051, những nhóm lệnh nào có CPI thấp và những nhóm lệnh nào có CPI cao? 31.
Xét về hiệu năng, hãy nêu các giải pháp để tăng hiệu năng hệ thống?