1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM

125 8 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

Tiêu đề Giáo Trình Vi Điều Khiển
Trường học Trường Cao Đẳng Kinh Tế - Kỹ Thuật Vinatex TP. HCM
Chuyên ngành Vi Điều Khiển
Thể loại Giáo Trình
Năm xuất bản 2017
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 125
Dung lượng 3,16 MB

Cấu trúc

  • Chương I. GIỚI THIỆU CHUNG VỀ BỘ VI XỬ LÝ (7)
    • I. SỰ PHÁT TRIỂN CỦA CÁC BỘ VI XỬ LÝ (7)
      • 1. Thế hệ 1 (1971 - 1973) (7)
      • 2. Thế hệ 2 (1974 - 1977) (7)
      • 3. Thế hệ 3 (1978 - 1982) (7)
      • 4. Thế hệ 4 (1983 - nay) (7)
    • II. SƠ ĐỒ KHỐI CỦA MỘT HỆ VI XỬ LÝ (8)
      • 1. Khái niệm hệ vi xử lý (8)
      • 2. Sơ đồ khối hệ vi xử lý (8)
    • III. ĐƠN VỊ XỬ LÝ TRUNG TÂM (8)
    • IV. BỘ NHỚ BÁN DẪN (10)
      • 1. ROM (Read Only Memory) (10)
      • 2. RAM (Random Access Memory) (11)
    • V. CÁC THIẾT BỊ NGOẠI VI (CÁC THIẾT BỊ XUẤT NHẬP) (12)
    • VI. HỆ THỐNG BUS (12)
    • VII. VI XỬ LÝ – VI ĐIỀU KHIỂN (13)
    • VIII. MINH HỌA KIẾN TRÚC CỦA MỘT HỆ VI ĐIỀU KHIỂN (13)
    • IX. LỰA CHỌN BỘ VI ĐIỀU KHIỂN KHI THIẾT KẾ (14)
      • 1. Tiêu chuẩn thứ nhất (14)
      • 2. Tiêu chuẩn thứ hai (14)
      • 3. Tiêu chuẩn thứ ba (14)
  • Chương II. TỔNG QUAN VỀ VI ĐIỀU KHIỂN MCS-51 (15)
    • I. GIỚI THIỆU (15)
    • II. VI ĐIỀU KHIỂN AT89C51 (15)
      • 1. Sơ đồ khối AT89C51 (16)
      • 2. Định thì chu kỳ máy (19)
      • 4. Các thanh ghi chức năng đặc biệt (SFR – Special Function Registers) (27)
      • 5. Cấu trúc port (31)
      • 6. Hoạt động Reset (32)
      • 7. Các vấn đề khác (33)
      • 8. Các đặc tính của AT89C51 (37)
  • Chương III: LẬP TRÌNH HỢP NGỮ TRÊN VI ĐIỀU KHIỂN MCS-51 (43)
    • I. CÁC PHƯƠNG PHÁP ĐỊNH ĐỊA CHỈ (43)
      • 1. Định địa chỉ trực tiếp (43)
      • 2. Định địa chỉ gián tiếp (43)
      • 3. Định địa chỉ thanh ghi (44)
      • 4. Định địa chỉ tức thời (44)
      • 5. Định địa chỉ chỉ số (44)
    • II. CÁC VẤN ĐỀ LIÊN QUAN KHI LẬP TRÌNH HỢP NGỮ (44)
      • 1. Cú pháp lệnh (44)
      • 2. Khai báo dữ liệu (44)
      • 3. Các toán tử (46)
      • 4. Cấu trúc chương trình (47)
    • III. TẬP LỆNH (47)
      • 1. Nhóm lệnh chuyển dữ liệu (47)
      • 2. Nhóm lệnh xử lý bit (51)
      • 3. Nhóm lệnh chuyển điều khiển (53)
      • 4. Nhóm lệnh logic (56)
      • 5. Nhóm lệnh số học (57)
  • Chương IV: CÁC HOẠT ĐỘNG CỦA VI ĐIỀU KHIỂN MCS-51 (61)
    • I. HOẠT ĐỘNG ĐỊNH THỜI (TIMER / COUNTER) (61)
      • 1. Giới thiệu (61)
      • 2. Hoạt động Timer / Counter (61)
      • 3. Các thanh ghi điều khiển hoạt động (62)
      • 4. Các chế độ hoạt động (63)
      • 5. Timer 2 (65)
      • 6. Các ví dụ (70)
    • II. CỔNG NỐI TIẾP (SERIAL PORT) (73)
      • 1. Các thanh ghi điều khiển hoạt động (74)
      • 2. Tạo tốc độ baud (75)
      • 3. Truyền thông đa xử lý (79)
      • 4. Nhận dạng địa chỉ tự động (80)
      • 5. Kiểm tra lỗi khung (81)
    • III. NGẮT (INTERRUPT) (83)
      • 2. Xử lý ngắt (85)
      • 3. Ngắt do bộ định thời (86)
      • 4. Ngắt do cổng nối tiếp (89)
      • 5. Ngắt ngoài (91)
  • Chương V: CÁC ỨNG DỤNG DỰA TRÊN VI ĐIỀU KHIỂN MCS-51 (94)
    • I. ĐIỀU KHIỂN LED ĐƠN (94)
    • II. ĐIỀU KHIỂN LED 7 ĐOẠN (96)
      • 1. Cấu trúc và bảng mã hiển thị dữ liệu trên Led 7 đoạn (96)
      • 2. Các phương pháp hiển thị dữ liệu (99)
    • III. ĐIỂU KHIỂN MA TRẬN LED (103)
    • IV. ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC (106)
    • V. ĐIỀU KHIỂN LCD (Liquid Crystal Display) (109)
    • VI. GIAO TIẾP VỚI PPI8255 (118)
  • Tài liệu tham khảo (125)

Nội dung

Giáo trình Vi điều khiển được biên soạn dành cho hệ cao đẳng chuyên nghiệp và cao đẳng nghề, ngành điện – điện tử và cơ điện tử. Giáo trình gồm 5 chương: Chương I giới thiệu chung về bộ vi xử lý; chương II tổng quan về vi điều khiển MCS-51; chương III lập trình hợp ngữ trên vi điều khiển MCS-51; chương IV các hoạt động của vi điều khiển MCS-51; chương V các ứng dụng dựa trên vi điều khiển MCS-51. Mời các bạn cùng tham khảo để biết thêm nội dung chi tiết.

GIỚI THIỆU CHUNG VỀ BỘ VI XỬ LÝ

SỰ PHÁT TRIỂN CỦA CÁC BỘ VI XỬ LÝ

1 Thế hệ 1 (1971 - 1973) Đặc điểm chung của các vi xử lý thế hệ này:

- Công nghệ chế tạo: PMOS

- Tốc độ thực hiện lệnh: 10 – 60 às/lệnh với f CLOCK = 0,1 – 0,8 MHz

Một số vi xử lý đặc trưng cho thế hệ này: 4040 (Intel), PPS-4 (Rockwell International)…

2 Thế hệ 2 (1974 - 1977) Đặc điểm chung của các vi xử lý thế hệ này:

- Công nghệ chế tạo: NMOS hoặc CMOS

- Tốc độ thực hiện lệnh: 1 – 8 às/lệnh với f CLOCK = 1 – 5 MHz

Một số bộ vi xử lý đặc trưng cho thế hệ này: 6502 (Mos Technology), 6800/6809 (Motorola), 8080/8085 (Intel), Z80 (Zilog), …

3 Thế hệ 3 (1978 - 1982) Đặc điểm chung của các vi xử lý thế hệ này:

- Công nghệ chế tạo: HMOS

- Tốc độ thực hiện lệnh: 0,1 – 1 às/lệnh với f CLOCK = 5 – 10 MHz

Một số bộ vi xử lý đặc trưng cho thế hệ này: 68000/68010 (Motorola), 8086/80186/80286 (Intel)…

4 Thế hệ 4 (1983 - nay) Đặc điểm chung của các vi xử lý thế hệ này:

- Công nghệ chế tạo: HCMOS

- Tốc độ thực hiện lệnh: 0,01 – 0,1 às với f CLOCK = 20 – 100 MHz

Một số bộ vi xử lý đặc trưng cho thế hệ này: 68020/68030/68040/68060 (Motorola), 80386/80486/Pentium (Intel), …

SƠ ĐỒ KHỐI CỦA MỘT HỆ VI XỬ LÝ

1 Khái niệm hệ vi xử lý

- Khả năng được lập trình để thao tác trên các dữ liệu mà không cần sự can thiệp của con người

- Khả năng lưu trữ và phục hồi dữ liệu

2 Sơ đồ khối hệ vi xử lý

- Phần cứng (Hardware): các thiết bị ngoại vi → để giao tiếp với con người

- Phần mềm (Software): chương trình → để xử lý dữ liệu

Hình 1.1 – Sơ đồ khối của hệ vi xử lý

- CPU (Central Processing Unit): đơn vị xử lý trung tâm

- RAM (Random Access Memory): bộ nhớ truy xuất ngẫu nhiên ROM (Read Only Memory): bộ nhớ chỉ đọc

- Interface Circuitry: mạch điện giao tiếp

- Peripheral Devices (Input): các thiết bị ngoại vi (thiết bị nhập)

- Peripheral Devices (Output): các thiết bị ngoại vi (thiết bị xuất)

- Address bus: bus địa chỉ

- Data bus: bus dữ liệu

- Control bus: bus điều khiển.

ĐƠN VỊ XỬ LÝ TRUNG TÂM

CPU là thành phần quan trọng nhất trong hệ vi xử lý, chịu trách nhiệm quản lý mọi hoạt động của hệ thống và thực hiện tất cả các thao tác liên quan đến dữ liệu.

CPU là vi mạch điện tử tích hợp cao, có chức năng đọc mã lệnh dưới dạng bit 0 và 1 từ bộ nhớ Sau đó, CPU giải mã các lệnh này thành dãy xung điều khiển để thực hiện các thao tác cần thiết, từ đó điều khiển các khối khác trong hệ thống và tạo ra xung điều khiển cho toàn bộ hệ thống.

Hình 1.2 – Sơ đồ khối của CPU

- IR (Instruction Register): thanh ghi lệnh

- PC (Program Counter / Instruction Pointer): bộ đếm chương trình / con trỏ lệnh

- Instruction decode and control unit: đơn vị giải mã lệnh và điều khiển

- ALU (Arithmetic and Logic Unit): đơn vị số học và logic

Tóm lại, khi hoạt động CPU sẽ thực hiện liên tục 2 thao tác: tìm nạp lệnh và giải mã – thực hiện lệnh

+ Thao tác tìm nạp lệnh:

- Nội dung của thanh ghi PC được CPU đưa lên bus địa chỉ (1)

- Tín hiệu điều khiển đọc (Read) chuyển sang trạng thái tích cực (2)

- Mã lệnh (Opcode) từ bộ nhớ được đưa lên bus dữ liệu (3)

- Mã lệnh được chuyển vào trong thanh ghi IR trong CPU (4)

- Nội dung của thanh ghi PC tăng lên một đơn vị để chuẩn bị tìm nạp lệnh kế tiếp từ bộ nhớ

+ Thao tác giải mã – thực hiện lệnh:

- Mã lệnh từ thanh ghi IR được đưa vào đơn vị giải mã lệnh và điều khiển

Đơn vị giải mã lệnh và điều khiển có nhiệm vụ giải mã opcode, từ đó tạo ra các tín hiệu để điều phối quá trình xuất nhập dữ liệu giữa ALU và các thanh ghi.

- Căn cứ trên các tín hiệu điều khiển này, ALU thực hiện các thao tác đã được xác định

Hình 1.3 – Hoạt động của BUS cho chu kỳ nạp lệnh

Một chuỗi các lệnh (Opcode) kết hợp lại với nhau để thực hiện một công việc có ý nghĩa được gọi là chương trình (Program) hay phần mềm (Software).

BỘ NHỚ BÁN DẪN

Bộ nhớ bán dẫn là thành phần quan trọng trong hệ vi xử lý, nơi lưu trữ các chương trình và dữ liệu.

Bộ nhớ bán dẫn trong hệ vi xử lý gồm:

- ROM: bộ nhớ chương trình → lưu giữ chương trình điều khiển hoạt động của toàn hệ thống

- RAM: bộ nhớ dữ liệu → lưu giữ dữ liệu, một phần chương trình điều khiển hệ thống, các ứng dụng và kết quả tính toán

Bộ nhớ chỉ đọc, thông tin trong ROM sẽ không bị mất đi ngay cả khi nguồn điện cung cấp cho ROM không còn

+ Phân loại một số loại ROM:

- MROM (Mask ROM): ROM mặt nạ

- PROM (Programmable ROM): ROM lập trình được

- EPROM (Eraseable PROM): ROM lập trình và xóa được

- UV-EPROM (Ultra Violet EPROM): ROM xóa bằng tia cực tím

- EEPROM (Electric EPROM): ROM lập trình và xóa bằng tín hiệu điện

- Flash ROM: ROM lập trình và xóa bằng tín hiệu điện

Bộ nhớ truy xuất ngẫu nhiên (bộ nhớ ghi đọc), thông tin trong RAM sẽ bị mất đi khi nguồn điện cung cấp cho RAM không còn

+ Phân loại một số loại RAM:

- DRAM (Dynamic RAM): RAM động

- SRAM (Static RAM): RAM tĩnh

+ Cách xác định dung lượng bộ nhớ bán dẫn 8 bit sử dụng cho chip vi điều khiển 8051 như sau:

- Dựa vào số lượng chân địa chỉ:

Dung lượng = 2 N , với N là số đường địa chỉ của bộ nhớ

Ví dụ: Bộ nhớ bán dẫn 8 bit có 10 đường địa chỉ Cho biết dung lượng của bộ nhớ là bao nhiêu?

- Dựa vào mã số của bộ nhớ:

Mã số: XX YYYY XX: loại bộ nhớ

YYYY: dung lượng bộ nhớ

Dung lượng = YYYY (Kbit) hoặc dung lượng = YYYY / 8 (KB)

Ví dụ: Bộ nhớ có mã số 27256, dung lượng của bộ nhớ là bao nhiêu ?

CÁC THIẾT BỊ NGOẠI VI (CÁC THIẾT BỊ XUẤT NHẬP)

Mạch điện giao tiếp và thiết bị ngoại vi tạo điều kiện cho hệ vi xử lý giao tiếp với thế giới bên ngoài Cổng giao tiếp giữa bus hệ thống và các thiết bị ngoại vi được gọi là cổng Tùy thuộc vào loại thiết bị, có các cổng nhập để nhận thông tin từ bên ngoài và cổng xuất để truyền thông tin ra ngoài hệ thống.

Tổng quát, ta có 3 loại thiết bị xuất nhập sau:

- Thiết bị lưu trữ lớn: băng từ, đĩa từ, đĩa quang, …

- Thiết bị giao tiếp với con người: màn hình, bàn phím, máy in, …

- Thiết bị điều khiển / kiểm tra: các bộ kích thích, các bộ cảm biến, …

HỆ THỐNG BUS

