VIẾT CHƯƠNG TRÌNH ASSEMBLY VỚI Keil µVision 4 Các hệ thống vi xử lý hoặc vi điều khiển đều cần có một phần mềm chương trình để điều khiển hoạt động của nó.. • Phần mềm giao tiếp: phần nà
Trang 1BỘ MÔN ĐIỆN TỬ DEPARTMENT OF ELECTRONICS
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ DÀNH CHO GIẢNG DẠY THEO HÌNH THỨC TRỰC TUYẾN
Trang 3CHƯƠNG 1 VIẾT CHƯƠNG TRÌNH ASSEMBLY VỚI Keil µVision 4
Các hệ thống vi xử lý hoặc vi điều khiển đều cần có một phần mềm (chương trình) để điều khiển hoạt động của nó Chương trình này được giữ trong bộ nhớ chương trình (program memory) của MCU Ở cấp thấp nhất, chương trình trong hệ thống là các bit nhị phân thường được gọi là mã máy
Tuy nhiên, người lập trình rất khó để thao tác với các bit nhị phân Trong thực tế, các chương trình sẽ được viết trên máy tính bằng hợp ngữ (assembly) hoặc các ngôn ngữ cấp cao khác như C/C++, Basic,… Các chương trình này sẽ cần phải qua bước biên dịch, liên kết để chuyển sang dạng mã máy phù hợp với loại MCU đang dùng Công cụ để thực hiện các bước này được gọi là chương trình dịch hợp ngữ (assembler), chương trình biên dịch (compiler), và chương trình liên kết (linker) Mỗi loại MCU thường có một chương trình dịch hợp ngữ của riêng nó
Trong tài liệu thí nghiệm này, người lập trình có thể sử dụng chương trình Keil µVision 4, với trình biên dịch C51 Bản dùng thử có thể được tải tại www.keil.com, cho phép biên dịch các chương trình assembly và C với giới hạn kích thước chương trình là 2KB Ngoài ra cũng có thể dùng chương trình biên dịch miễn phí SDCC (tại http://sdcc.sourceforge.net/) Đây cũng là một bộ công cụ rất hữu ích cho người lập trình
1.1 Tạo một project trong Keil µVision 4
Để tạo một project với Keil µVision 4 ta theo các bước sau:
• Khởi động chương trình Keil µVision 4
• Chọn Project-New Project Chọn thư mục phù hợp và gõ tên project vào cửa sổ Create New Project Chọn Save như ở Hình 1
Hình 1: Tạo project mới với µVision 4
Trang 4Trong cửa sổ Select Device, chọn Atmel-AT89S52 Đây là CPU sử dụng trên kit thí nghiệm Click OK
Hình 2: Chọn vi điều khiển cho project Khi chương trình hiện cửa sổ hỏi: “Copy ‘STARTUP.A51’ to project folder and Add File
To Project”, chọn NO
Chọn File-New để tạo một file text mới
Chọn File-Save để lưu file này với tên file phù hợp và đuôi là A51
Hình 3: Tạo file mới với đuôi A51 Click chuột phải vào tab ‘Source Group 1’ chọn Add files to Group ‘Source Group 1’
Trang 5Hình 4: Thêm file vào project Chọn Files of Type là Asm Source file Chọn file vừa tạo và click Add
Hình 5: Chọn file assembly để thêm vào project Chọn Project-Option for Target ‘Target 1’, chọn Tab Output, chọn Create Hex File
Trang 6Hình 6: Cấu hình chương trình biên dịch để tạo file hex Giả sử chương trình được viết có tên main.A51 Để bắt đầu chương trình, người sử dụng
phải dùng dẫn xuất ORG tại địa chỉ 0000h như sau:
ORG 0000h
; phần thân chương trình
END
Trang 7Hình 7: Biên soạn và biên dịch chương trình Chọn Project-Build Target Nếu chương trình không có lỗi, chương trình sẽ biên dịch thành công với số lỗi (error) là 0, đồng thời file kết quả biên dịch sẽ được tạo ra với đuôi hex
1.2 Tính năng debug (gỡ lỗi) trong Keil µVision 4
Người lập trình có thể mô phỏng chương trình bằng cách sử dụng simulator có sẵn của Keil µVision như sau:
Chọn Debug -> Start/Stop Debug Session
Hình 8: Tính năng Debug trong Keil Kết quả mô phỏng sẽ hiển thị như hình dưới đây:
Trang 8Hình 9: Giao diện tính năng Debug
Màn hình Debug của Keil µVision bao gồm các thành phần chính sau:
1.2.1.Cửa sổ Disassembly
Hình 10: Cửa sổ Disassemply Cửa sổ Disassembly hiển thị việc thực thi chương trình trong mã assembly Khi cửa sổ Disassembly hoạt động, thì tất cả các lệnh gỡ lỗi-bước sẽ hoạt động ở cấp độ assembly (Nếu người lập trình chạy Debug nhưng không hiển thị cửa sổ Disassembly có thể mở bằng cách nhấn View
— Disassembly Window)
Như đa số các trình IDE khác, Keil hổ trợ người dùng tính năng Breakpoint Breakpoint
kích hoạt các điểm trong chương trình của người lập trình để ngừng thi hành hoặc thực hiện chức năng Debug Để có thể đặt các điểm Breakpoint, sinh viên có thể nhấp đôi chuột trái vào trước
Trang 9một dòng lệnh, khi đó ngay tại trước dòng lệnh này sẽ xuất hiện một ô vuông màu đỏ để đánh dấu điểm Breakpoint Tương tự, người lập trình cũng có thể xóa điểm breakpoint này bằng cách nhấp đôi chuột một lần nữa vào dòng lệnh
Ngoài ra thanh bên trái của sổ Disassembly biểu thị hành vi của dòng lệnh thông qua một số màu như sau:
- No code: Các dòng không có mã được đánh dấu bằng một khối màu xám nhạt
- Unexecuted Code: Các dòng chưa thực hiện (instructions) được đánh dấu bằng một
khối màu xám đậm
- Executed Code: Các dòng được thực hiện đầy đủ (instructions) được đánh dấu bằng
một khối màu xanh lá cây Khối màu xanh lá cây trên lệnh rẽ nhánh cho biết rằng cả điều kiện đúng và sai đều đã được kiểm tra
- Branch Condition True: Một khối xanh lam chỉ ra rằng chỉ điều kiện này của một
nhánh là đúng và do đó luôn được thực thi
- Branch Condition False: Một khối màu cam chỉ ra rằng điều kiện này của một nhánh
không bao giờ đúng và do đó không bao giờ thực thi
1.2.2 Thanh công cụ Debug
- Reset CPU: Đặt CPU về trạng thái ban đầu
- Run: Tiếp tục thực hiện chương trình cho đến khi đạt đến điểm ngắt hoạt động tiếp theo
- Stop: Dừng chương trình ngay lập tức
- Step Into: thực hiện một lệnh duy nhất, thực hiện dòng lệnh hiện tại
- Step Over: Thực hiện một bước duy nhất trên một hàm
- Step Out: Hoàn tất việc thực thi hàm hiện tại và dừng sau đó
- Run to Cursor: Thực thi chương trình cho đến khi đạt đến điểm Breakpoint kế
tiếp
Trang 101.2.3 Thanh ghi
Cửa sổ Thanh ghi hiển thị và cho phép sửa đổi nội dung của các thanh ghi, liệt kê các chế độ hoạt động của vi điều khiển, các trạng thái hệ thống và bên trong
Hình 11: Cửa sổ thanh ghi
- Register: Liệt kê các thanh ghi của vi điều khiển 8051
- Value: Giá trị của thanh ghi Sinh viên có thể nhấp đôi chuột vào từng giá trị của
thanh ghi để có thể sửa đổi
1.2.4 Bộ nhớ của vi điều khiển:
Bảng dưới đây trình bày các lớp bộ nhớ sử dụng để lập trình kiến trúc 8051:
Bảng 1: lớp bộ nhớ sử dụng để lập trình kiến trúc 8051
Memory class Tầm địa chỉ Mô tả
DATA D:00 – D:7F Địa chỉ trực tiếp trên RAM (RAM nội)
BIT D:20 – D:2F Địa chỉ định vị BIT trên RAM (RAM nội); truy
cập bit instructions
Trang 11IDATA I:00 – I:FF Định địa chỉ gián tiếp trên RAM (RAM nội); có
thể được truy cập bằng @R0 hoặc @R1
XDATA X:0000-X:FFFF Truy cập RAM 64 KB (RAM ngoại) Được truy
Mã Bank để mở rộng không gian mã chương trình lên 32 x 64KB ROM
Trang 12CHƯƠNG 2 TỔNG QUAN VỀ PHẦN MỀM MÔ PHỎNG PROTEUS
2.1 Tổ chức tài liệu hướng dẫn
Kit thí nghiệm được mô phỏng trong cái bài thí nghiệm được thiết kế dựa trên họ vi điều khiển MCS-51 Tài liệu hướng dẫn thí nghiệm này giúp người sử dụng tiếp cận với các kiến thức
cơ bản về vi điều khiển 8051 nhanh chóng hơn Tài liệu thí nghiệm bao gồm tài liệu hướng dẫn sử dụng phần mềm mô phỏng Proteus, các bài thí nghiệm, và một số mã nguồn để tham khảo Tài liệu hướng dẫn sẽ giới thiệu các thành phần của kit thí nghiệm được mô phỏng, được tổ chức thành các phần như sau:
• Lý thuyết cơ bản: phần này sẽ tóm tắt sơ lược các kiến thức lý thuyết có liên quan
đến bài thí nghiệm
• Thiết kế phần cứng: nội dung của phần này sẽ giúp người sử dụng nắm được chi
tiết về sơ đồ và cách thức thiết kế phần cứng của kit thí nghiệm Người sử dụng cần hiểu rõ các nội dung được đề cập trong phần này Các thiết kế phần cứng này hoàn toàn có thể ứng dụng trong thực tế
• Phần mềm giao tiếp: phần này sẽ giúp người sử dụng nắm được các kỹ thuật để xây
dựng phần mềm đáp ứng yêu cầu của bài thí nghiệm Các nội dung được đề cập trong phần này cũng sẽ rất hữu dụng trong thực tế
Mỗi bài thí nghiệm được tổ chức thành các phần như sau:
• Mục tiêu: giúp người học nắm được mục tiêu cụ thể của bài thí nghiệm
• Yêu cầu: phần này sẽ đưa ra yêu cầu cụ thể của bài thí nghiệm
• Hướng dẫn: phần này nêu một số hướng dẫn để sinh viên có thể lập trình dễ dàng
hơn
• Kiểm tra: giúp người sử dụng đáng giá mức độ đạt được các mục tiêu của bài thí
nghiệm, đồng thời gợi ý một số hiệu chỉnh nhằm làm phong phú nội dung thí nghiệm
2.2 Giới thiệu phần mềm mô phỏng Proteus
Phần mềm vẽ Proteus là phần mềm vẽ mạch điện tử được phát triển bởi công ty Lancenter Electronics Phần mềm có thể mô tả hầu hết các linh kiện điện tử thông dụng hiện nay Vì vậy trong phần thí nghiệm của môn Kỹ thuật số, sinh viên cần phải hiểu rõ nguyên lý sơ đồ mạch của từng bài thí nghiệm bằng cách sử dụng phần mềm Proteus để thực hiện mô phỏng trước các mạch này trước khi tiến hành thực hiện bài thí nghiệm
Cài đặt phần mềm mô phỏng Proteus
Phần mềm Proteus hiện nay khá phổ biến với nhiều người dùng đặc biệt là các kỹ sư điện
tử, vì vậy tài liệu hướng dẫn cài đặt Proteus có khá nhiều trên các diễn đàn Điện - Điện tử Sinh viên có thể tìm kiếm trên Google hoặc Youtube các tài liệu hướng dẫn hay các Video cài đặt một cách dễ dàng
Trang 13Tài liệu thí nghiệm này được viết dựa trên phần mềm Proteus phiên bản 8.8 SP1
2.3 Tổng quan thí nghiệm được mô phỏng bằng Proteus
Mạch thí nghiệm được mô phỏng có hình dạng và các khối cơ bản như Hình 1
2.3.1 Vi điều khiển họ MCS-51
Mạch mô phỏng sử dụng vi điều khiển họ MCS-51 có tên mã AT89C51 bao gồm 4 Port (P0 -> P3)
Trang 14Hình 12: Khối vi điều khiển Trong phần mềm mô phỏng Proteus, sinh viên có thể nạp chương trình để mô phỏng bằng cách sau:
- Nhấp đôi chuột vào vi điều khiển
Hình 13: Nạp chương trình cho vi điều khiển trong Proteus
- Nhấn vào biểu tượng và dẫn đến file HEX mà Keil µVision biên dịch được
- Nhấn OK
2.3.2 Nút nhấn
Trang 15Khi giao tiếp với nút nhấn đơn, có hai dạng cơ bản thiết kế phần cứng:
- Trở kéo lên: Hay nhấn nút vi điều khiển đọc mức thấp và nhả nút vi điều khiển đọc ở mức cao
Hình 14: Thiết kế nút nhấn theo kiểu trở kéo lên
- Trở kéo xuống: Hay nhấn nút vi điều khiển đọc mức cao và nhả nút vi điều khiển đọc ở mức thấp
Hình 15: Thiết kế nút nhấn theo kiểu trở kéo xuống
Trong mạch mô phỏng của thí nghiệm vi xử lý (theo hình thức giảng dạy trực tuyến), các nút nhấn được thiết kế gồm 8 nút nhấn đơn kết nối với PORT 1 của vi điều khiển 8051 như các hình sau Trong hình, các đường tín hiệu có tên trùng nhau sẽ nối với nhau Từ sơ đồ thiết kế ta có thể thấy nút nhấn trong kit thí nghiệm là loại trở kéo xuống (nhấn vào mức thấp, nhả ra mức cao)
Trang 16Hình 16: Khối nút nhấn trong mạch mô phỏng
Về lập trình, vì giá trị đọc được từ một nút nhấn đơn chỉ có độ rộng là 1 bit nên người lập trình nên sử dụng cờ C để chứa giá trị này, sau đó xét giá trị cờ C để nhận biết nút nhấn có được nhấn hay không bằng lệnh JC: nếu cờ C ở mức 0 tức là nút nhấn được nhấn thì chương trình sẽ nhảy đến nhãn CO_NHAN_NUT và thực thi các câu lệnh khi nút nhấn được nhấn; ngược lại nếu
cờ C ở mức 1 tức là nút nhấn không được nhấn thì chương trình sẽ thực thi các câu lệnh khi nút nhấn không nhấn Việc kiểm tra nút nhấn cần phải kiểm tra liên tục bằng cách đặt trong vòng lập (LOOP) Đây là đoạn chương trình tổng quát khi làm việc với nút nhấn bằng vòng lập, có thể viết gọn lại tùy đề bài
Trang 17Trong kit thí nghiệm môn học vi xử lý có hai LED thanh (bar LED) được kết nối với PORT
1 và PORT 3 của 8051 thông qua IC 74HC245 LED sẽ sáng khi chân vi điều khiển nối với LED
Trang 182.3.4 Giải mã địa chỉ
Mạch giải mã địa chỉ được thiết kế dùng vi mạch giải mã 74LS138 Sơ đồ thiết kế như hình sau:
Hình 19: Khối giải mã địa chỉ
Bản đồ bộ nhớ được sắp xếp như sau:
Bảng 2: bản đồ bộ nhớ giải mã địa chỉ của mạch mô phỏng
1 Chốt 74LS573 của khối led 7 đoạn 0000H-1FFFH (nY0)
3 Ra lệnh bắt đầu chuyển đổi ADC và chốt kênh cần chuyển đổi 4000H – 5FFFH (nY2)
4 Đọc 8 bit dữ liệu từ ADC 4000H – 5FFFH (nY2)
5 Điều khiển chốt 74LS573 chốt 8 bit dữ liệu của khối LCD 6000H-7FFFFH (nY3)
6 Điều khiển chốt 74LS573 chốt 8 bit dữ
liệu của khối led matrix cột 8000H – 9FFFH (nY4)
Trang 197 Điều khiển chốt 74LS573 chốt 8 bit dữ liệu của khối led matrix hàng A000H – BFFFH (nY5)
8 Không sử dụng C000H – DFFFH (nY6)
9 Không sử dụng E000H – FFFFH (nY7)
Ví dụ: Tích cực cho chân ‘7SEG’
Hình 20: Tín hiệu chọn LED 7SEG
Khối LED 7 đoạn được thiết kế để hoạt động với cơ chế 3 bus Trong cơ chế này, Port0 và Port2 được dùng để làm bus dữ liệu và bus địa chỉ Hai tín hiệu đọc ghi của bus điều khiển nằm trên Port3 Mỗi ngoại vi hoặc bộ nhớ trong chế độ 3 bus sẽ được gán địa chỉ thông qua mạch giải
mã địa chỉ Một ngoại vi hoặc bộ nhớ dữ liệu ngoài (off-chip) được thiết kế để hoạt động với cơ chế 3 bus có thể được truy xuất bằng câu lệnh MOVX Câu lệnh này chứa các thông tin gồm địa chỉ của ngoại vi hoặc ô nhớ cần truy xuất, dạng lệnh là đọc hoặc ghi
MOVX A, @DPTR ; đọc ngoại vi tại địa chỉ trong DPTR vào A
Khi câu lệnh đọc được thực thi, 8051 sẽ thực hiện các bước sau:
- Đặt địa chỉ cần đọc lên bus địa chỉ A0-A15 (tức là Port0 và Port2), giá trị này sẽ làm cho tín hiệu giải mã địa chỉ tương ứng được phép tích cực
- Ra lệnh đọc bằng tín hiệu điều khiển nRD (bit P3.7)
- Đưa dữ liệu đọc được từ bên ngoài vào thanh ghi A thông qua bus dữ liệu (Port0)
MOVX @DPTR, A ; ghi A ra ngoại vi tại địa chỉ trong DPTR
Khi câu lệnh ghi được thực thi, 8051 sẽ thực hiện các bước sau:
- Đặt địa chỉ cần ghi lên bus địa chỉ A0-A15, giá trị này sẽ làm cho tín hiệu giải mã địa chỉ tương ứng được phép tích cực
- Đặt dữ liệu trong thanh ghi A lên bus dữ liệu
- Ra lệnh ghi bằng tín hiệu nWR (bit P3.6)
Trang 20Hình 21: Giản đồ định thì của lệnh đọc/ghi ngoại vi trong chế độ 3 bus
Vì vậy có thể tóm tắt hoạt động của quá trình tích cực cho chân 7SEG như sau:
Bước 1: Đặt địa chỉ cần ghi lên bus địa chỉ A0-A15
Cụ thể theo như hình “Tín hiệu chọn LED” ta thấy đầu vào của IC 74LS138 chỉ có 3 chân
‘A13’, ‘A14’, ‘A15’ để chọn các ngõ ra tương ứng là từ ‘Y0’ đến ‘Y7’
Bên cạnh đó tín hiệu 7SEG = nWR NOR nY0 Do đó, để tích cực cho tín hiệu 7SEG thì cả
hai tín hiệu nWR và nY0 phải đều bằng 0 Một mặt, tín hiệu WR sẽ tích cực khi lệnh “MOVX
@DPTR, A” thực hiện để cho phép ghi giá trị được lưu trong thanh ghi A ra RAM ngoại tại địa chỉ được chứa trong thanh ghi DPTR Vì vậy ta cần xác định giá trị ‘A13 A14 A15’ là ‘0 0 0’ để tích cực cho tín hiệu Y0 tương ứng với tầm địa chỉ từ 0000H – 1FFFH
Trong ví dụ này, chúng ta chọn địa chỉ 1408H (nằm trong tầm 0000H – 1FFFH) để tích cực
cho tín hiệu Y0
MOV DPTR, #1408H
Bước 2: Xác định giá trị thanh ghi A
Ở bước này, đối với từng trường hợp mà đề bài đặt ra thì sinh viên xác định giá trị của A khác nhau
MOV A, #0XXXXH ;#0XXXXH là giá trị mà sinh viên cần đưa
vào
Bước 3: Ghi A ra bộ nhớ RAM ngoại, đồng thời kích chân 7SEG
MOVX @DPTR, A
2.3.5 LED bảy đoạn
LED 7 đoạn có cấu tạo gồm 8 LED đơn được nối chung cực anode (dạng LED anode chung) hoặc nối chung cực cathode (dạng LED cathode chung) Các LED trên LED 7 đoạn được đánh tên lần lượt là a, b, c, d, e, f, g tương ứng với 7 đoạn để hiển thị số hoặc các chữ cái, đồng thời còn có thêm một LED tên dp để hiển thị dấu chấm thập phân giữa các chữ số
Trang 21Hình 22: LED 7 đoạn
Để điều khiển LED 7 đoạn hiển thị một chữ số, người lập trình cần điều khiển các đèn LED sáng, tắt tương ứng để hiển thị chữ số đó Ví dụ như muốn hiển thị chữ số 7 lên LED 7 đoạn loại cathode chung (hình dưới bên tay trái) ta cần làm sáng các đèn a, b, c bằng cách phân cực thuận cho các LED này (các chân a, b, c cần ở mức cao) và tắt tất cả các đèn còn lại (các chân còn lại ở mức thấp)
Hình 23: Led 7 đoạn dạng Cathode chung (bên trái) và Anode chung (bên phải)
Hình 24: Khối LED 7 đoạn bao gồm 4 LED 7 đoạn
Trang 22Khối LED 7 đoạn gồm có 4 LED loại anode chung Tín hiệu đi vào bao gồm:
- 8 chân hiển thị LED: ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’ và chân ‘DP’ Tuy nhiên, như theo
sơ đồ thiết kế ta thấy chân ‘DP’ không được nối, vì vậy trong các bài thí nghiệm không thể hiển thị số thập phân (Nếu sinh viên có nhu cầu hiển thị số thập phân có thể thiết kế theo ý của sinh viên)
- 4 chân chọn LED: ‘LED1’, ‘LED2’, ‘LED3’, ‘LED4’ Tất cả chân này tích cực thấp Vì vậy nếu muốn hiển thị LED 3, sinh viên cần cấp tín hiệu là: ‘1011’ tương ứng với
‘LED1’, ‘LED2’, ‘LED3’, ‘LED4’
Các chân ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’ của LED 7 đoạn được nối từ ngõ ra của IC 74LS48 (IC này có chức năng giải mã BCD sang mã LED 7 đoạn, ngõ vào là mã BCD và ngõ ra là mã LED 7 đoạn)
Ngõ vào của IC 74LS48 được nối từ chân ‘Q0’, ‘Q1’, ‘Q2’, ‘Q3’ của IC 74HC573, như chúng ta đã biết, IC 74HC573 là một IC chốt, khi tín hiệu chốt LE (chân 7SEG, tầm địa chỉ 0000h
– 1FFFh, đã được đề cập ở phần “ 2.3.4 Khối giải mã địa chỉ”) thì các tín hiệu ‘Dn’ = ‘Qn’ (n từ
0 -> 7) Khi chân chốt LE hết tích cự thì giá trị tại chân ‘Qn’ được giữ nguyên trạng thái đã chốt trước đó dù cho ngõ vào ‘Dn’ có thay đổi Vì vậy các chân ‘D3’ -> ‘D0’ được dùng để truyền mã BCD cho LED 7 đoạn Và tương tự chân ‘D7’ -> ‘D4’ được dùng để chọn LED
Ví dụ: Hiển thị số 8 lên LED 7 đoạn thứ 3
Trước khi thực hiện viết chương trình, người lập trình cần phải xác định tất cả các giá trị đầu vào để có thể hiển thị theo đúng như yêu cầu:
Bước 1: Đầu tiên, cũng là bước quan trọng nhất, sinh viên cần xác định được giá trị truy xuất RAM ngoại để có thể kích được chân chốt tương ứng với mỗi khối
Theo như phần “2.3.4 Khối giải mã địa chỉ” để kích được chân chốt cho khối LED 7 đoạn, địa chỉ truy xuất phải nằm trong tầm 0000H cho đến 1FFFH, có nghĩa là sinh viên có thể chọn bất
kì giá trị nào nằm trong tầm này thì chân chốt sẽ được kích
Vì vậy trong ví dụ này, chúng ta chọn 1408H làm địa chỉ truy xuất để chốt LED 7 đoạn:
MOV DPTR, #1408H
Bước 2: Xác định giá trị đầu vào cho IC chốt 74HC573
Như đã phân tích ở trên, để hiển thị LED 7 đoạn chúng ta cần cấp 2 giá trị là giá trị BCD và giá trị chọn LED tương ứng với ‘D3 D2 D1 D0’ và ‘D7 D6 D5 D4’ Vì vậy để hiển thị số 8 lên LED thứ 3, chúng ta cần cấp cho ‘D7 D6 D5 D6’ có giá trị là ‘1 0 1 1’ và ‘D3 D2 D1 D0’ có giá trị là ‘1 0 0 0’
MOV A, #0B8H ; tương ứng với #10111000
Bước 3: Hiển thị giá trị đã xác định lên khối LED 7 đoạn
Trang 23Sau khi chúng ta xác định được các giá trị đầu vào cho khối LED 7 đoạn Bước cuối cùng, chúng ta sẽ cấp các giá trị này cho khối LED 7 đoạn
• Phương pháp quét LED:
Thiết kế phần cứng điều khiển các LED 7 đoạn đều có các chân a, b, …, g nối với nhau theo tên cùng tên, vì thế trong cùng một thời điểm chỉ có thể điều khiển LED 7 đoạn sáng cùng một kí tự Thiết kế phần cứng có thể thiết kế điều khiển các LED 7 đoạn một cách độc lập với nhau nhưng việc này sẽ lãng phí tài nguyên và không cần thiết Để hiển thị các chữ số khác nhau lên các LED 7 đoạn, ta vận dụng hiện tượng lưu ảnh của mắt Tần số quét một khung hình (tức một vòng lập) tối thiểu khoản 25 Hz Để dễ tính toán ta dùng tần số 50Hz, tức chu kì là 1/50 giây Trong 1/50 giây đó có 4 khối cần hiển thị thì độ trễ giữa các khối phải là 1/200 giây
2.3.6 LED Ma trận
LED ma trận dùng để hiển thị thông tin theo điểm ảnh, do đó LED ma trận có thể dùng để biểu diễn được chữ số, chữ cái, hình ảnh khác nhau tùy mong muốn của người lập trình LED ma trận có kích thước 8x8 để hiển thị hình ảnh LED ma trận 8x8 gồm có 64 đèn LED tạo thành các điểm ảnh, các chân anode và cathode của các LED này đều được đưa thành tín hiệu điều khiển LED ma trận có hai loại: loại anode hàng cathode cột và loại cathode cột anode hàng (không thể đổi vị trí giữa cột và hàng vì các chân cấu tạo của chúng là cố định) Trong mạch mô phỏng thí nghiệm vi xử lý, sinh viên được sử dụng loại LED ma trận có cột là Anode và hàng là Cathode
Hình 25: Hai loại LED ma trận, Anode hàng Cathode cột bên trái và Cathode cột, Anode hàng bên phải
Tương tự như cơ chế hoạt động của khối LED 7 đoạn, LED ma trận sử dụng hai IC chốt 74HC573 để chốt tín hiệu cho hàng và cột (Sinh viên có thể coi lại phần “2.3.4 Khối giải mã
địa chỉ” để xác định được địa chỉ truy xuất) Và do LED mà trận xử dụng trong bài thí nghiệm là