ĐỀ CƯƠNG BÀI GIẢNG VI XỬ LÝ – VI ĐIỀU KHIỂN (TÀI LIỆU DÙNG CHO SINH VIÊN ĐẠI HỌC CÔNG NGHỆ KỸ THUẬT ĐIỆN – ĐIỆN TỬ) Mã số môn học: DI2315 Số tín chỉ: 03 Lý thuyết: 36 tiết Bài tập, thảo luận: 07 tiết Thí nghiệm: 02 tiết CHƯƠNG Tổng quan vi xử lý – vi điều khiển Số tiết: 04 (Lý thuyết: 03 tiết; tập, thảo luận: 01 tiết) A) MỤC TIÊU: Sau học xong chương sinh viên biết lịch sử đời hệ vi xử lý - vi điều khiển; hiểu được các khái niệm, cấu tạo nguyên lý hoạt động hệ vi xử lý - vi điều khiển; hiểu được cách biểu diễn số và ký tự và phương pháp chuyển đổi giữa các hệ số hệ vi xử lý – vi điều khiển Vận dụng tính toán các phép toán hệ đếm nhị phân B) NỘI DUNG: 1.1 Giới thiệu chung vi xử lý – vi điều khiển 1.1.1 Tổng quan Vi xử lý là một vi mạch cỡ lớn hoặc cực lớn với chức chính là: xử lý dữ liệu Để làm được điều này vi xử lý phải có các mạch logic cho việc xử lý và điều khiển dữ liệu Các mạch logic xử lý sẽ di chuyển dữ liệu từ nơi này sang nơi khác và thực hiện các phép toán dữ liệu, mạch logic điều khiển sẽ quyết định mạch điện nào cho việc xử lý dữ liệu Vi xử lý thực hiện một lệnh với trình tự sau: đón lệnh từ bộ nhớ, tiếp theo mạch logic điều khiển sẽ giải mã lệnh để xem lệnh đó yêu cầu vi xử lý thực hiện công việc gì, sau đó vi xử lý sẽ thực hiện đúng công việc của lệnh đã yêu cầu, quá trình này được gọi là chu kỳ đón và thực hiện lệnh Ngoài chức đón và thực hiện lệnh, các mạch logic điều khiển còn điều khiển các mạch điện giao tiếp bên ngoài kết nối với vi xử lý Vi xử lý cần phải có sự trợ giúp của mạch điện bên ngoài Các mạch điện dùng để lưu trữ lệnh để xử lý được gọi là bộ nhớ, các mạch điện giao tiếp để di chuyển dữ liệu từ bên ngoài vào bên vi xử lý và xuất dữ liệu từ bên vi xử lý bên ngoài được gọi là các thiết bị ghép nối vào I/O Vi điều khiển máy tính tích hợp chíp, thường sử dụng để điều khiển thiết bị điện tử Vi điều khiển, thực chất, hệ thống bao gồm vi xử lý có hiệu suất đủ dùng giá thành thấp (khác với vi xử lý đa dùng máy tính) kết hợp với khối ngoại vi nhớ, mô đun vào/ra, mô đun biến đổi số sang tương tự tương tự sang số Vi điều khiển thường dùng để xây dựng hệ thống nhúng Hầu hết vi điều khiển ngày xây dựng dựa kiến trúc Harvard Data memory CPU 14 Program memory Hình 1.1 Kiến trúc Harvard 1.1.2 Lịch sử phát triển xử lý - Thế hệ (1971 - 1973): vi xử lý bit, đại diện 4004, 4040, 8080 (Intel) hay IPM-16 (National Semiconductor): + Độ dài word thường bit (có thể lớn hơn) + Chế tạo cơng nghệ PMOS với mật độ phần tử nhỏ, tốc độ thấp, dòng tải thấp giá thành rẻ + Tốc độ 10 - 60 µs / lệnh với tần số xung nhịp 0.1 ÷ 0.8 MHz + Tập lệnh đơn giản phải cần nhiều vi mạch phụ trợ - Thế hệ (1974 - 1977): vi xử lý bit, đại diện 8080, 8085 (Intel) hay Z80 (Zilog): + Tập lệnh phong phú + Địa đến 64 KB Một số vi xử lý phân biệt 256 địa cho thiết bị ngoại vi + Sử dụng công nghệ NMOS hay CMOS + Tốc độ1 - µs / lệnh với tần số xung nhịp ÷ MHz - Thế hệ (1978 - 1982): vi xử lý 16 bit, đại diện 68000/68010 (Motorola) hay 8086/80286/80386 (Intel): + Tập lệnh đa dạng với lệnh nhân, chia xử lý chuỗi + Địa nhớ từ - 16 MB phân biệt tới 64KB địa cho ngoại vi + Sử dụng công nghệ HMOS + Tốc độ 0.1 - µs / lệnh với tần số xung nhịp ÷ 10 MHz - Thế hệ 4: vi xử lý 32 bit 68020/68030/68040/68060 (Motorola) hay 80386/80486 (Intel) vi xử lý 32 bit Pentium (Intel): + Bus địa 32 bit, phân biệt GB nhớ + Có thể dùng thêm đồng xử lý (coprocessor) + Có khả làm việc với nhớ ảo + Có chế pipeline, nhớ cache + Sử dụng công nghệ HCMOS - Thế hệ 5: vi xử lý 64 bit 1.1.3 Vi xử lý vi điều khiển Vi xử lý là thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng các công nghệ vi điện tử, công nghệ tích hợp và khả xử lý theo chương trình vào các lĩnh vực khác Vào những giai đoạn đầu quá trình phát triển của công nghệ vi xử lý, các chíp (hay các vi xử lý) được chế tạo chỉ tích hợp những phần cứng thiết yếu CPU cùng các mạch giao tiếp giữa CPU và các phần cứng khác Trong giai đoạn này, các phần cứng khác (kể cả bộ nhớ) thường không được tích hợp chip mà phải ghép nối thêm bên ngoài Các phần cứng này được gọi là các thiết bị ngoại vi Sau này, nhờ sự phát triển vượt bậc của công nghệ tích hợp, các ngoại vi cũng được tích hợp vào bên IC và người ta gọi các vi xử lý đã được tích hợp thêm các ngoại vi là các vi điều khiển Việc tích hợp thêm các ngoại vi vào cùng một IC với CPU tạo nhiều lợi ích làm giảm thiểu các ghép nối bên ngoài, giảm thiểu số lượng linh kiện điện tử, giảm chi phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất và tính linh hoạt Khái niệm “vi xử lý” và “vi điều khiển” thực sự không cần phải phân biệt rõ ràng Thuật ngữ “vi xử lý” được dùng đề cấp đến các khái niệm bản của kỹ thuật vi xử lý nói chung và sẽ dùng thuật ngữ “vi điều khiển” sâu nghiên cứu một họ chip cụ thể 1.2 Cấu trúc chung hệ vi xử lý 1.2.1 Khối xử lý trung tâm (CPU) Khối xử lý trung tâm đóng vai trò chủ đạo hệ thống vi xử lý, là một mạch vi điện tử có độ tích hợp rất cao Khi hoạt động nó đọc ghi mã lệnh dưới dạng các bit và bit từ bộ nhớ Sau đó sẽ giải mã các lệnh này thành các dãy xung điều khiển ứng với các thao tác lệnh để điều khiển các khối khác thực hiện từng bước các thao tác đó Để làm được điều này bên CPU có các ghi dùng để chứa địa chỉ của các lệnh sắp thực hiện gọi là ghi trỏ lệnh (Instruction Pointer, IP) hoặc ghi bộ đếm chương trình (Program Counter, PC), một số ghi đa khác cùng bộ tính toán số học và logic (ALU) để thao tác với dữ liệu Ngoài ở còn có hệ thống mạch điện tử rất phức tạp để giải mã lệnh và từ đó tạo các xung điều khiển cho toàn hệ 1.2.2 Bộ nhớ (Memory) Bộ nhớ là một bộ phận rất quan trọng của hệ vi xử lý Tại (trong ROM) chứa chương trình điều khiển hoạt động của toàn hệ để cấp nguồn thì CPU có thể lấy lệnh từ mà khởi động hệ thống Một phần của chương trình điều khiển hệ thống, các chương trình ứng dụng, dữ liệu cùng các kết quả của chương trình được để RAM Các dữ liệu và chương trình muốn lưu trữ lâu dài sẽ được để ở bộ nhớ ngoài 1.2.3 Khối ghép nối vào / (I/O) Khối ghép nối vào / (I/O) tạo khả giao tiếp giữa hệ vi xử lý với thế giới bên ngoài Các thiết bị ngoại vi bàn phím, chuột, màn hình, máy in, chuyển đổi số – tương tự (D/A), chuyển đổi tương tự – số (A/D) đều được liên hệ với vi xử lý thông qua bộ phận này Bộ phận ghép nối cụ thể giữa bus hệ thống với thế giới bên ngoài thường được gọi là cổng Như vậy ta sẽ có cổng vào để lấy thông tin từ ngoài vào và cổng để đưa thông tin từ hệ ngoài Tùy theo yêu cầu cụ thể mà các mạch cổng này có thể được xây dựng từ các mạch logic đơn giản hoặc từ các vi mạch chuyên dụng lập trình được 1.2.4 Hệ thống bus - Bus địa chỉ – address bus: + Bus địa chỉ là các đường tín hiệu song song một chiều nối từ CPU đến bộ nhớ + Độ rộng bus: là số các đường tín hiệu, có thể là 8,18, 20, 24, 32, 64 + CPU gửi giá trị địa chỉ của ô nhớ cần truy nhập (đọc/ghi) các đường tín hiệu này + Một CPU với n đường địa chỉ sẽ có thể địa chỉ hóa được 2n ô nhớ - Bus dữ liệu – data bus + Độ rộng bus: 4, 8, 16, 32 + Bus dữ liệu là các đường tín hiệu song song hai chiều, nhiều thiết bị khác có thể được nối với bus dữ liệu, tại một thời điểm chỉ có một thiết bị nhất có thể được phép đưa dữ liệu lên bus dữ liệu + Bất kỳ thiết bị nào được kết nối đến bus dữ liệu phải có đầu ở dạng ba trạng thái, cho nó có thể ở trạng thái treo (trở kháng cao) nếu không được sử dụng - Bus điều khiển (Control bus): thường gồm hàng chục đường tín hiệu khác Mỗi tín hiệu điều khiển có một chiều nhất định Vì hoạt động CPU đưa tín hiệu điều khiển tới các khối khác hệ, đồng thời nó cũng nhận các tín hiệu điều khiển từ các khối đó để phối hợp hoạt động của toàn hệ CPU gửi tín hiệu bus điều khiển để cho phép các đầu của ô nhớ hay các cổng I/O đã được địa chỉ hóa Các tín hiệu điều khiển thường là: đọc/ghi bộ nhớ, đọc/ghi cổng vào 1.3 Định dạng liệu biểu diễn thông tin hệ vi xử lý – vi điều khiển 1.3.1 Các hệ đếm a Hệ số mười (Decimal – thập phân) Hệ số mười (Decimal number system, viết tắt là hệ D) dùng để biểu diển các giá trị số Hệ số mười dùng tổ hợp các chữ số từ đến để biểu diễn các giá trị số Đi kèm theo tập hợp đó có thể dùng thêm hậu tố D ở cuối để chỉ rằng đó là số hệ mười b Hệ số hai (Binary – nhị phân) Hệ số hai chỉ dùng các chữ số và để biểu diễn các giá trị số Đặc điểm của hệ đếm số hai là cùng một số có hai chữ số giống thì chữ số bến trái có giá trị gấp lần chữ số bên phải Một số nhị phân thường được gọi là bit Một chuỗi gồm bit nhị phân gọi là nibble Một chuỗi bít gọi là byte Chuỗi 16 bit gọi là word, chuỗi 32 bit gọi là double word Chữ số đầu tiên bên trái dãy các số hệ hai gọi là bit có ý nghĩa lớn nhất hay bit có trọng số lớn nhất (Most Signficant Bit – MSB), còn bit cuối cùng bên phải dãy gọi là bit có nghĩa bé nhất hay bit có trọng số nhỏ nhất (Least Significant Bit – LSB) c Hệ số 16 (Hexa decimal – thập lục phân) Nếu dùng hệ số hai đê biểu diễn các số có giá trị lớn ta sẽ gặp điều bất tiện là số hệ hai thu được quá dài Trong thực tế để viết kết quả biểu diễn của các số cho gọn người ta tìm cách nhóm số hệ hai thành một số hệ 16 và sử dụng 16 chữ số bản: ÷ 9, A, B, C, D, E, F để biểu diễn Đặc điểm của hệ số 16 là một chữ số ở số 16 có hai chữ số giống thì chữ số bên trái có giá trị gấp 16 lần chữ số bên phải Ví dụ: (11001010)2 = 27 + 26 + 23 + = 128 + 64 + + = 202 d Hệ mười mã hóa bằng hệ hai (hệ BCD) Giữa hệ mười và hệ hai tồn tại một hệ lại: hệ BCD cho các số hệ mười mã hóa bằng hệ hai, rất thích hợp cho thiết bị đo có thêm phần hiển thị số ở đầu dùng các loại đèn hiện số khác Hệ BCD dùng số hệ hai để mã hóa một số hệ mười có giá trị nằm khoảng từ ÷ Ví dụ: số 520 nếu biểu diễn theo kiểu số BCD thì được (0101 0010 0000) BCD 1.3.2 Biểu diễn số ký tự a Biểu diễn số nguyên - Biểu diễn số nguyên không dấu: Nếu một chuỗi n bit của các số nhị phân a n-1an-2 a1a0 sẽ được n −1 i tính một số nguyên A không dấu, mà giá trị của nó là: A = ∑ a i i =0 - Biểu diễn dấu – độ lớn (hay độ lớn có dấu): Để biểu diễn các số có dấu thì bit MSB từ được dùng làm bit dấu Nếu bít MSB là thì số biểu diễn là số dương và nếu bằng thì là số âm Trong một từ n bit thì n-1 bit cuối cùng giữ giá trị số nguyên công thức tổng quát có thể được n −2 biểu diễn sau: A = ∑ 2i a i nếu an-1 = i =0 n −2 A = −∑ 2i a i nếu an-1 = i =0 - Biểu diễn số bù hai: Công thức tổng quát để biểu diễn một số bù hai sau: n −2 A = −2n −1 a n −1 + ∑ 2i a i i =0 n −1 Trong trường hợp các số nguyên dương thì an-1 = biểu thức −2 a n −1 = Do vậy biểu thức được biểu diễn số bù hai cho cả số âm và số dương b Biểu diễn số thực Số thực A hệ nhị phân được biểu diễn sau: A = D1D2D3 Dn,d1d2d3 dn = D, d Trong đó: D = D1D2D3 Dn là phần nguyên d = d1d2d3 dn là phần thập phân Việc biểu diễn A dưới dạng nhị phân được thực hiện làm bước Đầu tiên đổi phần nguyên dạng nhị phân theo kiểu thông thường, sau đó đổi tiếp phần thập phân c Biểu diễn ký tự theo mã ASCII Trong bảng mã ASCII tiêu chuẩn người ta dùng bít để mã hóa các ký tự thông dụng, vậy bảng mã này sẽ có 128 ký tự ứng dụng với các mã số từ đến 127 Bên cạnh mã ASCII tiêu chẩn người ta còn sử dụng mã ASCII mở rộng với các ký tự đặc biệt Hình 1.2 Bảng mã ASCII 1.3.3 Các phép toán số học hệ đếm nhị phân a Phép cộng: Quy tắc phép cộng với số hệ hai được cho bảng sau: A B Y=A+B C 0 0 1 1 1 b Phép trừ: Quy tắc phép trừ với số hệ hai được cho bảng sau: a b Y=a-b B 0 0 1 1 1 0 c Phép nhân Quy tắc phép nhân với số hệ hai được cho bảng sau: A B Y=A.B 0 0 1 0 1 d Phép chia Vi xử lý gồm các phần tử để thực hiện phép cộng và dịch vì vậy ta sẽ đưa qui tắc thực hiện phép chia bằng cách áp dụng phương pháp cộng và dịch: - Bước 1: Đổi số chia số bù hai - Bước 2: Lấy số bị chia cộng với số bù hai của số chia Nếu kết quả có bít dấu bằng thì bit tương ứng của thương bằng Nếu kết quả này có bít dấu bằng thì bit tương ứng của thương bằng và ta buộc phải khôi phục lại giá trị ban đầu của số bị chia bằng cách cộng kết quả này với số chia ở mã hệ hai - Bước 3: Dịch trái kết quả thu được ở và làm lại bước cho đến nhận được kết quả cuối cùng là (chia hết) hoặc nhỏ số chia (chia còn dư) C) TÀI LIỆU HỌC TẬP Văn Thế Minh (1997), Kỹ thuật vi xử lí, NXB Giáo dục, Hà Nội Đỗ Xuân Tiến (2006), Kỹ Thuật vi xử lý & lập trình Assembly cho hệ vi xử lý, NXB Khoa học kỹ thuật D) CÂU HỎI, BÀI TẬP, NỘI DUNG ÔN TẬP VÀ THẢO LUẬN CỦA CHƯƠNG Thế nào là một hệ vi xử lý? Chức của từng khối hệ vi xử lý? Nếu một hệ vi xử lý không có bộ nhớ ROM, RAM thì có hoạt động được không? Tại sao? Nếu một hệ vi xử lý không có khối ghép nối vào I/O thì có thể hoạt động được không? Tại sao? Có mấy phương pháp biểu diễn số nguyên? Ưu nhược điểm của từng phương pháp? Thực hiện các phép tính sau: 01001101b + 00110010b = ?; 10111100b – 01011111b = ? Cho biết kết quả của phép tính ở hệ số 10 nói là: + Số nguyên không dấu + Số nguyên có dấu biểu diễn theo kiểu dấu – độ lớn + Số nguyên có dấu biểu diễn theo kiểu mã bù hai Để mã hóa một số -125 hệ vi xử lý có thể thực hiện theo những phương pháp nào? Mã của số cho từng phương pháp? Chủ đề thảo luận: Thảo luận về cách chuyển đổi giữa các hệ số và các phép toán hệ đếm nhị phân CHƯƠNG Họ vi xử lý Intel 80x86 Số tiết: 16 (Lý thuyết: 14 tiết; tập, thảo luận: tiết) A) MỤC TIÊU: Sau học xong chương sinh viên biết về lịch sử đời và các thông số kỹ thuật của vi xử lý 8086; hiểu cấu trúc phần cứng và tập lệnh của vi xử lý 8086; hiểu được cấu trúc của chương trình hợp ngữ và nắm được các bước lập trình cho vi xử lý 8086; phân tích được biểu đồ thời gian ghi/ đọc của vi xử lý 8086 Vận dụng tập lệnh của vi xử lý 8086 để lập trình cho hệ vi xử lý 80x86 B) NỘI DUNG: 2.1 Cấu trúc phần cứng vi xử lý 8086 2.1.1 Tổng quan Sau đã tìm hiểu về cấu trúc của vi xử lý, chúng ta sẽ sâu tìm hiểu một bộ vi xử lý cụ thể và điển hình là bộ vi xử lý 80x86 của Intel Bộ vi xử lý này được sử dụng nhiều lĩnh vực khác Các chương trình viết cho 80x86 vẫn có thể chạy được các hệ tiên tiến sau này Các họ vi xử lý của các hãng có khác xét cho cùng cũng có khá nhiều điểm chủ yếu rất giống Do đó đã nắm được các vấn đề kỹ thuật của 8086, ta sẽ có sở để nắm bắt được các kỹ thuật của các bộ vi xử lý khác cùng họ Intel hoặc của các họ khác Các thông số của 8086: + Năm sản xuất: 6/1978 + fclkmax = 10 MHz + MIPS (triệu lệnh/s): 0,33 + Số Transistor: 2900 + Bus dữ liệu: 16 bit + Bus địa chỉ: 20 bit + Khả địa chỉ: MB + Độ dài bộ nhớ đếm lệnh: byte + Có thể thao tác với bit, byte, từ, từ khối + Có khả thực hiện phép tính với các số và 16 bit có dấu hoặc không có dấu dạng nhị phân hoặc thập phân, bao gồm cả phép chia và nhân 2.1.2 Cấu trúc bên hoạt động a Các khối chức của CPU Chức bên vi xử lý về mặt logic được chia làm hai khối xử lý Khối thứ nhất là khối giao diện bus (BIU) và khối thứ hai là khối thực hiện lệnh (EU) BIU: Cung cấp các chức liên quan đến việc nhận lệnh và xếp hàng lệnh, lưu trữ các toán hạng và định vị các địa chỉ Khối này cũng cung cấp các chức điều khiển bus sở Trong hầu hết các trường hợp thời gian thực hiện lệnh và lấy lệnh là trùng làm tăng khả hoạt động của vi xử lý thông qua việc cải thiện bus Trong khối thực hiện lệnh làm việc với lệnh hiện thời thì BIU đã có thể bắt đầu việc lấy các lệnh kế tiếp từ bộ nhớ và phần cuối của chúng được đặt một RAM nội bộ tốc độ cao được gọi là hàng đợi Độ dài của hàng đợi này với vi xử lý 8086 là byte Kỹ thuật hàng đợi lệnh cho phép BIU sử dụng bộ nhớ hiệu quả BIU sẽ lấy mã lệnh bộ nhớ rồi đưa vào hàng đợi Theo cách này BIU có thể cung cấp các lệnh một cách liên tục mà không độc chiếm BIU Điều này làm giảm đáng kể thời gian chết bus Hàng đợi lệnh làm việc một bộ đệm lệnh FIFO EU: Nhận các lệnh được lấy trước từ hàng đợi lệnh và cung cấp các toán hạng, các địa chỉ cho BIU để khối này đọc lệnh và dữ liệu Trong đó bản thân EU sẽ giải mã lệnh, thực hiện, rồi chuyển các kết quả tới BIU để lưu trữ Thao tác được thực hiện trước tiên của EU là việc giải mã lệnh Các lệnh chứa hàng đợi lệnh chính là những lệnh cất các ô nhớ liên tiếp và kế tiếp lệnh thực hiện Nếu EU thực hiện một lệnh rồi chuyển điều khiển đến một nơi khác thì BIU sẽ xóa hàng đợi, lấy lệnh từ địa chỉ mới, chuyển cho EU rồi lại bắt đầu lấy tiếp các lệnh để đưa vào hàng đợi Chỉ dẫn lệnh: Lệnh (đã có sẵn): Thực hiện và ghi kết quả Lệnh 2: Chỉ thực hiện lệnh Lệnh 3: Đọc toán hạng và thực hiện Khối EU được tạo thành từ các ghi chung của vi xử lý 8086 Tất cả các ghi và các đường truyền của dữ liệu nội bộ đều có độ rộng 16 bit Ở không có sự giao tiếp trực tiếp giữa EU và môi trường bên ngoài mà nó nhận các lệnh từ hàng đợi được BIU cung cấp Khi một lệnh yêu cầu truy nhập tới bộ nhớ hoặc I/O, khối EU sẽ lệnh cho khối BIU truyền/ nhận dữ liệu Tất cả các dữ liệu được EU điều khiển đều là địa chỉ 16 bit Nhưng thông qua việc di chuyển vị trí bộ nhớ được BIU thực hiện, khối EU có thể truy cập tới toàn bộ bộ nhớ 1MB ALU: Đây là một tập của EU, thực tế nó giống một phần có cấu trúc độc lập, chịu trách nhiệm thực hiện các thao tác số học và các thao tác logic Các toán hạng có thể là dữ liệu tức thì, dữ liệu từ các ghi hoặc dữ liệu được lưu trữ bộ nhớ Trong đó kết quả lại được định vị một ghi hoặc bộ nhớ và cớ trạng thái được cập nhật dựa kết quả của thao tác này b Các ghi của CPU Các ghi có thể được chia làm nhóm: - Các ghi đoạn: CS, DS, SS, ES - Các ghi đa năng: AX, BX, CX, DX - Các ghi trỏ và chỉ số: IP, BP, SP, SI, DI * Các ghi đoạn Khối BIU đưa bus địa chỉ 20 bit địa chỉ Như vậy 8086 có khả phân biệt 20 được = 1048576 = 1M ô nhớ hay 1MB Trong không gian 1MB này bộ nhớ cần được chia thành các vùng khác dành riêng để: + Chứa mã chương trình + Chứa dữ liệu và kết quả trung gian của chương trình Tạo một vùng nhớ đặc biệt gọi là ngăn xếp dùng vào việc quản lý các thông số của bộ vi xử lý gọi chương trình hoặc trở về từ chương trình Trong thực tế vi xử lý 8086 có các ghi 16 bit liên quan đến địa chỉ đầu của các vùng kể và chúng được gọi là các ghi đoạn (Segment register) Đó là các ghi: - CS (Code Segment): Thanh ghi đoạn mã, chứa địa chỉ bắt đầu của đoạn chương trình mang những lệnh thực hiện được và thông thường là một vùng nhớ chứa dữ liệu không thể thay đổi được hoặc là một vùng ROM/EPROM - DS (Data Segment): Thanh ghi đoạn dữ liệu, chứa địa chỉ bắt đầu của đoạn dữ liệu, bao gồm các tham số, các biến, các mảng số liệu - SS (Stack Segment): Thanh ghi đoạn ngăn xếp, chứa địa chỉ bắt đầu của mảng stack Đây là một mảng của RAM, nơi mà dữ liệu tồn tại các ghi được lưu trữ suốt quá trình ngắt - ES (Extra Segment): Thanh ghi đoạn dữ liệu phụ, chứa địa chỉ bắt đầu của vùng nhớ bổ xung Dung lượng lớn nhất của mỗi đoạn nhớ này là 64 Kbyte Việc thay đổi giá trị các ghi đoạn tương ứng có thể dịch chuyển linh hoạt phạm vi không gian 1Mbyte Vì vậy các đoạn này có thể nằm cách thông tin cần lưu trữ chúng đòi hỏi dung lượng đủ 64Kbyte hoặc cũng có thể nằm trùm lên có những đoạn không cần dùng hết dung lượng 64Kbyte Nội dung của ghi đoạn cho phép ta xác định địa chỉ ô nhớ nằm ở đầu đoạn Địa chỉ này gọi là địa chỉ sở, địa chỉ của các ô nhớ khác nằm đoạn được tính bằng cách cộng thêm vào địa chỉ sở một giá trị gọi là địa chỉ lệch hay độ lệch Độ lệch này được xác định bởi một ghi 16 bit khác đóng vai trò ghi lệch Mọi sự trao đổi thông tin hệ thống vi xử lý đều dùng địa chỉ vật lý, còn địa chỉ được tạo bởi ghi đoạn và ghi lệch được gọi là địa chỉ logic: Địa chỉ logic = Thanh ghi đoạn : Thanh ghi lệch Địa chỉ vật lý của ô nhớ được tính theo công thức sau: 20 bit địa chỉ vật lý = Thanh ghi đoạn x 16 + Thanh ghi lệch * Các ghi đa Trong khối EU có ghi đa AX, BX, CX, DX Khi cần chứa dữ liệu bit thì mỗi ghi có thể tách làm ghi bít cao và thấp làm việc độc lập nhau, đó là các ghi AH và AL, BH và BL, CH và CL, DH và DL Mỗi ghi có thể được dùng một cách vạn để chứa các loại dữ liệu khác - AX (Accumulator, ACC): chứa, các kết quả của các thao tác thường được chứa ở đây, nếu kết quả là bit thì ghi AL được gọi là ACC - BX (Base): ghi sở, thường chứa địa chỉ sở của một bảng bộ nhớ - CX (Count): ghi đếm, thường dùng để chứa số lần lặp lại của lệnh lặp LOOP, còn CL thường dùng chứa số lần dịch hoặc quay các lệnh dịch hoặc quay - DX (Data): Thanh ghi dữ liệu DX và AX tham gia vào thao tác của các phép nhân hoặc chia 16 bit, DX còn dùng để chứa địa chỉ của các cổng các lệnh vào/ra dữ liệu trực tiếp (IN/OUT) * Các ghi trỏ và chỉ số 8086 có ghi trỏ và ghi chỉ số 16 bit, các ghi này (trừ IP) đều có thể được dùng các ghi đa năng, ứng dụng chính của mỗi ghi là chúng được ngầm định là ghi lệch cho các đoạn tương ứng - IP (Instruction Pointer): Thanh ghi trỏ lệnh, IP trỏ vào lệnh tiếp theo sẽ được thực hiện nằm đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theo này ứng với CS:IP - BP (Base Pointer): Con trỏ sở, BP trỏ vào một đoạn dữ liệu nằm đoạn ngăn xếp SS Địa chỉ đầy đủ của một phần tử đoạn ngăn xếp ứng với SS:BP - SP (Stack Pointer): Con trỏ ngăn xếp, trỏ vào đỉnh hiện thời của ngăn xếp nằm đoạn ngăn xếp SS Địa chỉ đầy đủ của đỉnh ngăn xếp ứng với SS:SP - SI (Source Index): Chỉ số nguồn, SI chỉ vào dữ liệu đoạn ngăn xếp DS mà địa chỉ đầy đủ tương ứng với DS:SI 10 Giả sử tần số XTAL = 11,0592 MHz Hãy viết chương trình tạo xung có tần số 2KHZ chân P1.5 Chương trình được viết sau: CLR TF0; MOV TMOD, #01H; AGAIN: MOV TL0, #1AH; MOV TH0, #0FFH; SETB TR0; BACK: JNB TF0, BACK CLR P1.5 CLR TF0 SJMP AGAIN 4.2.3 Dùng ngắt của 8051 Khi một ngắt được kích hoạt trình tự thực hiện của bộ vi điều khiển sau: - Kết thúc lệnh hiện tại và lưu địa chỉ của lệnh kế tiếp vào ngăn xếp - Lưu lại trạng thái hiện hành của tất cả các ngắt vào bên - Nhảy đến một vị trí cố định bộ nhớ được gọi là bảng vecto ngắt, nơi lưu trữ địa chỉ của trình phục vụ ngắt - Nhận địa chỉ ISR từ bảng vecto ngắt rổi nhảy tới địa chỉ đó và bắt đầu thực hiện trình phục vụ ngắt cho đến gặp lệnh RETI - Kết thúc trình phục vụ ngắt, bộ vi điều khiển gặp lệnh RETI và trở về nơi nó đã bị ngắt Viết chương trình nhận liên tục dữ liệu bit ở cổng P0 và gửi đến cổng P1 Trong thời gian này cần tạo chân P2.1 một sóng vuông tần số 50 Hz Sử dụng bộ timer để tạo sóng vuông tần số thạch anh của 8051 là fXTAL = 11,0592 Hz Chương trình được viết sau: ORG 0000H LJMP MAIN ; bỏ qua bảng vector ngắt ; - Trình ISR cho timer để tạo xung vuông ORG 000BH ; địa chỉ ngắt timer LJMP ISR_T0 ; nhảy đến ISR ; -Chương trình chính ORG 0030H ; địa chỉ chương trình chính MAIN: MOV TMOD, #01H ; chọn timer chế độ MOV P0, #0FFH ; chọn P0 làm cổng vào MOV TL0, #00H ; đặt TL0 = 00H MOV TH0, #0DCH ; đặt TH0 = DCH MOV IE, #82H ; cho phép ngắt timer SETB TR0 ; khởi động timer BACK: MOV A, P0 ; đọc cổng P0 MOV P1, A ; chuyển cổng P1 SJMP BACK ; tiếp tục đọc ; - Trình ISR của timer chế độ phải được nạp lại ISR_T0: CPL P2.1 ; MOV TL0, #00H ; nạp lại TL0 MOV TH0, #0DCH ; nạp lại TH0 63 RETI ; về chương trình chính END 4.2.4 Sử dụng Led Sơ đồ kết nối vi điều khiển với led hình 4.5 Hình 4.5 Sơ đồ kết nối với led ;*************************************************** ;CHUONG TRINH DIEU KHIEN HIEN THI -> TREN LED DOAN ;*************************************************** ;KET NOI: LED -> PORT2 ;*************************************************** ORG 00H MAIN: MOV P2, #00H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #01H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #02H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #03H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #04H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #05H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #06H ;XUAT HIEN THI LCALL DELAY500MS 64 MOV P2, #07H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #08H ;XUAT HIEN THI LCALL DELAY500MS MOV P2, #09H ;XUAT HIEN THI LCALL DELAY500MS SJMP MAIN ;**************************************************** DELAY500MS: ;CHUONG TRINH CON TAO THOI GIAN TRE 500MS PUSH 00H MOV R0, #100 MOV TMOD, #01H LOOP2: MOV TH0, #0ECH MOV TL0, #78H SETB TR0 JNB TF0, $ CLR TR0 CLR TF0 DJNZ R0, LOOP2 POP 00H RET END 4.2.5 Sử dụng LCD Hình 4.6 Sơ đồ kết nối VĐK với LCD Để gửi một lệnh nào đến LCD, cần đưa chân RS = 0, còn để gửi dữ liệu đặt RS = Sau đó gửi một sườn xung cao xuống thấp đến chân E để cho phép chốt dữ liệu LCD Với phương pháp này chúng ta cần phải lưu ý rằng phải đặt một độ trễ lớn quá trình xuất dữ liệu hoặc lệnh LCD Ghép nối 8051 với LCD hình 4.6 hãy lập trình thực hiện công việc sau: 65 - Ghi lệnh chọn LCD dòng, ma trần 5x7 - Hiển thị màn hình và trỏ - Xóa LCD - Dịch trỏ sang phải - Hiển thị liên tục dòng chữ “KHOA TOAN CONG NGHE” C) TÀI LIỆU HỌC TẬP Nguyễn Tăng Cường, Phan Quốc Thắng (2005), Cấu trúc lập trình họ vi điều khiển 8051, NXB khoa học kỹ thuật, Hà Nội Tống Văn On (2005), Họ vi điều khiển 8051, NXB khoa học kỹ thuật, Hà Nội D) CÂU HỎI, BÀI TẬP, NỘI DUNG ÔN TẬP VÀ THẢO LUẬN CHƯƠNG Hiện thực tế sử dụng các loại vi điều khiển hiện đại nào? Hãy nêu tính của các loại vi điều khiển đó? Vi điều khiển AVR có những chức chủ yếu nào? Ứng dụng của các chức đó Hãy nêu tính của vi điều khiển PIC16F877A? Chức các chân của vi điều khiển PIC16F877A Chủ đề thảo luận: - Chủ đề 1: Lập trình cho VĐK PIC16F877A điều khiển động bước, bàn phím và bộ biến đổi số – tương tự DAC - Chủ đề 2: Lập trình cho VĐK PIC16F877A điều khiển động một chiều - Chủ đề 3: Thảo luận về vi điều khiển AVR PHẦN THỰC HÀNH – THÍ NGHIỆM Bài 1: Lập trình cho AT89C51 kết nới với thế giới thực 1.1 Mục đích thí nghiệm 66 - Thực hành lập trình ứng dụng máy tính, biên dịch chương trình, nạp vào vi điều khiển sử dụng mơ hình thí nghiệm để kiểm chứng - Điều khiển thiết bị ngoại vi port vi điều khiển - Điều khiển việc hiển thị cách sử dụng LED đơn - Viết chương trình tạo thời gian trễ sử dụng ứng dụng điều khiển 1.2 Cơ sở lý thuyết Cơ sở lý thuyết chương 3: Hệ vi điều khiển onchip MCS 8051 1.3 Thí nghiệm a Thí nghiệm điều khiển led * Sơ đồ thí nghiệm +5v +5v R3 10K SW3 SW + C15 Tu hoa CRYSTAL X2 C13 104 10 11 12 13 14 15 16 17 18 19 20 C16 104 U? P1.0/T2 P1.1/T2X P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 RESET P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD EA/VP ALE/P PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 XTAL2 XTAL1 GND +5v 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 R1 10K R2 330 DS1 LED0 8952 Hình * Nội dung thí nghiệm - Khởi động phần mềm lập trình Keil C +Tạo file nhayled.c lưu vào thư mục nhayled + Tạo file AT89C51.h lưu thư mục nháy led, file file định nghĩa cho chân, ghi 89C51 Ta tự tạo file copy file dự án khác sang File file quan trọng, tất project có file khơng ta phải định nghĩa chân chương trình + Add file nhayled vào project nhayled (Như hướng dẫn phần trên) Soạn thảo chương trình: #include void delay_5ms(){ //Chương trình delay int i,j; for(i=0;i