1.99k likes | 3.25k Views
CẤU TRÚC VI XỬ LÝ VÀ VI ĐIỀU KHIỂN. PHAN HẢI PHONG Khoa Vật Lý – Trường ĐH Khoa Học Huế haiphongphan@gmail.com. Mở đầu. 1971: tập đoàn Inter đã giới thiệu 8080. Sau đó các tập đoàn như Motorola, MOS-Technology, Zilog cũng giới thiệu các bộ vi xử lý tương tự: 6800, 6520, Z80...
E N D
CẤU TRÚC VI XỬ LÝ VÀ VI ĐIỀU KHIỂN PHAN HẢI PHONG Khoa Vật Lý – Trường ĐH Khoa Học Huế haiphongphan@gmail.com
Mở đầu • 1971: tập đoàn Inter đã giới thiệu 8080. • Sau đó các tập đoàn như Motorola, MOS-Technology, Zilog cũng giới thiệu các bộ vi xử lý tương tự: 6800, 6520, Z80... • 1976: Inter giới thiệu bộ vi điều khiển 8748, chip đầu tiên trong họ VĐK MCS-48. • 8748 bao gồm: 1 CPU, 1Kb EPROM, 64 Byte RAM, 27 chân xuất nhập và một bộ định thời 8 bit. • 1980: Inter công bố 89C51, VĐK đầu tiên của họ MSC-51. • 89C51 chứa trên 60000 transistor bao gồm 4Kb ROM, 128 byte RAM, 32 đường IO, 1 port nối tiếp, 2 bộ định thời 16 bit.
Chương I CẤU TRÚC CHUNG CỦA VI XỬ LÝ VÀ VI ĐIỀU KHIỂN
Vi xử lý (μP) • Thực hiện các thao tác tính toán trên dữ liệu • Đưa ra tín hiệu điều khiển hoạt động cho toàn bộ hệ thống • Gồm các mạch lô-gíc thực hiện liên tục việc nạp lệnh và thực hiện lệnh • Hoạt động theo một chuỗi các lệnh máy có sẵn -> chương trình
Phân loại vi xử lý • Theo số bit có thể được xử lý đồng thời: 4 bit, 8 bit, 16 bit, 32 bit… • Theo tập lệnh: • tập lệnh phức hợp (CISC: Complex Instruction Set Computer) • tập lệnh thu gọn (RISC: Reduced Instruction Set Computer) • Theo kiến trúc: • kiến trúc Von Neumann: vùng nhớ dữ liệu và chương trình không được phân chia độc lập (truy cập trên cùng một đường địa chỉ) • kiến trúc Harvard: vùng nhớ cho chương trình và cho dữ liệu được phân biệt rõ ràng
Cấu trúc một vi xử lý • Luồng dữ liệu (Datapath): lưu giữ và xử lý (tính toán) dữ liệu, tác động trực tiếp trên thông tin • Đơn vị điều khiển (Control Unit): đưa ra những tín hiệu điều khiển để điều khiển hoạt động của Datapath • Hai thành phần này cùng được xây dựng từ các mạch dãy và mạch lô-gíc tổ hợp
Cấu trúc Datapath • Khối tính toán số học lô-gíc (ALU: Arithmetic Logic Unit): xử lý thông tin (thực hiện các phép toán trên dữ liệu) • Khối nhớ: lưu trữ dữ liệu đầu vào, đầu ra, các biến tạm thời, các tham số… • Đường bus dữ liệu: vận chuyển dữ liệu giữa các phần tử nhớ và từ các phần tử nhớ đến khối tính toán
Khối tính toán số học và logic • Gồm: • Bộ cộng • Bộ trừ • Bộ ghi dịch • Khối thực hiện phép toán lô-gíc • Bộ nhân chia • Các mạch tính toán là mạch lô-gíc tổ hợp (không chứa các phần tử nhớ) => ở đường vào của các toán hạng và ở lối ra cho kết quả/trạng thái luôn phải có thêm các mạch chốt để lưu các giá trị này.
Khối nhớ • Các thanh ghi (register) chung: lưu dữ liệu tạm thời • Các thanh ghi có chức năng đặc biệt: • thanh ghi lệnh (instruction register): lưu trữ mã lệnh của lệnh (opcode) • thanh ghi bộ đếm chương trình (Program counter): cung cấp địa chỉ hiện tại mà vi xử lý đang truy nhập tới bộ nhớ chương trình • thanh ghi con trỏ chứa địa chỉ dữ liệu (DPTR: Data Pointer) • địa chỉ vùng ngăn xếp (SP: Stack Pointer) • Các thanh ghi được đánh địa chỉ và được quản lý như một vùng nhớ đặc biệt.
Cấu trúc và hoạt động của đơn vị điều khiển • Được thực thi bằng một máy trạng thái (SM), kết hợp với các mạch logic điều khiển. • Tín hiệu ra của SM: điều khiển Datapath • Tín hiệu vào của SM: các lệnh điều khiển • Lệnh được lưu trong bộ nhớ chương trình • Quá trình thực thi một lệnh: • Nạp lệnh • Giải mã lệnh • Thực hiện lệnh
Quá trình nạp lệnh • Đơn vị điều khiển đưa nội dung của bộ đếm chương trình lên bus địa chỉ của bộ nhớ chương trình và cho phép đọc bộ nhớ này. • Dữ liệu được đọc ra từ bộ nhớ chương trình sẽ được đưa lên bus lối vào của vi xử lý. Dữ liệu này chính là mã lệnh (opcode). • Opcode được chốt vào thanh ghi lệnh của vi xử lý và bộ đếm chương trình được tăng lên một đơn vị, trỏ tới byte mã chương trình tiếp theo.
Bus địa chỉ N Bộ đếm chương trình Bus dữ liệu Opcode Thanh ghi lệnh RAM N+2 N+1 Clock N Opcode N-1 Read Hoạt động bus cho chu kì tìm nạp lệnh
Bộ nhớ bán dẫn • Các chương trình và dữ liệu được lưu giữ trong bộ nhớ. • Các bộ nhớ được truy xuất trực tiếp bởi CPU: ROM, RAM, flash. • RAM: • Bộ nhớ có thể đọc/ghi • Mất nội dung khi mất nguồn nuôi. • Chương trình và dữ liệu của người dùng sẽ được nạp vào RAM để thực thi. • ROM: • Bộ nhớ chỉ đọc • Không mất nội dung khi không có nguồn nuôi. • Flash: Bộ nhớ đọc/ghi, không mất dữ liệu khi mất nguồn nuôi
BUS: địa chỉ, dữ liệu và điều khiển • Bus: tập các dây dẫn mang những thông tin có cũng một mục đích. • Việc truy cập đến một mạch quanh CPU sử dụng ba bus: bus địa chỉ, bus dữ liệu, bus điều khiển. • Thao tác đọc/ghi: • CPU xác định vị trí của dữ liệu bằng cách đặt một địa chỉ lên bus địa chỉ • Xuất tín hiệu điều khiển lên bus điều khiển để xác định thao tác là đọc hay ghi • Lấy byte dữ liệu từ bộ nhớ ở địa chỉ xác định, đặt byte này lên bus dữ liệu. • CPU đọc dữ liệu và đưa vào các thanh ghi nội hoặc CPU xuất dữ liệu lên bus dữ liệu
CPU Bus địa chỉ Bus dữ liệu Bus điều khiển RAM ROM Mạch giao tiếp Thiết bị ngoại vi Cấu trúc chung của một VĐK
Chương II CẤU TRÚC PHẦN CỨNG CỦA HỌ VĐK 8051
Tổng quát • Vi mạch đặc trưng của họ MSC-51 là chip 89C51. • 4 KB bộ nhớ Flash • 128 byte RAM • 4 port xuất nhập 8 bit • 2 bộ định thời 16 bit • Mạch giao tiếp nối tiếp UART • Không gian nhớ chương trình ngoài 64Kbyte • Không gian nhớ dữ liệu ngoài 64Kbyte • Bộ xử lý bit • 210 vị trí nhớ được đánh địa chỉ, mỗi vị trí 1 bit
External interrupts On-chip ROM for program code Timer/Counter Interrupt Control Timer 1 On-chip RAM Counter Inputs Timer 0 CPU Serial Port Bus Control 4 I/O Ports OSC P0 P1 P2 P3 TxD RxD Address/Data Sơ đồ khối tổng quát của chip 89C51
Các cổng vào ra của VĐK 89C51 • Port 0 (các chân từ 32-39): làm nhiệm vụ xuất/nhập hoặc làm bus địa chỉ và bus dữ liệu đa hợp (byte thấp của bus địa chỉ). • Port 1 (các chân từ 1-8): làm nhiệm vụ xuất/nhập để giao tiếp với thiết bị ngoài. • Port 2 (các chân từ 21-28): làm nhiệm vụ xuất/nhập hoặc làm byte địa chỉ cao của bus địa chỉ 16-bit. • Port 3 (các chân từ 10 đến 17): Nếu không làm chức năng xuất nhập thì mỗi chân của port 3 có những chức năng riêng khác nhau
Chân cho phép bộ nhớ chương trình PSEN • Cho phép truy xuất bộ nhớ chương trình ngoài. • Chân này thường được nối với chân cho phép xuất OE của EPROM (hoặc ROM) để cho phép đọc các byte lệnh. • Có mức tích cực thấp. • Khi thực hiện chương trình ở RAM nội, chân này được duy trì ở mức logic 1.
Chân cho phép chốt địa chỉ ALE • Xuất tín hiệu cho phép chốt địa chỉ để giải đa hợp bus dữ liệu và bus địa chỉ. • Khi port 0 được dùng làm bus địa chỉ/ dữ liệu đa hợp, chân ALE xuất tín hiệu để chốt địa chỉ và một thanh ghi ngoài trong suốt ½ chu kì đầu của chu kì bộ nhớ. Sau đó, các chân của port 0 sẽ xuất nhập dữ liệu hợp lệ trong ½ chu kì tiếp theo. • ALE có f=1/6 fclock.
Chân truy xuất ngoài EA • Nếu ở mức logic “1” thì VĐK thực thi chương trình trong ROM nội. • Nếu ở mức logic “0” thì VĐK thực thi chương trình ở trên bộ nhớ ngoài.
Các chân khác • Chân Vcc (chân 40) nối với nguồn +5V • Chân GND (chân 20) nối với đất • Chân RESET (chân 9) dùng để thiết lập lại trạng thái ban đầu cho hệ thống. • Khi được treo ở logic 1 trong thời gian tối thiểu 2 chu kì máy, các thanh ghi bên trong 89C51 được nạp lại các giá trị thích hợp cho việc khởi động lại hệ thống • Chân XTAL1 và XTAL2 (chân 18-19) nối với thạch anh cung cấp dao động ngoại cho VĐK, hoặc là nhận dao động từ nguồn xung clock TTL.
89C51 89C51 Dao động TTL XTAL1 XTAL1 XTAL2 XTAL2 Mạch dao động Ghép với mạch dao động TTL ngoài Ghép với mạch dao động thạch anh
Tổ chức bộ nhớ • Bộ nhớ nội của chip 89c51 bao gồm ROM và RAM • RAM trên chip bao gồm: • Vùng RAM đa chức năng • Vùng RAM định địa chỉ bit • Các dãy thanh ghi • Các thanh ghi chức năng đặc biệt • Hai đặc tính cần chú ý: • Các thanh ghi và các port xuất/nhập được định địa chỉ theo kiểu ánh xạ bộ nhớ và được truy xuất như một vị trí trong bộ nhớ. • Vùng Stack thường trú trong RAM nội thay vì ở trong RAM ngoài như đối với vi xử lí
7Fh Vùng RAM đa mục đích 30h 2Fh Vùng RAM định địa chỉ bit 20h 1Fh Bank 3 18h 17h Bank 2 10h 0Fh Bank 1 08h 07h R0 –R7 00h Sơ đồ địa chỉ RAM nội
Vùng RAM đa mục đích • Gồm 80 byte từ địa chỉ 30h đến 7Fh • Vùng RAM từ địa chỉ 00h đến 2Fh: vùng có thể định địa chỉ đến từng bit. • Việc truy xuất một vị trí nhớ được thực hiện bằng cách sử dụng kiểu định địa chỉ trực tiếp hoặc gián tiếp. • Ví dụ: đọc nội dung tại địa chỉ 5Fh của RAM nội vào thanh ghi A • Định địa chỉ trực tiếp: MOV A,5Fh • Định địa chỉ gián tiếp: MOV R0, #5FH MOV A,@R0
Vùng RAM định địa chỉ bit • 89C51 chứa 210 vị trí bit được định địa chỉ trực tiếp: • 128 bit được chứa trong các byte từ 20h đến 2Fh. • Phần còn lại nằm trong các thanh ghi đặc biệt (trong khoảng địa chỉ từ 80h đến FFh). • Việc định địa chỉ đến từng bit cho phép các bit có thể được đặt và xóa...bằng một lệnh. • Các port của 89C51 cũng được định địa chỉ bit • Ví dụ: để set bit 67h ta dùng lệnh: SETB 67h • Nếu không được định địa chỉ bit (với vi xử lí) thì ta phải dùng lệnh MOV A,2Ch OR A,#10000000b MOV 2Ch,A
Các dãy thanh ghi • Chứa trong 32 vị trí thấp nhất của RAM, gồm 4 dãy thanh ghi. Mỗi dãy gồm 8 thanh ghi từ R0 đến R7. • Lệnh sử dụng các thanh ghi trong dãy là lệnh ngắn và thực hiện nhanh hơn so với kiểu định địa chỉ trực tiếp. • Ví dụ: lệnh đọc nội dung tại địa chỉ 05h vào thanh chứa A MOV A,R5 ;lệnh 1 byte hoặc: MOV A,05h ;lệnh 2 byte
Các dãy thanh ghi • Dãy thanh ghi đang hoạt động được gọi là dãy thanh ghi tích cực và có thể thay đổi bằng cách thay đổi các bit chọn dãy trong thanh ghi từ trạng thái chương trình PSW. Dãy thanh ghi mặc định sau khi reset hệ thống là dãy 0. • Ví dụ: giả sử dãy 3 đang tích cực, lệnh ghi nội dung của thanh chứa A vào vị trí 18h là MOV R0,A
Các thanh ghi chức năng đặc biệt (SFR) • VĐK 89C51 có 21 thanh ghi đặc biệt SFR chiếm phần trên của RAM nội từ địa chỉ 80h đến FFh (Chú ý: không phải tất cả các địa chỉ đều được định nghĩa).
Thanh ghi B • Địa chỉ: F0h – F7h • Thanh ghi B có địa chỉ F0h được dùng chung với thanh ghi A trong các phép toán nhân, chia. • Lệnh MUL AB: nhân hai số 8 bit không dấu chứa trong A và B. Kết quả 16 bit được chứa trong cặp thanh ghi B:A (thanh ghi A chứa byte thấp, thanh ghi B chứa byte cao). • Lệnh DIV AB:chia A bởi B, thương số cất trong thanh chứa A và dư số cất trong thanh ghi B.
Con trỏ Stack • Con trỏ Stack (Stack pointer – SP) là 1 thanh ghi 8 bit ở địa chỉ 81h. SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của Stack. • Nếu ta không khởi động SP, nội dung mặc định của thanh ghi này là 07h.
Con trỏ dữ liệu DPTR • Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương ngoài hoặc bộ nhớ dữ liệu ngoài. • DPTR là 1 thanh ghi 16 bit có địa chỉ là 82h (DPL, byte thấp) và 83h (DPH, byte cao). • Ví dụ: ghi giá trị 55h vào địa chỉ 1000h ở RAM ngoài MOV A,#55h MOV DPTR,#1000h MOV @DPTR,A
Các thanh ghi cổng • Các port xuất nhập của 89C51 bao gồm: port 0 (địa chỉ 80h), port 1 (địa chỉ 90h), port 2 (địa chỉ A0h), port 3 (địa chỉ B0h). • Các port 0, 2, 3 không được dùng để xuất/nhập nếu ta sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt của 89C51. • Các port đều được định địa chỉ từng bit.
Các thanh ghi định thời • 89C51 có 2 bộ định thời/đếm 16 bit: • Bộ định thời 0 có địa chỉ 8Ah (TL0 – byte thấp) và 8Ch (TH0 – byte cao). • Bộ định thời 1 có địa chỉ 8Bh (TL1 – byte thấp) và 8Dh (TH1 – byte cao). • Hoạt động của bộ định thời được thiết lập bởi: • Thanh ghi chế độ định thời TMOD (time mode register) ở địa chỉ 89h. • Thanh ghi điều khiển định thời TCON (time control register) ở địa chỉ 88h.
Các thanh ghi của cổng nối tiếp • Thanh ghi đệm dữ liệu nối tiếp SBUF (serial data buffer): • Có địa chỉ 99H. • Nơi lưu dữ liệu truyền đi và dữ liệu nhận về • Thanh ghi điều khiển port nối tiếp SCON (serial port control register) ở địa chỉ 98H.
Các thanh ghi ngắt • 89C51 có một cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân ngắt. • Ngắt bị vô hiệu hóa khi reset hệ thống và sau đó được cho phép bằng cách ghi vào thanh ghi cho phép ngắt IE (interrupt enable register - A8h). • Mức ưu tiên ngắt được thiết lập thông qua thanh ghi ưu tiên ngắt IP (interupt priority register - B8h).
Bộ nhớ ngoài • Cấu trúc của MCS-51 cho phép mở rộng không gian bộ nhớ và không gian dữ liệu lên đến 64 Kbyte. • Khi sử dụng bộ nhớ ngoài, port 0 trở thành bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) đa hợp. Port 2 thường được dùng làm byte cao của bus địa chỉ.
Chu kì máy AD0-AD7 Địa chỉ Dữ liệu A8-A15 Địa chỉ Chu kì máy A0-A15 Địa chỉ D0-D7 Dữ liệu Đa hợp (Multiplex) Không đa hợp Đa hợp và không đa hợp
2. 74373 latches the address and send to ROM 1. Send address to ROM PSEN OE ALE 74LS373 OC G P0.0 P0.7 A0 A7 D Address D0 D7 EA P2.0 P2.7 A8 A15 89C51 ROM Đọc ROM (1)
2. 74373 latches the address and send to ROM PSEN OE ALE 74LS373 OC G P0.0 P0.7 A0 A7 D Address D0 D7 EA 3. ROM send the instruction back P2.0 P2.7 A8 A15 89C51 ROM Đọc ROM (2)
ALE 74LS373 G P0.0 P0.7 A0 A7 D Address D0 D7 EA P2.0 P2.1 A8 A9 RS OE CS WR W 89C51 RAM Đọc RAM