Bài Bài giảng Kỹ thuật Vi xử lý - Chương 3

22 694 2
Bài Bài giảng Kỹ thuật Vi xử lý - Chương 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Là loại máy tính được thiết kế để giải các bài toán lớn với tốc độ rất nhanh -Nó làm việc với số liệu có độ dài từ 64 bit hoặc hơn và được trang bị bộ nhớ rất lớn, vì vậy kích thước lớn. -Chúng thường được dùng để điều khiển các hệ thống thiết bị dùng trong quân sự hoặc các hệ thống máy móc của chương trình nghiên cứu vũ trụ, để xử lý thông tin trong ngành ngân hàng, vv… Ví dụ : IBM 4381, Honeywell DSP8 Loại mạnh nhất trong các máy tính lớn gọi là siêu máy tính (supercomputer). Ví dụ : Y-MP/832 của Gray.

Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 1 CHƯƠNG 3: LẬP TRÌNH HP NGỮ HỌ MCS-51 Tại phần trước chúng ta đã chỉ ra cấu trúc 3-bus chung cho tất cả các họ vi xử lý. Với cấu trúc này, tất cả các họ vi xử khác nhau có thể thực hiện được mọi công việc mà ta có thể thấy trong cuộc sống, từ điều khiển các quá trình phức tạp, truyền thông, trò chơi điện tử… Một câu hỏi đặt ra là: vậy thì cái gì đặc trưng cho bộ vi xử để nó có thể thực hiện chức năng riêng biệt của vi xử lý. Đó chính là phần mềm (software), hay chương trình. I. CÁC KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH CHO VI XỬ VI ĐIỀU KHIỂN 1. Chương trình - Chương trình (program) là chuỗi các câu lệnh hay phát biểu được viết trong một dạng đặc thù (ngôn ngữ lập trình). Các lệnh này khi được thực hiện bởi vi xử sẽ thực hiện những thao tác nhất đònh với kết quả đoán trước được. - Có nhiều loại ngôn ngữ lập trình: + Ngôn ngữ máy (machine language) Mã nhò phân Mã bát phân hoặc thập lục phân + Hợp ngữ (assembly language) [cần có assembler – trình dòch hợp ngữ] Mã kí hiệu + Ngôn ngữ cấp cao [cần có compiler – trình biên dòch] Pascal, Fortran, Basic, C, C++, … 2. Lưu đồ chương trình - Bước đầu tiên của việc lập trình là xác đònh rõ ràng mục đích của chương trình và trình tự cần thiết để đạt mục đích đó. Một trong những công cụ quan trọng trong việc phát triển chương trình là lưu đồ chương trình. - Lưu đồ chương trình là biểu diễn bằng hình ảnh thứ tự các thao tác cần làm để giải quyết một vấn để cụ thể. Lưu đồ chương trình không phụ thuộc ngôn ngữ lập trình hoặc loại vi xử cụ thể nào. Lưu đồ chương trình chỉ phụ thuộc vào công việc mà người lập trình muốn hoàn thành. - Các khối cơ bản dùng trong lưu đồ chương trình: Khối bắt đầu và kết thúc Khối thực hiện Khối quyết đònh (khối rẽ nhánh có điều kiện) Gọi chương trình con Khối nhập/xuất Đầu nối (khi qua trang mới) Chỗ nối chung Rất nhiều người lập trình khi mới bắt đầu với việc lập trình thường không thích sử dụng lưu đồ chương trình nghó rằng việc vẽ lưu đồ là tốn thời gian. Điều này chỉ đúng với các chương trình ngắn và đơn giản, nhưng trường hợp chương trình dài hơn thì nếu không có lưu đồ sẽ rất dễ bò rối rắm. Lưu đồ chương trình giúp sắp xếp các ý tưởng và lời giải của từng vấn đề riêng biệt. Sau khi hoàn thành lưu đồ, ta có thể trao đổi với người khác về ý tưởng Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 2 của mình. Có lưu đồ chương trình thì dù sau một thời gian dài ta vẫn có thể quay lại với chương trình của mình một cách dễ dàng mà không bò “lạc” trong các dòng lệnh vốn rất chi tiết của chương trình hợp ngữ. 3. Khuôn dạng của chương trình hợp ngữ Một chương trình hợp ngữ có thể bao gồm: - Các lệnh (instruction) của vi xử lý/vi điều khiển - Các chỉ dẫn (directive) của trình dòch hợp ngữ - Các điều khiển (control) của trình dòch hợp ngữ - Các chú thích (comment) Các lệnh là các mã gợi nhớ quen thuộc và sẽ được dòch ra mã máy tương ứng với vi xử lý/vi điều khiển. Các chỉ dẫn của trình dòch hợp ngữ là các lệnh của trình dòch hợp ngữ dùng để đònh nghóa cấu trúc chương trình, các hiệu, dữ liệu, các hằng số… Các điều khiển của trình dòch hợp ngữ thiết lập các chế độ trình dòch hợp ngữ và các luồng hợp dòch trực tiếp. Các chú thích giúp cho chương trình dễ đọc bằng cách đưa ra các giải thích về mục đích và hoạt động của các chuỗi lệnh. Các dòng chứa các lệnh và các chỉ dẫn phải được viết theo các qui luật mà trình dòch hợp ngữ hiểu được. Mỗi dòng được chia thành các trường cách biệt nhau bởi khoảng trắng hay khoảng tab. Khuôn dạng tổng quát của mỗi dòng như sau: Tên (Nhãn) Mã gợi nhớ Các toán hạng Chú thích trong đó chỉ có trường mã gợi nhớ là bắt buộc. Với trình dòch hợp ngữ ASM51, trường mã gợi nhớ không cần ở trên cùng một dòng với trường nhãn. Tuy nhiên, trường toán hạng phải ở trên cùng một dòng với trường mã gợi nhớ. Có thể viết các dòng này bằng chữ hoa hay chữ thường và chúng sẽ được coi là tương đương trình dòch hợp ngữ không phân biệt kiểu chữ. a. Trường tên Trường này có thể chứa các nhãn, tên biến, hay tên chương trình con (thủ tục). Các tên và nhãn này sẽ được trình dòch hợp ngữ gán bằng các đòa chỉ cụ thể của lệnh (hoặc dữ liệu) theo sau. Tên và nhãn có thể có độ dài từ 1 đến 31 tự, không chứa khoảng trắng, phải bắt đầu bằng tự chữ, dấu ‘?’ hay dấu ‘_’ và tiếp theo phải là các tự chữ, các số, dấu ‘?’ hay dấu ‘_’. Các tên và nhãn không được trùng với các từ khóa (các mã gợi nhớ, các chỉ dẫn, các toán tử hay các hiệu đònh nghóa trước). Nói chung, ta cứ đặt các tên bình thường và có ý nghóa là sẽ ít bò lỗi. Một nhãn được kết thúc bằng dấu ‘:’. b. Trường mã gợi nhớ Trường này chứa mã gợi nhớ (mnemonic) cho biết chức năng của lệnh (ví dụ như ADD, MOV, DIV, MUL, INC…) hay chỉ dẫn của trình dòch hợp ngữ (ví dụ như ORG, END, EQU, DB…) . Các chỉ dẫn không được dòch ra mã máy. c. Trường toán hạng (operand) Trường này chứa đòa chỉ hay dữ liệu mà lệnh sẽ sử dụng. Tùy theo từng loại lệnh mà có thể có 0, 1, 2 hay 3 toán hạng. Các toán hạng cách nhau bởi dấu phẩy. d. Trường chú thích (comment) Các chú thích để làm rõ chương trình được đặt trong trường chú thích ở cuối dòng lệnh. Điều này giúp cho người đọc chương trình dễ hiểu các thao tác của chương trình hơn. Các chú thích cần phải được bắt đầu bằng dấu ‘;’. Các chú thích có thể chiếm nhiều dòng riêng và cũng phải bắt đầu bằng dấu chấm ‘;’. Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 3 Khi ta viết chương trình bằng kí tự của bảng chữ cái, ta gọi đây là dạng mnemonic (mã gợi nhớ). Vi xử lý/vi điều khiển không hiểu được các chữ cái này. Chúng đòi hỏi các lệnh phải được viết dưới dạng đặc biệt gọi là object code (mã đối tượng, mã lệnh). Mnemonic được dùng trong chương trình gốc dưới dạng source code (mã nguồn) do người lập trình viết bằng hợp ngữ hoặc (ngôn ngữ lập trình khác). Còn object code là ngôn ngữ chỉ bao gồm các số 1 và 0, đây là ngôn ngữ mà vi xử lý/vi điều khiển sẽ làm việc được. Vi xử lý/vi điều khiển đọc object code từ bộ nhớ dưới dạng các byte và biên dòch các dữ liệu thành lệnh cần thực thi.  Một số chỉ dẫn của trình dòch hợp ngữ thường dùng: • ORG Dạng: ORG bieuthuc Chỉ dẫn ORG thay đổi nội dung bộ đếm chương trình theo giá trò của bieuthuc để thiết lập nơi bắt đầu mới của chương trình cho các phát biểu theo sau nó. • END Dạng: END END là phát biểu cuối cùng của chương trình nguồn. Nhãn không được sử dụng trên dòng này. • EQU Dạng: kyhieu EQU bieuthuc Chỉ dẫn EQU gán giá trò của bieuthuc cho kyhieu. Kyhieu phải là tên hợp lệ. • DB Dạng: nhan: DB bieuthuc{, bieuthuc][…] Chỉ dẫn DB thường được dùng để đònh nghóa các giá trò byte tương ứng với các bieuthuc trong bộ nhớ chương trình bắt đầu từ đòa chỉ tương ứng với nhan. 4. Biên dòch chương trình - Chương trình phải được chuyển sang thành dạng object code trước khi vi xử lý/vi điều khiển có thể thực hiện chương trình. Quá trình chuyển từ chương trình dạng source code sang object code gọi là biên dòch/hợp dòch (assembling). - Sau đó ta nạp object code này vào bộ nhớ vi xử lý/vi điều khiển và vi xử lý/vi điều khiển chạy chương trình. Việc chuyển đổi mnemonic sang object code thường thực hiện bằng máy tính. Trước hết ta dùng một chương trình gọi là editor để viết và lưu mã nguồn vào bộ nhớ. Ta có thể sử dụng editor quen thuộc của Window như Notepad hoặc trong môi trường DOS ta sử dụng lệnh edit trong Norton Commandor. Sau đó ta cho chạy chương trình biên dòch gọi là assembler, chương trình này sẽ lấy mã lệnh trong bộ nhớ và biên dòch sang tập tin dưới dạng object code. Cuối cùng, ta dùng một chương khác để nạp object code từ bộ nhớ của máy tính vào bộ nhớ của vi xử lý/vi điều khiển. 5. Nạp chương trình vào bộ nhớ Khi vi xử lý/vi điều khiển được cấp nguồn điện lần đầu hay được khởi động lại bằng cách kích hoạt vào chân RST thì vi xử lý/vi điều khiển thực hiện một số lệnh bên trong. Một trong các lệnh đó là xuất một đòa chỉ đặc biệt lên bus đòa chỉ và đọc opcode đầu tiên tại đòa chỉ đó. Đối với Z80, 8080, 8085 và họ MCS-51 thì đó là đòa chỉ 0000H. Do đó, opcode đầu tiên của chương trình cần thực hiện phải được đặt ở vò trí 0000H trong bộ nhớ chương trình và khi viết chương trình nên sử dụng chỉ dẫn ORG 0000H ở dòng đầu tiên của chương trình chính để báo cho trình dòch hợp ngữ biết chương trình được bắt đầu ở đòa chỉ 0000H. Chương trình được nạp vào bộ nhớ thực chất chỉ là các số nhò phân hay hex. Trong các số này, có số sẽ là opcode, có số sẽ là dữ liệu được sử dụng bởi các lệnh. Việc nhầm lẫn thứ tự Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 4 lệnh sẽ dẫn đến các kết quả không lường trước được. Phương pháp duy nhất để phân biệt giữa opcode và dữ liệu là cần phải biết đòa chỉ chính xác của opcode đầu tiên tring chương trình và nạp chương trình đúng vò trí và theo thứ tự. II. CÁC KIỂU ĐỊNH ĐỊA CHỈ Các kiểu đònh đòa chỉ là phần cần thiết cho toàn bộ tập lệnh của mỗi một bộ vi xử hay vi điều khiển. Các kiểu đònh đòa chỉ cho phép xác đònh rõ nguồn và đích của dữ liệu theo nhiều cách khác nhau mà vi xử hay vi điều khiển sử dụng trong quá trình thực thi lệnh. Có 8 kiểu đònh đòa chỉ đối với họ MCS-51: - Thanh ghi (register) - Trực tiếp (direct) - Gián tiếp (indirect) - Tức thời (immediate) - Tương đối (relative) - Tuyệt đối (absolute) - Dài (long) - Chỉ số (index) 1. Đònh đòa chỉ thanh ghi - Trong lệnh truy xuất đến các thanh ghi R0 ÷ R7 của bank thanh ghi tích cực. Các lệnh này được mã hóa dài 1 byte, trong đó dùng 3 bit thấp nhất để chỉ thanh ghi được truy xuất. - Ngoài ra, trong lệnh cũng có thể truy xuất đến các thanh ghi đặc biệt như: thanh ghi tích lũy (ký hiệu A), con trỏ dữ liệu (ký hiệu DPTR), bộ đếm chương trình (ký hiệu PC), cờ nhớ (ký hiệu C) và cặp thanh ghi AB (ký hiệu AB). Các lệnh này không cần các bit đòa chỉ, bản thân opcode của lệnh đã chỉ ra thanh ghi được dùng. dụ: INC R1 ; tăng nội dung thanh ghi R1 lên 1 INC A ; tăng nội dung thanh ghi A lên 1 INC DPTR ; tăng nội dung thanh ghi DPTR lên 1 2. Đònh đòa chỉ trực tiếp - Dùng để truy xuất các ô nhớ trong RAM nội (đòa chỉ từ 00H ÷ 7FH) hay các thanh ghi chức năng đặc biệt (đòa chỉ từ 80H ÷ FFH). Một byte được thêm vào tiếp theo opcode để xác đònh đòa chỉ. - Trình dòch hợp ngữ cho phép sử dụng tên các thanh ghi chức năng đặc biệt (thay cho đòa chỉ). dụ: INC ACC ; tăng nội dung thanh ghi A lên 1 Lệnh này cùng chức năng với lệnh INC A ở trên nhưng khác kiểu đònh đòa chỉ → các byte mã lệnh khác nhau. MOV P0,A ; chuyển nội dung của thanh ghi A vào Port 0 (≡ MOV 80H,A) INC 30H ; tăng nội dung ô nhớ 30H lên 1 Nội dung 30H ban đầu là 06H, sau lệnh trên (30H) = 07H … 06H 30H … Opcode n 2 n 1 n 0 Opcode Đòa chỉ trực tiếp Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 5 3. Đònh đòa chỉ gián tiếp - Trong lệnh dùng các thanh ghi R0 và R1 làm con trỏ để chỉ ra đòa chỉ ô nhớ trong RAM nội mà lệnh tác động đến. Bit thấp nhất trong mã lệnh sẽ xác đònh thanh ghi nào được dùng. - Quy ước: dùng dấu @ trước R0 và R1 cho kiểu đònh đòa chỉ này. dụ: (R1) = 30H, (30H) = 52H INC @R1 ; tăng nội dung ô nhớ được trỏ bởi R1 → (R1) = 30H, (30H) = 53H - Kiểu đònh đòa chỉ này thường dùng khi truy xuất tới một vùng nhớ liên tiếp. dụ: Các bước sau được thực hiện để xóa 50 ô nhớ trong RAM nội bắt đầu từ đòa chỉ 30H: 4. Đònh đòa chỉ tức thời - Các dữ liệu tức thời được dùng trực tiếp trong lệnh có thể là một hằng số, một số, một biểu thức toán học… Trình dòch hợp ngữ sẽ tự động tính toán và thay thế dữ liệu tức thời vào mã lệnh. - Quy ước: dùng dấu # trước các toán hạng tức thời. dụ: MOV A,#7 ; nạp giá trò 7 vào thanh ghi A, (A) = 7H MOV A,#7+8 ; nạp giá trò 15 vào thanh ghi A, (A) = 0FH MOV A,#‘B’ ; nạp giá trò 66 (mã ASCII của tự B) vào thanh ghi A, (A) = 42H 5. Đònh đòa chỉ tương đối - Được dùng trong các lệnh nhảy ngắn. … … 52H 30H 30H R1 → 53H 30H 30H R1 … … Opcode Dữ liệu tức thời Opcode i (R0) = 30H Đủ 50 byte ? - (@R0) = 0 - Tăng R0 N Y Tiếp tục Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 6 - Một đòa chỉ tương đối (hay còn gọi là offset) là một giá trò 8 bit có dấu (từ –128 đến +127) cho biết độ lệch từ vò trí lệnh theo ngay sau lệnh nhảy đến đích. Giá trò này được cộng thêm vào thanh ghi bộ đếm chương trình (PC) để tạo ra đòa chỉ của lệnh tiếp theo cần được thực thi. dụ: Tính offset cho kiểu đònh đòa chỉ tương đối trong hai trường hợp nhảy tới và nhảy lùi. - Thông thường các đích nhảy được xác đònh bằng các nhãn và trình dòch hợp ngữ sẽ xác đònh offset tương đối tương ứng. dụ: Nếu nhãn THERE được đặt ở đòa chỉ 1040H và lệnh: SJMP THERE ở trong bộ nhớ chương trình tại đòa chỉ 1000H và 1001H → đòa chỉ của lệnh kế tiếp sẽ là 1000H + 02H = 1002H, nên offset tương đối sẽ là: offset = 1040H – 1002H = 3EH. Trình dòch hợp ngữ sẽ gán offset tương đối là 3EH cho byte 2 của lệnh SJMP THERE. - Có ưu điểm là không phụ thuộc vào vò trí nhưng bò giới hạn về tầm nhảy. 6. Đònh đòa chỉ tuyệt đối - Chỉ dùng trong các lệnh AJMP và ACALL. - Cho phép rẽ nhánh chương trình trong trang 2K hiện hành của bộ nhớ chương trình (tức tầm nhảy của lệnh là trong trang 2K hiện hành của bộ nhớ chương trình). - 11 bit thấp của đòa chỉ đích, trong đó 3 bit cao (A8 ÷ A10) được đưa vào cùng với opcode tạo thành byte thứ 1 của lệnh và 8 bit thấp (A0 ÷ A7) tạo thành byte thứ 2 của lệnh. 5 bit cao của đòa chỉ đích là 5 bit cao hiện hành của bộ đếm chương trình (PC) → lệnh theo ngay sau lệnh rẽ nhánh và đích đến phải ở trong cùng 1 trang 2K. - Kiểu đònh đòa chỉ này có tầm nhảy bò hạn chế và cung cấp mã phụ thuộc vò trí. 010A 0109 0108 0107 5 0106 4 0105 3 0104 2 0103 1 0102 0101 05 0100 80 00FF Code memory SJMP 0107H Offset tương đối từ đòa chỉ 0102H là “5” (a) Nhảy ngắn tới 2043 2042 2041 F6 -1 2040 80 -2 203F -3 203E -4 203D -5 203C -6 203B -7 203A -8 2039 -9 2038 -10 Code memory SJMP 2038H Offset tương đối từ đòa chỉ 2042H là “-10” (b) Nhảy ngắn lùi Hình 3.1 A10 A9 A8 Opcode A7 A0 Opcode Đòa chỉ tương đối Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 7 dụ: Nếu nhãn THERE đặt tại đòa chỉ 0F46H và lệnh: AJMP THERE ở trong bộ nhớ tại đòa chỉ 0900H và 0901H → lệnh theo ngay sau lệnh nhảy bắt đầu ở đòa chỉ 0902H sẽ có 5 bit cao đòa chỉ trùng với đòa chỉ nhãn THERE là 00001 (trang 1). → Mã hoá lệnh: 7. Đònh đòa chỉ dài - Chỉ dùng trong các lệnh LCALL và LJMP. - Đây là các lệnh rẽ nhánh 3 byte, với 2 byte sau (byte 2 và byte 3) là đòa chỉ đích của lệnh (16 bit). - Ưu điểm là có thể sử dụng toàn bộ vùng nhớ chương trình 64K, nhưng lệnh lại dài đến 3 byte và phụ thuộc vào vò trí. 8. Đònh đòa chỉ chỉ số - Dùng một đòa chỉ nền (chứa trong thanh ghi PC hay DPTR) và một offset (chứa trong thanh ghi A) để tạo đòa chỉ được tác động cho các lệnh JMP hoặc MOVC. (Đòa chỉ được tác động) = (PC) hoặc (DPTR) + (A) - Thường dùng khi truy xuất dữ liệu trong một bảng dữ liệu đã được đònh nghóa trước. Khi đó, thanh ghi PC hay DPTR sẽ giữ đòa chỉ đầu bảng và thanh ghi A giữ đòa chỉ offset của dữ liệu cần truy xuất trong bảng. dụ: Bảng các giá trò bình phương của số nguyên. Nếu DPTR chứa đòa chỉ đầu bảng (tương ứng nhãn TABLE) và (A) = 3, thì sau khi thực hiện lệnh: MOVC A, @A+DPTR → (A) = 09H. 1 1 1 0 0 0 0 1 0 1 0 0 0 1 1 0 Hình 3.2 FFFF F800 2K trang 31 1800 ………. 17FF 1000 2K trang 2 0FFF 0800 2K trang 1 07FF 0000 2K trang 0 32 x 2K = 64K Trong một trang 2K bất kỳ, chỉ có 11 bit thấp thay đổi (a) Bộ nhớ được chia thành nhiều trang 2K A15 A10 A0 5 bit xác đònh trang 2K 11 bit xác đònh đòa chỉ trong một trang 2K (b) Bên trong một trang 2K Đòa chỉ A15 ÷ A8 Đòa chỉ A7 ÷ A0 Opcode …… 10H 09H 04H 01H 00H TABLE 3 Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 8 III. TẬP LỆNH (tham khảo thêm “Tóm tắt tập lệnh” và “Mô tả lệnh”) Tập lệnh của 8051 được chia làm 5 nhóm: - Nhóm lệnh số học - Nhóm lệnh logic - Nhóm lệnh chuyển dữ liệu - Nhóm lệnh rẽ nhánh (chuyển điều khiển) - Nhóm lệnh xử bit IV. CÁC KỸ THUẬT LẬP TRÌNH Lập trình cấu trúc (structured programming) là một kỹ thuật tổ chức và mã hóa các chương trình nhằm giảm sự phức tạp, dễ dàng gỡ rối và hiệu chỉnh chương trình. Lập trình cấu trúc nhấn mạnh đến các nhiệm vụ lập trình. Người lập trình phân tích một nhiệm vụ lớn thành nhiều công việc nhỏ hơn, sau đó dần dần chi tiết, cụ thể hóa để được các vấn đề đơn giản. Qua đó, tìm ra cách giải quyết vấn đề dưới dạng những thuật giải cụ thể rõ ràng, để có thể minh họa bằng ngôn ngữ giải thuật. Trong lập trình cấu trúc, các thuật giải này được gọi là các chương trình con. Cách thức phân tích và thiết kế như vậy ta gọi là nguyên lập trình từ trên xuống (top- down), để thể hiện quá trình suy diễn từ cái chung nhất cho đến cái cụ thể nhất. Tất cả các vấn đề lập trình đều có thể được giải quyết chỉ dựa trên 3 cấu trúc: * Các phát biểu * Các vòng lặp * Các lựa chọn 1. Các phát biểu - Các phát biểu là một cách thức cơ bản để thực hiện một công việc nào đó. - Các phát biểu còn bao gồm cả việc gán giá trò cho 1 biến hoặc gọi chương trình con. 2. Cấu trúc vòng lặp - Được sử dụng để thực hiện một hoặc một số công việc lặp đi lặp lại nhiều lần. - Có hai dạng vòng lặp cơ bản: a.WHILE/DO + Cú pháp: WHILE [điều kiện] DO [các phát biểu] + Lưu đồ: Statement Enter Condition true? Exit No Yes dụ: Viết chương trình con SUM tính tổng của một chuỗi các số. Các thông số truyền vào chương trình con là chiều dài của chuỗi số (được chứa trong thanh ghi R7) và đòa chỉ bắt đầu của chuỗi số đó trong RAM nội (được chứa trong thanh ghi R0). Kết quả trả về được chứa trong thanh ghi A. Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 9 Giải Pseudo-code: [sum = 0] WHILE [length > 0] DO Begin [sum = sum + @pointer] [tăng pointer] [giảm length] End Lưu đồ: Cộng giá trò với sum Enter Length > 0 ? Exit No Yes Sum = 0 Tăng pointer Giảm length Mã 8051: SUM: CLR A LOOP: CJNE R7, #0, STATEMENT JMP EXIT STATEMENT: ADD A, @R0 INC R0 DEC R7 JMP LOOP EXIT: RET Hoặc: SUM: CLR A INC R7 MORE: DJNZ R7, SKIP RET SKIP: ADD A, @R0 INC R0 SJMP MORE b. REPEAT…UNTIL Cú pháp: REPEAT [các phát biểu] UNTIL [điều kiện] Bài giảng VI XỬ Chương 3: Lập trình hợp ngữ họ MCS-51 http://www.ebook.edu.vn 10 Lưu đồ: Statement Enter Condition true? Exit Yes No dụ 1: Viết chương trình con để tìm một chuỗi được kết thúc bởi tự Null được trỏ bởi thanh ghi R0 và xác đònh xem trong chuỗi có tự Z hay không. Kết quả trả về ACC = Z nếu có tự Z ở trong chuỗi, nếu không thì ACC = 0. Giải: Pseudo-code: REPEAT [ACC = @pointer] [tăng pointer] Until [ACC == ‘Z’ or ACC == 0] Lưu đồ: Tăng pointer Enter tự = “Z” ? Exit Yes Nhận một tự tự = 0 ?No No Yes Mã 8051: STATEMENT: MOV A, @R0 INC R0 JZ EXIT CJNE A, #’Z’, STATEMENT EXIT: RET

Ngày đăng: 27/08/2013, 14:21

Hình ảnh liên quan

- Lưu đồ chương trình là biểu diễn bằng hình ảnh thứ tự các thao tác cần làm để giải quyết một vấn để cụ thể - Bài Bài giảng Kỹ thuật Vi xử lý - Chương 3

u.

đồ chương trình là biểu diễn bằng hình ảnh thứ tự các thao tác cần làm để giải quyết một vấn để cụ thể Xem tại trang 1 của tài liệu.
Hình 3.1 - Bài Bài giảng Kỹ thuật Vi xử lý - Chương 3

Hình 3.1.

Xem tại trang 6 của tài liệu.
- Thường dùng khi truy xuất dữ liệu trong một bảng dữ liệu đã được định nghĩa trước. Khi đó, thanh ghi PC hay DPTR sẽ giữ địa chỉ đầu bảng và thanh ghi A  - Bài Bài giảng Kỹ thuật Vi xử lý - Chương 3

h.

ường dùng khi truy xuất dữ liệu trong một bảng dữ liệu đã được định nghĩa trước. Khi đó, thanh ghi PC hay DPTR sẽ giữ địa chỉ đầu bảng và thanh ghi A Xem tại trang 7 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan