Bài tập phần timer của vi xử lí cps giải năm 2024

BÀI TẬP CHƯƠNG 1VXL

  1. Một hệ vi xử lý[VXL] bao gồm các thành phần chính nào?
  1. Cấu trúc một CPU cơ bản gồm các thành phần nào?
  1. Cho biết chức năng của thanh ghi PC,IR?
  1. Cho biết chức năng của khối ALU?
  1. Cho biết chức năng của bộ nhớ?Thông thường chọn loại bộ nhớ nào chứa mã chương trình,loại bộ nhớ

nào chứa dữ liệu,tại sao?

  1. Cho biết chức năng các loại bus dây kết nối CPU với bên ngoài.
  1. Tại sao các thiết bị ngoài giao tiếp bus dữ liệu với CPU đều phải có ngõ ra 3 trạng thái?
  1. Về mặt kết nối,có bao nhiêu cách ghép hệ VXL với thiết bị ngoại vi?
  1. Mô tả hoạt động một chu kỳ bus.
  1. Khi nói đến PC hiện hành[PCHH] tương ứng nội dung PC như thế nào?
  1. Giả sử tại ô nhớ chương trình 0020H và 0021H lần lượt có nội dung là 05H và 21H là mã lệnh[opcode]

của lệnh AND R16,R5[R16=R16.R5].Nội dung các thanh ghi PC=0020H,R16=7DH,R5=53H.Mô tả chi