Bus là tập hợp các đường dây truyền thông tin có chức năng tương tự, bao gồm ba loại chính: bus địa chỉ, bus dữ liệu và bus điều khiển Hệ thống bus này cho phép CPU thực hiện các thao tác đọc và ghi thông tin giữa CPU, bộ nhớ và các thiết bị ngoại vi.

- Bus địa chỉ (Address bus):

- Để chuyển tải thông tin của các bit địa chỉ

- Là loại bus 1 chiều (CPU → MEM hay I/O)

- Để xác định bộ nhớ hoặc thiết bị ngoại vi mà CPU cần trao đổi thông tin

- Để xác định dung lượng bộ nhớ hoặc ngoại vi mà CPU có khả năng truy xuất

- Bus dữ liệu (Data bus):

- Để chuyển tải thông tin của các bit dữ liệu

- Là loại bus 2 chiều (CPU ↔ MEM hay I/O)

- Để xác định số bit dữ liệu mà CPU có khả năng xử lý cùng một lúc

- Bus điều khiển (Control bus):

- Để chuyển tải thông tin của các bit điều khiển (mỗi đường dây là một tín hiệu điều khiển khác nhau)

- Là loại bus 1 chiều (CPU → MEM-I/O hoặc MEM-I/O → CPU)

- Để điều khiển các khối khác trong hệ và nhận tín hiệu điều khiển từ các khối đó để phối hợp hoạt động.

VI XỬ LÝ – VI ĐIỀU KHIỂN

Để phân biệt bộ vi xử lý và bộ vi điều khiển ta có thể dựa trên các yếu tố như sau:

Yếu tố phân loại Vi xử lý

Cấu trúc phần cứng (Hardware architecture)

Mạch giao tiếp nối tiếp X

Mạch giao tiếp song song X

Các mạch điều khiển khác X

Các ứngdụng (Applications) Ứng dụng lớn, tính toán phức tạp X Ứng dụng nhỏ, tính toán đơn giản X

Các đặc trưng của tập lệnh

Các kiểu định địa chỉ Nhiều Ít Độ dài từ dữ liệu xử lý Byte, Word, Double word, … Bit, Byte

MINH HỌA KIẾN TRÚC CỦA MỘT HỆ VI ĐIỀU KHIỂN

Hình 1.4 – Kiến trúc của vi điều khiển

- WDT (Watch-Dog Timer): Bộ định thời Watch-Dog

- OSC., OSC/N (Oscillator): Bộ dao động (N: hệ số chia tần)

- A/D (Analog/Digital): Bộ biến đổi tín hiệu tương tự/số

- SFR Registers (Special Function Register): Các thanh ghi chức năng đặc biệt

- RAM Memory: Bộ nhớ dữ liệu

- Program Memory: Bộ nhớ chương trình

EEPROM, or Electrically Erasable Programmable Read-Only Memory, is a crucial component in digital systems I/O ports facilitate data input and output, allowing communication between the device and external peripherals The instruction decoder interprets commands, enabling the processor to execute tasks efficiently The Arithmetic Logic Unit (ALU) performs essential arithmetic and logical operations, while the accumulator serves as a register for temporarily holding data during processing Lastly, control logic orchestrates the overall functionality of these components, ensuring seamless operation within the system.

- Program Counter: Bộ đếm chương trình

- Instructions/Addresses: Các lệnh / địa chỉ.

LỰA CHỌN BỘ VI ĐIỀU KHIỂN KHI THIẾT KẾ

Trên thị trường hiện nay, có bốn dòng vi điều khiển phổ biến là 68xxx của Motorola, 80xxx của Intel, Z8xx của Zilog và PIC16xxx của Microchip Technology Mỗi dòng vi điều khiển này sở hữu tập lệnh và thanh ghi riêng biệt, dẫn đến sự không tương thích giữa chúng Khi thiết kế hệ thống sử dụng vi điều khiển, việc lựa chọn dựa trên các tiêu chuẩn phù hợp là rất quan trọng.

Có ba tiêu chẩn chính:

1 Tiêu chuẩn thứ nhất Đáp ứng yêu cầu tính toán một cách hiệu quả và kinh tế Do vậy, trước tiên ta cần phải xem xét bộ vi điều khiển 8 bit, 16 bit hay 32 bit là thích hợp nhất Một số tham số kỹ thuật cần được cân nhắc khi chọn lựa là:

- Tốc độ: tốc độ lớn nhất mà vi điều khiển hỗ trợ là bao nhiêu

Kiểu IC đóng vai trò quan trọng trong thiết kế sản phẩm, với các loại như DIP 40 chân, QFP và các kiểu vỏ khác Việc lựa chọn kiểu đóng vỏ phù hợp không chỉ ảnh hưởng đến không gian lắp ráp mà còn hỗ trợ trong quá trình tạo mẫu thử cho sản phẩm cuối cùng.

- Công suất tiêu thụ: là một tiêu chuẩn cần đặc biệt lưu ý nếu sản phẩm dùng pin hoặc điện áp lưới

- Dung lượng bộ nhớ ROM và RAM tích hợp sẵn trên chip

- Số chân vào/ra và bộ định thời trên chip

- Khả năng dễ dàng nâng cao hiệu suất hoặc giảm công suất tiêu thụ

- Giá thành trên một đơn vị khi mua số lượng lớn Vì đây là vấn đề có ảnh hưởng đến giá thành cuối cùng của sản phẩm

Có sẵn các công cụ phát triển phần mềm, chẳng hạn như các chương trình mô phỏng, trình biên dịch, trình hợp dịch và gỡ rối

Khả năng đáp ứng về số lượng hiện tại và tương lai là yếu tố quan trọng, đặc biệt đối với một số nhà thiết kế, có thể còn được xem là tiêu chuẩn hàng đầu hơn cả hai tiêu chí khác.

TỔNG QUAN VỀ VI ĐIỀU KHIỂN MCS-51

GIỚI THIỆU

Vi điều khiển MCS-51, được Intel sản xuất lần đầu vào năm 1980, là các IC được thiết kế cho các ứng dụng điều khiển Những IC này hoạt động như một hệ thống vi xử lý hoàn chỉnh, bao gồm các thành phần chính như CPU, bộ nhớ, mạch giao tiếp và điều khiển ngắt.

MCS-51 là một họ vi điều khiển sử dụng cơ chế CISC (Complex Instruction Set Computer), với độ dài và thời gian thực thi lệnh đa dạng Tập lệnh của MCS-51 bao gồm các lệnh điều khiển xuất/nhập, cho phép thao tác từng bit một cách linh hoạt.

MCS-51 là một dòng vi điều khiển đa dạng, bắt đầu với vi điều khiển 8051 sở hữu 4KB ROM và 128 byte RAM Đặc biệt, phiên bản 8031 không tích hợp ROM nội và yêu cầu bộ nhớ ngoài Sau đó, nhiều nhà sản xuất khác như Siemens và Fujitsu cũng được cấp phép sản xuất các vi điều khiển MCS-51.

MCS-51 bao gồm nhiều phiên bản khác nhau, mỗi phiên bản sau tăng thêm một số thanh ghi điều khiển hoạt động của MCS-51.

VI ĐIỀU KHIỂN AT89C51

AT89C51 là vi điều khiển do Atmel sản xuất, chế tạo theo công nghệ CMOS có các đặc tính như sau:

- 4 KB FPEROM (Flash Programmable and Erasable Read Only Memory), có khả năng tới

- Tần số hoạt động từ: 0Hz đến 24 MHz

- 3 mức khóa bộ nhớ lập trình

- Giao tiếp nối tiếp điều khiển bằng phần cứng

- 64 KB vùng nhớ mã ngoài, 64 KB vùng nhớ dữ liệu ngoài

- Cho phép xử lý bit

- 210 vị trí nhớ có thể định vị bit

- 4 chu kỳ mỏy (4 às đối với thạch anh 12MHz) cho hoạt động nhõn hoặc chia

- Có các chế độ nghỉ (Low-power Idle) và chế độ nguồn giảm (Power-down)

Ngoải ra, một số IC khác của họ MCS-51 có thêm bộ định thời thứ 3 và 256 byte RAM nội

Hình 2.1 – Sơ đồ khối của AT89C51 AT89C51 gồm có 40 chân, mô tả như sau:

Port 0 là port có 2 chức năng ở các chân 32 – 39 của AT89C51:

Chức năng IO (xuất / nhập) rất hữu ích cho các thiết kế nhỏ, nhưng khi sử dụng chức năng này, cần lưu ý rằng Port 0 phải được kết nối với các điện trở kéo lên (pull-up) Giá trị của điện trở này phụ thuộc vào thành phần kết nối với Port.

Khi dùng làm ngõ ra, Port 0 có thể kéo được 8 ngõ TTL

Khi dùng làm ngõ vào, Port 0 phải được set mức logic 1 trước đó

Hình 2.2 – Sơ đồ chân của AT89C51

Khi sử dụng các thiết kế lớn yêu cầu bộ nhớ ngoài, Port 0 đóng vai trò quan trọng, vừa là bus dữ liệu 8 bit vừa là bus địa chỉ 8 bit thấp, giúp tối ưu hóa chức năng địa chỉ và dữ liệu đa hợp.

Khi lập trình cho vi điều khiển AT89C51, Port 0 không chỉ dùng để nhận mã mà còn để xuất mã trong quá trình kiểm tra, trong đó yêu cầu phải có điện trở kéo lên.

Port 1 (chân 1 – 8) chỉ có chức năng IO và không được sử dụng cho mục đích khác, ngoại trừ trong các vi điều khiển 8032/8052/8952, nơi P1.0 và P1.1 có thể được dùng cho bộ định thời thứ 3 Port 1 đã được trang bị điện trở kéo lên, do đó không cần thêm điện trở ngoài.

Port 1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8 bit địa chỉ thấp trong quá trình lập trình hay kiểm tra

Khi dùng làm ngõ vào, Port 1 phải được set mức logic 1 trước đó

Port 2 (chân 21 – 28) là port có 2 chức năng:

- Chức năng IO (xuất / nhập):có khả năng kéo được 4 ngõ TTL

- Chức năng địa chỉ:dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ

16 bit Khi đó, Port 2 không được dùng cho mục đích IO

Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó

Khi lập trình, Port 2 dùng làm 8 bit địa chỉ cao hay một số tín hiệu điều khiển

Port 3 (chân 10 – 17) là port có 2 chức năng:

- Chức năng IO: có khả năng kéo được 4 ngõ TTL

Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó

- Chức năng khác: mô tả như Bảng 2.1

Bảng 2.1: Chức năng các chân của Port 3

P3.0 RxD Ngõ vào port nối tiếp P3.1 TxD Ngõ ra port nối tiếp

P3.4 T0 Ngõ vào của bộ định thời 0 P3.5 T1 Ngõ vào của bộ định thời 1 P3.6 WR Tín hiệu điều khiển ghi dữ liệu lên bộ nhớ ngoài

P3.7 RD Tín hiệu điều khiển đọc từ bộ nhớ dữ liệu ngoài

PSEN (chân 29) cho phép truy cập bộ nhớ chương trình mở rộng cho các ứng dụng sử dụng ROM ngoài, thường kết nối với chân OC (Output Control) của ROM để đọc byte mã lệnh Trong thời gian AT89C51 thực hiện việc lấy lệnh, PSEN sẽ ở mức logic 0 và hoạt động tích cực.

2 lần trong 1 chu kỳ máy

Mã lệnh của chương trình được đọc từ ROM thông qua bus dữ liệu (Port0) và bus địa chỉ (Port0 + Port2)

Khi 8951 thi hành chương trình trong ROM nội, PSEN sẽ ở mức logic 1

ALE/ PROG (Address Latch Enable / Program):

ALE/PROG (chân 30) cho phép tách biệt các đường địa chỉ và dữ liệu tại Port 0 trong quá trình truy xuất bộ nhớ ngoài Thông thường, tín hiệu ALE được kết nối với chân Clock của các IC chốt như 74373 và 74573.

Xung tín hiệu ALE có tốc độ bằng 1/6 tần số dao động trên chip, có thể được sử dụng làm tín hiệu clock cho các phần khác trong hệ thống Ngoài ra, xung này có thể bị cấm bằng cách thiết lập bit.

SFR tại địa chỉ 8Eh được nâng lên thành 1, khiến ALE chỉ hoạt động khi thực hiện lệnh MOVX hoặc MOVC Ngoài ra, chân này còn đóng vai trò là ngõ vào xung lập trình cho ROM nội (PROG).

Chân 31 (EA) của AT89C51 cho phép lựa chọn nguồn thực thi chương trình Khi chân EA được nối với Vcc, vi điều khiển sẽ thực thi chương trình từ ROM nội với dung lượng tối đa 8KB Ngược lại, nếu chân EA không được nối với Vcc, AT89C51 sẽ thực thi chương trình từ ROM ngoài, với dung lượng tối đa lên đến 64KB.

Ngoài ra, chân EA được lấy làm chân cấp nguồn 12V khi lập trình cho ROM

RST (chân 9) cho phép reset AT89C51 khi ngõ vào tín hiệu đưa lên mức 1 trong ít nhất là

Để sử dụng bộ dao động, chỉ cần kết nối thêm thạch anh và các tụ điện như trong sơ đồ Tần số thạch anh phổ biến cho AT89C51 là 12MHz, với giá trị của tụ C1 và C2 là 30 pF ± 10 pF.

Hình 2.3 – Sơ đồ kết nối thạch anh

2 Định thì chu kỳ máy

Một chu kỳ máy bao gồm 6 trạng thái, tương ứng với 12 xung clock, trong đó mỗi trạng thái được chia thành 2 phần: Phase 1 và Phase 2 Do đó, chu kỳ máy được biểu diễn từ S1P1 đến S6P2 Quy trình lấy lệnh và thực thi lệnh được mô tả rõ ràng trong Hình 2.4.

Trong một chu kỳ máy, tín hiệu chốt địa chỉ ALE được kích hoạt tích cực hai lần, cụ thể là trong khoảng thời gian từ S1P2 đến S2P1 và từ S4P2 đến S5P1 Điều này dẫn đến tần số xung tại chân ALE bằng 1/6 tần số của thạch anh Các lệnh thực thi diễn ra trong một chu kỳ này cũng được xác định rõ.

- Lệnh 1 byte: được thực thi tại thời điểm S1P2 sau khi mã lệnh được chốt vào thanh ghi lệnh tại S1P1

- Lệnh 2 byte: byte thứ 2 được đọc tại thời điểm S4 và sẽ được thực thi tại thời điểm S4 Đối với các lệnh thực thi trong 2 chu kỳ:

Quá trình lấy lệnh tại thời điểm S1 trong chu kỳ đầu tiên diễn ra như sau: nếu lệnh có nhiều hơn 1 byte, các byte còn lại sẽ được lấy ở các thời điểm tiếp theo, tương tự như cách các lệnh được thực thi trong một chu kỳ.

Hình 2.5 - Các vùng nhớ trong AT89C51

Bộ nhớ của họ MCS-51 được chia thành hai phần chính: bộ nhớ trong và bộ nhớ ngoài Bộ nhớ trong bao gồm 4 KB ROM và 128 byte RAM (256 byte trong 8052) Các byte RAM có địa chỉ từ 00h đến 7Fh, trong khi các thanh ghi chức năng đặc biệt (SFR) có địa chỉ từ 80h đến 0FFh và có thể truy xuất trực tiếp Đối với dòng 8052, 128 byte RAM cao (địa chỉ từ 80h đến 0FFh) không thể truy xuất trực tiếp mà chỉ có thể truy xuất gián tiếp.

Bộ nhớ ngoài của MCS-51 bao gồm bộ nhớ chương trình, điều khiển bởi tín hiệu PSEN, và bộ nhớ dữ liệu, điều khiển bằng tín hiệu RD hoặc WR để cho phép đọc hoặc ghi dữ liệu Với 16 bit địa chỉ, MCS-51 có khả năng giải mã tối đa 64KB bộ nhớ ngoài, trong đó Port 0 chứa 8 bit thấp và Port 2 chứa 8 bit cao.

LẬP TRÌNH HỢP NGỮ TRÊN VI ĐIỀU KHIỂN MCS-51

CÁC PHƯƠNG PHÁP ĐỊNH ĐỊA CHỈ

1 Định địa chỉ trực tiếp Định địa chỉ trực tiếp chỉ dùng cho các thanh ghi chức năng đặc biệt và RAM nội của

Giá trị địa chỉ trực tiếp 8 bit được gắn vào mã lệnh của 8951, với các địa chỉ từ 00h đến 7Fh tương ứng với 128 byte RAM nội, trong khi các địa chỉ từ 80h đến FFh chỉ định các thanh ghi chức năng đặc biệt.

Các lệnh sau có kiểu định địa chỉ trực tiếp:

Lệnh đầu tiên chuyển dữ liệu từ Port 0 vào thanh ghi A, với địa chỉ Port 0 (80h) được thay thế trực tiếp trong mã lệnh khi biên dịch Lệnh thứ hai thực hiện việc chuyển nội dung từ RAM tại địa chỉ 30h vào thanh ghi A.

2 Định địa chỉ gián tiếp Định địa chỉ gián tiếp có thể dùng cho cả RAM nội và RAM ngoại Trong chế độ này, địa chỉ của RAM xác định thông qua một thanh ghi (R0, R1, SP cho địa chỉ 8 bit và DPTR cho địa chỉ 16 bit) Các lệnh sau có kiểu địa chỉ gián tiếp:

Lệnh đầu tiên chuyển dữ liệu từ ô nhớ có địa chỉ trong thanh ghi R0 vào thanh ghi A, ví dụ nếu R0 = 30h, thì dữ liệu từ ô nhớ 30h sẽ được chuyển vào A Lệnh thứ hai thực hiện việc chuyển nội dung từ RAM ngoại vào thanh ghi A, với địa chỉ RAM được lưu trữ trong DPTR.

3 Định địa chỉ thanh ghi

Các thanh ghi R0 đến R7 có thể được truy xuất thông qua địa chỉ trực tiếp hoặc gián tiếp Thêm vào đó, việc truy xuất các thanh ghi này cũng có thể thực hiện bằng cách sử dụng 3 bit trong mã lệnh để chọn một trong 8 thanh ghi, với địa chỉ trực tiếp của các thanh ghi này thay đổi tùy thuộc vào bank thanh ghi đang được sử dụng.

4 Định địa chỉ tức thời

Giá trị của hằng số có thể được đưa vào trực tiếp trong mã lệnh của chương trình Trong hợp ngữ, hằng số được xác định thông qua ký hiệu #.

Lệnh: MOV A, #10h có chế độ địa chỉ tức thời

5 Định địa chỉ chỉ số

Quá trình định địa chỉ chỉ số áp dụng cho bộ nhớ chương trình, cho phép đọc dữ liệu từ các bảng tìm kiếm Chế độ này thường sử dụng một thanh ghi nền 16 bit (PC hoặc DPTR) để xác định vị trí của bảng, trong khi thanh ghi A được dùng để chỉ định vị trí của các phần tử trong bảng.

CÁC VẤN ĐỀ LIÊN QUAN KHI LẬP TRÌNH HỢP NGỮ

Một lệnh trong chương trình hợp ngữ có dạng như sau:

Nhãn Lệnh Toán hạng Chú thích

A: MOV A, #10h ; Đưa giá trị 10h vào thanh ghi A

LED EQU 30h ; Định nghĩa ô nhớ chứa mã led

On_Led BIT 00h ; Cờ trạng thái led

Trường nhãn là các ký hiệu dùng để định nghĩa địa chỉ trong chương trình, hằng dữ liệu, tên đoạn hoặc cấu trúc lập trình Để đảm bảo tính hợp lệ, trường nhãn không được bắt đầu bằng số và không được trùng với các từ khóa đã có sẵn.

Trường lệnh chứa các từ gợi nhớ cho các lệnh của MCS-51 hay các lệnh giả dùng cho chương trình dịch

Trường toán hạng chứa các thông số liên quan đến lệnh đang sử dụng

Trong hợp ngữ, trường chú thích được sử dụng để ghi chú và giải thích trong mã nguồn Để bắt đầu trường chú thích, cần sử dụng dấu chấm phẩy (;), và chương trình dịch sẽ tự động bỏ qua mọi nội dung sau dấu này.

Lưu ý rằng các chương trình dịch không phân biệt chữ hoa và chữ thường

Khi khai báo hằng số trong lập trình, chữ cái cuối cùng của hằng số có ý nghĩa quan trọng: chữ "h" chỉ ra rằng hằng số là số thập lục phân, chữ "b" xác định số nhị phân, và chữ "d" (hoặc không có) cho biết hằng số là số thập phân Đặc biệt, đối với các số thập lục phân bắt đầu bằng chữ cái từ A đến F, cần phải thêm số 0 vào phía trước để đảm bảo tính chính xác.

0F0h ; Số thập lục phân nhưng bắt đầu bằng chữ F nên phải thêm vào phía trước số

Khi sử dụng dấu # trước một con số, điều đó chỉ ra dữ liệu tức thời, trong khi không có dấu # thì đó là địa chỉ của ô nhớ Cần lưu ý rằng trong RAM nội, địa chỉ chỉ nằm trong khoảng từ 00 đến 7Fh, trong khi vùng địa chỉ từ 80h đến 0FFh dành cho các thanh ghi chức năng đặc biệt Đối với họ 89x52, RAM nội có dung lượng 256 byte, nhưng các byte địa chỉ cao từ 80h đến 0FFh không thể truy xuất trực tiếp mà phải thực hiện truy xuất gián tiếp.

MOV A,30h ; Chuyển nội dung ô nhớ 30h vào A MOV A,#30h

; Chuyển giá trị 30h vào A MOV A,80h ; Chuyển nội dung Port 0 vào A (80h là địa chỉ Port 0)

MOV R0,#80h ; Chuyển nội dung ô nhớ 80h vào A (chỉ

Để xác định một vùng nhớ trong bộ nhớ chương trình, người lập trình có thể sử dụng các chỉ dẫn như DB (define byte – định nghĩa 1 byte) hoặc DW (define word – định nghĩa 2 byte).

Ví dụ: Định nghĩa trước dữ liệu cho led như sau:

Đoạn chương trình xác định giá trị cho nhãn Led từ 01h đến 80h, với địa chỉ bắt đầu là 100h Các giá trị tương ứng với địa chỉ Led được phân bổ như sau: 100h chứa giá trị 01h, 101h chứa giá trị 02h, và tiếp tục cho đến 180h chứa giá trị 80h.

Để giúp việc lập trình trở nên dễ nhớ và dễ hiểu, các chương trình dịch hỗ trợ việc sử dụng các ký tự thay thế cho các ô nhớ thông qua các lệnh giả như EQU và BIT.

Giả sử chương trình hợp ngữ có các lệnh sau:

MOV A,LED SETB ON_LED

Khi biên dịch, chương trình dịch sẽ tự động chuyển thành dạng lệnh sau:

3 Các toán tử a Các toán tử số học:

Bao gồm các toán tử +, -, *, /, mod

Ví dụ: Các lệnh sau tương đương:

MOV A,#12/4 MOV A,#3 b Các toán tử logic:

Bao gồm các toán tử: OR, AND, NOT, XOR

Ví dụ: Các lệnh sau tương đương:

MOV A,#24h MOV A,#20h OR 04h c Các toán tử quan hệ:

Các toán tử quan hệ bao gồm EQ (=), NE (), LT (=) Khi sử dụng các toán tử này, kết quả chỉ có thể là sai (0) hoặc đúng (FFh hoặc FFFFh, tùy thuộc vào việc kết quả là 8 bit hay 16 bit).

Ví dụ: Các lệnh sau tương đương:

MOV DPTR,#0FFFFh MOV DPTR,#5 NE 6 d Các toán tử khác:

Bao gồm các toán tử: SHR (dịch phải), SHL (dịch trái), HIGH (byte cao), LOW

Ví dụ: Các lệnh sau tương đương:

- Cấu trúc chương trình hợp ngữ cơ bản mô tả như sau:

ORG 0000h ; Đặt lệnh LJMP main tại địa chỉ

LJMP main ; 0000h (địa chỉ bắt đầu khi reset AT89C51)

ORG 0030h ; Vùng địa chỉ 0003h – 002Fh

Main: ; dùng để chứa các chương trình phục vụ ngắt

END ; kết thúc chương trình

Các lệnh giả ORG xác định vị trí của lệnh trong chương trình Khi khởi động, chương trình trong AT89C51 sẽ thực thi tại địa chỉ 0000h, thường chứa lệnh LJMP main để chỉ định rằng chương trình chính bắt đầu tại nhãn main.

Các dấu ; xác định đây là một chú thích, chương trình dịch sẽ bỏ qua tất cả các phần nằm sau dấu ;

Các địa chỉ từ 0003h đến 002Fh được dành riêng cho việc xử lý ngắt và không nên sử dụng Tuy nhiên, nếu chương trình không yêu cầu xử lý ngắt, bạn vẫn có thể tận dụng vùng địa chỉ này.

Khi soạn thảo chương trình hợp ngữ, bạn có thể sử dụng bất kỳ trình soạn thảo văn bản không định dạng nào như NotePad hoặc Norton Commander Các tệp thường được lưu với phần mở rộng asm hoặc a51, tùy thuộc vào chương trình biên dịch mà bạn sử dụng.

Sau khi hoàn tất việc soạn thảo, bạn cần sử dụng một chương trình dịch để chuyển đổi file văn bản thành file hex, có thể sử dụng các công cụ như sim51.exe hoặc oh.exe Ngoài ra, còn nhiều chương trình soạn thảo khác đã tích hợp sẵn chức năng dịch, bạn có thể tham khảo thêm trong phần phụ lục.

- Khi dịch ra file hex, dùng một mạch nạp để nạp file hex vào AT89C51.

TẬP LỆNH

1 Nhóm lệnh chuyển dữ liệu a RAM nội

Các lệnh trong nhóm lệnh chuyển dữ liệu trong RAM nội mô tả như bảng sau:

Bảng 3.1 – Các lệnh chuyển dữ liệu trong RAM nội

Lệnh Hoạt động Chế độ địa chỉ Chu kỳ thực thi

MOV (byte1),(byte2) (byte1) = (byte2) x x x x 2

MOV DPTR,#data16 DPTR = data16 x 2

PUSH (byte) SP = SP + 1 [SP] = (byte) x 2

POP (byte) (byte) = [SP] SP = SP – 1 x 2

XCH A,(byte) Chuyển đổi dữ liệu giữa ACC và (byte) x x x 1

XCHD A,@Ri Chuyển đổi 4 bit thấp giữa ACC và @Ri x 1

Di chuyển dữ liệu giữa các thanh ghi và bộ nhớ trong 128 byte RAM, với địa chỉ từ 80h đến FFh (chỉ có trong 8x52), chỉ có thể thực hiện thông qua định địa chỉ gián tiếp Các dạng lệnh MOV được sử dụng để thực hiện quá trình này.

Lệnh MOV A, Rn cho phép chuyển nội dung từ thanh ghi Rn vào thanh ghi A, trong khi lệnh MOV Rn, A thực hiện ngược lại, chuyển nội dung từ thanh ghi A vào thanh ghi Rn Ngoài ra, MOV A, direct chuyển dữ liệu từ ô nhớ trực tiếp vào thanh ghi A, và lệnh MOV direct, A chuyển nội dung từ thanh ghi A vào ô nhớ trực tiếp.

MOV A,@Ri ; Chuyển nội dung của ô nhớ có địa chỉ chứa trong Ri vào A MOV

@Ri,A ; Chuyển nội dung củaA vào ô nhớ có địa chỉ chứa trong Ri.

MOV A, #data8 ; Chuyển giá trị 8 bit vào A

Lệnh MOV Rn, direct cho phép chuyển nội dung từ ô nhớ trực tiếp vào thanh ghi Rn Ngược lại, lệnh MOV direct, Rn sẽ chuyển nội dung từ thanh ghi Rn vào ô nhớ trực tiếp Ngoài ra, lệnh MOV Rn, #data8 cho phép chuyển giá trị 8 bit vào thanh ghi Rn.

MOV direct, direct; Chuyển nội dung giữa 2 ô nhớ trực tiếp

MOV direct, @Ri; Chuyển nội dung của ô nhớ có địa chỉ chứa trong Ri vào ô nhớ trực tiếp

MOV @Ri, direct; Chuyển nội dung của ô nhớ trực tiếp vào ô nhớ có địa chỉ chứa trong Ri

MOV direct, #data8; Chuyển giá trị 8 bit vào ô nhớ trực tiếp

MOV @Ri, #data8; Chuyển giá trị 8 bit vào ô nhớ có địa chỉ chứa trong Ri

MOV C, bit ; Chuyển giá trị 1 bit vào cờ C

MOV bit, C ; Chuyển giá trị cờ C vào 1 bit

MOV DPTR, #data16 ; Chuyển giá trị tức thời 16 bit vào thanh ghi DPTR

Trong lệnh MOV, khi sử dụng địa chỉ trực tiếp từ 80h – FFh thì có thể thay bằng các từ gợi nhớ của các thanh ghi chức năng đặc biệt

Ví dụ: lệnh MOV A, 80h có thể thay thế bằng lệnh MOV A, P0 (xem thêm Bảng 2.2, chương II)

Khi lệnh MOV thực hiện việc truy xuất bit, các bit có thể đến từ địa chỉ trực tiếp trong khoảng từ 00h đến 7Fh hoặc từ các từ gợi nhớ đã được định nghĩa trước Các bit đã được định nghĩa này sẽ được mô tả cụ thể trong tài liệu hướng dẫn.

Bảng 3.2 – Các bit được định nghĩa trước trong 8951

Thanh ghi Từ gợi nhớ Địa chỉ bit Thanh ghi Từ gợi nhớ Địa chỉ bit

SM1 SM2 REN TB8 RB8

9Fh 9Eh 9Dh 9Ch 9Bh 9Ah 99h 98h Các thanh ghi

ES EX1 ET1 EX0 ET0

TR0 TF0 TR0 IE1 IT1 IE0 IT0

8Fh 8Eh 8Dh 8Ch 8Bh 8Ah 89h 88h

Ví dụ: Lệnh MOV C, P0.0 có thể thay bằng lệnh MOV C, 80h