tiết hoạt động chu kỳ bus của CPU thực hiện lệnh AND R16,R5.

  1. Phân biệt chu kỳ dao động[CK] và chu kỳ máy[MC]
  1. Họ AVR có 1MC bằng bao nhiêu chu kỳ CK
  1. Liệt kê các bước thực hiện việc lập trình để CPU hiểu và thực hiện đúng theo yêu cầu.
  • 1. BÀ RỊA – VŨNG TÀU Giáo trình nội bộ KỸ THUẬT VI XỬ LÝ ThS. Lưu Hoàng BỘ MÔN ĐIỆN – ĐIỆN TỬ KHOA KỸ THUẬT CÔNG NGHỆ - NÔNG NGHIỆP CÔNG NGHỆ CAO
  • 2. BÀ RỊA - VŨNG TÀU GIÁO TRÌNH NỘI BỘ KỸ THUẬT VI XỬ LÝ ThS. LƯU HOÀNG
  • 3. nay Vi xử lý là một thành phần không thể thiếu trong xã hội hiện đại nói chung và khoa học kỹ thuật nói riêng. Nó đóng vai trò xử lý mọi dữ liệu được số hóa hàng ngày. Là nền tảng của tự động hóa, của công nghệ thông tin. Nó len lỏi trong mọi lĩnh vực từ thiết bị gia dụng hàng ngày cho đến hàng không vũ trụ. Đặc biệt với sự phát triển của IOT và công nghiệp 4.0, vi xử lý càng quan trọng hơn bao giờ hết bởi nói là trái tim của mọi hệ thống. Ở đó vi xử lý đóng vai trò kết nối, phân tích và xử lý mọi dữ liệu với khả năng linh hoạt và tiết kiệm. Thông minh hóa mọi thứ và tạo ra một môi trường sống và làm việc hiện đại hơn. Vì vậy việc nắm bắt về kỹ thuật vi xử lý là nội dung bắt buộc trong các chương trình giáo dục đại học, cao đẳng trong khối ngành kỹ thuật như: điện, điện tử, tự động hóa, cơ điện tử, công nghệ thông tin... Để từ nền tảng này người học có thể phát triển các kiến thức chuyên sâu theo từng lĩnh vực tương ứng. Đây chính là lý do để tác giả biên soạn cuốn giáo trình “Kỹ thuật vi xử lý”. Trong cuốn giáo trình này, tác giả đã từng bước giới thiệu đến người học về vi xử lý, kiến trúc cơ bản cũng như cách thức hoạt động. Phần chính của giáo trình là giới thiệu và ứng dụng họ vi điều khiển 8051. Đây là họ vi điều khiển có cấu trúc đơn giản giúp người học dễ tiếp cận và ứng dụng. Từ đó người học có thể tự nghiên cứu sâu hơn về các dòng vi điều khiển phức tạp và cao cấp hơn như AVR, PIC, ARM, ESP... Với sự phát triển của công nghệ và kỹ thuật hiện nay, vi xử lý – vi điều khiển cũng đã có những bước phát triển đáng kể và cuốn sách này là tiền đề để người học phát triển thêm. Cho dù tác giả đã rất cố gắng nhưng chắc chắn cuốn giáo trình này không tránh khỏi những khiếm khuyết, tác giả mong nhận được sự đóng góp chân thành từ các bạn đọc, quý thầy cô và các bạn sinh viên để có thể trở nên hoàn thiện hơn. Xin chân thành cảm ơn! Tác giả giáo trình nội bộ Thạc sỹ Lưu Hoàng
  • 4. ĐẦU...........................................................................................................1 CHƯƠNG 1. GIỚI THIỆU VI XỬ LÝ...................................................................9 1.1. Khái niệm vi xử lý..........................................................................................9 1.2. Lịch sử phát triển của vi xử lý ......................................................................9 1.3. Phân loại vi xử lý..........................................................................................10 1.3.1. Phân loại theo chức năng ........................................................................10 1.3.2. Phân loại theo cấu trúc ............................................................................10 1.3.3. Phân loại theo tập lệnh ............................................................................11 1.4. Hệ vi xử lý.....................................................................................................12 1.4.1. Sơ đồ tổng quát hệ vi xử lý .....................................................................12 1.4.2. Đơn vị xử lý trung tâm [Central Processing Unit: CPU]........................12 1.4.3. Bộ nhớ [Memory]....................................................................................12 1.4.4. Các thiết bị ngoại vi ................................................................................13 1.4.5. Các BUS giao tiếp...................................................................................13 1.4.6. Hoạt động của hệ vi xử lý .......................................................................14 CHƯƠNG 2. CẤU TRÚC VÀ TẬP LỆNH CỦA VI XỬ LÝ.............................17 2.1. Cấu trúc bên trong của vi xử lý ..................................................................17 2.1.1. Sơ đồ khối của vi xử lý ...........................................................................17 2.1.2. chức năng của các khối ...........................................................................18 2.1.3. Bus dữ liệu bên trong vi xử lý.................................................................20 2.2. Tập lệnh của vi xử lý....................................................................................20 2.2.1. Giới thiệu về tập lệnh của vi xử lý..........................................................20 2.2.2. Từ gợi nhớ [mnemonic] ..........................................................................21 2.2.3. Các kiểu lệnh cơ bản của vi xử lý ...........................................................21 2.2.4. Các kiểu truy xuất địa chỉ của vi xử lý....................................................22 CHƯƠNG 3. VI ĐIỀU KHIỂN .............................................................................24 3.1. Giới thiệu vi điều khiển ...............................................................................24 3.2. Họ Vi điều khiển 8051..................................................................................25 3.3. Tóm tắt phần cứng họ vi điều khiển 8051..................................................26
  • 5. cấu trúc bên trong của VĐK 89C51...........................................27 3.4.1. Sơ đồ cấu trúc bên trong của vi điều khiển.............................................27 3.4.2. Khảo sát sơ đồ chân của 89C51 ..............................................................27 3.5. Cấu trúc bộ nhớ của vi điều khiển .............................................................33 3.5.1. Tổ chức bộ nhớ........................................................................................33 3.5.2. Tổ chức bộ nhớ RAM .............................................................................33 CHƯƠNG 4. KHẢO SÁT TẬP LỆNH CỦA VI ĐIỀU KHIỂN........................41 4.1. Khái niệm về chương trình, tập lệnh và ngôn ngữ gợi nhớ .....................41 4.2. Các kiểu định địa chỉ bộ nhớ ......................................................................41 4.3. Tập lệnh của vi điều khiển ..........................................................................43 4.3.1. Nhóm lệnh di chuyển dữ liệu [Data Transfer Instructions] ....................45 4.3.2. Nhóm lệnh số học [Mathematical Instructions]......................................49 4.3.3. Nhóm lệnh logic [Logic Instructions].....................................................52 4.3.4. Nhóm lệnh rẽ nhánh [Control Transfer Instructions]..............................57 4.3.5. Nhóm lệnh xử lý bit [Bit Oriented Instructions].....................................62 4.4. Chương trình Assembly ..............................................................................64 4.4.1. Các chỉ dẫn trong chương trình...............................................................64 4.4.2. Cấu trúc chương trình Assembly.............................................................66 4.4.3. Các thành phần của lệnh..........................................................................66 4.4.4. Lưu đồ và giải thuật ................................................................................66 CHƯƠNG 5. KHẢO SÁT TIMER/COUNTER CỦA VI ĐIỀU KHIỂN..........73 5.1. Giới thiệu ......................................................................................................73 5.2. Các thanh ghi của timer ..............................................................................73 5.2.1. Thanh ghi chọn chế độ hoạt động của timer [TMOD]............................73 5.2.2. Thanh ghi điều khiển timer [TCON].......................................................74 5.2.3. Thanh ghi bộ đếm timer ..........................................................................74 5.3. Các chế độ hoạt động của timer..................................................................75 5.3.1. Timer hoạt động ở mode 0 ......................................................................75 5.3.2. Timer hoạt động ở mode 1 ......................................................................75 5.3.3. Timer hoạt động ở mode 2 ......................................................................76 5.3.4. Timer hoạt động ở mode 3 ......................................................................77 5.4. Nguồn xung clock cho timer........................................................................77
  • 6. hoạt động của timer..................................................................78 5.6. Các bước sử dụng timer ..............................................................................78 5.7. Bài tập ví dụ..................................................................................................80 CHƯƠNG 6. HOẠT ĐỘNG NGẮT CỦA VI ĐIỀU KHIỂN.............................86 6.1. Giới thiệu ......................................................................................................86 6.2. Các nguồn ngắt.............................................................................................86 6.3. Các thanh ghi trong hoạt động ngắt...........................................................88 6.3.1. Thanh ghi cho phép ngắt: IE [Interrupt Enable] .....................................88 6.3.2. Thanh ghi ưu tiên ngắt: IP [Interrupt Priority]........................................88 6.4. Xử lý ngắt......................................................................................................89 6.5. Bài tập ví dụ..................................................................................................90 CHƯƠNG 7. GIAO TIẾP NỐI TIẾP...................................................................95 7.1. Giới thiệu ......................................................................................................95 7.2. Truyền nối tiếp trên 8051............................................................................95 7.2.1. Thanh ghi đệm SBUF [Serial Buffer] .....................................................96 7.2.2. Thanh ghi điều khiển SCON [Serial Control].........................................96 7.3. Các kiểu truyền dữ liệu nối tiếp..................................................................97 7.3.1. Truyền dữ liệu mode 0 [SM0 = 0, SM1 = 0] ..........................................97 7.3.2. Truyền dữ liệu mode 1 [SM0 = 0, SM1 = 1] ..........................................98 7.3.3. Truyền dữ liệu mode 2 [SM0 = 1, SM1 = 0] ..........................................98 7.3.4. Truyền dữ liệu mode 3 [SM0 = 1, SM1 = 1] ..........................................98 7.4. Tốc độ truyền nối tiếp..................................................................................98 7.4.1. Tốc độ baud cố định................................................................................99 7.4.2. Tốc độ baud thay đổi...............................................................................99 7.5. Truyền và nhận dữ liệu .............................................................................101 7.6. Bài tập ví dụ................................................................................................101 CHƯƠNG 8. LẬP TRÌNH C CHO VI ĐIỀU KHIỂN......................................106 8.1. Một số khái niệm C cho Vi điều khiển.....................................................106 8.1.1. Các kiểu dữ liệu.....................................................................................106 8.1.2. Biểu thức [Expressions] ........................................................................107 8.1.3. Câu lệnh [Statement].............................................................................107 8.1.4. Khối [Blocks] ........................................................................................107
  • 7. [Operators]...............................................................................107 8.1.6. Các cấu trúc điều khiển.........................................................................111 8.1.7. Function [hàm, chương trình con].........................................................114 8.1.8. Tiền xử lý [Preprocessor]......................................................................115 8.1.9. Chú thích [Comments] ..........................................................................115 8.2. Cấu trúc chương trình C cho vi điều khiển.............................................116 8.3. Môi trường lập trình C cho vi điều khiển................................................117 8.3.1. Khởi tạo Project.....................................................................................117 8.3.2. Soạn thảo chương trình .........................................................................119 8.3.3. Biên dịch chương trình..........................................................................120 8.3.4. Chạy mô phỏng và sửa lỗi.....................................................................120 PHỤ LỤC 1: BẢNG TÓM TẮT TẬP LỆNH VI ĐIỀU KHIỂN 8051 ............121 PHỤ LỤC 2: ĐÁP ÁN CÂU HỎI TRẮC NGHIỆM.........................................126 PHỤ LỤC 3: HƯỚNG DẪN CÀI ĐẶT KEIL C ...............................................128 DANH MỤC TÀI LIỆU THAM KHẢO ............................................................131
  • 8. ẢNH Hình 1-1: Vi xử lý Intel 4004 ...................................................................................10 Hình 1-2: Mô hình cấi trúc Von Neuman.................................................................11 Hình 1-3: Mô hình cấu trúc Harvard ........................................................................11 Hình 1-4: Sơ đồ khối hệ vi xử lý ..............................................................................12 Hình 1-5: Các bước thực hiện của chu kỳ lệnh ........................................................14 Hình 2-1: Cấu trúc của vi xử lý 8 bit........................................................................17 Hình 2-2: Đơn vi xử lý số học ALU.........................................................................18 Hình 2-3: Sơ đồ khối điều khiển và giải mã lệnh.....................................................19 Hình 2-4: Cấu trúc của lệnh......................................................................................21 Hình 3-1: Các thành phần chính trong vi điều khiển................................................24 Hình 3-2: Các thành phần có trong vi điều khiển.....................................................25 Hình 3-3: Bảng một số chip thông dụng của Atmel.................................................26 Hình 3-4: Các kiểu đóng gói của chip 8051.............................................................26 Hình 3-5: Sơ đồ khối vi điều khiển 89C51...............................................................27 Hình 3-6: Sơ đồ chân vi điều khiển 89C51 ..............................................................28 Hình 3-7: Sơ đồ cấu tạo Port 0 .................................................................................29 Hình 3-8: Sơ đồ kết nối điện trở pull-up cho port 0 .................................................29 Hình 3-9: Sơ đồ cấu tạo Port 1,2,3 ...........................................................................30 Hình 3-10: Chức năng từng chân của port 3.............................................................30 Hình 3-11: Sơ đồ giao tiếp bộ nhớ chương trình bên ngoài .....................................31 Hình 3-12: Mạch reset ..............................................................................................31 Hình 3-13: Sơ đồ kết nối mạch dao động.................................................................32 Hình 3-14: Minh họa khả năng quản lý bộ nhớ của 89C51 .....................................33 Hình 3-15: Minh họa các phân vùng và địa chỉ trong RAM....................................34 Hình 3-16: Bảng minh họa các bank thanh ghi ........................................................35 Hình 3-17: bảng các bit trong thanh ghi trạnh thái PSW .........................................36 Hình 4-1: Minh họa cách lấy dữ liệu từ bộ nhớ của vi xử lý....................................42 Hình 4-2: Bảng trạng thái các phép logic cơ bản .....................................................52 Hình 4-3: Các ký hiệu trong lưu đồ thuật toán.........................................................67 Hình 5-1: Bảng các thanh ghi của timer...................................................................73 Hình 5-2: Minh họa timer ở mode 0.........................................................................75 Hình 5-3: Minh họa timer ở mode 1.........................................................................76 Hình 5-4: Minh họa timer0 ở mode 2.......................................................................76 Hình 5-5: Minh họa timer 0 ở mode 3......................................................................77 Hình 5-6: Minh họa chọn nguồn xung cho timer .....................................................77 Hình 5-7: Minh họa chọn phương thức điều khiển timer.........................................78 Hình 6-1: Minh họa chương trình khi chạy có ngắt .................................................86 Hình 6-2: Sơ đồ kết nối các nguồn ngắt ...................................................................87 Hình 7-1: Mô hình truyền/nhận dữ liệu nối tiếp của chip 8051 ...............................96
  • 9. đồ kết nối mở rộng ngõ ra...................................................................97 Hình 7-3: Minh họa một khung truyền dữ liệu nối tiếp............................................98 Hình 7-4: Minh họa tốc độ baud cố định mode 0 và mode 2 ...................................99 Hình 7-5: Minh họa tốc độ baud ở mode 1 và mode 3.............................................99 Hình 7-6: Bảng tốc độ baud thông dụng và thông số cài đặt .................................100
  • 10. TỪ VIẾT TẮT VIẾT TẮT DIỄN GIẢI VXL Vi xử lý VĐK Vi điều khiển CT Chương trình ALU Arithmetic Logic Unit I/O Input/Output us Micro second [mili giây] OSC Oscillator Xtal External Crytal
  • 11. THIỆU VI XỬ LÝ Chương này giới thiệu tổng quan về vi xử lý. Các loại vi xử lý cũng như cấu trúc và hoạt động của hệ vi xử lý. Sau khi học xong Chương 1, người học nắm được các kiến thức:  Vi xử lý là gì, lịch sử phát triển của vi xử lý.  Cách phân loại vi xử lý và các loại vi xử lý mà người học tiếp cận.  Hệ vi xử lý là gì, cấu trúc và hoạt động của hệ vi xử lý, các thành phần có trong hệ vi xử lý. 1.1. Khái niệm vi xử lý VXL có chức năng chính là xử lý dữ liệu. Việc xử lý dữ liệu bao gồm tính toán và điều khiển dữ liệu. Việc tính toán được thực hiện bởi các mạch điện logic được đặt trong khối ALU [Arithmetic Logic Unit] gọi là đơn vị xử lý số học. ALU có thể thực hiệc các phép toán về số học như: cộng [add], trừ [subtract], tăng [increment], giảm [decrement]… và các phép toán luận lý như: and, or, xor, so sánh [compare], … Việc điều khiển dữ liệu là di chuyển dữ liệu giữa các thanh ghi, các ô nhớ RAM hoặc với các vùng nhớ khác trong hệ thống. Ngoài ALU, VXL còn có các mạch điện logic khác để điều khiển dữ liệu [Control Logic]. Các mạch điều khiển sẽ di chuyển dữ liệu vào đúng vị trí để khối ALU xử lý. Sau khi thực hiện xong, khối điều khiển sẽ di chuyển dữ liệu đến vị trí mong muốn. Để VXL điều khiển các mạch logic thì cần phải có chương trình. Chương trình là tập hợp các lệnh để xử lý dữ liệu được lưu trữ trong bộ nhớ. Các lệnh này sẽ quyết định công việc mà VXL sẽ làm. Do các lệnh được lưu trữ trong bộ nhớ nên có thể thay đổi các lệnh khi cần. Khi thay đổi các lệnh của VXL tức là thay đổi cách thức xử lý dữ liệu. Ngoài chức năng đón và thực hiện lệnh, các mạch logic điều khiển còn điều khiển giao tiếp với các mạch điện bên ngoài như: bộ nhớ, bàn phím… gọi là các thiết bị I/O hay còn gọi là các thiết bị ngoại vi. 1.2. Lịch sử phát triển của vi xử lý Với sự khám phá ra transistor và phát triển của công nghệ chế tạo vi mạch SSI [Small Scale Integrated], MSI [Medium Scale Integrated], máy tính vẫn còn là một nhóm gồm nhiều IC kết hợp lại với nhau. Cho đến thập niên 70, với sự phát triển của công nghệ LSI [Large Scale Integrated], VLSI [Very Large Scale Integrated], cấu trúc máy tính mới được rút gọn và được chế tạo thành một IC duy nhất được gọi là vi xử lý [Microprocessor].
  • 12. được chế tạo bởi Intel vào năm 1971 tên là Intel-4004 có khả năng xử lý 4 bit. VXL kết hợp với các thiết bị khác tạo ra các máy tính có khả năng tính toán rất lớn như máy vi tính hay các sản phẩm khác như: tổng đài điện thoại, hệ thống điều khiển tự động… 1.3. Phân loại vi xử lý 1.3.1. Phân loại theo chức năng 1.3.1.1. Vi xử lý đa năng [General Purpose Microprocessor] Sử dụng cho các mục đích dân dụng như: máy tính, điện thoại... 1.3.1.2. DSP [Digital Signal Processor] Sử dụng cho các ứng dụng cần xử lý khối lượng dữ liệu lớn với tốc độ cao theo thời gian thực. 1.3.1.3. Vi điều khiển [Microcontroller] Sử dụng cho các ứng dụng nhỏ với chi phí thấp như: điều khiển máy lạnh, đèn giao thông, robot nhỏ... 1.3.1.4. Vi xử lý chuyên dụng [ASIP - Application Specific Integrated Processor] Dùng cho các mục đích chuyên biệt với yêu cầu kỹ thuật cao như trong y tế, quân sự, hàng không… 1.3.2. Phân loại theo cấu trúc 1.3.2.1. Cấu trúc Von Neuman Ở cấu trúc này, bộ nhớ chương trình và dữ liệu dùng chung đường bus. Nghĩa là việc đọc chương trình và lấy dữ liệu phải diễn ra lần lượt. Điều này làm chậm quá trình xử lý dữ liệu nên việc thực thi lệnh kém hiệu quả. Hình 1-1: Vi xử lý Intel 4004
  • 13. Harvard Ở cấu trức này, bộ nhớ chương trình và dữ liệu dùng đường bus giao tiếp riêng nên tốc độ xử lý nhanh hơn. Tăng hiệu quả xử lý dữ liệu. Cấu trúc này thường được dùng cho các chip hiện tại. 1.3.3. Phân loại theo tập lệnh 1.3.3.1. CISC [complex Instruction Set Computer]: máy tính có tập lệnh phức tạp  Nhiều lệnh  Cấu trúc phần cứng phức tạp  Mỗi lệnh: có độ dài khác nhau và thực hiện trong 1 đến chục chu kỳ xung nhịp  Ví dụ: Intel x86, AMD 1.3.3.2. RISC [reduced instruction Set Computer]: máy tính có tập lệnh rút gọn  Ít lệnh  Mỗi lệnh có độ dài cố định và thực hiện trong 1 đến 2 chu kỳ xung nhịp  Cấu trúc vi xử lý đơn giản, có nhiều thanh ghi  Tốc độ xung nhịp lớn và tiêu thụ năng lượng thấp  Ví dụ: 8051, ARM, AVR Program Address Bus Data Bus Memory Data Address Bus Fetch Bus CPU Hình 1-3: Mô hình cấu trúc Harvard Hình 1-2: Mô hình cấi trúc Von Neuman CPU Program & Data Address Bus Data Bus Memory
  • 14. xử lý 1.4.1. Sơ đồ tổng quát hệ vi xử lý Là hệ thống máy tính dùng vi xử lý để xử lý dữ liệu thông qua chương trình điều khiển. Một hệ vi xử lý bao gồm các thành phần cơ bản sau: 1.4.2. Đơn vị xử lý trung tâm [Central Processing Unit: CPU] Đơn vị xử lý trung tâm bao gồm các thành phần cơ bản sau:  Đơn vị số học và logic [Arithmetic Logical Unit]: Thực hiện các phép toán số học [cộng, trừ, nhân chia…] và các phép toán logic [and, or, compare…].  Đơn vị điều khiển [Control Unit]: nhận lệnh từ bộ nhớ và điều khiển các khối khác để thực hiện lệnh.  Các thanh ghi [Registers]: lưu trữ dữ liệu và trạng thái của hệ thống trong quá trình thực hiện lệnh. 1.4.3. Bộ nhớ [Memory] Bộ nhớ trong hệ vi xử lý thường là bộ nhớ bán dẫn. Bộ nhớ bao gồm RAM và ROM. RAM [Random Access Memory]: chứa dữ liệu trong quá trình hoạt động của hệ thống. RAM mất dữ liệu khi mất nguồn.  SRAM [Static RAM]: RAM tĩnh.  DRAM [Dynamic RAM]: RAM động. Cần có quá trình làm tươi [Refresh]. PCI USB VGA COM LPT Data Bus Control Bus Bộ nhớ Memory RAM ROM Intel 80X86 Motorola 680X ... Phối ghép vào/ra Thiết bị vào/ra Màn hình Bàn phím Chuột Ổ cứng CD-ROM Máy in Webcam Address Bus Vi xử lý CPU Hình 1-4: Sơ đồ khối hệ vi xử lý
  • 15. Memory]: chứa chương trình điều khiển hệ thống. ROM không bị mất dữ liệu khi mất nguồn.  MROM [Mask ROM]: ROM lập trình bằng mặt nạ. Dữ liệu được ghi ngay trong quá trình sản xuất chip.  PROM [Programable ROM]: ROM lập trình được 1 lần. Cấu trúc ROM được kết nối qua những cầu chì. Quá trình ghi sẽ đốt cháy một số cầu chì tùy theo dữ liệu tương ứng, dẫn đến không thể khôi phục khi muốn ghi lại dữ liệu khác.  EPROM [Erasable PROM]: ROM có thể xóa bằng tia cực tím và lập trình lại. Trên mỗi chip có cửa sổ để chiếu tia cực tím khi xóa. Thời gian xóa dữ liệu mất khoảng 10 phút hoặc hơn nên khá mất thời gian. EPROM còn gọi là UV-ROM. Loại này không còn được dùng nhiều trong hiện tại.  EEPROM [Electrically EPROM]: ROM có thể xóa bằng điện. Nghĩa là có thể ghi và xóa trực tiếp bằng lệnh và thực hiện trên mạch điện. EEPROM có thể dùng để lưu trữ các thông số cài đặt của hệ thống.  FLASH ROM: ROM ghi xóa nhanh theo từng mảng. Thường được thực hiện thông qua thiết bị ghi xóa chuyên dụng. Hiện nay FLASH ROM thường được tích hợp trong các vi điều khiển để lưu chương trình. 1.4.4. Các thiết bị ngoại vi Là các thiết bị giao tiếp với vi xử lý thông qua các I/O hoặc các chuẩn giao tiếp như: COM, VGA, LPT, USB, PCI… Các ngoại vi input như: bộ nhớ mở rộng, bàn phím, chuột, micro, webcam, scanner… Các ngoại vi output như: màn hình, loa, máy in… 1.4.5. Các BUS giao tiếp Data Bus: Bus dữ liệu  Là Bus hai chiều.  Dùng để truyền tải dữ liệu giữa các khối trong hệ thống.  Độ rộng của Bus dữ liệu tùy thuộc vào vi xử lý.  Độ rộng Bus thường là 8, 16, 32, 64 bit.  Độ rộng Bus càng lớn thì khả năng xử lý dữ liệu càng nhanh. Address Bus: Bus địa chỉ  Là Bus một chiều.  Dùng để định địa chỉ truy xuất bộ nhớ từ VXL.  Số bit địa chỉ thể hiện khả năng quản lý bộ nhớ của VXL.  Với VXL có N bit địa chỉ có thể đánh quản lý được 2N ô nhớ.  Ví dụ VXL 8088/8086 có 20 đường địa chỉ có thể quản lý được: 220 bytes=1Mbytes. Control Bus: Bus điều khiển  Là Bus một chiều nhưng có 2 hướng
  • 16. gởi tín hiệu điều khiển đến các khối trong hệ thống như: read, write, enable…  Từ các khối khác có thể gởi tín hiệu điều khiển đến VXL như tín hiệu ngắt [interrupt]… 1.4.6. Hoạt động của hệ vi xử lý Quá trình xử lý lệnh gồm 3 bước:  Đón lệnh: đọc mã lệnh từ bộ nhớ chương trình vào CPU.  Giải mã lệnh: xác định xem lệnh đó là lệnh gì rồi gởi cho khối điều khiển.  Thực hiện lệnh:  Nếu cần thì đọc thêm thông tin từ bộ nhớ/cổng.  Tính toán và gởi kết quả lên Bus dữ liệu. Sau khi thực hiện xong một lệnh, VXL lại thực hiện chu kỳ lệnh tiếp theo. ĐỌC MÃ LỆNH  GIẢI MÃ LỆNH  THỰC HIỆN LỆNH  1 chu kỳ lệnh CÂU HỎI THẢO LUẬN Câu 1. Vi xử lý đầu tiên có từ năm nào? Hãng nào sản xuất? Câu 2. Phân loại vi xử lý theo chức năng thì có những loại nào? Câu 3. Hệ vi xử lý là gì? Câu 4. Trong hệ vi xử lý gồm những thành phần chính nào? Câu 5. Các bus giao tiếp trong hệ vi xử lý? Câu 6. Cách tính khả năng truy xuất bộ nhớ của VXL thông qua số bit địa chỉ? Câu 7. Bộ nhớ RAM là gì? Có những loại bộ nhớ RAM nào? Câu 8. Bộ nhớ ROM là gì? Có những loại bộ nhớ ROM nào? Câu 9. Chu kỳ lệnh là gì? Một chu kỳ lệnh gồm mấy bước? Câu 10. Vi xử lý đóng vai trò như thế nào trong cuộc sống và sản xuất? Hình 1-5: Các bước thực hiện của chu kỳ lệnh
  • 17. NGHIỆM ÔN TẬP Câu 1. Vi xử lý được sản xuất lần đầu tiên vào năm nào? Do nhà sản xuất nào chế tạo? a. 1971 - Hãng Intel b. 1976 - Hãng Motorola c. 1976 - Hãng Intel d. 1980 - Hãng Zilog Câu 2. ROM là loại bộ nhớ bán dẫn có đặc tính: a. Cho phép đọc dữ liệu từ ROM, không cho phép ghi dữ liệu vào ROM, mất dữ liệu khi mất nguồn điện. b. Cho phép đọc dữ liệu từ ROM, không cho phép ghi dữ liệu vào ROM, không mất dữ liệu khi mất nguồn điện. c. Cho phép đọc dữ liệu từ ROM, cho phép ghi dữ liệu vào ROM, mất dữ liệu khi mất nguồn điện. d. Cho phép đọc dữ liệu từ ROM, cho phép ghi dữ liệu vào ROM, không mất dữ liệu khi mất nguồn điện. Câu 3. RAM là loại bộ nhớ bán dẫn có đặc tính: a. Cho phép đọc dữ liệu từ RAM, không cho phép ghi dữ liệu vào RAM, mất dữ liệu khi mất nguồn điện. b. Cho phép đọc dữ liệu từ RAM, không cho phép ghi dữ liệu vào RAM, không mất dữ liệu khi mất nguồn điện. c. Cho phép đọc dữ liệu từ RAM, cho phép ghi dữ liệu vào RAM, mất dữ liệu khi mất nguồn điện. d. Cho phép đọc dữ liệu từ RAM, cho phép ghi dữ liệu vào RAM, không mất dữ liệu khi mất nguồn điện. Câu 4. Loại bộ nhớ ROM nào cho phép ghi dữ liệu vào và xoá dữ liệu đi bằng tia cực tím? a. PROM b. MROM c. EPROM d. EEPROM Câu 5. Loại bộ nhớ ROM nào cho phép ghi dữ liệu vào và xoá dữ liệu bằng tín hiệu điện: a. PROM b. MROM c. EPROM d. EEPROM Câu 6. Loại bộ nhớ bán dẫn có thể mất dữ liệu ngay khi vẫn còn nguồn điện cung cấp nếu không được làm tươi [refresh]? a. SRAM b. DRAM c. PROM d. MROM Câu 7. Loại bộ nhớ ROM nào có thể ghi dữ liệu vào và xoá dữ liệu: a. PROM b. MROM c. EPROM d. Cả ba câu đều đúng Câu 8. Trong hệ VXL, BUS một chiều là BUS nào? a. Data b. Address
  • 18. Intruction Câu 9. Trong hệ VXL, BUS hai chiều là BUS nào? a. Data b. Address c. Control d. Intruction Câu 10. Trong hệ VXL, BUS điều khiển dùng để làm gì? a. VXL gởi tín hiệu điều khiển đến các khối b. Các ngoại vi gởi tín hiệu ngắt đến VXL c. Cả 2 đều đúng d. Cả 2 đều sai Câu 11. Bộ nhớ bán dẫn 8 bit có mã số 62512 cho biết dung lượng của bộ nhớ này là bao nhiêu? a. 512 KB b. 512 Kbit c. 62512 Kbit d. 62512 KB Câu 12. Một bộ vi xử lý có 20 đường địa chỉ cho biết số lượng ô nhớ mà bộ vi xử lý đó có khả năng truy xuất là bao nhiêu? a. 1024 b. 1024 K c. 1024 M d. 1024 G
  • 19. TRÚC VÀ TẬP LỆNH CỦA VI XỬ LÝ Chương này trình bày cấu trúc cơ bản bên trong của một vi xử lý. Các khái niệm trong vi xử lý, các khối cơ bản, hoạt động và tập lệnh của nó. Sau khi học chương 2, người học nắm được:  Cấu trúc bên trong vi xử lý.  Các khối cơ bản bên trong.  Tập lệnh.  Chu kỳ thực hiện lệnh. 2.1. Cấu trúc bên trong của vi xử lý 2.1.1. Sơ đồ khối của vi xử lý Cấu trúc của VXL đều có các khối cơ bản như ALU [Athmetic Logical Unit], khối điều khiển [Control Logic] và các thanh ghi [Register]. Ngoài ra còn có các đường truyền tải dữ liệu trong và ngoài hệ thống. Mỗi VXL khác nhau sẽ có cấu trúc khác nhau. Cấu trúc của của VXL được cung cấp bởi nhà chế tạo và được trình bày dưới dạng sơ đồ khối. Ví dụ cấu trúc của một VXL 8 bit với 16 bit địa chỉ: Hình 2-1: Cấu trúc của vi xử lý 8 bit
  • 20. của các khối 2.1.2.1. Khối ALU Khối ALU chứa các mạch điện logic chuyên về tính toán dữ liệu. Nó có 2 ngõ vào “IN” chính là các ngõ vào dữ liệu cho ALU xử lý và một ngõ ra “OUT” là ngõ ra kết quả sau khi ALU xử lý xong. Dữ liệu trước khi vào ALU được chứa ở 2 thanh ghi đệm [Temporary Register] là “Temp Reg 1” và “Temp Reg 2” để ALU có thể lấy 2 dữ liệu cùng lúc. Ngõ ra của ALU sau khi xử lý xong sẽ gởi kết quả lên bus dữ liệu. Thông thường kết quả này được gởi đến thanh ghi tích lũy Acc. ALU có thể thực hiện các phép toán như:  Cộng [add], trừ [subtract]  So sánh [compare]  Dịch trái [shift left], dịch phải [shift right], xoay [rotate]  Tăng [increment], giảm [decrement]  Lấy bù [complement], and, or, exor … 2.1.2.2. Khối điều khiển và giải mã lệnh Khối giải mã lệnh [Intruction Decoder] có chức năng nhận lệnh từ thanh ghi lệnh [Intruction Register] sau đó giải mã để gởi tín hiệu đến khối điều khiển logic. Khối điều khiển [Control Logic] có chức năng nhận lệnh từ bộ giải mã lệnh sau đó điều khiển để thực hiện các yêu cầu của lệnh. Việc thực hiện bao gồm lấy dữ liệu, điều khiển ALU và gởi kết quả đến địa chỉ mong muốn. Ngõ vào quan trọng nhất của khối điều khiển logic là tín hiệu xung nhịp [clock]. Nếu không có tín hiệu clock VXL sẽ không làm việc Hình 2-2: Đơn vi xử lý số học ALU
  • 21. ghi của vi xử lý Các thanh ghi bên trong VXL có chức năng lưu trữ tạm thời các dữ liệu khi xử lý. Trong số đó có các thanh ghi dùng thực hiện các chức năng đặc biệt và luôn có trong một VXL bao gồm:  Thanh ghi tích lũy A: Accumulator  Thanh ghi bộ đếm chương trình PC: Program Counter  Thanh ghi con trỏ ngăn xếp SP: Stack Pointer  Thanh ghi trạng thái SR: Status Register  Thanh ghi địa chỉ AR: Address Register  Thanh ghi lệnh IR: Intruction Register Còn lại là các thanh ghi thông dụng. Số lượng các thanh ghi thông dụng thay đổi tùy thuộc vào cấu trúc từng VXL. Số lượng các thanh ghi này càng nhiều thì càng hữu dụng cho người lập trình. b. Thanh ghi A  Là một thanh ghi quan trọng của VXL. Nó thường được kết hợp với ALU để tính toán .  Hầu hết các công việc tính toán đều xảy ra giữa ALU và thanh ghi A.  Ngoài ra thanh ghi A còn có chức năng trung gian để giao tiếp dữ liệu bên trong VXL và các thiết bị bên ngoài. c. Thanh ghi PC  Chức năng của thanh ghi PC là quản lý lệnh đang thực hiện và tự động chỉ đến lệnh sẽ thực hiện tiếp theo.  Chiều dài của thanh ghi PC bằng với chiều dài số đường địa chỉ mà VXL có thể truy xuất. d. Thanh ghi trạng thái  Thanh ghi trạng thái chương trình còn được gọi là thanh ghi cờ [Flag register] dùng để lưu trữ kết quả của một số lệnh kiểm tra hay tính toán. Hình 2-3: Sơ đồ khối điều khiển và giải mã lệnh
  • 22. các bit có trong thanh ghi trạng thái tùy thuộc vào từng VXL. Trong một số VXL có thể xóa hoặc đặt các bit trong thanh ghi trạng thái.  Các bit thường có trong thanh ghi trạng thái: Status Register Z N C I IF O P 1 e. Thanh ghi con trỏ ngăn xếp  Thanh ghi SP dùng để quản lý bộ nhớ ngăn xếp khi muốn lưu trữ dữ liệu tạm thời vào ngăn xếp.  Sau khi thực hiện cất dữ liệu vào ngăn xếp, SP tự động chỉ đến ô nhớ tiếp theo.  SP phải chỉ đến ô nhớ ban đầu do người lập trình thiết lập. Quá trình này gọi là khởi tạo con trỏ ngăn xếp.  Tổ chức của ngăn xếp là dữ liệu vào sau phải được lấy ra trước [Last In First Out: LIFO]. f. Thanh ghi địa chỉ bộ nhớ  Mỗi khi VXL truy xuất bộ nhớ thì thanh ghi địa chỉ phải tạo ra đúng địa chỉ mà VXL mong muốn. Ngõ ra của thanh ghi địa chỉ được đặt lên bus địa chỉ 16 bit.  Nội dung của thanh ghi địa chỉ và thanh ghi PC là giống nhau khi VXL truy xuất bộ nhớ để đón lệnh.  Trong tất cả các VXL, chiều dài của thanh ghi địa chỉ bằng với thanh ghi PC. g. Thanh ghi lệnh  Thanh ghi lệnh dùng để chứa lệnh đang thực hiện. Một chu kỳ lệnh bao gồm đón lệnh từ bộ nhớ, giải mã và thực hiện lệnh.  Chiều dài thanh ghi lệnh bằng với chiều dài từ dữ liệu.  Thanh ghi lệnh do VXL sử dụng, người lập trình không được sử dụng thanh ghi này. 2.1.3. Bus dữ liệu bên trong vi xử lý Bus dữ liệu dùng để kết nối các thanh ghi bên trong và ALU với nhau. Tất cả các dữ liệu di chuyển bên trong VXL đều thông qua bus dữ liệu này. Các thanh ghi bên trong có thể nhận dữ liệu từ bus hay đặt dữ liệu lên bus nên bus dữ liệu là bus 2 chiều. Bus dữ liệu bên trong có thể kết nối ra bus bên ngoài khi VXL cần truy xuất dữ liệu từ bộ nhớ ngoài hay các thiết bị I/O. 2.2. Tập lệnh của vi xử lý 2.2.1. Giới thiệu về tập lệnh của vi xử lý Lệnh của VXL là một dữ liệu số nhị phân. Mỗi lệnh tương đương với một công việc mà VXL phải làm. Hầu hết các lệnh của VXL là lệnh chuyển dữ liệu và xử lý dữ liệu. Tập lệnh của VXL là tất cả các lệnh mà VXL có thể hiểu và thực hiện được.
  • 23. một lệnh bằng với chiều dài từ dữ liệu của VXL. Một VXL 8 bit thì độ dài của một lệnh là 8 bit và số lệnh tối đa có thể có của nó là 28 = 256 lệnh. Một lệnh được thực hiện cần phải có 2 yếu tố:  Yếu tố thứ nhất là mã lệnh [Opcode: Operation code]: để yêu cầu VXL thực hiện một việc nào đó.  Yếu tố thứ hai là địa chỉ [Address]: để chỉ cho VXL biết vị trí của các dữ liệu mà VXL phải xử lý. Như vậy cấu trúc của một lệnh bao gồm mã lệnh và địa chỉ. Có nhiều cách chỉ cho VXL biết địa chỉ của dữ liệu được gọi là các kiểu truy xuất bộ nhớ. Khi sử dụng một VXL cần phải biết các kiểu truy xuất này. 2.2.2. Từ gợi nhớ [mnemonic] Lệnh của VXL là các chữ số nhị phân, và một tập lệnh bao gồm rất nhiều lệnh. Do đó người lập trình rất khó để nhớ hết. Để giải quyết vấn đề này, lệnh được viết thành các từ gợi nhớ gần với chức năng và ý nghĩa của lệnh. Trong hầu hết các từ gợi nhớ mã lệnh được rút gọn chỉ còn 3 ký tự. Khi lập trình người sử dụng dùng các từ gợi nhớ này để viết chương trình. Các từ gợi nhớ này tạo thành một ngôn ngữ gọi là Assembly. Để VXL hiểu và thực hiện được chương trình thì phải chuyển các lệnh viết dưới dạng ngôn ngữ assembly thành các lệnh dạng số nhị phân bằng chương trình biên dịch Assembler. 2.2.3. Các kiểu lệnh cơ bản của vi xử lý  Đối với hầu hết VXL tập lệnh được chia ra làm 9 nhóm lệnh cơ bản:  Nhóm lệnh truyền dữ liệu: Data transfers.  Nhóm lệnh trao đổi, truyền khối dữ liệu, tìm kiếm: Exchanges, Block transfers, Searches.  Nhóm lệnh số học.  Nhóm lệnh logic.  Nhóm lệnh điều khiển CPU.  Nhóm lệnh xử lý bit.  Nhóm lệnh nhảy: Jumps.  Nhóm lệnh gọi, trở về: Calls, Return. Hình 2-4: Cấu trúc của lệnh
  • 24. xuất nhập: Input, output. Các từ gợi nhớ và các mã nhị phân của tất cả các lệnh được cung cấp bởi nhà chế tạo đối với từng VXL cụ thể. 2.2.4. Các kiểu truy xuất địa chỉ của vi xử lý VXL có thể truy xuất địa chỉ bộ nhớ bằng nhiều cách để lấy dữ liệu. Các kiểu truy xuất địa chỉ cơ bản của một VXL bao gồm:  Kiểu địa chỉ ngầm định.  Kiểu địa chỉ tức thời.  Kiểu địa chỉ trực tiếp.  Kiểu địa chỉ gián tiếp.  Kiểu địa chỉ chỉ số.  Kiểu địa chỉ tương đối. Để biết VXL có bao nhiêu cách truy xuất bộ nhớ cần phải khảo sát từng VXL cụ thể. CÂU HỎI THẢO LUẬN Câu 1. Vi xử lý bao gồm những thành phần nào? Câu 2. ALU là gì? ALU có thể thực hiện được các phép toán nào? Câu 3. Chức năng của khối điều khiển là gì? Câu 4. Mã lệnh của chương trình điều khiển chứa ở đâu? Câu 5. Thanh ghi PC có ý nghĩa gì trong vi xử lý? Câu 6. Ngăn xếp là gì? Ngăn xếp trong VXL là loại nào? Câu 7. Lệnh của VXL là gì? Cấu tạo một lệnh gồm thành phần nào? Câu 8. Từ gợi nhớ là gì? Câu 9. Các nhóm lệnh cơ bản của VXL? Câu 10. VXL thường có các kiểu truy xuất bộ nhớ nào? CÂU HỎI TRẮC NGHIỆM ÔN TẬP Câu 1. Mã lệnh từ bộ nhớ chưong trình bên ngoài, Sau khi được CPU đọc vào sẽ được chứa tại bộ phận nào trong CPU. a. Thanh ghi PC b. Thanh ghi IR c. Khối giải mã lệnh và điều khiển d. ALU Câu 2. Bộ phận nào trong CPU dùng để lưu giữ địa chỉ của lệnh kế tiếp trong bộ nhớ chương trình mà CPU cần thực hiện. a. Thanh ghi PC b. Thanh ghi IR c. Khối giải mã lệnh và điều khiển d. ALU
  • 25. vụ của CPU là: a. Điều hành hoạt động của toàn hệ thống theo ý định của người sử dụng thông qua chương trình điều khiển. b. Thi hành chương trình theo vòng kín gọi là chu kỳ lệnh. c. Giao tiếp với các thiết bị xuất nhập. d. Cả hai câu a và b đều đúng. Câu 4. Ngăn xếp của VXL là loại nào? a. LIFO b. LILO c. FILO d. FIFO Câu 5. Thanh ghi nào thường có chiều dài bằng chiều dài từ dữ liệu? a. Thanh ghi địa chỉ b. Thanh ghi lệnh c. Thanh ghi PC d. Thanh ghi khác Câu 6. Thanh ghi nào thường có chiều dài bằng chiều dài thanh ghi địa chỉ? a. Thanh ghi địa chỉ b. Thanh ghi lệnh c. Thanh ghi PC d. Thanh ghi khác Câu 7. Một lệnh thường có mấy yếu tố? a. 1 b. 2 c. 3 d. 4 Câu 8. Từ gợi nhớ thường gồm mấy ký tự? a. 1 b. 2 c. 3 d. 4 Câu 9. Vi xử lý gồm những thành phần nào? a. ALU b. Control Unit c. Register d. Bao gồm các thành phần trên Câu 10. Mã lệnh của vi xử lý lưu trong bộ nhớ là dữ liệu kiểu gì? a. BIN b. DEC c. HEX d. BCD
  • 26. ĐIỀU KHIỂN Chương 3 giúp người học hiểu được thế nào là vi điều khiển, cấu trúc chung của vi điều khiển. Trong chương này sẽ giới thiệu họ vi điều khiển 8051 là một họ vi điều khiển thông dụng và có kiến trúc đơn giản giúp người học dễ tiếp cận môn học này. Nội dung môn học bao gồm:  Giới thiệu về vi điều khiển.  Họ vi điều khiển 8051 [MCS-51].  Cấu trúc phần cứng của 8051. 3.1. Giới thiệu vi điều khiển Vi điều khiển [Microcontroller: µC] là một thiết bị tích hợp một số các thành phần của hệ vi xử lý lên cùng một chip. Vi điều khiển có thể hoạt động độc lập mà không cần kết nối thêm nhiều các thiết bị ngoại vi. Vi điều khiển thuận lợi cho các ứng dụng nhỏ với chi phí thấp. Vi điều khiển bao gồm các thành phần cơ bản như sau:  CPU  Memory [ROM, RAM]  Các cổng I/O Các phần chính của một vi điều khiển:  Dung lượng RAM từ khoảng 64 Byte đến 4 KByte.  Dung lượng ROM từ khoảng 512 Byte đến 16 KB. Có loại lên đến 256 KB.  Dung lượng bộ nhớ ngày càng được tích hợp nhiều hơn theo sự phát triển của công nghệ.  Các loại vi điều khiển có thể kết nối thêm bộ nhớ ngoài gọi là bộ nhớ mở rộng. Hình 3-1: Các thành phần chính trong vi điều khiển
  • 27. I/O của vi điều khiển thường được nhóm thành các cổng [PORT] mỗi cổng gồm 8 bit. Ngoài ra tùy loại VĐK mà còn có các thành phần sau:  Timer-counter: bộ định thời hoặc bộ đếm.  Các cổng giao tiếp: UART, SPI, I2C, USB, …  ADC [Analog to Digital Converter]: xử lý các tín hiệu tương tự. 3.2. Họ Vi điều khiển 8051 Có nhiều loại VĐK thông dụng khác nhau như: AVR, PIC, ARM, … nhưng một trong những họ VĐK thông dụng là 8051 [MCS-51]. Họ 8051 do hãng Intel phát triển đầu tiên và được nhiều hãng sản xuất linh kiện phát triển theo như: Philip, Atmel… VĐK này có cấu trúc đơn giản thuận lợi cho người mới tiếp cận nghiên cứu và học tập. Dưới đây là một số đời vi điều khiển 8051 từ đời đầu tiên đến nay.  VĐK đầu tiên trong họ 8051 là 80C31. VĐK này không có bộ nhớ bên trong do chưa tích hợp được.  VĐK 80C51 tích hợp được 4 kbyte bộ nhớ loại prom. Do đó chỉ lập trình được một lần và không thể xóa được.  VĐK 87C51 tích hợp được 4 kbyte bộ nhớ eprom, cho phép lập trình nhiều lần và xóa bằng tia cực tím.  VĐK 89C51 [CMOS] tích hợp được 4 kbyte bộ nhớ flash rom, cho phép nạp và xóa bằng điện hàng ngàn lần. Có nhiều phiên bản chip 8051 của các hàng khác nhau như: Philips, Dallas nhưng thông dụng là sản phẩm của Atmel. Một số vi điều khiển họ 8051 trên thị trường hiện nay đến bởi Atmel như sau: Hình 3-2: Các thành phần có trong vi điều khiển
  • 28. CMOS, công nghệ chế tạo chip.  89Sxxx: là Serial, thể hiện khả năng lập trình nối tiếp.  89LVxxx: là loại Low Voltage, có khả năng chạy điện áp thấp từ 2,7V đến 6V. Mã số ROM RAM Timer I/O Số chân 89C51 [89S51, 89LV51] 4 KB 128 byte 2 32 [4 port] 40 89C52 [89S52, 89LV52] 8 KB 256 byte 3 32 [4 port] 40 89C55 [89S55] 20 KB 256 byte 3 32 [4 port] 40 89C1051 1 KB 64 byte 1 15 [2 port] 20 89C2051 2 KB 128 byte 2 15 [2 port] 20 89C4051 4 KB 128 byte 2 15 [2 port] 20 Hình 3-3: Bảng một số chip thông dụng của Atmel 3.3. Tóm tắt phần cứng họ vi điều khiển 8051 Tất cả các VĐK cùng họ 8051 đều có các đặc tính cơ bản và tập lệnh giống nhau nhưng phần cứng thì khác nhau. Những VĐK sau sẽ có nhiều tính năng hay hơn các VĐK thế hệ trước. Trong phần tiếp theo chúng ta chỉ đề cập đến VĐK 89C51 là một VĐK thông dụng trong họ 8051. VĐK 80C51 có các đặc điểm phần cứng như sau:  Có 4 kbyte bộ nhớ Flash ROM để lưu chương trình điều khiển.  Có 128 byte RAM nội.  Có 4 port xuất/nhập [input/output] 8 bit.  Có khả năng giao tiếp truyền dữ liệu nối tiếp.  Có thể giao tiếp với 64 Kbyte bộ nhớ ngoài để lưu chương trình điều khiển.  Có thể giao tiếp với 64 Kbyte bộ nhớ ngoài để lưu dữ liệu.  Có 210 bit có thể truy xuất từng bit.  Được đóng gói 40 pin DIP [Dual Inline Package] hoặc 44 pin TQFP [Thin Quad Flat Package] hoặc PLCC [Plastic Leaded Chip Carrier]. Hình 3-4: Các kiểu đóng gói của chip 8051
  • 29. cấu trúc bên trong của VĐK 89C51 3.4.1. Sơ đồ cấu trúc bên trong của vi điều khiển  CPU: đơn vị điều khiển trung tâm, lõi vi xử lý.  Oscillator: mạch dao động để tạo xung nhịp cho chip.  Interrupt Control: khối điều khiển xử lý các nguồn ngắt.  Bus Control: khối điều khiển bus.  Other Register: các thanh ghi đặc biệt nằm trong bộ nhớ RAM.  I/O port: các cổng xuất nhập.  Address/Data: ngõ vào địa chỉ/dữ liệu dùng để giao tiếp bộ nhớ mở rộng.  Timer 0, timer 1 : các bộ định thời và đếm sự kiện.  Serial port: ngõ xuất/nhập dữ liệu nối tiếp USART. 3.4.2. Khảo sát sơ đồ chân của 89C51 VĐK 89C51 có tất cả 40 chân, trong đó có 24 chân có 2 chức năng. Mỗi chân có thể hoạt động như một đường xuất nhập điều khiển I/O hoặc là thành phần của các bus dữ liệu và bus địa chỉ khi giao tiếp với bộ nhớ ngoài. VĐK 89C51 có 4 port I/O, mỗi port 8 bit tương ứng 8 chân vật lý, được đặt tên là P0, P1, P2, P3. P1 chỉ có chức năng I/O. P0, P2 và P3 là port có 2 chức năng. Chức năng I/O:  Input [nhận dữ liệu vào mcu]  Output [xuất dữ liệu ra thiết bị ngoại vi] Chức năng khác ứng với từng chân:  Truyền dữ liệu nối tiếp Hình 3-5: Sơ đồ khối vi điều khiển 89C51
  • 30. Bus dữ liệu [Data Bus]  Bus địa chỉ [Address Bus]  Bus điều khiển [Control Bus] 3.4.2.2. Chức năng các port a. Port 0: là port có 2 chức năng với số chân từ 32 – 39. Chức năng thứ nhất port 0 dùng để làm các đường I/O.  Bên ngoài cần có điện trở “pull – up” . Chức năng thứ 2 dùng làm bus địa chỉ [byte thấp] và dữ liệu AD7-AD0.  Bên trong đã có internal pull – up nên không cần điện trở “pull –up” bên ngoài.  Xuất ra, nhập vào dữ liệu dạng địa chỉ hay data. Hình 3-6: Sơ đồ chân vi điều khiển 89C51
  • 31. pin của port 0: Khi sử dụng port0 với chức năng I/O thì cần phải có điện trở pull-up kết nối ở bên ngoài. b. Port 1: với số chân từ 1 – 8. port 1 chỉ có chức năng dùng làm các đường điều khiển xuất nhập I/O. Port 1 có sẵn điện trở pull-up bên trong. c. Port 2: là port có 2 chức năng với số chân từ 21 – 28.  Chức năng thứ nhất port 2 dùng để làm các đường điều khiển I/O.  Chức năng thứ 2 dùng làm 8 bus địa chỉ cao A8-A15.  Cấu trúc của port 2 tương tự như port 1. Hình 3-8: Sơ đồ kết nối điện trở pull-up cho port 0 Hình 3-7: Sơ đồ cấu tạo Port 0
  • 32. cũng là port có 2 chức năng với số chân từ 10 – 17.  Chức năng thứ nhất port 3 dùng để làm các đường điều khiển I/O.  Ngoài ra port 3 còn có các tính năng đặc biệt theo từng chân như sau: Bit Tên Chức năng P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp P3.1 TxD Ngõ xuất dữ liệu nối tiếp P3.2 INT0 Ngõ vào ngắt cứng 0 P3.3 INT1 Ngõ vào ngắt cứng 1 P3.4 T0 Ngõ vào của Timer/Counter 0 P3.5 T1 Ngõ vào của Timer/Counter 1 P3.6 WR Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ nhớ ngoài Hình 3-10: Chức năng từng chân của port 3 3.4.2.3. Các tín hiệu điều khiển  Chân EA [External Access]: là tín hiệu ngõ vào ở chân 31. Nếu nối EA lên mức 1 VĐK sẽ thi hành chương trình trong bộ nhớ nội. Nếu nối EA ở mức 0, VĐK sẽ thi hành chương trình từ bộ nhớ ngoài. Thông thương chân này được nối mức 1.  Chân PSEN [Program Store ENable]: là tín hiệu ngõ ra ở chân 29, chân này là tín hiệu điều khiển để đọc bộ nhớ chương trình mở rộng. Khi có giao tiếp với bộ nhớ chương trình bên ngoài mới dùng đến chân PSEN. Chân này thường được nối với chân OE của chip ROM. Hình 3-9: Sơ đồ cấu tạo Port 1,2,3
  • 33. [Read]: là tín hiệu ngõ ra ở chân 17, chân này là tín hiệu điều khiển để đọc bộ nhớ dữ liệu mở rộng. Chân này thường được nối với chân OE của chip ROM hoặc RAM.  Chân WR [Write]: là tín hiệu ngõ ra ở chân 16, chân này là tín hiệu điều khiển để ghivào bộ nhớ dữ liệu mở rộng là RAM. Chân này thường được nối với chân WE của chip RAM.  Chân ALE [Address Latch Enable]: là tín hiệu ngõ ra ở chân 30. Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt. Tần số ALE bằng 1/12 tần số mạch dao động trên chip. Hình dưới minh họa việc kết nối VĐK với bộ nhớ chương trình mở rộng.  Ngõ vào RST: ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái ban đầu cho vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy. Trạng thái của các thanh ghi đặc biệt trong VĐK sau khi reset có giá trị như sau: Hình 3-11: Sơ đồ giao tiếp bộ nhớ chương trình bên ngoài Hình 3-12: Mạch reset
  • 34. dung PC 0000h A 00h B 00h PSW 00h SP 07h DPTR 0000h IP XXX00000b IE 0X0X0000b TH0,TL0,TH1,TL1 00h SCON,SBUF 00h PCON 0XXX0000b  Ngõ vào bộ dao động Xtal1, Xtal2: có vị trí chân là 18 và 19 được sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định. Tần số thạch anh khoảng 2MHz đến 33MHz. Nếu dùng tín hiệu clock bên ngoài thì đưa vào chân Xtal1 , Xtal 2 để trống.  Chu kỳ máy: là khoảng thời gian cần thiết được quy định để VĐK thực hiện hoàn thành một lệnh cơ bản. Một chu kỳ máy bằng 12 lần chu kỳ dao động của nguồn xung dao động cấp cho nó. CKM = 12. T = 12 f Với: CKM là chu kỳ máy TOSC là chu kỳ của nguồn xung dao động cấp cho VĐK fOSC là tần số của nguồn xung dao động cấp cho VĐK Ví dụ: VĐK sử dụng thạch anh có tần số là 12MHz, thì chu kỳ máy là: CKM = 12 f = 12 12. 10 = 10 = 1μs Vì thạch anh có tần số là 12MHz tạo ra chu kì máy là 1µs, thuận lợi cho việc tính toán thời gian khi lập trình do đó thường được sử dụng trong thực tế. Hình 3-13: Sơ đồ kết nối mạch dao động
  • 35. bộ nhớ của vi điều khiển 3.5.1. Tổ chức bộ nhớ VĐK 89C51 có bộ nhớ tích hợp bên trong và có khả năng giao tiếp với bộ nhớ ngoài. Bộ nhớ trong gồm 256 byte bộ nhớ dữ liệu và 4 kbyte bộ nhớ chương trình. Bộ nhớ ngoài cũng có 2 loại, VĐK có thể giao tiếp tối đa với 64 Kbyte bộ nhớ dữ liệu và 64 Kbyte bộ nhớ chương trình thông qua các chân điều khiển. Hình dưới đây minh họa khả năng giao tiếp của VĐK 89C51 như sau: FFFFh Data Memory Điều khiển bởi RD & RW FFFFh Code Memory Điều khiển bởi PSEN 0FFFh Code Memory FFh Data Memory 00h 0000h 0000h 0000h RAM Flash ROM RAM hoặc ROM ROM Bộ nhớ trong Bộ nhớ mở rộng Hình 3-14: Minh họa khả năng quản lý bộ nhớ của 89C51 3.5.2. Tổ chức bộ nhớ RAM RAM bên trong 89C51 gồm được quản lý bởi 8 bit địa chỉ, có 256 byte được chia làm 2 phần. Từ 00h đến 7Fh gồm 128 byte gồm các bank thanh ghi, vùng nhớ định địa chỉ bit và RAM đa dụng. Phần còn lại từ 80h đến FFh là các ô nhớ dành cho các thanh ghi đặc biệt. Trong các thanh ghi này có một số định địa chỉ bit, còn lại thì không. Hình dưới minh họa các vùng trong bộ nhớ RAM. 7F FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B RAM đa dụng E0 E7 E6 E5 E4 E3 E2 E2 E0 A [80 byte] D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58
  • 36. 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 93 91 90 P1 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D TH1 22 17 16 15 14 13 12 11 10 8C TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B TL1 20 07 06 05 04 03 02 01 00 8A TL0 1F BANK 3 [RS1 = 1, RS0 = 1] 89 TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 BANK 2 [RS1 = 1, RS0 = 0] 87 PCON 10 0F BANK 1 [RS1 = 0, RS0 = 1] 83 DPH 08 82 DPL 07 BANK 0 [mặc định gán cho R0 - R7] 81 SP 00 80 87 86 85 84 83 82 81 80 P0 RAM REGISTER Hình 3-15: Minh họa các phân vùng và địa chỉ trong RAM 3.5.2.1. Các bank thanh ghi có địa chỉ từ 00h đến 1Fh Các bank thanh ghi gồm 32 byte được chia làm 4 bank. Tại mỗi thời điểm chỉ có một bank thanh ghi được truy xuất, mặc định là bank 0. Có 8 thanh ghi được đặt tên là R0 đến R7 [Register]. Các thanh ghi này được đặt mặc định trong bank 0. Nghĩa là thanh ghi R0 sẽ có địa chỉ 00h, R1 là 01h, cho đến R7 là 07h. Để thay đổi việc truy xuất các bank thanh ghi, người dùng phải thay đổi giá trị các bit chọn bank RS1 và RS0 trong thanh ghi trạng thái PSW. Nếu cài đặt sử dụng bank nào thì các thanh ghi sẽ được dời đến địa chỉ bank đó. Ví dụ nếu dùng bank 3, thanh ghi R0 sẽ có địa chỉ 18h, R1 là 19h, cho đến R7 là 1Fh. Direct RAM Register 1Fh Bank 3 … 18h 17h Bank 2 … 10h
  • 37. R5 04h R4 03h R3 02h R2 01h R1 00h R0 Hình 3-16: Bảng minh họa các bank thanh ghi 3.5.2.2. RAM truy xuất từng bit từ 20h đến 2Fh Trên RAM nội có 210 ô nhớ có thể truy xuất đến từng bit. Các bit nhớ này cũng được định địa chỉ bằng các số Hex. Trong đó có 128 bit nằm trong các ô nhớ có địa chỉ byte từ 20h đến 2Fh, các bit nhớ còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt. Các bit này có thể được thay đổi giá trị mà không ảnh hưởng đến các bit khác trong cùng một byte thông qua nhóm lệnh xử lý bit ở phần sau sẽ đề cập. 3.5.2.3. RAM đa dụng từ 30h đến 7Fh Gồm 80 byte dùng để lưu trữ dữ liệu và có thể truy xuất theo từng byte. Một phần bộ nhớ này thường được dùng để làm ngăn xếp. 3.5.2.4. Các thanh ghi có chức năng đặc biệt từ 80h đến FFh Các thanh ghi này được định địa chỉ byte, một số được định thêm địa chỉ bit. Các thanh ghi đặc biệt này này được dùng để xác lập trạng thái hoạt động cần thiết cho VĐK. a. Các thanh ghi có địa chỉ 80h, 90h, A0h, B0h: Đây là các thanh ghi kiểm tra và điều khiển mức logic của các Port, có thể truy xuất và xác lập các thanh ghi này với địa chỉ byte hoặc tên riêng lần lượt là P0, P1, P2, P3 tương ứng với các Port. b. Thanh ghi A [Accumulator]: ở địa chỉ E0h, là thanh ghi tích lũy, dùng để lưu trữ các toán hạng và kết quả của phép tính. c. Thanh ghi B: ở địa chỉ F0h, được dùng với thanh ghi A để thực hiện các phép toán nhân và chia. d. Thanh ghi con trỏ ngăn xếp SP [Stack Pointer]: có địa chỉ 81H, giá trị của nó được tăng, giảm tự động khi thực hiện cất hoặc lấy dữ liệu. Giá trị mặc định khi mới khởi động của SP là 07h. e. Thanh ghi con trỏ dữ liệu DPTR [Data Pointer Register]: là thanh ghi 16 bit được tạo thành từ hai thanh ghi DPL [byte thấp, ở địa chỉ 82h] và DPH [byte cao, ở địa chỉ 83h]. Hai thanh ghi này có thể truy xuất độc lập bởi người sử dụng. Con trỏ dữ liệu DPTR thường được sử dụng khi truy xuất dữ liệu từ bộ nhớ chương trình hoặc bộ nhớ dữ liệu mở rộng.
  • 38. [8 bit cao] DPL [8 bit thấp] f. Thanh ghi trạng thái chương trình PSW [Program Status Word]: có địa chỉ D0h là thanh ghi chứa các bit trạng thái khi chương trình hoạt động. Các bit này thông thường tự động thay đổi theo chức năng mỗi bit. Bit Địa chỉ bit Ký hiệu Chức năng PSW.7 D7h C Cờ nhớ [Cary Flag] PSW.6 D6h AC Cờ nhớ phụ [Auxiliary Cary Flag] PSW.5 D5h Z Cờ 0 hay cờ Zero PSW.4 D4h RS1 Bit lựa chọn bank thanh ghi 1 PSW.3 D3h RS0 Bit lựa chọn bank thanh ghi 0 PSW.2 D2h OV Cờ tràn với phép tính liên quan đến số nhị phân có dấu PSW.1 D1h - Chưa được thiết kế để sử dụng PSW.0 D0h P Cờ chẵn lẻ [Parity Flag] Hình 3-17: bảng các bit trong thanh ghi trạnh thái PSW Chức năng từng bit trong thanh trạng thái PSW:  Cờ nhớ C: được sử dụng trong các lệnh toán học và một số lệnh khác. + C = 1 nếu phép toán cộng xảy ra tràn hoặc phép trừ có mượn. + C = 0 nếu phép toán cộng không tràn hoặc phép trừ không mượn. + Ngoài ra cờ C còn bị ảnh hưởng bởi lệnh xoay và lệnh so sánh.  Cờ nhớ phụ AC: được dùng trong các phép toán cộng hai số BCD. Khi cộng số BCD. + AC = 1 nếu kết quả phép toán cộng có 4 bit thấp lớn hơn 9 hoặc có nhớ từ bit 3 qua bit 4. + AC = 0 nếu kết quả phép toán cộng có 4 bit thấp nhỏ hơn 10 hoặc không có nhớ từ bit 3 qua bit 4.  Cờ Z hay cờ nhớ F0: cờ zero. + Cờ Z = 0 khi thanh ghi A có giá trị khác 0. + Cờ Z = 1 khi thanh ghi A có giá trị là 0.  Các bit chọn bank thanh ghi RS1, RS0: dùng để lựa chọn bank thanh ghi. Mặc định khi reset hệ thống bank 0 được sử dụng [RS1 = 0, RS0 = 0]. Bảng chọn bank thanh ghi:
  • 39. thanh ghi được sử dụng 0 0 Bank 0 0 1 Bank 1 1 0 Bank 2 1 1 Bank 3  Cờ tràn OV [Over Flag]: được sử dụng trong các phép toán cộng có dấu, với các phép toán cộng không dấu cờ tràn OV được bỏ qua, không cần quan tâm đến OV. Nếu: + Phép cộng hai số có dấu lớn hơn +127 thì OV = 1 + Hoặc phép trừ hai số có dấu nhỏ hơn -128 thì OV = 1 + Các trường hợp còn lại OV = 0  Cờ chẵn lẻ P [Parity]: tự động được đặt bằng 1 hoặc xóa về 0 sao cho tổng số bit mang giá trị 1 trên thanh ghi A với cờ P luôn là một số chẵn. Cờ chẵn lẻ được dùng để xử lý dữ liệu trước khi truyền đi theo kiểu nối tiếp hoặc xử lý dữ liệu trước khi nhận vào theo kiểu nối tiếp [hạn chế lỗi phát sinh trong quá trình truyền]. CÂU HỎI THẢO LUẬN Câu 1. Vi điều khiển là gì? Vi điều khiển bao gồm những thành phần nào? Câu 2. 8051 có mấy loại bộ nhớ? Câu 3. Các thanh ghi có trong 8051? Chức năng của mỗi thanh ghi là gì? Câu 4. Chân RST có chức năng gì? Sơ đồ của mạch reset? Câu 5. Chu kỳ máy là gì? Cách tính chu kỳ máy đối với VĐK 8051? Câu 6. Dung lượng các loại bộ nhớ trong 8051? Câu 7. Các phân vùng của bộ nhớ RAM trong 8051? Câu 8. Bank thanh ghi là gì? Có mấy bank? Các thanh ghi trong bank là gì? Câu 9. Để sử dụng bank 3 cần cài đặt thế nào? R0 khi dùng bank 3 ở địa chỉ bao nhiêu? Câu 10. RAM truy xuất bit là gì? Câu 11. RAM đa dụng là gì? Câu 12. Các thanh ghi đặc biệt nằm trong vùng địa chỉ nào? Tại sao lại gọi là “Các thanh ghi có chức năng đặc biệt”? Câu 13. Các port có chức năng gì? Câu 14. Thanh ghi trạng thái là gì? Gồm các các bit nào? Câu 15. Dung lượng bộ nhớ ngoài mà 8051 có thể truy xuất?
  • 40. NGHIỆM ÔN TẬP Câu 1. Dung lượng bộ nhớ dữ liệu [RAM] có trong chip 89C51 là? a. 128 byte b. 256 byte c. 8 KB d. 4 KB Câu 2. Dung lượng bộ nhớ chương trình [ROM] có trong chip 89C51 là? a. 128 byte b. 256 byte c. 8 KB d. 4 KB Câu 3. Số lượng bộ đếm/bộ định thời [Timer] có trong chip vi điều khiển 8051 là? a. 1 b. 2 c. 3 d. 4 Câu 4. Chip vi điều khiển 89C51 có bao nhiêu port xuất nhập dữ liệu? a. 1 port b. 2 port c. 3 port d. 4 port Câu 5. Dung lượng bộ nhớ dữ liệu mở rộng tối đa mà chip 89C51 có khả năng truy xuất? a. 32 KB b. 64 KB c. 128 KB d. 256 KB Câu 6. Trong chip vi điều khiển 89C51, các port xuất nhập có hai chức năng là? a. P1, P2, P3 b. P0, P1, P2 c. P0, P2, P3 d. P0, P1, P3 Câu 7. Trong chip vi điều khiển 89C51, port chỉ có chức năng xuất nhập cơ bản là? a. P0 b. P1 c. P2 d. P3 Câu 8. Khi các port xuất nhập của 89C51 đóng vai trò là port xuất nhập dữ liệu thì port nào cần phải có điện trở kéo lên bên ngoài? a. P0 b. P1 c. P2 d. P3 Câu 9. Khi chip 89C51 sử dụng bộ nhớ bên ngoài thì port nào đóng vai trò là bus địa chỉ byte thấp và bus dữ liệu đa hợp [AD0 ... AD7]? a. P0 b. P1 c. P2 d. P3 Câu 10. Khi chip 89C51 sử dụng bộ nhớ bên ngoài thì port nào đóng vai trò là bus địa chỉ byte cao? a. P0 b. P1 c. P2 d. P3 Câu 11. Khi chip 89C51 sử dụng bộ nhớ bên ngoài hay các chức năng đặc biệt thì port nào đóng vai trò là các tin hiệu điều khiển? a. P0 b. P1
  • 41. P3 Câu 12. PSEN là tín hiệu điều khiển dùng làm gì? a. Cho phép truy xuất [đọc] bộ nhớ chương trình bên ngoài. b. Cho phép truy xuất [sử dụng] bộ nhớ chương trình bên ngoài. c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp. d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051. Câu 13. EA là tín hiệu điều khiển dùng làm gì? a. Cho phép truy xuất [đọc] bộ nhớ chương trình bên ngoài. b. Cho phép truy xuất [sử dụng] bộ nhớ chương trình bên ngoài. c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp. d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051. Câu 14. ALE là tín hiệu điều khiển dùng làm gì? a. Cho phép truy xuất [đọc] bộ nhớ chương trình bên ngoài. b. Cho phép truy xuất [sử dụng] bộ nhớ chương trình bên ngoài. c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp. d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051. Câu 15. RST là tín hiệu điều khiển dùng làm gì? a. Cho phép truy xuất [đọc] bộ nhớ chương trình bên ngoài. b. Cho phép truy xuất [sử dụng] bộ nhớ chương trình bên ngoài. c. Cho phép chốt địa chỉ để thực hiện việc giải đa hợp. d. Cho phép thiết lập lại trạng thái hoạt động của chip 8051. Câu 16. WR là tín hiệu điều khiển dùng làm gì? a. Cho phép đọc thông tin từ bộ nhớ dữ liệu ngoài. b. Cho phép ghi thông tin vào bộ nhớ dữ liệu ngoài. c. Cho phép đọc thông tin từ bộ nhớ chương trình ngoài. d. Cho phép ghi thông tin vào bộ nhớ chương trình ngoài. Câu 17. RD là tín hiệu điều khiển dùng làm gì? a. Cho phép đọc thông tin từ bộ nhớ dữ liệu ngoài. b. Cho phép ghi thông tin vào bộ nhớ dữ liệu ngoài. c. Cho phép đọc thông tin từ bộ nhớ chương trình ngoài. d. Cho phép ghi thông tin vào bộ nhớ chương trình ngoài. Câu 18. Tần số phổ dụng của thạch anh sử dụng cho hầu hết các chip vi điều khiển họ 8051 là? a. 10 MHz b. 11 MHz c. 12 MHz d. 13 MHz
  • 42. PSEN của chip 8051 thường được nối với chân nào của bộ nhớ chương trình bên ngoài? a. CS b. WR c. RD d. OE Câu 20. Nếu tần số xung clock của mạch dao động trong chip là 12 MHZ thì tần số của tín hiệu tại chân ALE là bao nhiêu? a. 12 MHz b. 6 MHz c. 2 MHz d. 1 MHz Câu 21. Khi dùng mạch dao động TTL bên ngoài tạo tín hiệu xung clock cho chip 8051 thì tín hiệu xung clock phải được đưa vào chân nào? a. CS b. INT0 c. XTAL1 d. XTAL2 Câu 22. Các bank thanh ghi của chip 8051 nằm trong bộ nhớ nào? a. Bộ nhớ chương trình bên trong. b. Bộ nhớ chương trình bên ngoài. c. Bộ nhớ dữ liệu bên trong. d. Bộ nhớ dữ liệu bên ngoài. Câu 23. Trong bộ nhớ dữ liệu của chip 8051, các bank thanh ghi có địa chỉ nằm trong khoảng nào? a. 00h – 1Fh b. 20h – 2Fh c. 30h – 7Fh d. 80h – FFh Câu 24. Trong bộ nhớ dữ liệu của chip 8051, vùng RAM định địa chỉ bit có địa chỉ nằm trong khoảng nào? a. 00h – 1Fh b. 20h – 2Fh c. 30h – 7Fh d. 80h – FFh Câu 25. Trong bộ nhớ dữ liệu của chip 8051, vùng RAM đa dụng có địa chỉ nằm trong khoảng nào? a. 00h – 1Fh b. 20h – 2Fh c. 30h – 7Fh d. 80h – FFh Câu 26. Trong bộ nhớ dữ liệu bên trong của chip 8051, các thanh ghi có chức năng đặc biệt [SFR] có địa chỉ nằm trong khoảng nào? a. 00h – 1Fh b. 20h – 2Fh c. 30h – 7Fh d. 80h – FFh Câu 27. Dung lượng bộ nhớ chương trình mở rộng tối đa mà chip 8051 có khả năng truy xuất là? a. 4 KB b. 8 KB c. 32 KB d. 64 KB
  • 43. SÁT TẬP LỆNH CỦA VI ĐIỀU KHIỂN Chương này giúp người học kiến thức về lập trình hợp ngữ Assembly thông qua tập lệnh của vi điều khiển 8051. Biết được cấu trúc của mỗi lệnh, từ khóa và mã nhị phân cho từng lệnh. Biết cách xây dựng một chương trình vi xử lý hoàn chỉnh. Nội dung môn học bao gồm:  Giới thiệu về chương trình và tập lệnh.  Các kiểu truy xuất bộ nhớ.  Các nhóm lệnh của 8051.  Cấu trúc của chương trình. 4.1. Khái niệm về chương trình, tập lệnh và ngôn ngữ gợi nhớ Chương trình là tập hợp các lệnh được tổ chức theo một trình tự hợp lý để giải quyết các yêu cầu của người lập trình. Tập hợp tất cả các lệnh mà VĐK có thể thực hiện được gọi là tập lệnh. Họ vi điều khiển 8051 đều có chung một tập lệnh. Lệnh của Vi điều khiển là các số nhị phân 8 bit hay còn gọi là mã máy. Do đó vi điều khiển có tối đa 28 = 256 lệnh. Các lệnh mang mã từ 00000000b đến 11111111b. Chương trình cho vi điều khiển có thể viết bằng C,Visual Basic, hoặc bằng các ngôn ngữ cấp cao khác. Tuy nhiên hợp ngữ Assembly được đa số người dùng mới làm quen vi điều khiển sử dụng để lập trình. Ưu điểm của hợp ngữ Assembly là: mã gọn, ít chiếm dung lượng bộ nhớ, hoạt động với tốc độ nhanh và nó có hiệu suất tốt hơn so với các chương trình viết bằng ngôn ngữ bậc cao khác. Để soạn thảo chương trình có thể sử dụng Notepad hoặc bất cứ chương trình soạn thảo có sử dụng bộ ký tự chuẩn ASCII và lưu tên với phần mở rộng là ".asm". Ngoài ra có thể sử dụng các phần mềm hỗ trợ soạn thảo dành riêng cho vi điều khiển đã tích hợp sẵn chương trình biên dịch. Chương trình sau khi viết bằng assembly cần được chuyển đổi qua mã lệnh [hay còn gọi là mã máy] của vi điều khiển, quá trình chuyển đổi được thực hiện bằng chương trình dịch Assembler. 4.2. Các kiểu định địa chỉ bộ nhớ Các kiểu định địa chỉ cho phép định rõ nơi lấy dữ liệu hoặc nơi nhận dữ liệu tùy thuộc vào cách thức sử dụng lệnh của người lập trình.
  • 44. họ 8051 có 8 kiểu định địa chỉ như sau: a. Địa chỉ trực tiếp: dùng để truy xuất bất kỳ ô nhớ nào trong bộ nhớ RAM nội của vi điều khiển. Opcode Direct Address Ví dụ: Mov A,05h ;copy nội dung ô nhớ 05h vào thanh ghi A. b. Địa chỉ dùng thanh ghi: kiểu định địa chỉ này thường được dùng cho các lệnh xử lý dữ liệu mà dữ liệu luôn lưu trữ trong các thanh ghi. Mã lệnh kiểu này chỉ có 1 byte. Opcode n n n Ví dụ: Mov A,R5 ;copy nội dung thanh ghi R5 vào thanh ghi A. c. Địa chỉ gián tiếp: kiểu định địa chỉ này được ký hiệu bằng dấu @ trước các thanh ghi R0, R1 hay DPTR. Nội dung của các thanh ghi này cho biết địa chỉ ô nhớ cần truy xuất. Opcode i Ví dụ: Mov A,@R1 ;copy nội dung ô nhớ có địa chỉ trong thanh ghi R1 vào thanh ghi A. d. Địa chỉ tức thời: được ký hiệu bằng dấu # đặt trước dữ liệu dạng nhị phân, thập phân hoặc thập lục phân. Opcode Immediate Data Hình 4-1: Minh họa cách lấy dữ liệu từ bộ nhớ của vi xử lý
  • 45. A,

    30h ;nạp dữ liệu là 30h vào thanh ghi A. e. Địa chỉ tương đối: kiểu định địa chỉ này chỉ sử dụng với những lệnh nhảy. Nơi nhảy đến sẽ có địa chỉ bằng giá trị trong thanh ghi PC cộng với một giá trị lệch tương đối 8 bit [từ -128 đến 127]. Opcode Relative Offset f. Địa chỉ tuyệt đối: được dùng với các lệnh Acall, Ajmp. Lệnh này phân chia bộ nhớ thành các trang kích thước 2 Kbyte. Trong câu lệnh chứa 11 bit địa chỉ sẽ được thay thế cho 11 bit thấp của thanh ghi PC. A10 - A8 Opcode A7 - A0 g. Địa chỉ dài: được dùng với lệnh Lcall, Ljmp. Trong câu lệnh chứa 16 bit địa chỉ sẽ được nạp cho thanh ghi PC. Opcode A15 – A8 A7 – A0 h. Địa chỉ chỉ số: kiểu định địa chỉ này dùng một thanh ghi cơ bản [PC hoặc DPTR] làm con trỏ kết hợp với giá trị lệch được lưu trong thanh ghi A để đưa ra địa chỉ ô nhớ cần truy xuất. Ví dụ: MovC A,@A+DPTR ;chuyển nội dung của ô nhớ có địa chỉ A+DPTR trong bộ nhớ chương trình vào thanh ghi A. 4.3. Tập lệnh của vi điều khiển Tập lệnh trong Vi điều khiển được chia làm 5 nhóm:  Nhóm lệnh di chuyển dữ liệu  Nhóm lệnh số học  Nhóm lệnh logic  Nhóm lệnh rẽ nhánh  Nhóm lệnh xử lý bit Các quy ước khi sử dụng tập lệnh  Rn: các thanh ghi trong bank thanh ghi. Rn thay thế cho R0 đến R7. Ví dụ: Mov R5 , A 

    Data: dữ liệu tức thời 8 bit. Có thể viết ở dạng nhị phân [bin], thập phân [dec] hoặc thập lục phân [hex]. Sau khi biên dịch tất cả được lưu ở dạng nhị phân. Ví dụ: Mov R5 ,

    3Bh

  • 46.

    00111011b Mov R5 ,

    59 Lưu ý: dữ liệu ở dạng số hex nếu bắt đầu bằng ký tự A đến F thì phải thêm số ‘0’ phía trước khi lập trình. Để đơn giản, trong tài liệu này sẽ không thêm số ‘0’. Ví dụ: trong tài liệu ghi: Mov R5,

    B3h thì khi lập trình phải ghi: Mov R5,

    0B3h 

    Data16: dữ liệu tức thời 16 bit. Ví dụ: Mov dptr ,

    1A7Ch  Direct: ô nhớ có địa chỉ trực tiếp 8 bit trong RAM nội có giá trị từ 00h đến FFh. Ví dụ: Mov 05h ,

    30h ↔ Mov R5 ,

    30h  @Ri: con trỏ ô nhớ có địa chỉ gián tiếp được xác định bởi giá trị trong thanh ghi Ri. Ri thay thế cho R1 và R0. Ví dụ: Mov R0 ,

    30h Mov @R0 ,

    5Ch  Bit: địa chỉ trực tiếp của một bit được xác định cho các ô nhớ hoặc thanh ghi có khả năng truy xuất bit. Ví dụ: Setb 30h Mov C , 30h  Rel: relative, địa chỉ offset 8 bit có dấu, giá trị từ -128 đến 127. Giá trị này được cộng vào thanh ghi PC khi gặp các lệnh nhảy. Khi lập trình, địa chỉ tham chiếu đến được thay thế bằng một nhãn [label]. Ví dụ: Repeat: Mov A ,

    30 Add a,

    01 Sjmp Repeat  Add11: địa chỉ tuyệt đối 11 bit. Được thay thế bằng nhãn. Ví dụ: Ajmp Repeat  Add16: địa chỉ dài 16 bit. Được thay thế bằng nhãn. Ví dụ: Ljmp Repeat  Src: source, toán hạng nguồn, là nơi lấy dữ liệu trong RAM. Src có thể là A, Rn, Direct, @Ri,

    Data. Ví dụ: Mov A ,

    30  Dest: destination, toán hạng đích, là nơi dữ liệu sẽ chuyển đến. Dest có thể là A, Rn, Direct, @Ri.

  • 47. di chuyển dữ liệu [Data Transfer Instructions] 4.3.1.1. Lệnh di chuyển dữ liệu 8 bit trong RAM nội Cú pháp: Mov dest , src  Dest: A, Rn, direct, @Ri  Src: A, Rn, direct, @Ri,

    data Liệt kê lệnh: Mov A,Rn Mov A,direct Mov A,@Ri Mov A,

    data Mov Rn,A Mov Rn,direct Mov Rn,

    data Mov direct,A Mov direct,Rn Mov direct,direct Mov direct,@Ri Mov direct,

    data Mov @Ri,A Mov @Ri,direct Mov @Ri,

    data Chức năng: [src] → [dest] Mô tả: lệnh này dùng di chuyển [thực chất là sao chép] dữ liệu được lưu trong ô nhớ nguồn Src đến ô nhớ đích Dest. Dữ liệu chỉ di chuyển nội bộ trong RAM. Ví dụ: Mov A ,

    30 4.3.1.2. Lệnh di chuyển dữ liệu 16 bit vào thanh ghi dptr [Data PoinTer Register] Cú pháp: Mov dptr ,

    data16 Chức năng: data16 → [dptr] Mô tả: lệnh này dùng nạp địa chỉ 16 bit cho con trỏ dữ liệu dptr, có thể nạp riêng cho từng byte qua thanh ghi DPH và DPL. Ví dụ: Mov dptr ,

    1234h ↔ Mov dph ,

    12h Mov dpl ,

    34h

  • 48. chuyển dữ liệu với bộ nhớ ngoài Cú pháp: MovX @dptr , A MovX A , @dptr Chức năng: [A] → [[dptr]] [[dptr]] → [A] Mô tả: lệnh này dùng trao đổi dữ liệu giữa vi điều khiển với bộ nhớ mở rộng thông qua thanh ghi A và con trỏ DPTR. Ví dụ: copy dữ liệu từ ô nhớ 15h [đang có dữ liệu =

    AAh] sang ô nhớ 1234h. Mov A , 15h Mov dptr ,

    1234h MovX @dptr , A Ví dụ: copy dữ liệu từ ô nhớ 1234h [đang có dữ liệu =

    7Fh] sang thanh ghi R7. Mov dptr ,

    1234h Movx A , @dptr Mov R7 , A 4.3.1.4. Lệnh copy dữ liệu từ bộ nhớ chương trình Cú pháp: MovC A , @A+dptr MovC A , @A+PC Chức năng: [[A] + [dptr]] → [A] [[A] + [PC]] → [A] Mô tả: lệnh này dùng để lấy dữ liệu từ bộ nhớ chương trình [ROM] thông qua con trỏ DPTR hoặc thanh ghi PC. Ví dụ: copy dữ liệu từ ô nhớ 01F3h trong bộ nhớ chương trình sang ô nhớ 20h.

  • 49.

    01F3h Clr A MovC A , @A+dptr 4.3.1.5. Lệnh trao đổi dữ liệu với A [Exchange] Cú pháp: Xch A , src  Src: Rn, @Ri, direct Liệt kê lệnh: Xch A,Rn Xch A,@Ri Xch A,direct Chức năng: [A] ↔ [Src] Mô tả: lệnh này dùng trao đổi dữ liệu giữa A với nguồn dữ liệu còn lại là Src. Ví dụ: Xch A,20h 4.3.1.6. Lệnh trao đổi 4 bit thấp giữa ô nhớ gián tiếp và A [Exchange Digit] Cú pháp: XchD A , @Ri Chức năng: [A] 3-0 ↔ [[Ri]]3-0 Mô tả: lệnh này trao đổi dữ liệu 4 bit thấp của thanh ghi A với 4 bit thấp của ô nhớ bất kỳ thông qua con trỏ Ri. Ví dụ: Mov A,

    36h Mov 20h,

    75h Mov R0,

    20h XchD A,@R0

  • 50. dữ liệu ô nhớ trực tiếp vào ngăn xếp Cú pháp: Push direct Chức năng: [SP] = [SP] + 1 ; [direct] → [[SP]] Mô tả: lệnh này cất dữ liệu vào ngăn xếp được quản lý bởi con trỏ SP. Mỗi khi thực hiện push, SP sẽ tăng 1 để chỉ đến ô nhớ trống trên cùng của ngăn xếp. Lưu ý: lệnh này chỉ dùng địa chỉ trực tiếp. Ví dụ: giả sử ban đầu thanh ghi A có giá trị

    AAh, thanh ghi B có giá trị

    BBh, thanh ghi R0 có giá trị

    CCh và con trỏ ngăn xếp có giá trị

    5Fh. Để cất thanh ghi A, B, R0 vào ngăn xếp ta dùng các lệnh sau: Push E0h ;địa chỉ thanh ghi A Push F0h ;địa chỉ thanh ghi B Push 00h ;địa chỉ thanh ghi R0 Có thể dùng lệnh Push Acc với thanh ghi A. Acc là địa chỉ direct của A, khi biên dịch Acc sẽ được thay bằng E0h. 4.3.1.8. Lệnh lấy dữ liệu từ ngăn xếp Cú pháp: Pop direct Chức năng: [[SP]] → [direct] ; [SP] = [SP] – 1 Mô tả: lệnh này lấy dữ liệu từ ngăn xếp được quản lý bởi con trỏ SP sau đó lưu trở lại ô nhớ trực tiếp. Mỗi khi thực hiện pop, dữ liệu sẽ được lấy ra tại vị trí SP đang quản lý, sau đó SP sẽ giảm 1 để chỉ đến ô nhớ có dữ liệu trên cùng của ngăn xếp. Ví dụ: để lấy dữ liệu đã cất trước đó từ ngăn xếp vào thanh ghi A, B, R0 ta dùng các lệnh sau: Pop 00h ;địa chỉ thanh ghi R0 Pop F0h ;địa chỉ thanh ghi B Pop Acc ;địa chỉ thanh ghi A Lưu ý: ngăn xếp thuộc dạng bộ nhớ LIFO [vào sau ra trước] nên dữ liệu nào cất vào sau cùng thì được lấy ra trước.

  • 51. số học [Mathematical Instructions] 4.3.2.1. Lệnh cộng với thanh ghi A Cú pháp: Add A , src  Src: Rn, @Ri, direct,

    data Liệt kê lệnh: Add A,Rn Add A,@Ri Add A,direct Add A,

    data Chức năng: [A] + [src] → [A] ; [C] = 1 nếu KQ > 255 Mô tả: Lệnh này cộng dữ liệu trong A với dữ liệu chứa trong Src, kết quả sau khi cộng lưu lại vào A. Lệnh này tác động đến bit C. Nếu tổng lớn hơn 8 bit thì bit C tự động được đặt lên 1. Ví dụ: Mov A ,

    30h Mov R2 ,

    3Fh Add A , R2 4.3.2.2. Lệnh cộng với thanh ghi A và cờ nhớ C Cú pháp: AddC A , src  Src: Rn, @Ri,

    data, direct Liệt kê lệnh: AddC A,Rn AddC A,@Ri AddC A,direct AddC A,

    data Chức năng: [A] + [src] + [C] → [A] ; [C] = 1 nếu KQ > 255 Mô tả: lệnh này tương tự lệnh Add nhưng ngoài việc cộng dữ liệu của A với Src còn cộng thêm giá trị của bit C. Lệnh này dùng để mở rộng các phép toán cộng lớn hơn 8 bit. Ví dụ: Mov A ,

    30h Mov R2 ,

    3Fh Setb C Addc A , R2 4.3.2.3. Lệnh trừ với bao gồm cờ C Cú pháp: SubB A , src  Src: Rn, @Ri,

    data, direct Liệt kê lệnh: SubB A,Rn SubB A,@Ri SubB A,direct

  • 52. [A] - [src] – [C] → [A] ; [C] = 1 nếu KQ < 0 Mô tả: Lệnh này tương tự lệnh AddC nhưng là phép toán trừ. Dữ liệu trong A trừ cho Src đồng thời trừ cho bit C. Bit C trong lệnh trừ có vai trò là bit mượn [Borrow]. Ví dụ: lấy

    30h trừ dữ liệu trong R2 Mov A ,

    30h Clr C Subb A , R2 4.3.2.4. Lệnh hiệu chỉnh số BCD [Decimal Adjustment] Cú pháp: DA A Chức năng: [A]HEX → [A]BCD ; [C] = 1 nếu KQ > 99h Mô tả: lệnh này dùng để hiệu chỉnh số hex trong thanh ghi A thành số BCD sau khi thực hiện phép toán cộng. Bit C = 1 khi kết quả lớn hơn 99h. Ví dụ: Mov A ,

    39h Mov R2 ,

    45h Add A , R2 → A =

    7Eh DA A → A =

    84h 4.3.2.5. Lệnh nhân A với B [Multiply] Cú pháp: Mul AB Chức năng: [A] x [B] → [B: high byte] [A: low byte] Mô tả: lệnh nhân chỉ được dùng với thanh ghi A và thanh ghi B. Trước khi nhân, thanh ghi A và thanh ghi B chứa 2 thừa số. Sau khi thực hiện lệnh nhân, thanh ghi A và B chứa kết quả là tích số gồm 16 bit. Trong đó thanh ghi A chứa byte thấp và thanh ghi B chứa byte cao. Ví dụ: nhân

    30h với

    1Bh Mov A ,

    30h Mov B ,

    1Bh Mul AB Kết quả: A =

    10h, B =

    05h 4.3.2.6. Lệnh chia A với B [Divide] Cú pháp: Div AB Chức năng: [A] / [B] → [B: phần dư], [A: phần nguyên] Mô tả: lệnh chia chỉ được dùng với thanh ghi A và thanh ghi B. Trước khi chia thanh ghi A chứa số bị chia, thanh ghi B chứa số chia. Sau khi thực hiện lệnh chia, thanh ghi A chứa thương số, thanh ghi B chứa phần dư. Ví dụ: chia

    30h với

    1Bh

  • 53.

    30h Mov B ,

    1Bh Div AB Kết quả: A =

    01h, B =

    15h 4.3.2.7. Lệnh tăng dữ liệu trong Src lên 1 [Increment] Cú pháp: Inc Src  Src: A, Rn, @Ri, direct, dptr Liệt kê lệnh: Inc A Inc Rn Inc @Ri Inc direct Inc dptr Chức năng: [Src] +1 → [Src] Mô tả: dữ liệu chứa trong Src tăng 1 đơn vị. Nếu vượt qua giá trị lớn nhất mà Src có thể chứa thì kết quả sẽ bằng 0. Ví dụ: Mov A ,

    1Fh Mov dptr ,

    1B79h Inc A Inc dptr 4.3.2.8. Lệnh giảm dữ liệu trong Src xuống 1 [Decrement] Cú pháp: Dec Src  Src: A, Rn, @Ri, direct Liệt kê lệnh: Dec A Dec Rn Dec @Ri Dec direct Chức năng: [Src] -1 → [Src] Mô tả: dữ liệu chứa trong Src giảm 1 đơn vị. Nếu dữ liệu trước khi giảm bằng 0 thì kết quả nhận được là giá trị lớn nhất mà Src có thể chứa. Lưu ý: lệnh giảm không dùng được với thanh ghi DPTR. Ví dụ: Mov R5 ,

    1Fh Mov 30h ,

    00h Dec R5 Dec 30h

  • 54. logic [Logic Instructions] 4.3.3.1. Lệnh And, Or, Xor thanh ghi A với dữ liệu 8 bit Cú pháp: AnL A , Src OrL A , Src XrL A , Src  Src: Rn, @Ri,

    data, direct Liệt kê lệnh: AnL A,Rn AnL A,@Ri AnL A,direct AnL A,

    data OrL A,Rn OrL A,@Ri OrL A,direct OrL A,

    data XrL A,Rn XrL A,@Ri XrL A,direct XrL A,

    data Chức năng: AnL: [A] and [Src] → [A] OrL: [A] or [Src] → [A] XrL: [A] xor [Src] → [A] Mô tả: dữ liệu chứa trong thanh ghi A được and [hoặc or hoặc xor] với dữ liệu chứa trong Src. Kết quả lưu vào thanh ghi A. A B A AND B A OR B A XOR B NOT A 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 Hình 4-2: Bảng trạng thái các phép logic cơ bản Ta có: A and 0 = 0 A or 0 = A A xor 0 = A A and 1 = A A or 1 = 1 A xor 1 = Ā Do đó ta có thể thực hiện thay đổi giá trị các bit trong một byte mà không ảnh hưởng đến các bit còn lại bằng cách sau:

  • 55. AnL để xóa một số bit trong byte. Bit nào xóa thì and với 0, bit nào giữ nguyên thì and với 1. + Dùng lệnh OrL để đặt một số bit trong byte lên 1. Bit nào muốn đặt lên 1 thì or với 1, bit nào giữ nguyên thì or với 0. + Dùng lệnh XrL để đảo một số bit trong byte. Bit nào muốn đảo thì xor với 1, bit nào giữ nguyên thì xor với 0. Ví dụ: or thanh ghi A với thanh ghi R1. Mov A ,

    B2h Mov R1 ,

    5Eh Orl A , R1 [A] 1 0 1 1 0 0 1 0 input 1     [A] 1 1 1 1 1 1 1 0 or result      [R1] 0 1 0 1 1 1 1 0 input 2 Ví dụ: And thanh ghi A với ô nhớ trực tiếp 20h [direct]. Mov A ,

    0FCh Mov 20h ,

    3Fh Anl A , 20h [A] 1 1 1 1 1 1 0 0 input 1     [A] 0 0 1 1 1 1 0 0 and result     [20h] 0 0 1 1 1 1 1 1 input 2 Ví dụ: Xor thanh ghi A với ô nhớ gián tiếp qua con trỏ R1. Mov A ,

    14h Mov 20h ,

    05h Mov R1 ,

    20h Xrl A , R5 [A] 0 0 0 1 0 1 0 0 input 1   [A] 0 0 0 1 0 0 0 1 xor result   [@R1] 0 0 0 0 0 1 0 1 input 2

  • 56. Or, Xor ô nhớ trực tiếp với dữ liệu 8 bit Cú pháp: AnL direct , Src OrL direct , Src XrL direct , Src  Src: A,

    data Liệt kê lệnh: AnL direct,A AnL direct,

    data OrL direct,A OrL direct,

    data XrL direct,A XrL direct,

    data Chức năng: AnL: [direct] and [src] → [direct] OrL: [direct] or [src] → [direct] XrL: [direct] xor [src] → [direct] Mô tả: dữ liệu chứa trong ô nhớ trực tiếp [direct] được and [hoặc or hoặc xor] với dữ liệu chưa trong Src. Kết quả lưu vào ô nhớ trực tiếp. Ví dụ: Mov A ,

    1Ch Mov 30h ,

    79h Xrl 30h , A 4.3.3.3. Lệnh xóa dữ liệu trong thanh ghi A [Clear] Cú pháp: Clr A Chức năng: 0 → [A] Mô tả: dữ liệu chứa trong thanh ghi A được xóa về 0. Lệnh này tương đương với lệnh Mov A,

    0. Ví dụ: Mov A ,

    5Ch Clr A ↔ Mov A ,

    00h [A] 0 1 0 1 1 0 1 0 input         clr [A] 0 0 0 0 0 0 0 0 result 4.3.3.4. Lệnh đảo dữ liệu trong thanh ghi A [Complement] Cú pháp: Cpl A Chức năng: [Ā] → [A] Mô tả: dữ liệu chứa trong thanh ghi A được đảo các bit. Lệnh này tương đương với lệnh Xrl A,

    11111111b.

  • 57. A ,

    0Fh Cpl A Kết quả: A =

    F0h [A] 0 0 0 0 1 1 1 1 input         cpl [A] 1 1 1 1 0 0 0 0 result 4.3.3.5. Lệnh xoay thanh ghi A [Rotate] Cú pháp: RL A [Rotate Left] RR A [Rotate Right] Chức năng: RL: [A0] → [A1], [A1] → [A2],…,[ A7] → [A0] RR: [A7] → [A6], [A6] → [A5],…,[ A0] → [A7] Mô tả: dữ liệu chứa trong thanh ghi A được xoay qua trái [hoặc phải] 1 bit. Nếu xoay trái, bit A7 sẽ quay về vị trí của A0. Nếu quay phải, bit A0 sẽ quay về vị trí của A7. [A] A7 A6 A5 A4 A3 A2 A1 A0 input ← ← ← ← ← ← ← ← RL [A] A6 A5 A4 A3 A2 A1 A0 A7 result [A] A7 A6 A5 A4 A3 A2 A1 A0 input → → → → → → → → RR [A] A0 A7 A6 A5 A4 A3 A2 A1 result Ví dụ: Mov A ,

    65h RL A [A] 0 1 1 0 0 1 0 1 input ← ← ← ← ← ← ← ← RL [A] 1 1 0 0 1 0 1 0 result Kết quả: A =

    CAh 4.3.3.6. Lệnh xoay thanh ghi A cùng với bit C [Rotate with C] Cú pháp: RLC A [Rotate Left] RRC A [Rotate Right] Chức năng: RL: [A0] → [A1],…,[ A7] → [C], [C] → [A0] RR: [A7] → [A6],…,[ A0] → [C], [C] → [A7] Mô tả: dữ liệu chứa trong thanh ghi A được xoay qua trái [hoặc phải] 1 bit cùng với bit C, nghĩa là cùng xoay 9 bit. Nếu xoay trái, bit A7 vào vị trí bit C và bit C sẽ quay về vị trí của A0. Nếu quay phải, bit A0 sẽ vào vị trí bit C và bit C sẽ quay về vị trí của A7.

  • 58. A6 A5 A4 A3 A2 A1 A0 input ← ← ← ← ← ← ← ← RLC A7 A6 A5 A4 A3 A2 A1 A0 C result [C] [A] C → A7 A6 A5 A4 A3 A2 A1 A0 input → → → → → → → → RRC A0 C A7 A6 A5 A4 A3 A2 A1 result [C] [A] Ví dụ: Mov A ,

    65h Clr C RRC A 0 → 0 1 1 0 0 1 0 1 input → → → → → → → → RRC 1 0 0 1 1 0 0 1 0 result [C] [A] Kết quả: A =

    32h, C = 1 4.3.3.7. Lệnh xoay 4 bit trong thanh ghi A Cú pháp: Swap A Chức năng: [A7-4][A3-0] → [A3-0] [A7-4] Mô tả: dữ liệu chứa trong thanh ghi A được đổi vị trí 4 bit cao với 4 bit thấp. Việc này tương đương xoay trái [hoặc phải] 4 bit. [A] A7 A6 A5 A4 A3 A2 A1 A0 input → → → → ← ← ← ← Swap [A] A3 A2 A1 A0 A7 A6 A5 A4 result Ví dụ: Mov A ,

    7Dh Swap A ↔ RL A RL A RL A RL A [A] 0 1 1 1 1 1 0 1 input → → → → ← ← ← ← Swap [A] 1 1 0 1 0 1 1 1 result Kết quả: A =

    D7h

  • 59. rẽ nhánh [Control Transfer Instructions] 4.3.4.1. Lệnh gọi chương trình con [Call] Cú pháp: Call Address  Address: Add11, Add16 Liệt kê lệnh: Acall Add11 [Absolute Call] Lcall Add16 [Long Call] Chức năng: [PC] → [[SP]] [Address] → [PC] Mô tả: lệnh Call dùng để gọi thực thi chương trình con được xác định vị trí lưu trong ROM bằng địa chỉ tuyệt đối Add11 hoặc địa chỉ dài Add16 [gọi chung là Address]. Giá trị của thanh ghi PC tạm thời được lưu vào ngăn xếp, sau đó PC được nạp giá trị mới chính là địa chỉ của chương trình con. Khi lập trình bằng Assembly, Add11 và Add16 được thay thế bằng “Nhãn” [Label] để tham chiếu đến vị trí của chương trình con. Cách đặt tên Nhãn: do người lập trình tự đặt với điều kiện không được trùng với từ khoá, mã gợi nhớ, chỉ dẫn, toán tử hoặc ký hiệu tiền định nghĩa. Nhãn phải bắt đầu bằng ký tự chữ, dấu chấm hỏi ‘?’, dấu gạch dưới ‘_’. Độ dài của nhãn tối đa 31 ký tự và kết thúc bằng dấu hai chấm ‘:’. 4.3.4.2. Lệnh trở về từ chương trình con [Return] Cú pháp: RET RETI Chức năng: [[SP]] → [PC] Mô tả: lệnh RET [hoặc RETI] dùng để kết thúc chương trình con [hoặc chương trình con phục vụ ngắt] đang được thực thi. Thanh ghi PC sẽ được nạp lại địa chỉ của chương trình chính trước đó đang được lưu trong ngăn xếp. Ví dụ: chương trình con “Delay” được gọi và thực thi như hình bên bằng lệnh “Lcall”. [1] Giá trị thanh ghi PC khi reset, chương trình bắt đầu chạy từ địa chỉ 0000h. [2] Khi thực thi đến lệnh “Lcall” ở địa chỉ 0123h, lệnh này chiếm 3 byte nên thanh ghi PC tăng lên 0126h. Thanh ghi PC được cất vào ngăn xếp và nạp địa chỉ 0234h của chương trình con “Delay”. [3] Chương trình con “Delay” bắt đầu được thực thi. address ROM 0000h - [1] - - - Chương trính chính 0123h Lcall Delay [2] 0126h - [5] - - - 0234h Delay: [3] - - - - Chương trình con [Sub rountine] 0256h Ret [4] - - -

Chủ Đề