Các lệnh PUSH và POP cho phép lưu trữ và truy xuất nội dung từ stack Khi thực hiện lệnh PUSH, thanh ghi SP tăng lên 1 và một byte được lưu vào stack Ngược lại, lệnh POP lấy byte từ stack và giảm SP xuống 1 Đối với vi điều khiển 8951, bộ nhớ nội chỉ có 128 byte, vì vậy giá trị SP không được vượt quá 7Fh; nếu vượt qua, dữ liệu sẽ bị mất khi dùng lệnh PUSH và không xác định khi dùng lệnh POP Trong khi đó, vi điều khiển 8x52 có RAM nội 256 byte, do đó không gặp phải hiện tượng này.

Các dạng của lệnh PUSH / POP:

PUSH direct ; Cất vào stack

POP direct ; Lấy dữ liệu từ stack

Lệnh PUSH và POP chỉ áp dụng cho địa chỉ trực tiếp, do đó không thể thực hiện lệnh PUSH Rn, vì thanh ghi Rn có bốn địa chỉ khác nhau tùy thuộc vào ngân hàng thanh ghi đang sử dụng.

Khi xét thanh ghi R0, có 4 địa chỉ tương ứng với 4 bank là 00h, 08h, 10h và 18h Mặc định, sau khi reset, bank 0 sẽ được sử dụng, do đó các thanh ghi Rn có địa chỉ từ 00h đến 07h Thay vì sử dụng lệnh PUSH R0, chúng ta có thể thay thế bằng lệnh PUSH 00h.

Lệnh XCH / XCHD (Exchange / Exchange Digit):

Lệnh XCH / XCHD cho phép hoán chuyển 8 bit hoặc 4 bit thấp của thanh ghi A với các thanh ghi khác hoặc bộ nhớ, trong đó lệnh XCHD chỉ áp dụng cho bộ nhớ nội định địa chỉ gián tiếp.

XCH A,(byte) ; Hoán chuyển 8 bit

XCHD A,@Ri ; Hoán chuyển 4 bit thấp

Ví dụ: Xét đoạn lệnh:

MOV 30h, #20h ; Ô nhớ 30h chứa giá trị 20h hay (30h) = 20h

XCH A, R0 ; Hoán chuyển giữa A và R0 -> A = 54h và R0 = 30h

XCHD A, @R0 ; Chuyển 4 bit thấp giữa A và ô nhớ R0 = 30h -> @R0: nội dung ô nhớ 30h -> 20h, chuyển 4 bit thấp -> A = 50h và (30h) = 24h b RAM ngoại

Các lệnh trong nhóm lệnh chuyển dữ liệu trong RAM ngoại mô tả như sau:

Bảng 3.3 – Các lệnh chuyển dữ liệu trong RAM ngoại

Lệnh Hoạt động Chu kỳ thực thi

MOVX A, @Ri Đọc nội dung từ RAM ngoại tại địa chỉ Ri 2

MOVX @Ri, A Ghi vào RAM ngoại tại địa chỉ Ri 2

MOVX A, @DPTR Đọc nội dung từ RAM ngoại tại địa chỉ DPTR 2

MOVX @DPTR, A Ghi vào RAM ngoại tại địa chỉ DPTR 2

MOVX (Move eXternal) cho phép thực hiện các lệnh đọc/ghi dữ liệu của RAM ngoại thông qua địa chỉ gián tiếp Đối với địa chỉ RAM 8 bit, sử dụng thanh ghi R0 hoặc R1, trong khi địa chỉ 16 bit yêu cầu sử dụng thanh ghi DPTR Cần lưu ý rằng khi sử dụng địa chỉ 8 bit, các bit địa chỉ cao không được sử dụng, do đó Port 2 có thể được dùng cho mục đích khác Tuy nhiên, khi sử dụng địa chỉ 16 bit, Port 2 chỉ đảm nhiệm việc xuất 8 bit địa chỉ cao.

Khi thực hiện lệnh đọc từ RAM ngoại, chân RD sẽ xuống mức thấp còn khi thực hiện lệnh ghi, chân WR xuống mức thấp c Bảng tìm kiếm

Các lệnh trong nhóm lệnh tìm kiếm dữ liệu trong bảng mô tả như sau:

Bảng 3.4 – Các lệnh tìm kiếm dữ liệu

Lệnh Hoạt động Chu kỳ thực thi

MOVC A, @A + DPTR Đọc nội dung bộ nhớ chương trình tại địa chỉ A + DPTR 2

MOVC A, @A +PC Đọc nội dung bộ nhớ chương trình tại địa chỉ A + PC 2

Các lệnh cho phép tìm kiếm dữ liệu đã định nghĩa sẵn trong bộ nhớ chương trình, với tín hiệu đọc PSEN khi bộ nhớ là ROM ngoại Thanh ghi DPTR hoặc PC xác định địa chỉ lệnh tiếp theo, trong khi thanh ghi A chứa vị trí của phần tử, thường có kích thước 1 byte trong bảng tìm kiếm.

Ví dụ: Lấy phần tử thứ 2 trong bảng LED_7S:

MOV DPTR, #LED_7S ; Địa chỉ nền của bảng tìm kiếm

MOVC A, @A + DPTR ; Đọc nội dung phần tử

Để sử dụng thanh ghi PC trong việc tìm kiếm dữ liệu, quá trình này cần được thực hiện thông qua chương trình con, và bảng dữ liệu phải được đặt ngay sau chương trình con Nội dung của bảng tìm kiếm có thể được tùy chỉnh theo ý muốn trong bộ nhớ chương trình.

Ví dụ: Lấy phần tử thứ 2 trong bảng LED_7S:

LED_7S: DB 0, data8, data8, data8, data8, … ; Nội dung bảng tìm kiếm

Khi thực hiện lệnh MOVC, thanh ghi PC sẽ chỉ đến lệnh RET thay vì bảng LED_7S, dẫn đến bảng tìm kiếm bắt đầu từ phần tử 1 thay vì phần tử 0 Để chương trình hoạt động tương tự như khi sử dụng DPTR, cần điều chỉnh chương trình con cho phù hợp.

Ví dụ: Lấy phần tử thứ 2 trong bảng LED_7S:

INC A ; Tăng nội dung A lên 1 để hiệu chỉnh vị trí bảng

LED_7S: DB data8, data8, data8, data8, … ; Nội dung bảng tìm kiếm

2 Nhóm lệnh xử lý bit

Họ MCS-51 được trang bị một bộ xử lý bit hoàn chỉnh, với RAM nội dung 128 bit có khả năng xử lý bit hiệu quả Các thanh ghi chức năng đặc biệt trong hệ thống này hỗ trợ tối đa lên tới 128 bit, cho phép thực hiện các tác vụ phức tạp một cách linh hoạt.

Bảng 3.2) Các địa chỉ bit từ 00h – 7Fh nằm trong RAM nội còn các địa chỉ từ 80h – FFh nằm trong SFR

Các lệnh trong nhóm lệnh logic mô tả như trong bảng sau:

Lệnh Hoạt động Chu kỳ thực thi

ANL C,/bit C = C AND (NOT bit) 2

ORL C,/bit C = C OR (NOT bit) 2

CPL bit Bit = NOT bit 1

JC rel Nhảy đến nhãn rel nếu C = 1 2

JNC rel Nhảy đến nhãn rel nếu C = 0 2

JB bit,rel Nhảy đến nhãn rel nếu bit = 1 2

JNB bit,rel Nhảy đến nhãn rel nếu bit = 0 2

JBC bit,rel Nhảy đến nhãn rel nếu bit = 1 và sau đó xoá bit 2

ANL: And logic; ORL: Or logic; CLR: Clear; CPL: Complement

Bit: các bit trong RAM nội từ 00h – 7Fh hay trong SFR theo Bảng 3.2

Rel: địa chỉ tương đối (cho phép trong vùng từ -128 ÷ 127 byte trong bộ nhớ chương trình)

Ví dụ: Chuyển từ bit 00h vào P1.0

MOV C, 00h ; Chuyển bit 00h vào cờ Carry

MOV P1.0, C ; Chuyển cờ Carry vào P1.0

Lưu ý rằng trong tập lệnh logic không có lệnh XOR mà phải thực hiện bằng phần mềm, cụ thể như sau:

Thực hiện lệnh C = C XRL bit:

Các lệnh nhảy được đề cập sử dụng địa chỉ tương đối, cho phép nhảy trong khoảng từ -128 đến 127 byte Để nhảy đến địa chỉ xa hơn, cần sử dụng các lệnh nhảy khác, như sẽ được mô tả trong phần tiếp theo.

3 Nhóm lệnh chuyển điều khiển

Nhóm lệnh chuyển điều khiển bao gồm các lệnh nhảy, các lệnh liên quan đến chương trình con, mô tả như sau:

Bảng 3.6 – Các lệnh chuyển điều khiển

Lệnh Hoạt động Chu kỳ thực thi

JMP addr Nhảy tới nhãn addr 2

JMP @A+DPTR Nhảy tới địa chỉ A + DPTR 2

CALL addr Gọi chương trình con tại địa chỉ addr 2

RET Trở về từ chương trình con 2

RETI Trở về từ chương trình con phục vụ ngắt 2

NOP Không làm gì cả 1

Lệnh Hoạt động Chế độ địa chỉ Chu kỳ thực thi

Tức thời Trực tiếp Gián tiếp Thanh ghi

JZ rel Nhảy đến nhãn rel nếu A = 0 Chỉ dùng cho thanh ghi A 2

JNZ rel Nhảy đến nhãn rel nếu A ≠ 0 Chỉ dùng cho thanh ghi A 2

DJNZ (byte),rel (byte) = (byte) - 1

Nếu (byte) ≠ 0 thì nhảy đến nhãn rel x x 2

CJNE A,(byte),rel Nhảy đến nhãn rel nếu A ≠ (byte) x x 2

#data8,rel Nhảy đến nhãn rel nếu (byte) ≠ data8 x x 2

JZ: Jump if Zero; JNZ: Jump if Not Zero

DJNZ: Decrement and Jump if Not Zero

CJNE: Compare and Jump if Not Equal

Lệnh JMP bao gồm 3 lệnh: LJMP (Long jump), AJMP (Absolute jump) và

SJMP (Short jump) cho phép nhảy đến một vị trí bất kỳ trong chương trình

Lệnh LJMP có kích thước 3 byte, bao gồm 1 byte mã lệnh và 2 byte chứa địa chỉ nhãn, cho phép phạm vi biểu diễn địa chỉ lên đến 64K (2 byte = 16 bit, tương đương 2^16 = 64K) Nhờ đó, lệnh LJMP có khả năng nhảy đến bất kỳ vị trí nào trong chương trình, với địa chỉ sử dụng là địa chỉ tuyệt đối.

CÁC HOẠT ĐỘNG CỦA VI ĐIỀU KHIỂN MCS-51

HOẠT ĐỘNG ĐỊNH THỜI (TIMER / COUNTER)

AT89C51 được trang bị 2 bộ định thời 16 bit, hoạt động linh hoạt ở nhiều chế độ khác nhau, cho phép định thời hoặc đếm sự kiện thông qua Timer 0 và Timer 1 Khi hoạt động ở chế độ định thời, bộ Timer/Counter nhận xung đếm từ dao động nội, trong khi ở chế độ đếm sự kiện, nó nhận xung từ nguồn bên ngoài Các bộ Timer/Counter bên trong AT89C51 có thể hoạt động dưới dạng 8 bit hoặc 16 bit, tùy thuộc vào chế độ sử dụng Mỗi bộ Timer/Counter cung cấp 4 chế độ hoạt động khác nhau, phục vụ cho nhiều ứng dụng đa dạng.

- Đếm sự kiện tại các chân T0 (chân 14) hay T1 (chân 15)

- Chờ một khoảng thời gian

- Tạo tốc độ cho port nối tiếp

Quá trình điều khiển hoạt động của Timer / Counter được thực hiện thông qua các thanh ghi sau:

Bảng 4.1 – Các thanh ghi điều khiển hoạt động Timer / Counter

Thanh ghi Địa chỉ byte Địa chỉ bit

Ngoài ra, trong họ 8x52 còn có thêm bộ định thời thứ 3 (Timer 2)

Hoạt động chính của Timer/Counter bao gồm các thanh ghi timer THx và TLx (với x = 0, 1) kết hợp thành thanh ghi 16 bit Khi bit TRx trong thanh ghi TCON được thiết lập, timer sẽ bắt đầu hoạt động và giá trị trong thanh ghi TLx sẽ tăng lên 1 sau mỗi xung đếm Khi TLx tràn từ 255 xuống 0, giá trị của THx sẽ tăng lên 1 Khi THx tràn, cờ tràn TFx trong thanh ghi TCON sẽ được kích hoạt lên mức 1.

Tùy thuộc vào giá trị của bit C/T trong thanh ghi TMOD, xung đếm có thể được lấy từ dao động nội (C/T = 0) hoặc từ chân Tx bên ngoài (C/T = 1) Lưu ý rằng cần phải xoá bit TRx khi thay đổi chế độ hoạt động của Timer.

Khi xung đếm được lấy từ dao động nội, tốc độ đếm sẽ là fOSC/12 hoặc fOSC/2 trong chế độ X2 Cụ thể, nếu fOSC bằng 12 MHz, tốc độ xung đếm sẽ đạt 1 MHz, tương đương với việc mỗi 1 giây sẽ có 1 xung đếm trong chế độ chuẩn Ngoài ra, tốc độ đếm cũng có thể được tính bằng fPER/6, trong đó fPER là tần số xung ngoại vi.

Khi lấy xung đếm từ bên ngoài (các chân Tx),bộ đếm sẽ tăng lên 1 khi ngõ vào Tx ở mức

1 trong 1 chu kỳ và xuống mức 0 trong chu kỳ kế tiếp Do đó, tần số xung tối đa tại các chân

Tx là fOSC/24 trong chế độ thường hay fOSC/12 trong chế độ X2 (=fPER/12)

3 Các thanh ghi điều khiển hoạt động a Thanh ghi điều khiển timer (TCON – Timer/Counter Control Register)

TCON chứa các bit trạng thái và các bit điều khiển cho Timer 1, Timer 0

Bảng 4.2 – Nội dung thanh ghi TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Hiệu Đia chỉ Mô tả

Cờ báo tràn Timer 1 (Timer 1 overflow Flag) được thiết lập tự động khi Timer 1 xảy ra tràn Cờ này có thể được xóa bởi phần cứng khi chương trình chuyển đến con xử lý ngắt, hoặc có thể bị xóa bằng phần mềm.

TCON.6 TR1 8Eh Điều khiển Timer 1 chạy (Timer 1 Run Control Bit)

Cho phép Timer 1 hoạt động (= 1) hay ngừng (= 0)

TCON.5 TF0 8Dh Timer 0 overflow Flag

TCON.4 TR0 8Ch Timer 0 Run Control Bit

Dùng cho ngắt ngoài 0 và 1 (sẽ xét trong phần 3 – xử lý ngắt)

Giá trị khi reset: TCON = 00h b Thanh ghi chế độ timer (TMOD- Timer/Counter Mode)

Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0, và Timer

1 Lưu ý rằng khi lập trình cho AT89C51, thông thường thanh ghi TMOD chỉ được gán một lần ở đầu chương trình

Bảng 4.3 – Nội dung thanh ghi TMOD GATE1 C/T1 M11 M01 GATE0 C/T0 M10 M00

Bit Tên Timer Mô tả Timer

Timer I Gating Control Bit GATE=0: timer hoạt động bình thường GATE=1: timer chỉ hoạt động khi chân INT1=1

Timer 1 Timer/Counter Select Bit

=1: đếm bằng xung ngoài tại chân T1 (chân 15)

=0: đếm bằng xung dao động bên trong

4 M0l 1 1 0 8 bit tự động nạp lại

3 GATE0 0 Timer 0 Gating Control Bit

2 Cli0 0 Timer 0 Timer/Counter Select Bit

1 Ml0 0 Timer 0 Mode Select Bit

Các chế độ giống như timer 1 trong đó chế độ 3 dùng TH0 và TL0 làm 2 giá trị đếm của timer 0 và timer 1

Giá trị khi reset: TMOD = 00h

Timer bao gồm các thanh ghi đếm TH0, TL0 (Timer 0) và TH1, TL1 (Timer 1), mỗi thanh ghi có kích thước 8 bit Khi được reset, giá trị của các thanh ghi này sẽ trở về 00h.

4 Các chế độ hoạt động

Các chế độ của timer được xác định qua 4 bit trong thanh ghi TMOD, với 4 bit thấp điều khiển timer 0 và 4 bit cao điều khiển timer 1 Chế độ 0 là một trong những chế độ này.

Chế độ 0 là chế độ 13 bit bao gồm 8 bit của thanh ghi THx và 5 bit của thanh ghi TLx còn

Ba bit cao của thanh ghi TLx không được sử dụng Mỗi khi có xung đếm, giá trị trong thanh ghi 13 bit sẽ tăng thêm 1 Khi giá trị này thay đổi từ 1111 1111 1111b xuống 0, bộ đếm tràn sẽ đặt TFx lên mức 1.

Chế độ 0 sử dụng 13 bit, cho phép giá trị đếm tối đa đạt 8192 (2^13) Mục đích của chế độ này là để đảm bảo tính tương thích với vi điều khiển 8048, tuy nhiên hiện nay chế độ này ít được sử dụng.

Hình 4.1 – Chế độ 0 của Timer/Counter b Chế độ 1

Chế độ 1 giống như chế độ 0 nhưng sử dụng 16 bit bao gồm 8 bit của THx và 8 bit của

Giá trị tối đa của TLx là 2^16, tương đương 65536 Chế độ 0 và chế độ 1 có chức năng tương tự nhau, nhưng khác nhau ở số bit đếm Do đó, chế độ 0 thường không được sử dụng, trong khi chế độ 1 là lựa chọn phổ biến hơn.

Khi bộ đếm tràn, giá trị trong cặp thanh ghi THx_TLx giảm từ 1111 1111 1111 1111b xuống 0, cờ tràn TFx được set lên mức 1 Lưu ý rằng, khi timer tràn, giá trị của các thanh ghi đếm sẽ là 0 (THx = 0 và TLx = 0) Để timer tiếp tục hoạt động, cần phải nạp lại giá trị cho các thanh ghi THx và TLx.

Hình 4.2 – Chế độ 1 của Timer/Counter c Chế độ 2

Chế độ 2 là chế độ 8 bit, trong đó thanh ghi TLx lưu trữ giá trị đếm, trong khi thanh ghi THx chứa giá trị nạp lại Do đó, chế độ này được biết đến với tên gọi chế độ tự động nạp lại (autoreload).

Trong chế độ 2, khi giá trị trong thanh ghi TLx thay đổi từ 1111 1111b xuống 0, cờ TFx sẽ được thiết lập lên mức 1, và giá trị trong thanh ghi THx sẽ được chuyển vào thanh ghi TLx Điều này có nghĩa là giá trị đếm trong TLx và THx chỉ được nạp một lần khi khởi động timer; nếu không nạp cho TLx, chu kỳ hoạt động đầu tiên của timer sẽ không chính xác.

Chế độ 2 sử dụng 8 bit đếm trong thanh ghi TLx nên giá trị đếm tối đa là 2 8 = 256

Hình 4.3 – Chế độ 2 của Timer/Counter d Chế độ 3

Hình 4.4 – Chế độ 3 của Timer/Counter

Chế độ 3 sử dụng các thanh ghi TL0 và TH0 như bộ định thời độc lập, trong đó TL0 được điều khiển bởi thanh ghi của timer 0 và TH0 bởi thanh ghi của timer 1 Khi TL0 giảm từ 1111 1111b xuống 0, cờ TF0 sẽ được đặt lên mức 1, trong khi TH0 khi giảm từ 1111 1111b xuống 0 sẽ đặt cờ TF1 lên mức 1 Cần lưu ý rằng trong chế độ 3, Timer 1 không ảnh hưởng đến cờ TF1, do đó thường được sử dụng để tạo tốc độ baud cho cổng nối tiếp hoặc cho các mục đích khác.

Chế độ này cho phép điều chỉnh cờ tràn TF1 chỉ thông qua xung đếm của dao động nội, mà không sử dụng dao động ngoài tại chân T1 Đồng thời, bit GATE1 (TMOD.7) không ảnh hưởng đến quá trình đếm tại TH0.

CỔNG NỐI TIẾP (SERIAL PORT)

Cổng nối tiếp trong 89C51 hoạt động ở chế độ đồng bộ và bất đồng bộ thông qua hai chân TxD (P3.1) và RxD (P3.0) Chức năng của cổng nối tiếp là thực hiện chuyển đổi dữ liệu song song sang nối tiếp với dữ liệu xuất, và chuyển đổi nối tiếp sang song song với dữ liệu nhập.

When operating in asynchronous transmission/reception mode (UART - Universal Asynchronous Receiver/Transmitter), the serial port supports three duplex modes (1, 2, and 3) The reading/writing process of the serial port utilizes the SBUF (Serial Buffer) register, which consists of two distinct registers: one for transmission and one for reception.

Cổng nối tiếp có tất cả 4 chế độ khác nhau:

Chế độ 0: dữ liệu truyền / nhận thông qua chân RxD và xung clock dịch bit thông qua TxD với tốc độ baud bằng fthạch anh/12

Chế độ 1 cho phép truyền và nhận 10 bit, bao gồm 1 bit khởi đầu (luôn bằng 1), 8 bit dữ liệu và 1 bit dừng (luôn bằng 0) Tốc độ baud có thể thay đổi và khi nhận dữ liệu, bit dừng sẽ được đưa vào RB8 của thanh ghi SCON.

Chế độ 2 của truyền nhận dữ liệu sử dụng 11 bit, bao gồm 1 bit start, 8 bit dữ liệu, 1 bit TB8 khi truyền và 1 bit RB8 khi nhận trong thanh ghi SCON Tốc độ baud trong chế độ này được xác định là 1/32 hoặc 1/64 tần số thạch anh.

Chế độ 3: giống chế độ 2 nhưng tốc độ baud có thể thay đổi được

Trong 4 chế độ trên, thường sử dụng chế độ 1 hay 3 để truyền dữ liệu Trong trường hợp truyền dữ liệu giữa các vi điều khiển AT89C51 với nhau, có thể dùng chế độ 2 Ngoài ra, cổng nối tiếp còn có các chế độ nâng cao: kiểm tra lỗi khung và nhận dạng địa chỉ tự động

1 Các thanh ghi điều khiển hoạt động a Thanh ghi SCON (Serial port controller)

Bảng 4.7 – Nội dung thanh ghi SCON FE/SM0 SM1 SM2 REN TB8 RB8 TI RI

Bit Ký hiệu Địa chỉ Mô tả

Lỗi khung (Framing Error) xảy ra khi phát hiện lỗi tại bit stop, yêu cầu phải xóa lỗi này bằng phần mềm Để truy xuất bit FE, cần phải đảm bảo rằng bit SMOD0 đã được kích hoạt.

SM0 Serial port Mode bit 0 - Xác định chế độ cho cổng nối tiếp

SM0 SM1 Mô tả Tốc độ baud

1 0 UART 9 bit fOSC/32 hay fOSC/64

Serial port Mode bit 2 – Chế độ đa xử lý

= 1: cho phép truyền thông đa xử lý trong chế độ 2 và 3 SCON.4 REN 9Ch Reception Enable bit – Cho phép thu

= 1: cho phép thu tại cổng nối tiếp SCON.3 TB8 9Bh Transmitter Bit – Bit truyền thứ 9 trong chế độ 2 và 3

SCON.2 RB8 9Ah Receiver Bit – Bit nhận thứ 9 trong chế độ 2 và 3 Trong chế độ 1, nếu SM2 = 0 thì RB8 = stop bit

SCON.1 TI 99h Transmit Interrupt flag – Cờ ngắt phát Được đặt bằng 1 khi kết thúc quá trình truyền và xoá bằng phần mềm

SCON.0 RI 99h Receive Interrupt flag – Cờ ngắt thu Được đặt bằng 1 khi nhận xong dữ liệu và xoá bằng phần mềm

Giá trị khi reset: 00h, cho phép định địa chỉ bit b Thanh ghi BDRCON (Baud Rate Control Register)

Bảng 4.8 – Nội dung thanh ghi BDRCON

- - - BRR TBCK RBCK SPD SRC

Bit Ký hiệu Mô tả

Baud Rate Run control bit – Cho phép hoạt động

= 0: cấm bộ tạo tốc độ baud nội (internal baud rate generator) hoạt động

3 TBCK Transmission Baud rate generator selection bit for UART – Chọn bộ tạo tốc độ baud truyền là bộ tạo tốc độ nội (= 1) hay bằng timer (= 0)

2 RBCK Reception Baud rate generator selection bit for UART – Chọn bộ tạo tốc độ baud nhận là bộ tạo tốc độ nội (= 1) hay bằng timer (= 0)

1 SPD Baud Rate Speed control bit for UART – Chọn tốc độ baud là nhanh

In Mode 0 for UART, the SRC Baud Rate Source select bit determines the baud rate by allowing the selection between the quartz oscillator (0) and the internal baud rate generator (1).

Giá trị khi reset: 00h, không cho phép định địa chỉ bit

Ngoài ra còn có các thanh ghi SBUF (Serial Buffer), BRL (Baud Rate Reload), SADEN (Slave Address Mark), SADDR (Slave Address)

Lưu ý rằng các thanh ghi BDRCON, BRL, SADEN và SADDR chỉ có trong các phiên bản mới của MCS-51

- Chế độ 0: tốc độ baud cố định = 1/12 tần số thạch anh

- Chế độ 2: tốc độ baud = 1/32 tần số thạch anh khi SMOD = 1 hay 1/64 khi SMOD = 0 (SMOD: nằm trong thanh ghi PCON)

Chế độ 1 và 3 của giao tiếp nối tiếp sử dụng tốc độ baud được xác định bởi tốc độ tràn của timer 1 Trong dòng vi điều khiển 89x52, timer 2 có thể được sử dụng để tạo tốc độ baud, trong khi các phiên bản mới hơn cho phép sử dụng bộ tạo tốc độ nội (INT_BRG - Internal Baud Rate Generator) Cách xác định nguồn tạo tốc độ baud được minh họa trong Hình 4.8 và Bảng 4.9.

Hình 4.8 – Lựa chọn tốc độ baud Bảng 4.9 – Lựa chọn tốc độ baud

TCLK RCLK TBCK RBCK Clock phát Clock thu

X X 1 1 INT_BRG INT_BRG a Tạo tốc độ baud bằng Timer 1

Để tạo tốc độ baud bằng timer 1, cần thiết lập timer 1 ở chế độ 8 bit tự nạp lại Giá trị nạp ban đầu của timer 1, được lưu trong thanh ghi TH1, phụ thuộc vào tốc độ baud mong muốn và có thể tính toán theo công thức cụ thể.

Ví dụ: Giả sử tần số thạch anh là fOSC = 11.0592 MHz, giá trị nạp khi tạo tốc độ baud

Ví dụ: Giả sử tần số thạch anh là fOSC = 12 MHz, giá trị nạp khi tạo tốc độ baud

Nếu SMOD = 0: chọn giá trị nạp là -6 hay -7 Nếu chọn giá trị nạp = -6 thì tốc độ baud = 5208 bps còn nếu chọn -7 thì tốc độ baud là 4464 bps

Nếu SMOD = 1: chọn giá trị nạp là -13 -> tốc độ baud là 4807 bps Như vậy, khi dùng tần số thạch anh là

Khi sử dụng tần số 12 MHz, tốc độ baud có thể gặp sai số, vì vậy chỉ nên áp dụng trong trường hợp kết nối nhiều vi điều khiển MCS-51 với nhau Đối với việc kết nối với các thiết bị khác, chẳng hạn như máy tính, nên lựa chọn tần số thạch anh 11.0592 MHz để đảm bảo độ chính xác cao hơn.

Các giá trị nạp thông dụng cho MCS-51 mô tả như sau:

Bảng 4.10 – Các giá trị nạp thông dụng

Tốc độ [bps] fOSC[MHz] SMOD Giá trị nạp Tốc độ thực [bps] Sai số

9600 12 0 -3 10416.7 8.5% b Tạo tốc độ baud bằng Timer 2

Hình 4.9 – Tạo tốc độ baud bằng timer 2

Timer 2 được dùng để tạo tốc độ baud khi đặt các bit TCLK, RCLK lên 1 (trong thanh ghi T2CON) Công thức liên quan giữa tốc độ baud và giá trị nạp như sau (lưu ý rằng giá trị nạp chứa trong cặp thanh ghi RCAP2H_RCAP2L):

Khi sử dụng Timer 2 để thiết lập tốc độ baud, bạn có thể tách riêng xung clock thu và phát thông qua việc sử dụng TCLK hoặc RCLK Xung clock còn lại sẽ được xác định bởi Timer 1 Ngoài ra, Timer 2 cũng cho phép tạo ngắt bằng cách đặt bit EXEN2 = 1, và ngắt này sẽ xảy ra khi có cạnh âm tại chân T2EX.

Ví dụ: Giả sử tần số thạch anh là fOSC = 11.0592 MHz, giá trị nạp khi tạo tốc độ baud

4800 bps là: c Bộ tạo tốc độ baud nội (INT_BRG – Internal Baud Rate Generator)

Hình 4.10 – Bộ tạo tốc độ baud nội

Giá trị nạp trong bộ tạo tốc độ nội chứa trong thanh ghi BRL và được xác định theo công thức sau:

Trong đó SMOD1 nằm trong thanh ghi PCON và SPD nằm trong thanh ghi BDRCON

3 Truyền thông đa xử lý

Chế độ 2 và 3 của MCS-51 hỗ trợ kết nối nhiều vi điều khiển theo mô hình master-slave Quá trình truyền thông giữa các vi điều khiển được thể hiện qua một mô hình cụ thể.

Hình 4.11 – Truyền thông đa xử lý Quá trình truyền dữ liệu mô tả như sau:

Khi khởi động, các vi điều khiển slave có bit SM2 = 1 trong thanh ghi SCON và hoạt động ở chế độ UART 9 bit Điều này có nghĩa là slave chỉ nhận dữ liệu khi bit truyền thứ 9 (TB8 của master) có giá trị là 1.

Mỗi slave được gán một địa chỉ riêng biệt, và khi master cần trao đổi thông tin, nó sẽ gửi dữ liệu 9 bit, bao gồm 8 bit địa chỉ của slave và 1 bit điều khiển (bit 9 = 1) Tất cả các slave sẽ nhận dữ liệu này, và chương trình trong mỗi slave sẽ kiểm tra địa chỉ Nếu địa chỉ trùng khớp với địa chỉ đã cài đặt, slave sẽ đảo bit SM2 thành 0; nếu không, slave sẽ bỏ qua dữ liệu.

- Tiếp tục, master sẽ gởi dữ liệu đến slave nhưng lúc này bit 9 = 0 Khi đó, chỉ có slave nào có bit SM2 = 0 mới nhận được dữ liệu

NGẮT (INTERRUPT)

Ngắt là quá trình tạm dừng một chương trình đang chạy để chuyển sang phục vụ cho một chương trình khác khi có sự kiện xảy ra Chương trình xử lý sự kiện ngắt được gọi là chương trình phục vụ ngắt (ISR - Interrupt Service Routine).

Họ MCS-51 có tổng cộng 5 nguồn ngắt khác nhau, bao gồm ngắt ngoài 0 và 1 tại các chân INT0 và INT1, ngắt từ timer 0 và 1 khi timer tương ứng tràn, cùng với ngắt từ cổng nối tiếp khi có ký tự đến hoặc khi truyền ký tự đi Đối với họ 89x52, còn có thêm ngắt từ timer.

1 Các thanh ghi điều khiển hoạt động a Thanh ghi IE (Interrupt Enable)

Bảng 4.11 – Nội dung thanh ghi IE

EA - ET2 ES ET1 EX1 ET0 EX0

Bit Ký hiệu Địa chỉ Mô tả

IE.7 EA AFh Enable All

Cấm tất cả (= 0) hay cho phép ngắt IE.6 -

IE.5 ET2 ADh Enable Timer 2

Cho phép ngắt tại timer 2 (= 1)

IE.4 ES ACh Enable serial port

Cho phép ngắt tại cổng nối tiếp (= 1)

IE.3 ET1 ABh Enable Timer 1

Cho phép ngắt tại timer 1 (= 1)

IE.2 EX1 AAh Enable External interrupt 1

Cho phép ngắt tại ngắt ngoài 1 (= 1)

Cho phép ngắt tại timer 0 (= 1)

IE.0 EX0 A8h Enable External interrupt 0

Cho phép ngắt tại ngắt ngoài 0 (= 1)

Giá trị khi reset: 00h, cho phép định địa chỉ bit

Thanh ghi IE cho phép một ngắt có xảy ra hay cấm ngắt (để cho phép cần dùng

2 bit: bit EA = 1 và bit cho phép tương ứng từng ngắt) b Thanh ghi IP (Interrupt Priority)

Bảng 4.12 – Nội dung thanh ghi IP

- - PT2 PS PT1 PX1 PT0 PX0

Bit Ký hiệu Địa chỉ Mô tả

IP.5 PT2 BDh Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại timer 2

IP.4 PS BCh Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại cổng nối tiếp

IP.3 PT1 BBh Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại timer 1

IP.2 PX1 BAh Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại ngắt ngoài 1

IP.1 PT0 B9h Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại timer 0

IP.0 PX0 B8h Chọn mức ưu tiên cao (= 1) hay thấp (= 0) tại ngắt ngoài 0

Giá trị khi reset: 00h, cho phép định địa chỉ bit

Thanh ghi IP cho phép xác định mức ưu tiên cho các ngắt trong hệ thống MCS-51, với hai cấp độ ưu tiên: cao và thấp Quá trình xử lý ưu tiên ngắt diễn ra theo một quy trình nhất định.

- Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có mức ưu tiên cao hơn sẽ được phục vụ trước

Khi có hai ngắt xảy ra đồng thời với cùng mức ưu tiên, thứ tự ưu tiên thực hiện sẽ được sắp xếp từ cao đến thấp như sau: ngắt ngoài 0, sau đó là timer 0, tiếp theo là ngắt ngoài 1, timer 1, cổng nối tiếp, và cuối cùng là timer 2.

Khi một ISR (Interrupt Service Routine) với mức ưu tiên thấp đang thực thi mà một ngắt khác với mức ưu tiên cao xảy ra, ISR thấp sẽ tạm dừng để cho phép ISR cao thực hiện Điều này đồng nghĩa với việc ISR có mức ưu tiên cao không thể bị dừng lại Thanh ghi TCON (Timer/Counter Control) đóng vai trò quan trọng trong việc quản lý các ngắt này.

Bảng 4.13 – Nội dung thanh ghi TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Bit Ký hiệu Đia chỉ Mô tả

TCON.3 IE1 8Bh là cờ ngắt ngoài, được đặt bằng 1 khi phát hiện tác động ngắt tại INT1 Để xóa cờ này, có thể sử dụng phần mềm hoặc phần cứng khi chuyển điều khiển đến ISR.

TCON.2 IT1 8Ah Interrupt 1 Type control bit

= 0: ngắt ngoài 1 được tác động bằng mức logic 0

= 1: ngắt ngoài 1 được tác động bằng cạnh âm

Giá trị khi reset: TCON = 00h

2 Xử lý ngắt Để kiểm tra khi nào ngắt xảy ra, các cờ ngắt được lấy mẫu ở thời gian S5P2 của mỗi chu kỳ máy Các điều kiện ngắt được hỏi vòng cho đến chu kỳ máy kế tiếp để xác định xem có ngắt xảy ra hay không Khi có điều kiện ngắt, hệ thống ngắt sẽ tạo ra lệnh LCALL để gọi ISR tương ứng nhưng lệnh này sẽ không được thực hiện khi tồn tại một trong các điều kiện sau:

- Có một ngắt có mức ưu tiên bằng hay cao hơn đang được phục vụ

- Chu kỳ hỏi vòng hiện tại không phải là chu kỳ cuối của một lệnh

Khi thực thi lệnh RETI hoặc bất kỳ lệnh nào ảnh hưởng đến thanh ghi IE và IP, quá trình xử lý ngắt sẽ diễn ra theo thứ tự cụ thể.

- Hoàn tất lệnh hiện hành

- Cất nội dung của thanh ghi PC vào stack

- Lưu trạng thái của ngắt hiện hành

- Đưa vào thanh ghi PC địa chỉ của ISR tương ứng

Sau khi hoàn thành ISR với lệnh RETI, quá trình khôi phục trạng thái ban đầu của ngắt sẽ diễn ra, đồng thời địa chỉ từ stack sẽ được đưa vào thanh ghi PC.

Khi xảy ra ngắt, thanh ghi PC sẽ nhận giá trị tương ứng với các ngắt, được gọi là vector ngắt Những giá trị này đóng vai trò quan trọng trong việc xác định vị trí tiếp theo mà hệ thống sẽ thực hiện sau khi xử lý ngắt.

Nguyên nhân ngắt Địa chỉ

Trong số các nguyên nhân, reset được coi là một ngắt với vector ngắt là 0000h Tuy nhiên, cách xử lý khi reset khác với ngắt, vì nó khởi động lại tất cả các thanh ghi về giá trị mặc định mà không lưu nội dung của PC vào stack.

Theo bảng vector ngắt, ISR của ngắt ngoài 0 nằm từ địa chỉ 0003h đến 000Ah, chiếm tổng cộng 8 byte Do đó, nếu ISR có kích thước nhỏ hơn 9 byte, có thể sử dụng trực tiếp tại địa chỉ 0003h Ngược lại, nếu kích thước ISR lớn hơn, cần sử dụng các lệnh nhảy tại các vector ngắt, và cấu trúc chương trình sẽ được điều chỉnh tương ứng.

Lưu ý rằng nếu không sử dụng ngắt nào thì không cần phải khai báo ISR cho ngắt đó

3 Ngắt do bộ định thời

MCS-51 có 2 nguồn ngắt từ timer: timer 0 và timer 1 (đối với họ 89x52 còn có thêm timer

Khi timer hoạt động ở chế độ ngắt, chương trình vẫn tiếp tục chạy bình thường cho đến khi timer tràn, lúc này mới chuyển đến vị trí của ISR Ngược lại, nếu timer không sử dụng ngắt, chương trình sẽ dừng lại.

Các nguồn ngắt được quản lý thông qua các bit trong thanh ghi IE, bao gồm EA, ET0 và ET1, trong khi chế độ ưu tiên được thiết lập bằng các bit trong thanh ghi IP: PT0 và PT1 Khi timer tràn, cờ TFx sẽ được thiết lập lên mức 1 Hệ thống ngắt sẽ tự động chuyển đến ISR tương ứng khi phát hiện cờ TFx ở mức 1 và sẽ xoá cờ TFx.

Quá trình điều khiển hoạt động bằng bộ định thời có sử dụng ngắt thực hiện như sau:

- Xác định chế độ hoạt động của bộ định thời

- Nạp giá trị cho các thanh ghi THx, TLx

- Cho phép ngắt tại các bộ định thời tương ứng (thanh ghi IE)

- Xác định mức ưu tiên (thanh ghi IP)

- Cho phép timer chạy bằng các bit TRx

- Viết ISR cho timer tương ứng

Ví dụ 1: Viết chương trình tạo sóng vuông tần số f = 5 KHz tại P1.0 dùng ngắt timer 1 (giả sử tần số thạch anh là 12 MHz)

Giải f = 5 KHz -> T = 200 às (200 chu kỳ) -> thời gian trỡ hoón: 100 chu kỳ

Giá trị đếm = 100 -> dùng chế độ 8 bit TMOD = 0010 0000b (20h)

- Nội dung thanh ghi IE:

EA - ET2 ES ET1 EX1 ET0 EX0

Chương trình thực hiện như sau:

RETI ; trở về chương trình chính từ ISR Main:

MOV IE,#88h ; Có thể thay thế bằng 2 lệnh sau:

SJMP $ ; Lặp tại chỗ, nghĩa là chương trình

; không làm gì cả, chờ timer tràn (các

; ứng dụng thực tế có thể xử lý các

Lệnh CPL P1.0 chiếm 2 byte và lệnh RETI chiếm 1 byte, tổng cộng kích thước ISR cho timer 1 là 3 byte, không vượt quá 8 byte, do đó có thể đặt trực tiếp tại địa chỉ 001Bh.

Ví dụ 2: Viết chương trình tạo xung vuông tần số f = 10KHz tại P1.0 dùng ngắt timer

0 và xung vuông tần số f = 1 KHz tại P1.1 dùng ngắt timer 1

Giá trị đếm cho timer 0: 50 Giá trị đếm cho timer 1: 500

-> timer 0: 8 bit, timer 1: 16 bit TMOD = 0001 0010b (12h)

- Nội dung thanh ghi IE:

EA - ET2 ES ET1 EX1 ET0 EX0

Chương trình thực hiện như sau:

Trong ví dụ này, do timer 1 hoạt động ở chế độ 16 bit nên mỗi lần timer tràn phải thực hiện nạp lại giá trị cho timer 1

Ví dụ 3: Viết chương trình dùng ngắt timer 0 sao cho cứ 1s thì tăng nội dung của các ô nhớ 30h, 31h, 32h theo quy luật đồng hồ (30h chứa giờ, 31h chứa phút, 32h chứa giây)

CÁC ỨNG DỤNG DỰA TRÊN VI ĐIỀU KHIỂN MCS-51

ĐIỀU KHIỂN LED ĐƠN

Hình 5.1 – Sơ đồ kết nối Led đơn

Mạch điều khiển LED đơn được mô tả trong hình 4.1 Cần lưu ý rằng các port của AT89C51 chỉ cho phép dòng tối đa là 10 mA (tham khảo chương 1, phần đặc tính DC) Do đó, để điều khiển nhiều LED, cần thiết phải sử dụng thêm mạch khuếch đại.

Hình 5.2 – Sơ đồ kết nối dùng mạch khuếch đại

Hình 5.3 – Kết nối Led đơn với AT89C51

Ví dụ: Xét sơ đồ kết nối Led như h ình 5.3 Viết chương trình điều khiển Led sáng tuần tự từ trái sang phải, mỗi lần 1 Led

Các LED được kết nối với Port 0 của AT89C51, và khi sử dụng P0 như các cổng nhập/xuất, cần phải có điện trở kéo lên nguồn Để bật LED, dữ liệu phải được gửi ra P0, và theo sơ đồ mạch, LED sẽ sáng khi các bit tương ứng tại P0 có giá trị 0.

Yêu cầu điều khiển Led sang từ trái sang phải (theo thứ tự lần lượt từ P0.0 đến P0.7) nên dữ liệu gởi ra là:

- Lần 1: 1111 1110b (0FEh) – sáng 1 Led trái

- Lần 9: quay lại giống như lần 1

Chương trình thực hiện như sau:

MOV DPTR,#MaLed ; DPTR chứa vị trí bảng mã Led

MOV R7,#0 ; Phần tử đầu tiên của bảng mã

MOVC A,@A+DPTR ; Đọc bảng mã

MOV P0,A ; Chuyển vào P0 để sáng Led

CALL Delay ; Chờ để mắt người có thể thấy

INC R7 ; Chuyển qua trạng thái kế

CJNE R7,#8,Loop ; Đã hết bảng mã thì lặp lại

MaLed: DB 0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,7Fh

MOV TH0,#HIGH(-50000) ; Chờ 50 ms

MOV TL0,#LOW(-50000) SETB TR0

ĐIỀU KHIỂN LED 7 ĐOẠN

1 Cấu trúc và bảng mã hiển thị dữ liệu trên Led 7 đoạn

Hình 5.4 – Hình dạng của Led 7 đoạn

Đối với đèn LED 7 đoạn dạng anode chung, để bật đèn LED, chân COM cần đạt mức logic 1, trong khi các chân a – f và dp phải ở mức logic 0.

Bảng 5.1 - Bảng mã cho Led Anode chung (a là MSB, dp là LSB):

Bảng 5.2 - Bảng mã cho Led Anode chung (a là LSB, dp là MSB):

Đối với đèn LED 7 đoạn kiểu cathode chung, chân COM cần phải ở mức logic 0 để có thể kích hoạt đèn LED Để làm sáng các đèn LED từ a đến f và dp, các chân tương ứng phải đạt mức logic 1.

Bảng 5.3 - Bảng mã cho Led Cathode chung (a là MSB, dp là LSB):

Bảng 5.4 - Bảng mã cho Led Anode chung (a là LSB, dp là MSB):

2 Các phương pháp hiển thị dữ liệu a Phương pháp quét

Khi kết nối chung các đường dữ liệu của Led 7 đoạn, các Led không thể sáng đồng thời do sự ảnh hưởng lẫn nhau, mà cần phải thực hiện quét Led Điều này có nghĩa là chỉ một Led sẽ sáng tại mỗi thời điểm, trong khi các Led còn lại sẽ tắt Nhờ hiện tượng lưu ảnh của mắt, chúng ta vẫn cảm nhận được các Led sáng đồng thời.

Ví dụ 1: Xét sơ đồ kết nối như Hình 5.7 Viết chương trình hiển thị số 0 ra Led1 và số 1 ra Led2

Led sử dụng chân COM kết nối với Vcc thông qua các transistor PNP Q2 và Q3, do đó Led thuộc loại anode chung Để Led phát sáng, dữ liệu tại các chân điều khiển P1.0 và P1.1 cần phải được thiết lập ở mức 1.

Theo sơ đồ kết nối, chân g của Led nối với P0.6, chân a nối với P0.0 nên bảng mã Led là bảng 5.2, dữ liệu cho số 0 và 1 lần lượt là 0C0h và 0F9h

Phương pháp quét yêu cầu thời gian trì hoãn giữa hai lần quét, được thực hiện thông qua timer Thời gian trì hoãn này khoảng 200 ms.

Chương trình thực hiện như sau:

MOV P1,#0 ; Xoá P1 để tắt Led

CALL Delay ; Thời gian trì hoãn để thấy Led sáng

MOV TMOD,#01h MOV TH0,#(-200) MOV TL0,#(-200) SETB TR0

Ví dụ 2: Viết lại chương trình trên nhưng sử dụng ngắt của timer

Trong ví dụ 1, khi chương trình thực hiện quét LED, nó không xử lý bất kỳ công việc nào khác, điều này không phù hợp với các ứng dụng thực tế thường cần xử lý đồng thời nhiều tác vụ Để khắc phục vấn đề này, có thể sử dụng ngắt của timer, cho phép hiển thị trên một LED mỗi khi timer tràn.

Chương trình thực hiện như sau:

Led1 EQU 30h ; Địa chỉ chứa dữ liệu của Led1

Led2 EQU 31h ; Địa chỉ chứa dữ liệu của Led2

Led_Pos EQU 32h ; Vị trí Led hiện hành

ORG 000Bh ; Địa chỉ ISR của timer 0

SETB EA ; Cho phép ngắt tại timer 0

MOV Led_Pos,#01h ; Vị trí sáng đầu tiên là Led1

MOV R0,#Led1 ; Dữ liệu gởi ra đầu tiên là ở Led1

MOV TMOD,#01h MOV TH0,#(-200) MOV TL0,#(-200) SETB TR0

SJMP $ ; Không làm gì cả, các ứng dụng thực tế

; có thể thêm chương trình vào

MOV A,Led_Pos ; Xác định vị trí Led hiện hành

MOV P1,A ; Sáng Led hiện hành

RL A ; Dịch trái để chuyển qua Led kế

MOV Led_Pos,A ; trong qua trình tràn tiếp theo

MOV A,@R0 ; Đọc dữ liệu hiện hành

INC R0 ; Chuyển qua dữ liệu kế

CJNE R0,#Led_Pos,exitTimer0 ; Nếu đã quét hết toàn bộ

MOV Led_Pos,#01h ; Led thì bắt đầu lại từ Led1

Ví dụ 2 có thể mở rộng thêm cho 8 Led trong đó các bit điều khiển từ P1.0 đến P1.7 bằng cách khai báo thêm các ô nhớ cho các Led như sau:

Led1 EQU 30h ; Địa chỉ chứa dữ liệu của Led1

Led2 EQU 31h ; Địa chỉ chứa dữ liệu của Led2

Led3 EQU 32h Led4 EQU 33h Led5 EQU 34h Led6 EQU 35h Led7 EQU 36h Led8 EQU 37h Led_Pos EQU 38h ; Vị trí Led hiện hành

Chương trình này hiển thị nội dung trong ô nhớ 30h ra hai đèn LED, với Led1 biểu thị số hàng chục và Led2 thể hiện số hàng đơn vị, giả sử giá trị trong ô nhớ 30h không vượt quá 99.

Giải Để xuất nội dung trong ô nhớ 30h ra Led 7 đoạn cần thực hiện:

- Chuyển nội dung trong ô nhớ 30h thành số hàng chục và hàng đơn vị (thực hiện chia cho 10)

- Chuyển giá trị số thành mã Led 7 đoạn (bằng cách tra bảng) Chương trình thực hiện như sau:

Led1 EQU 30h ; Địa chỉ chứa dữ liệu của Led1

Led2 EQU 31h ; Địa chỉ chứa dữ liệu của Led2

Led_Pos EQU 32h ; Vị trí Led hiện hành

ORG 000Bh ; Địa chỉ ISR của timer 0

SETB EA ; Cho phép ngắt tại timer 0

MOV Led_Pos,#01h ; Vị trí sáng đầu tiên là Led1

MOV R0,#Led1 ; Dữ liệu gởi ra đầu tiên là ở Led1

MOV TMOD,#01h MOV TH0,#(-200) MOV TL0,#(-200) SETB TR0

MOV B,#10 ; Chia cho 10: A chứa số hàng chục,

DIV AB ; B chứa số hàng đơn vị

CALL BCDtoLed7 ; Chuyển sang mã Led 7 đoạn

MOV Led1,A ; Đưa vào ô nhớ 31h (Led1)

MOV A,B ; Chuyển sang mã Led 7 đoạn của

CALL BCDtoLed7; số hàng đơn vị

MOV A,Led_Pos ; Xác định vị trí Led hiện hành

MOV P1,A ; Sáng Led hiện hành

RL A ; Dịch trái để chuyển qua Led kế

MOV Led_Pos,A ; trong qua trình tràn tiếp theo

MOV A,@R0 ; Đọc dữ liệu hiện hành

INC R0 ; Chuyển qua dữ liệu kế

CJNE R0,#Led_Pos,exitTimer0 ; Nếu đã quét hết toàn bộ

MOV Led_Pos,#01h ; Led thì bắt đầu lại từ Led1

Khi tách riêng các đường dữ liệu của đèn LED, chúng ta có thể cho phép các LED sáng đồng thời mà không bị ảnh hưởng lẫn nhau IC chốt như 74LS373 và 74LS374 cho phép lưu trữ dữ liệu cho các LED Khi cần xuất dữ liệu ra LED, chỉ cần gửi dữ liệu và tạo xung để chốt.

Ví dụ: Xét sơ đồ mạch kết nối như Hình 5.8 Viết chương trình xuất số 2 ra Led3 và số 3 ra Led4

Do Led3 nối với 74LS374 (U5) điều khiển bằng chân P1.0 nên để hiển thị trên Led3, cần phải:

- Kích xung tại chân P1.0 để chốt dữ liệu

Hình 5.7 – Kết nối Led 7 đoạn dùng phương pháp quét

Hình 5.8 – Kết nối Led 7 đoạn dùng phương pháp chốt Chương trình thực hiện như sau:

ĐIỂU KHIỂN MA TRẬN LED

Ma trận LED là một cấu trúc gồm nhiều LED được sắp xếp trong một vỏ, chia thành các cột và hàng Mỗi giao điểm giữa hàng và cột có thể chứa một LED đơn sắc hoặc nhiều LED, như trong trường hợp ma trận LED ba màu với hai LED tại một vị trí Để làm cho LED sáng lên, cần cung cấp hiệu điện thế dương giữa Anode và Cathode Với cấu trúc này, có thể mở rộng số lượng hàng và cột để tạo ra các bảng quang báo.

Hình 5.9 – Hình dạng ma trận Led

Kết nối của ma trận Led có 2 cách: anode nối với hàng, cathode nối với cột hay ngược lại

Sơ đồ kết nối được mô tả trong Hình 5.10 cho thấy rằng hai Led trên hai cột không thể phát sáng đồng thời Trong mạch hình b, một Led sẽ sáng khi hàng của Led bằng 0 và cột bằng 1.

Khi cần sáng Led tại hàng 1, cột 1 và hàng 2, cột 2, ta thiết lập hàng 1 = 0, cột 1 = 1 và hàng 2 = 0, cột 2 = 1 Điều này dẫn đến việc các Led tại hàng 1, cột 2 và hàng 2, cột 1 cũng sẽ sáng Tóm lại, việc bật sáng hai Led tại hàng 1, cột 1 và hàng 2, cột 2 sẽ kích hoạt các Led ở hàng 1, cột 2 và hàng 2, cột 1.

Để hiển thị một ký tự trên ma trận LED, cần sử dụng cơ chế quét, trong đó chỉ một cột được chiếu sáng tại mỗi thời điểm, trong khi các cột khác ở chế độ tắt Tuy nhiên, nếu quá trình quét diễn ra đủ nhanh, mắt người sẽ cảm nhận được như tất cả các cột đều sáng đồng thời.

Hình 5.10 – Sơ đồ kết nối ma trận Led

X X X Để sáng số 0 trên ma trận Led, ta thực hiện quá trình quét như sau:

Ví dụ: Xét sơ đồ kết nối ma trận Led như Hình 5.11 Viết chương trình sáng số 0 trên ma trận Led

CALL delay ; Tạo thời gian trì hoãn để thấy

INC R0 ; Chuyển sang cột kế

CJNE R0,#5,lap ; Nếu quét đủ 5 cột thì lặp lại

MOV TL0,#LOW(-500) MOV TH0,#HIGH(-500) SETB TR0

; - cot: DB 01h,02h,04h,08h,10h hang: DB 41h,3Eh,3Eh,3Eh,41h END

Ví dụ 2: Viết chương trình cho chuỗi ‘KTCN’ di chuyển từ trái sang phải trên ma trận Led

MOV R1,#20 ; Một ký tự quét 20 lần main:

MOV DPTR,#cot MOVC A,@A+DPTR MOV P1,A

MOV DPTR,#hang MOVC A,@A+DPTR MOV P0,A

CJNE R2,#31,main1 ; Nếu quét hết chuỗi thì lặp lại

MOV TL0,#LOW(-500) MOV TH0,#HIGH(-500) SETB TR0

DB 00h,77h,6Bh,5Dh,3Eh,7Fh ;Mã chữ K

DB 7Eh,7Eh,00h,7Eh,7Eh,7Fh ;Mã chữ T

DB 41h,3Eh,3Eh,3Eh,5Dh,7Fh ;Mã chữ C

DB 00h,7Dh,7Bh,77h,00h,7Fh ;Mã chữ N

DB 7Fh,7Fh,7Fh,7Fh,7Fh ; Các cột trống

ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC

Động cơ bước là loại động cơ cho phép chuyển động theo từng bước hoặc nửa bước dựa trên xung điều khiển Góc quay của mỗi bước phụ thuộc vào loại động cơ, thường là 1.8 độ mỗi bước hoặc 7.2 độ mỗi bước Động cơ bước được cấu tạo từ 4 cuộn dây: 1-2, 2-3, 4-5 và 5-6.

Mạch điều khiển động cơ như sau:

Hình 5.13 – Sơ đồ điều khiển động cơ bước Xung điều khiển động cơ như sau:

Bảng 5.5 - Điều khiển một bước

Bảng 5.6 - Điều khiển nửa bước

Để điều khiển động cơ quay thuận từng bước với tốc độ 50 vòng/phút, tham khảo sơ đồ kết nối động cơ trong Hình 5.14 Giả sử động cơ có góc quay là 7.2 độ mỗi bước.

Hình 5.14 – Sơ đồ kết nối AT89C51 với động cơ bước Giải

Góc quay 7.2 0 /bước → 1 vòng quay cần 360 0 /7.2 0 = 50 bước → 50 vòng quay cần thực hiện 2500 bước

Tốc độ 50 vòng / phút → 1 phút (60s) thực hiện 2500 bước → mỗi bước cần 60/2500

Thứ tự kích xung như bảng 5.5 Chương trình thực hiện như sau: main:

MOV DPTR,#thuan1buoc begin:

MOV P2,A ; Xuất ra P2 để điều khiển động cơ

MOV TH0,#HIGH(-24000) MOV TL0,#LOW(-24000) SETB TR0

ĐIỀU KHIỂN LCD (Liquid Crystal Display)

- CONST (contrast): chỉnh độ tương phản (độ sáng của hình ảnh trên LCD)

EN (Enable) cho phép thực hiện các thao tác đọc và ghi dữ liệu Trong chế độ đọc, tín hiệu EN tác động bằng xung dương (cạnh lên), trong khi trong chế độ ghi, tín hiệu này tác động bằng xung âm (cạnh xuống).

- RS (register selection): chọn thanh ghi lệnh (RS = 0) hoặc thanh ghi dữ liệu (RS = 1)

- D7 – D4: bus dữ liệu (chế độ 8 bit: 4 bit cao, chế độ 4 bit: dùng cho truyền 4 bit cao và

4 bit thấp) Ngoài ra, bit D7 còn dùng làm ngõ ra cho cờ Busy

- D3 – D0: 4 bit thấp trong chế độ 8 bit hay bỏ trống trong chế độ 4 bit

- A, K: anode và cathode đèn nền của LCD

Các thành phần chức năng của LCD1602A:

Cờ Busy (BF – Busy flag) cho biết trạng thái thực thi lệnh của LCD; khi BF = 1, LCD đang thực hiện một lệnh và sẽ bỏ qua các lệnh gửi tiếp theo Để kiểm tra trạng thái này, BF được đọc tại chân D7 khi RS = 0 và R/W = 1.

Do đó, trước khi thực hiện một lệnh, cần kiểm tra BF trước, nếu BF = 0 thì mới gởi lệnh

- DDRAM (Display Data RAM): chứa các ký tự sẽ hiển thị trên LCD, tối đa là 80x8 bit

Khi sử dụng màn hình LCD, địa chỉ DDRAM có sự khác biệt giữa chế độ 1 dòng và 2 dòng Ở chế độ 1 dòng, phạm vi địa chỉ DDRAM là từ 00h đến 4Fh Trong khi đó, ở chế độ 2 dòng, địa chỉ DDRAM cho dòng 1 là từ 00h đến 27h và cho dòng 2 là từ 40h đến 67h.

- Bộ đếm địa chỉ (AC - Address Counter): dùng để lưu địa chỉ hiện hành của DDRAM và CGRAM, có thể thực hiện đọc AC khi RS = 0 và R/W = 1

CGROM (Character Generation ROM) là bộ nhớ chứa các mô hình ký tự hiển thị trên LCD, bao gồm 192 ký tự 5x7 theo bảng mã ASCII Khi DDRAM chứa giá trị 41h, tương ứng với mã ASCII của ký tự 'A', LCD sẽ hiển thị ký tự 'A' Tuy nhiên, các mã từ 00h đến 0Fh không theo mã ASCII mà sử dụng các ký tự đã được định nghĩa trong CGRAM.

CGRAM (Character Generation RAM) là bộ nhớ cho phép người dùng định nghĩa các mô hình ký tự nhằm hiển thị các ký tự không có sẵn trong CGROM Với CGRAM, người dùng có thể tạo tối đa 8 ký tự với kích thước 5x8.

Bảng 5.7 – Các ký tự định nghĩa trong CGRAM

DDRAM Địa chỉ CGRAM Dữ liệu CGRAM Ký tự

000 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

001 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

010 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

011 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

100 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

101 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

110 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

111 111 xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ????? xxx ?????

8 Để định nghĩa một ký tự, thực hiện thay thế dấu ? bằng các giá trị 0 hay 1 tương ứng và gởi vào CGRAM

Ví dụ: Để định nghĩa chữ Đ tại vị trí 1 trong CGRAM, địa chỉ và dữ liệu tương ứng là:

Nghĩa là tại địa chỉ 00h của CGRAM chứa giá trị là 1Eh và tương tự cho đến địa chỉ 07h

Các chế độ truyền dữ liệu:

LCD1602A hỗ trợ hai chế độ truyền dữ liệu: chế độ 8 bit sử dụng toàn bộ các chân D0 đến D7 và chế độ 4 bit chỉ sử dụng các chân D4 đến D7, không sử dụng D0 đến D3 Khi hoạt động ở chế độ 4 bit, dữ liệu 8 bit sẽ được truyền qua hai lần, đầu tiên là 4 bit cao và sau đó là 4 bit thấp.

Sau khi thực hiện truyền xong 8 bit, BF mới chuyển lên 1 Hai chế độ truyền này mô tả như Hình 5.16 và 4.17

Hình 5.16 – Định thời giao tiếp ở chế độ 8 bit

Hình 5.17 – Định thời giao tiếp ở chế độ 4 bit

Các giá trị thường dùng mô tả như sau:

Bảng 5.8 – Các lệnh thường dùng

01H Xóa màn hình màn hình

Bài viết này cung cấp các lệnh điều khiển con trỏ và màn hình trong lập trình Các lệnh như 02H để trở về đầu chuỗi, 04H và 06H để dịch con trỏ sang trái và phải, cùng với 05H và 07H để dịch màn hình sang phải và trái Ngoài ra, lệnh 08H tắt con trỏ và hiển thị, trong khi 0AH bật con trỏ và tắt hiển thị Các lệnh 0CH và 0EH cho phép bật hiển thị và điều chỉnh trạng thái con trỏ Để dịch vị trí con trỏ, có thể sử dụng 10H và 14H, trong khi 18H và 1CH dịch toàn bộ màn hình sang trái và phải Các lệnh 80H và C0H đưa con trỏ về đầu dòng 1 và dòng 2 Cuối cùng, lệnh 38H xác lập chế độ 2 dòng và độ phân giải chữ 5x7.

Kết nối LCD 1602A với vi điều khiển AT89C51 theo sơ đồ đã cho Viết chương trình hiển thị chuỗi “KHOA DIEN – DIEN TU” trên dòng đầu tiên và “BO MON DIEN TU – VIEN THONG” trên dòng thứ hai.

Hình 5.18 – Kết nối LCD và 89C51

8 bit dữ liệu của LCD nối với P1 → chế độ 8 bit Yêu cầu hiện trên 2 dòng → chế độ 2 dòng

Chương trình thực hiện như sau:

MOV LCD_DATA,#38h ; đặt chế độ 2 dòng

MOV LCD_DATA,#0Ch ; bật hiển thị

MOV LCD_DATA,#01h ;xoá màn hình

MOV LCD_DATA,#80h ; Chuyển về địa chỉ 00h (dòng 1) CALL write_command

CALL write ; Ghi vào DDRAM

MOV LCD_DATA,#0C0h ; Chuyển về địa chỉ 40h (dòng 2) CALL write_command

CALL write ; Ghi vao DDRAM

CJNE A,#0FFh,write1;Nếu giá trị là 0FFh thì hết chuỗi

MOV LCD_DATA,A call write_data INC DPTR

CLR RS CLR RW CLR EN NOP

CLR RW CLR EN NOP

Line1: DB 'KHOA DIEN – DIEN TU', 0FFh

Line2: DB 'BO MON DIEN TU – VIEN THONG', 0FFH END

Ví dụ 2: Yêu cầu giống như ví dụ 1 nhưng cứ mỗi 1s thì dịch chuỗi sang trái một ký tự

Chương trình thực hiện như đã nêu, bổ sung thêm phần xử lý ngắt cho timer 0, với định thời 1 giây để dịch chuỗi sang trái, tức là dịch toàn bộ màn hình sang phải Theo bảng 5.9, lệnh cần gửi ra LCD có mã lệnh là 1Ch.

Chương trình thực hiện như sau:

ORG 0000h LJMP main ORG 000Bh

MOV IE,#82h ; Cho phép ngắt tại Timer 0

MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) MOV R7,#20

MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7,exitTimer0

MOV LCD_DATA,#1Ch ;Dịch toàn màn hình sang phải

Ví dụ 3: Cho mạch kết nối LCD như hình 5.18, viết chương trình xuất chuỗi “Khoa Điện – Điện tử” trên dòng 1 và “Bộ môn Điện tử - Viễn thông” trên dòng 2

Ví dụ này yêu cầu các ký tự không có trong bảng mã nên phải định nghĩa thêm trong

CGRAM cho phép định nghĩa tối đa 8 ký tự, trong đó có 6 ký tự cần được xác định là: Đ, ệ, ử, ộ, ô, ễ Địa chỉ và dữ liệu tương ứng cho các ký tự này cũng cần được xác định rõ ràng.

Chương trình thực hiện như sau:

MOV LCD_DATA,#01h ;xoá màn hình

MOV LCD_DATA,#40h ; Địa chỉ đầu của CGRAM call write_command ; là 00h

MOV LCD_DATA,#80h CALL write_command MOV DPTR,#Line1

MOV LCD_DATA,#0C0h CALL write_command MOV DPTR,#Line2

CALL write here:SJMP here

MOV LCD_DATA,A call write_data INC DPTR

CLR RS CLR RW CLR EN NOP

SETB RS CLR RW CLR EN NOP

CLR EN wait: call delay ret

DB 'Khoa ',00h,'i',01h,'n - ',00h,'i',01h,'n t',02h,0FFh ; Chuỗi ‘Khoa Điện – Điện tử’ Line2:

DB 'B',03h,' m',04h,'n ',00h,'i',01h,'n t',02h,' - vi',05h,'n th',04h,'ng', 0FFH ; Chuỗi ‘Bộ môn Điện tử - Viễn thông’

; - cgram_data: DB 1Eh,09h,09h,1Dh,09h,09h,1Eh,00h ; Chữ Đ

DB 04h,0Eh,11h,1Eh,10h,0Fh,04h,00h ; Chữ ệ

DB 04h,0Ah,0Eh,11h,11h,0Eh,04h,00h ; Chữ ộ

DB 04h,0Ah,0Eh,11h,11h,0Eh,00h,00h ; Chữ ô

DB 05h,0Eh,0Ah,1Fh,1Fh,10h,0Fh,00h ; Chữ ễ

GIAO TIẾP VỚI PPI8255

PPI8255 là một IC giao tiếp lập trình, giúp mở rộng cổng khi cổng của 89C51 không đủ IC này có hai chế độ hoạt động chính: BSR (Bit Set/Reset) và I/O (Input/Output), trong đó chế độ I/O được chia thành ba chế độ khác nhau, nhưng tài liệu này chỉ tập trung vào chế độ 0.

8255 có 3 cổng, mỗi cổng 8 bit, trong đó cổng C có khả năng chia thành 4 bit cao và 4 bit thấp, tạo thành 2 nhóm: nhóm A (PA + PCH) và nhóm B (PB và PCL).

Để điều khiển 8255, bên trong thiết bị có một thanh ghi điều khiển (CR - Control Register) cho phép lựa chọn chế độ hoạt động, với nội dung của CR được trình bày trong hình 5.19.

Hình 5.20 – Dạng từ điều khiển cho 8255A ở chế độ I/O

Hình 5.21 - Dạng từ điều khiển cho 8255A ở chế độ BSR Lưu ý rằng khi cần Set/Reset bit thì phải gởi dữ liệu ra CR chứ không gởi ra PC

Để thiết lập điều kiện làm việc cho 8255, cần cấu hình các chế độ hoạt động cho các cổng PA, PB và PC Quá trình này yêu cầu thực hiện các thao tác cụ thể để đảm bảo 8255 hoạt động hiệu quả.

CR của 8255 Logic chọn các port cho 8255 mô tả như sau:

Bảng 5.9 – Logic chọn các port của 8255

Port A Port B Port C Thanh ghi điều khiển 8255A không hoạt động

Ví dụ: Cho mạch kết nối giữa AT89C51 và 8255 như Hình 5.22 Viết chương trình điều khiển theo yêu cầu:

- Nhấn SW1: sáng 4 Led trái và sáng Lamp

- Nhấn SW2: sáng 4 Led phải và tắt Lamp

Hình 5.22 – Sơ đồ kết nối 89C51 với 8255

PA điều khiển LED, PCL điều khiển công tắc nhấn, và PCH điều khiển RL1, với PA xuất, PCL nhập và PCH xuất (PB có thể tùy ý) Nội dung của thanh ghi điều khiển được trình bày như sau:

I/O Chế độ 0 PA xuất PCH xuất Chế độ 0 PB xuất PCL nhập

Để LED sáng, dữ liệu tại chân PA phải là 0, trong khi khi dữ liệu là 1, LED sẽ tắt Đèn LAMP được điều khiển thông qua RL1: khi RL1 đóng (PC7 = 0), LAMP sẽ sáng, và khi RL1 ngắt (PC7 = 1), LAMP sẽ tắt Nội dung của thanh ghi điều khiển PC7 sẽ xác định trạng thái hoạt động của LAMP.

0 0 0 0 1 1 1 0 0Eh BSR Không dùng PC7 = 0 PC7 = 1

0 0 0 0 1 1 1 1 0Fh BSR Không dùng PC7 = 1

Công tắc SW1, SW2 nối với PC0 và PC1: khi nhấn công tắc thì chân tương ứng tại

Để kiểm tra trạng thái của công tắc, ta cần đọc dữ liệu từ PCL và xác định các bit PC0 và PC1, trong đó PC = 0 khi công tắc được nhấn và PC = 1 khi không nhấn.

Chương trình thực hiện như sau:

MOV DPTR,#0C003h ; Địa chỉ CR

MOV A,#81h; PA: xuất, PB: xuất, PCH: xuất, PCL: nhập

MOVX @DPTR,A ; Xuất ra CR

MOV DPTR,#0C002h ; Địa chỉ PC

JNB ACC.0,SW1 ; Nếu PC0 = 0 thì đến SW1

JNB ACC.1,SW2 ; Nếu PC1 = 0 thì đến SW2

CALL Delay ; Tránh rung phím

MOV DPTR,#0C000h ; Địa chỉ PA (do PA nối với Led)

MOV A,0Eh ; PC7 = 0 → đóng RL1 → sáng LAMP

MOV DPTR,#0C003h ; Địa chỉ CR (do dùng chế độ BSR)

MOV DPTR,#0C000h ; Địa chỉ PA (do PA nối với Led)

MOV A,0Fh ; PC7 = 1 → đóng RL1 → sáng LAMP

MOV DPTR,#0C003h ; Địa chỉ CR (do dùng chế độ BSR)

1 Cho sơ đồ kết nối như Hình 5.3 Viết chương trình sáng Led theo yêu cầu: sáng lần lượt

Led sẽ được điều khiển từ phải sang trái với 4 lần thực hiện; nhấp nháy 8 Led trong 5 lần; và sáng Led từ ngoài vào trong, mỗi lần 2 Led, thực hiện 3 lần với thời gian trì hoãn giữa 2 lần sáng là 300ms, sử dụng timer 1.

2 Cho sơ đồ kết nối như Hình 5.7 Viết chương trình tăng nội dung của ô nhớ 30h từ 00 –

99 và hiển thị giá trị trên 2 Led 7 đoạn (hiển thị Led bằng ngắt timer 1 và thời gian trì hoãn khi tăng nội dung của ô nhớ 30h là 1s dùng ngắt timer 0)

3 Cho sơ đồ kết nối như Hình 5.7 trong đó kết nối thêm 4 Led (Led2 – 6) được điều khiển bằng các bit của P1: P1.2 – P1.5 Viết chương trình hiển thị giờ, phút giây trên 6 Led (Led1,2: giờ; Led3,4: phút; Led5,6: giây) trong đó giờ chứa trong ô nhớ 30h, phút trong ô nhớ 31h, giây trong ô nhớ 32h (thời gian trì hoãn 1s dùng ngắt timer 0, quét Led dùng ngắt timer 1)

4 Cho sơ đồ kết nối như Hình 5.11 Viết chương trình cho chuỗi “CAO DANG VINATEX” di chuyển từ trái sang phải trên ma trận Led

5 Cho sơ đồ kết nối như Hình 5.14 Viết chương trình điều khiển động cơ quay thuận 100 vòng với tốc độ 10 vòng/phút (giả sử mỗi bước có góc quay là 7.2 0 )

6 Cho sơ đồ kết nối như Hình 5.18 Viết chương trình cho chuỗi “Cao Đẳng VINATEX” trên dòng 1 và “Khoa Cơ Điện” trên dòng 2 di chuyển từ trái sang phải (thời gian dịch chuyển là 300ms dùng ngắt timer 1).

Ngày đăng: 13/10/2022, 22:08

HÌNH ẢNH LIÊN QUAN

- Bảng phụ viết sẵn câu văn, đoạn văn cần hướng dẫn HS đọc - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng ph ụ viết sẵn câu văn, đoạn văn cần hướng dẫn HS đọc (Trang 1)
Hình 1.3 – Hoạt động của BUS cho chu kỳ nạp lệnh - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Hình 1.3 – Hoạt động của BUS cho chu kỳ nạp lệnh (Trang 10)
VII. VI XỬ LÝ – VI ĐIỀU KHIỂN - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
VII. VI XỬ LÝ – VI ĐIỀU KHIỂN (Trang 13)
Bảng 2.1: Chức năng các chân của Port 3 - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 2.1 Chức năng các chân của Port 3 (Trang 18)
Bảng 2.2 – Các thanh ghi chức năng đặc biệt - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 2.2 – Các thanh ghi chức năng đặc biệt (Trang 21)
Bảng 2.6 - Giá trị mặc định của các thanh ghi khi reset - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 2.6 Giá trị mặc định của các thanh ghi khi reset (Trang 32)
Bảng 2.7 – Các chế độ khố chương trình - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 2.7 – Các chế độ khố chương trình (Trang 33)
Hình 2.14 – Sơ đồ mạch lập trình cho AT89C51 - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Hình 2.14 – Sơ đồ mạch lập trình cho AT89C51 (Trang 35)
Bảng 2.12 – Đặc tính AC của AT89C51 - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 2.12 – Đặc tính AC của AT89C51 (Trang 38)
b. Đặc tính AC - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
b. Đặc tính AC (Trang 38)
Hình 2.19 – Chu kỳ đọc bộ nhớ dữ liệu ngoài - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Hình 2.19 – Chu kỳ đọc bộ nhớ dữ liệu ngoài (Trang 41)
Hình 2.20 – Chu kỳ ghi dữ liệu bộ nhớ ngoài - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Hình 2.20 – Chu kỳ ghi dữ liệu bộ nhớ ngoài (Trang 41)
Bảng 3.3 – Các lệnh chuyển dữ liệu trong RAM ngoại - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 3.3 – Các lệnh chuyển dữ liệu trong RAM ngoại (Trang 50)
Bảng 3.2). Các địa chỉ bit từ 00h – 7Fh nằm trong RAM nội còn các địa chỉ từ 80h – FFh nằm trong SFR - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
Bảng 3.2 . Các địa chỉ bit từ 00h – 7Fh nằm trong RAM nội còn các địa chỉ từ 80h – FFh nằm trong SFR (Trang 52)
3. Nhóm lệnh chuyển điều khiển - Giáo trình Vi điều khiển - Trường CĐ Kinh tế - Kỹ thuật Vinatex TP. HCM
3. Nhóm lệnh chuyển điều khiển (Trang 53)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN