Tài liệu Lập trình hợp ngữ 8051 doc

15 876 16
Tài liệu Lập trình hợp ngữ 8051 doc

Đ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

chương Lập trình hợp ngữ 8051 2.1 Bên 8051 Trong phần nghiên cứu ghi 8051 trình bày cách sử dụng với lệnh đơn giản MOV ADD 2.1.1 Các ghi Trong CPU ghi dùng để lưu cất thông tin tạm thời, thông tin byte liệu cần sử lý địa đến liệu cần nạp Phần lớn ghi 8051 ghi bit Trong 8051 có kiểu liệu: Loại bit, bit ghi trình bày sau: D7 D6 D5 D4 D3 D2 D1 D0 với MSB bit có giá trị cao D7 LSB bit có giá trị thấp D0 (MSB - Most Sigfican bit LSB - Leart Significant Bit) Với kiểu liệu bit liệu lớn bit phải chia thành khúc bit trước xử lý Vì có số lượng lớn ghi 8051 ta tập trung vào số ghi công dụng chung đặc biệt chương Hãy tham khảo phụ lục Appendix A.3 để biết đầy đủ ghi 8051 Hình 2.1: a) Một số ghi bit 8051 b) Một số ghi 16 bit 8051 Các ghi sử dụng rộng rãi 8051 A (thanh ghi tích luỹ), B, R0 - R7, DPTR (con trỏ liệu) PC (bộ đếm chương trình) Tất liệu g hi bit trừ DPTR PC 16 bit Thanh ghi tích luỹ A sử dụng cho tất phép tốn số học lơgíc Để hiểu sử dụng ghi ta giới thiệu chúng ví dụ với lệnh đơn giản ADD MOV 2.1.2 Lệnh chuyển MOV Nói cách đơn giản, lệnh MOV chép liệu từ vị trí đến ví trí khác Nó có cú pháp sau: MOV ; Đích, nguồn; chép nguồn vào đích Lệnh nói A CPU chuyển B (trong DPTR DPH DPL thực tế R0 chép) R1 toán PC PC (program counter) hạng R2 nguồn vào toán R3 hạng đích Ví R4 dụ lệnh “MOV R5 A, R0” chép R6 nội dung R7 ghi R0 vào ghi A Sau lênh thực ghi A có giá trị giống ghi R0 Lệnh MOV khơng tác động tốn hạng nguồn Đoạn chương trình nạp ghi A tới giá trị 55H 9là giá trị 55 dạng số Hex) sau chuyển giá trị qua ghi khác bên CPU Lưu ý dấu “#” lệnh báo giá trị Tầm quan trọng trình bày sau ví dụ MOV A, #55H; ; Nạp trí trị 55H vào ghi A (A = 55H) MOV R0, A ; Sao chép nội dung A vào R0 (bây R0=A) MOV R1, A ; Sao chép nội dung A R1 (bây R1=R0=A) MOV R2, A ; Sao chép nội dung A R2 (bây R2=R1=R0=A) MOV R3, #95H ; Nạp giá trị 95H vào ghi R3 (R3 = 95H) MOV A, R3 ; Sáo chép nội dung R3 vào A (bây A = 95H) Khi lập trình vi điều khiển 8051 cần lưu ý điểm sau: Các giá trị nạp vào trực tiếp ghi A, B, R0 - R7 Tuy nhiên, để thơng báo giá trị tức thời phải đặt trước ký hiệu “#” MOV MOV MOV MOV MOV MOV MOV MOV A, #23H R0, #12H R1, #1FH R2, #2BH B, # 3CH R7, #9DH R5, #0F9H R6, #12 ; Nạp giá trị 23H vào A (A = 23H) ; Nạp giá trị 12H vào R0 (R0 = 2BH) ; Nạp giá trị 1FH vào R1 (R1 = 1FH) ; Nạp giá trị 2BH vào R2 (R2 = 2BH) ; Nạp giá trị 3CH vào B (B = 3CH) ; Nạp giá trị 9DH vào R7 (R7 = 9DH) ; Nạp giá trị F9H vào R5 (R5 = F9H) ;Nạp giá trị thập phân 12 = 0CH vào R6 (trong R6 có giá trị 0CH) Để ý lệnh “MOV R5, #0F9H” phải có số đứng trước F sau dấu # báo F số Hex ký tự Hay nói cách khác “MOV R5, #F9H” gây lỗi Nếu giá trị đến F chuyển vào ghi bit bit lại coi tất số Ví dụ, lệnh “MOV A,#5” kết A=0.5, A = 0000 0101 dạng nhị phân Việc chuyển giá trị lớn khả chứa ghi gây lỗi ví dụ: MOV A, #7F2H MOV R2, 456 ; Không hợp lệ 7F2H > FFH ; Khơng hợp lệ 456 > 255 (FFH) Để nạp giá trị vào ghi phải gán dấu “#” trước giá trị Nếu khơng có dấu hiểu nạp từ vị trí nhớ Ví dụ “MOV A, 17H” có nghĩa nạp giá trị ngăn nhớ có giá trị 17H vào ghi A địa liệu có giá trị từ đến FFH Còn để nạp giá trị 17H vào ghi A cần phải có dấu “#” trước 17H “MOV A, #17H” Cần lưu ý thiếu dấu “#” trước khơng gây lỗi hợp ngữ cho lệnh hợp lệ Tuy nhiên, kết không ý muốn người lập trình Đây lỗi thường hay gặp lập trình viên 2.1.3 Lệnh cộng ADD Lệnh cộng ADD có phép sau: ADD a, nguồn ; Cộng toán hạng nguồn vào ghi A Lệnh cộng ADD nói CPU cộng byte nguồn vào ghi A đặt kết ghi A Để cộng hai số 25H 34H số chuyển đến ghi sau cộng lại với như: MOV A, #25H ; Nạp giá trị 25H vào A MOV R2, #34H ; Nạp giá trị 34H vào R2 ADD A, R2 ; Cộng R2 vào A kết A = A + R2 Thực chương trình ta A = 59H (vì 25H + 34H = 59H) R2 = 34H, ý nội dụng R2 không thay đổi Chương trình viết theo nhiều cách phụ thuộc vào ghi sử dụng Một cách viết khác là: MOV R5, #25H ; Nạp giá trị 25H vào ghi R5 MOV R7, #34H ; Nạp giá trị 34H vào ghi R7 MOV A, #0 ; Xoá ghi A (A = 0) ADD A, R5 ; Cộng nội dung R5 vào A (A = A + R5) ADD A, R7 ; Cộng nội dung R7 vào A (A = A + R7 = 25H + 34H) Chương trình có kết A Là 59H, có nhiều cách để viết chương trình giống Một câu hỏi đặt sau xem đoạn chương trình liệu có cẩn chuyển hai liệu vào ghi trước cộng chúng với không? Câu trả lời khơng cần Hãy xem đoạn chương trình đây: MOV A, #25H ; Nạp giá trị thứ vào ghi A (A = 25H) ADD A, #34H ; Cộng giá trị thứ hai 34H vào A (A = 59H) Trong trường hợp đây, ghi A chứa số thứ giá trị thứ hai theo toán hạng Đây gọi tốn hạng tức thời (trực tiếp) Các ví dụ trước lệnh ADD báo tốn hạng nguồn ghi liệu trực tiếp (tức thời) ghi đích ln ghi A, ghi tích luỹ Hay nói cách khác lệnh “ADD R2, #12H” lệnh khơng hợp lệ phép toán số học phải cần đến ghi A lệnh “ADD R4, A” khơng hợp lệ A ln ghi đích cho phép số học Nói cách đơn giản 8051 phép toán số học cần đến A với vai trị tốn hạng đích Phần trình bày giải thích lý ghi A thi tích luỹ Cú pháp lệnh hợp ngữ mô tả cách sử dụng chúng liệt kê kiểu toán hạng hợp lệ cho phụ lục Appendix A.1 Có hai ghi 16 bit 8051 đếm chương trình PC trỏ liệu APTR Tầm quan trọng cách sử dụng chúng trình bày mục 2.3 Thanh ghi DPTR sử dụng để truy cập liệu làm kỹ chương nói chế độ đánh địa 2.2 Giới thiệu lập trình hợp ngữ 8051 Trong phần bàn dạng thức hợp ngữ định nghĩa số thuật ngữ sử dụng rộng rãi gắn liền với lập trình hợp ngữ CPU làm việc với số nhị phân chạy với tốc độ cao Tuy nhiên, thật ngán ngậm chậm chạp người phải làm việc với số để lập trình cho máy tính Một chương trình chứa số gọi ngôn ngữ máy Trong ngày đầu máy tính, lập trình viên phải viết mã chương trình dạng ngơn ngữ máy Mặc dụ hệ thống thập lục phân (số Hex) sử dụng cách hiệu để biểu diễn số nhị phân trình làm việc với mã máy cịn cơng việc cồng kềnh người Cuối cùng, nguồn ngữ hợp ngữ phát, cung cấp từ gợi nhớ cho lệnh mã máy cộng với đặc tính khác giúp cho việc lập trình nhanh mắc lỗi Thuật ngữ từ gợi nhớ (mnemonic) thường xuyên sử dụng tài liệu khoa học kỹ thuật máy tính để tham chiếu cho mã từ rút gọn tương đối dễ nhớ, chương trình hợp ngữ phải dịch mã máy chương trình trình hợp ngữ (hợp dịch) Hợp ngữ coi ngôn ngữ bậc thấp giao tiếp trực tiếp với cấu trúc bên CPU Để lập trình hợp ngữ, lập trình viên phải biết tất ghi CPU kích thước chúng chi tiết khác Ngày nay, ta sử dụng nhiều ngơn ngữ lập trình khác nhau, chẳng hạn Basic, Pascal, C, C++, Java vô số ngôn ngữ khác Các ngôn ngữ coi ngơn ngữ bậc cao lập trình viên khơng cần phải tương tác với chi tiết bên CPU Một trình hợp dịch dùng để dịch chương trình hợp ngữ mã máy cịn (cịn đơi gọi mà đối tượng (Object Code) hay mã lệnh Opcode), cịn ngơn ngữ bậc cao dịch thành ngôn ngữ mã máy chương trình gọi trình biên dịch Ví dụ, để viết chương trình C ta phải sử dụng trình biên dịch C để dịch chương trình dạng mã máy Bây ta xét dạng thức hợp ngữ 8051 sử dụng trình hợp dịch để tạo chương trình sẵn sàng chạy 2.2.1 Cấu trúc hợp ngữ Một chương trình hợp ngữ bao gồm chuỗi dòng lệnh hợp ngữ Một lệnh hợp ngữ có chứa từ gợi nhớ (mnemonic) theo lệnh sau có hai toán hạng Các toán hạng liệu cần thao tác từ gợi nhớ lệnh CPU nói làm với liệu ORG 0H ; Bắt đầu (origin) ngăn nhớ MOV R5, #25H ; Nạp 25H vào R5 MOV R7, #34H ; Nạp 34H vào R7 MOV A, #0 ; Nạp vào ghi A ADD A, R5 ; Cộng nôi dụng R5 vào A (A = A + R5) ADD A, R7 ; Cộng nội dung R7 vào A (A = A + R7) ADD A, #121H ; Cộng giá trị 12H vào A (A = A + 12H) HERE: SJMP HERE ; lại vòng lặp END ; Kết thúc tệp nguồn hợp ngữ Chương trình 2.1: Ví dụ mẫu chương trình hợp ngữ Chương trình 2.1 cho chuỗi câu lệnh dòng lệnh viết lệnh hợp ngữ ADD MOV câu lệnh gọi dẫn Trong lệnh hợp ngữ nói CPU phải làm lệnh (hay cịn gọi giả lệnh) đưa lệnh cho hợp ngữ Ví dụ, chương trình 2.1 lệnh ADD MOV lệnh đến CPU, ORG END lệnh hợp ngữ ORG nói hợp ngữ đặt mã lệnh ngăn nhớ END báo cho hợp ngữ biết kết thúc mã nguồn Hay nói cách khác lệnh để bắt đầu lệnh thứ hai để kết thúc chương trình Cấu trúc lệnh hợp ngữ có trường sau: [nhãn:] [từ gợi nhớ] [các toán hạng] [; giải] Các trường dấu ngoặc vuông tuỳ chọn dịng lệnh có chúng Các dấu ngoặc vuông không viết vào Với dạng thức cần lưu ý điểm sau: Trường nhãn cho phép chương trình tham chiếu đến dịng lệnh tên Nó khơng viết q số ký tự định Hãy kiểm tra quy định hợp ngữ mà ta sử dụng 2 Từ gợi nhớ (lệnh) toán hạng trường kết hợp với thực thi cơng việc thực tế chương trình hồn thiện nhiệm vụ mà chương trình viết cho chúng Trong hợp ngữ câu lệnh như: “ ADD A, B” “MOVA, #67H” ADD MOV từ gợi nhớ tạo mã lệnh, “A, B” “A, #67H” tốn hạng hai trường chứa lệnh giả lệnh hợp ngữ Hãy nhớ lệnh không tạo mã lệnh (mã máy) chúng dùng hợp ngữ, ngược lại lệnh chúng dịch mã máy (mã lênh) cho CPU thực Trong chương trình 2.1 lệnh ORG END lệnh (một số hợp ngữ 8051 sử dụng dạng ORG END) Hãy đọc quy định cụ thể hợp ngữ ta sử dụng Chương giải phải bắt đầu dấu chấm phẩy (;) Các giải bắt đầu đầu dòng dòng Hợp ngữ bỏ qua (làm ngơ) giải chúng lại cần thiết lập trình viên Mặc dù giải tuỳ chọn, không bắt buộc ta nên dùng chúng để mơ tả chương trình để giúp cho người khác đọc hiểu chương trình dễ dàng Lưu ý đến nhãn HERE trường nhãn chương trình 2.1 Một nhãn tham chiếu đến lệnh phải có dấu hai chấm (:) đứng sau Trong câu lệnh nhảy ngắn SJMP 8051 lệnh lại vịng lặp vơ hạn Nếu hệ thống có chương trình giám sát takhơng cần dịng lệnh xố khỏi chương trình 2.3 Hợp dịch chạy chương 8051 Như cấu trúc chương trình hợp biết, câu hỏi đặt chương trình hợp dịch làm để chạy được? Các bước để tạo chương ngữ chạy là: trình EDITOR PRAGRA M myfile.asm ngữ ta tạo trình hợp Trước hết ta sử dụng mộ trình soạn thảo để gỡ vào chương trình giống chương trình 2.1 Có ASSEMBLE nhiều trình soạn thảo tuyệt vời sử lý từ R sử dụng để tạo và/ để soạn thảo chương trình Một trình soạn thảo sử dụng PRAGRAM rộng rãi trình soạn thảo EDIT MSDOS myfile.lst (hoặc Noterad Windows) chạy hệ điều other obj hành Microsoft Lưu ý rằng, trình soạn thảo phải có file myfile.ob khả tạo tệp mã ASCII Đối với nhiều trình hợp ngữ tên tệp tuân theo quy ước j thường lệ củ DOS, phần mở rộng LINKER tệp nguồn phải “asm” hay “src” tuỳ theo trình hợp ngữ mà ta sử dụng PRAGRA Tệp nguồn có phần mở rộng “asm” chứa mã M chương trình tạo bước nạp vào trình hợp dịch 8051 Trình hợp dịch chuyển lệnh mã máy Trình hợp dịch tạo myfile.abs tệp đối tượng tệp liệt kê với thành phần mở rộng “obj” “lst” tương ứng Các trình hợp dịch yêu cầu bước thứ ba gọi liên kết Chương trình liên kết lấy nhiều tệp OH đối tượng tạo tệp đối tượng tuyệt PRAGRA thành phần mở rộng “abs” Tệp “abs” sử M dụng thùng chứa 8051 có chương trình giám sát Kế sau tệp “abs” nạp vào chương myfile.he trình gọi “0H” (chuyển đối tượng object dạng số Hex) để tạo tệp với mở rộng x “Hex” nạp tốt vào ROM Chương trình có tất trình hợp ngữ 8051 trình hợp ngữ dựa Windows kết hợp bước đến vào thành bước Hình 2.2: Các bước để tạo chương trình 2.3.1 Nói thêm tệp “.asm” “.object” Tệp “.asm” gọi tệp nguồn lý mà số trình hợp ngữ địi hỏi tệp phải có phần mở rộng “src” từ chữ “source” nguồn Hãy kiểm tra hợp ngữ 8051 mà ta sử dụng xem có địi hỏi khơng? Như ta nói trước tệp tạo nhờ trình biên tập chẳng hạn Edit DOS Notepad Windows Hợp ngữ 8051 chuyển đổi tệp hợp ngữ tệp asm thành ngôn ngữ mã máy cung cấp tệp đối tượng object Ngồi việc tạo tệp đối tượng trình hợp ngữ cho tệp liệt kê “lst” (List file) 2.3.2 Tệp liệt kê “.lst” Tệp liệt kê tuỳ chọn, hữu ích cho lập trình viên liệt kê tất mã lệnh địa tất lỗi mà trình hợp ngữ phát Nhiều trình hợp ngữ giả thiết rằng, tệp liệt kê không cần thiết trừ ta báo ta muốn tạo Tệp truy cập trình biên dịch Edit DOS Notepad Window hiển thị hình gửi máy in Lập trình viên sử dụng tệp liệt kê để tìm lỗi cú pháp Chỉ sau sửa hết lỗi đánh dấu tệp liệt kê tệp đối tượng sẵn sàng làm đầu vào cho chương trình liên kết 0000 ORG 0H ; Bắt đầu địa 0000 7D25 MOV R5, #25H ; Nạp giá trị 25H vào R5 0002 7F34 MOV R7, #34H ; Nạp giá trị 34H vào R7 0004 7400 MOV A, #0 ; Nạp vào A (xoá A) 0006 2D ADD A, R5 ; Cộng nội dung R5 vào A (A = A + R5) 0007 2F ADD A, R7 ; Cộng nội dung R7 vào A (A = A + R7) 0008 2412 ADD A, #12H ; Cộng giá trị 12H vào A (A = A + 12H) 00A BCEF HERE: SJMP HERE ; lại vòng lặp 000C END ; Kết thúc tệp asm Chương trình 2.2: Tệp liệt kê 2.4 Bộ đếm chương trình khơng gian ROM 8051 2.4.1 Bộ đếm chương trình 8051 Một ghi quan trọng khác 8051 đếm chương trình Bộ đếm chương trình đếm địa lệnh cần thực Khi CPU nạp mã lệnh từ nhớ ROM chương trình đếm chương trình tăng lên đếm lệnh kết tiếp Bộ đếm chương trình 8051 truy cập địa chương trình 8051 rộng 16 bit Điều có nghĩa 8051 truy cập địa chỉa chương trình từ 0000 đến FFFFH tổng cộng 64k byte mã lệnh Tuy nhiên, tất thành viên 8051 có tất 64k byte ROM chíp cài đặt Vậy 8051 bật nguồn đánh thức địa chỉa nào? 2.4.2 Địa bắt đầu 8051 cấp nguồn Một câu hỏi mà ta phải hỏi vi điều khiển cấp nguồn địa nào? Mỗi vi điều khiển khác Trong trường hợp họ 8051 thành viên kể từ nhà sản xuất hay phiên vi điều khiển địa 0000 bật nguồn Bật nguồn có nghĩa ta cấp điện áp V cc đến chân RESET trình bày chương Hay nói cách khác, 8051 cấp nguồn đếm chương trình có giá trị 0000 Điều có nghĩa chờ mã lệnh lưu địa chỉa ROM 0000H Vì lý mà vị trí nhớ 0000H nhở ROM chương trình nơi mà tìm lệnh bật nguồn Chúng ta đạt điều câu lệnh ORG chương trình nguồn trình bày trước Dưới hoạt động bước đếm chương trình qúa trình nạp thực thi chương trình mẫu 2.4.3 Đặt mã vào ROM chương trình Để hiểu tốt vai trị đếm chương trình trình nạp thực thi chương trình, ta khảo sát hoạt động đếm chương trình lệnh nạp thực thi Trước hết ta khảo sát lần tệp liệt kê chương trình mẫu cách đặt mã vào ROM chương trình 8051 nào? Như ta thấy, mã lệnh tốn hạng lệnh liệt kê bên trái lệnh liệt kê Chương trình 2.1: Ví dụ mẫu chương trình hợp ngữ Chương trình 2.1 cho chuỗi câu lệnh dòng lệnh viết lệnh hợp ngữ ADD MOV câu lệnh gọi dẫn Trong lệnh hợp ngữ nói CPU phải làm lệnh (hay cịn gọi giả lệnh) đưa lệnh cho hợp ngữ Ví dụ, chương trình 2.1 lệnh ADD MOV lệnh đến CPU, ORG END lệnh hợp ngữ ORG nói hợp ngữ đặt mã lệnh ngăn nhớ END báo cho hợp ngữ biết kết thúc mã nguồn Hay nói cách khác lệnh để bắt đầu lệnh thứ hai để kết thúc chương trình Cấu trúc lệnh hợp ngữ có trường sau: [nhãn:] [từ gợi nhớ] [các toán hạng] [; giải] Các trường dấu ngoặc vuông tuỳ chọn dịng lệnh có chúng Các dấu ngoặc vng không viết vào Với dạng thức cần lưu ý điểm sau: Trường nhãn cho phép chương trình tham chiếu đến dịng lệnh tên Nó không viết số ký tự định Hãy kiểm tra quy định hợp ngữ mà ta sử dụng Từ gợi nhớ (lệnh) toán hạng trường kết hợp với thực thi cơng việc thực tế chương trình hồn thiện nhiệm vụ mà chương trình viết cho chúng Trong hợp ngữ câu lệnh như: “ ADD A, B” “MOVA, #67H” Thì ADD MOV từ gơi nhớ tạo mã lệnh, “A, B” “A, #67H” tốn hạng hai trường chứa lệnh giả lệnh hợp ngữ Hãy nhớ lệnh không tạo mã lệnh (mã máy) chúng dùng hợp ngữ, ngược lại lệnh chúng dịch mã máy (mã lênh) cho CPU thực Trong chương trình 2.1 lệnh ORG END lệnh (một số hợp ngữ 8051 sử dụng dạng ORG END) Hãy đọc quy định cụ thể hợp ngữ ta sử dụng Trương giải phải bắt đầu dấu chấm phẩy (;) Các giải bắt đầu đầu dịng dòng Hợp ngữ bỏ qua (làm ngơ) giải chúng lại cần thiết lập trình viên Mặc dù giải tuỳ chọn, không bắt buộc ta nên dùng chúng để mơ tả chương trình để giúp cho người khác đọc hiểu chương trình dễ dàng Lưu ý đến nhãn HERE trường nhãn chương trình 2.1 Một nhãn tham chiếu đến lệnh phải có dấu hai chấm (:) đứng sau Trong câu lệnh nhảy ngắn SJMP 8051 lệnh lại vịng lặp vơ hạn Nếu hệ thống có chương trình giám sát takhơng cần dịng lệnh xố khỏi chương trình Chương trình 2.1: Tệp liệt kê Sau chương trình đốt vào ROM thành viên họ 8051 8751 AT 8951 DS 5000 mã lệnh tốn hạng đưa vào vị trí nhớ ROM địa 0000 bảng liệt kê Địa ROM 0000 0002 0004 0006 0007 0008 000A Ngôn ngữ máy 7D25 7F34 7400 2D 2F 2412 80EF Hợp ngữ MOV R5, #25H MOV R7, #34H MOV A, #0 ADD A, R5 ADD A, R7 ADD A, #12H HERE: SJMP HERE Địa Mã lệnh 0000 7D Bảng nội dung ROM chương trình 2.1 0001 25 Bảng liệt kê địa 0000 chứa mã 7D mã lệnh để 0002 F7 byte byte 0003 34 byte 0004 74 0000 0000 0000 0005 00 0006 2D 0007 2F 0FF 0008 24 F 0009 12 8751 1FF 000A 80 AT89C51 F 000B FE 8752 AT89C52 chuyển 7FF F DS5000-32 giá trị vào ghi R5 địa 0001 chứa toán hạng (ở giá trị 254) cần chuyển vào R5 Do vậy, lệnh “MOV R5, #25H” có mã “7D25” 7D mã lệnh, cịn 25 tốn hạng Tương tự vậy, mã máy “7F34” đặt ngăn nhớ 0002 0003 biểu diễn mã lệnh toán hạng lệnh “MOV R7, #34H” Theo cách vậy, mã máy “7400” đặt địa 0004 0005 biểu diễn mã lệnh toán hạng lệnh “MOV A, #0” Ngăn nhớ 0006 có mã 2D mã lệnh “ADD A, R5” ngăn nhớ 0007 có nội dung 2F mã lệnh cho “ADD A, R7” Mã lệnh lệnh “ADD A, #12H” đặt ngăn nhớ 0008 toán hạng 12H đặt ngăn nhớ 0009 Ngăn nhớ 000A có mã lệnh lệnh SJMP địa đích đặt ngăn nhớ 000B Lý địa đích FE giải thích chương 2.4.4 Thực chương trình theo byte Giả sử chương trình đốt vào ROM chíp 8051 hoặc( 8751, AT 8951 DS 5000) mơ tả hoạt động theo bước 8051 cấp nguồn 1 Khi 8051 bật nguồn, đếm chương trình PC có nội dung 0000 bắt đầu nạp mã lệnh từ vị trí nhớ 0000 ROM chương trình Trong trường hợp chương trình mã 7D để chuyển toán hạng vào R5 Khi thực mã lệnh CPU nạp giá trị 25 vào đếm chương trình tăng lên để đến 0002 (PC = 0002) có chứa mã lệnh 7F mã lệnh chuyển toán hạng vào R7 “MOV R7, ” Khi thực mã lệnh 7F giá trị 34H chuyển vào R7 sau PC tăng lên 0004 Ngăn nhớ 0004 chứa mã lệnh lệnh “MOV A, #0” Lệnh thực PC = 0006 Lưu ý tất lệnh lệnh byte, nghĩa lệnh chiếm hai ngăn nhớ Bây PC = 0006 đến lệnh “ADD A, R5” Đây lệnh byte, sau thực lệnh PC = 0007 Ngăn nhớ 0007 chứa mã 2F mã lệnh “ADD A, R7” Đây lệnh byte, thực lệnh PC tăng lên 0008 Qúa trình tiếp tục tất moi lệnh nạp thực Thực tế mà đếm chương trình đến lệnh cần thực giải thích số vi xử lý (đáng nói × 86) gọi đếm trỏ lệnh (Instruction Pointer) 2.4.5 Bản đồ nhớ ROM họ 8051 Như ta thấy chương trước, số thành viên họ 8051 có 4k byte nhớ ROM chíp (ví dụ 8751, AT 8951) số khác AT 8951 có 8k byte ROM, DS 5000-32 Dallas Semiconductor có 32k byte ROM chíp Dallas Semiconductor có motọ 8051 với ROM chíp 64k byte Điểm cần nhớ khơng có thành viên họ 8051 truy cập 64k byte mã lệnh đếm chương trình 8051 16 bit (dải địa từ 0000 đến FFFFH) Cần phải ghi nhớ lệnh ROM chương trình đặt 0000, lệnh cuối phụ thuộc vào dung lượng ROM chíp thành viên họ 8051 Trong số thành viên họ 8051 8751 AT 8951 có 4k byte ROM chíp Bộ nhớ ROM chíp có địa từ 0000 đến 0FFFH Do vậy, ngăn nhớ có địa 0000 ngăn nhớ cuối có địa chỉa 0FFFH Hãy xét ví dụ 2.1 Ví dụ 2.1: Tìm địa nhớ ROM thành viên họ 8051 sau a) AT 8951 (hoặc 8751) với 4k byte b) DS 5000-32 với 32k byte Lời giải: a) Với 4k byte không gian nhớ ROM chíp ta có 4096 byte 1000H dạng Hex (4 × 1024 = 4096 hay 1000 dạng Hex) Bộ nhớ xắp xếp ngăn nhớ từ 0000 đến 0FFFFH Lưu ý ngăn nhớ b) Với 32k byte nhớ ta có 32.768 byte (32 × 1024) Chuyển đổi 32.768 số Hex ta nhận giá trị 8000H Do vậy, khơng gian nhớ dải từ 0000 đến 7FFFH Hình 2.3: Dải địa ROM chíp số thành viên họ 8051 2.5 Các kiểu liệu lệnh 2.5.1 Kiểu liệu lệnh 8051 Bộ vi điều khiển có kiểu liệu, bit độ dài ghi bit Công việc lập trình viên phân chia liệu lớn bit thành khúc bit (từ 00 đến FFH hay từ đến 255) để CPU xử lý Ví dụ xử lý liệu lớn bit trình bày chương Các liệu sử dụng 8051 số âm số dương xử lý số có dấu bàn chương 2.5.2 Chỉ lệnh DB (định nghĩa byte) Chỉ lệnh DB lệnh liệu sử dụng rộng rãi hợp ngữ Nó dùng để định nghĩa liệu bit Khi DB dùng để định nghĩa byte liệu số dạng thập phân, nhị phân, Hex dạng thức ASII Đối với liệu thập phân cần đặt chữ “D” sau số thập phân, số nhị phân đặt chữ “B” liệu dạng Hex cần đặt chữ “H” Bất kể ta sử dụng số dạng thức hợp ngữ chuyển đối chúng thành dạng Hex Để báo dạng thức dạng mã ASCII cần đơn giản đặt vào dấu nháy đơn ‘như này’ Hợp ngữ gán mã ASCII cho số ký tự cách tự động Chỉ lệnh DB lệnh mà sử dụng để định nghĩa chuỗi ASCII lớn ký tự Do vậy, sử dụng cho tất định nghĩa liệu ASCII Dưới số ví dụ DB: ORG DATA1: DATA2: DATA3: DATA4: DATA5 500H DB DB DB ORG DB ORG DB 2B 00110101B 39H 510H “2591” 518H “My name is Joe” ; Số thập phân (1C dạng Hex) ; Số nhị phân (35 dạng Hex) ; Số dạng Hex ; Các số ASCII ; Các ký tự ASCII Các chuỗi ASCII sử dụng dấu nháy đơn ‘như này’ nháy kép “như này” Dùng dấu phẩy kép hữu ích trường hợp dấu nháy đơn dùng sở hữu cách “Nhà O’ Leary” Chỉ lệnh DB dùng để cấp phát nhớ theo đoạn kích thước byte 2.5.3 Các lệnh hợp ngữ Chỉ lệnh ORG: Chỉ lệnh ORG dùng để báo bắt đầu địa Số sau ORG có kể dạng Hex thập phân Nếu số có kèm chữ H đằng sau dạng Hex khơng có chữ H sau số thập phân hợp ngữ chuyển thành số Hex Một số hợp ngữ sử dụng dấu chấm đứng trước “ORG” thay cho “ORG” Hãy đọc kỹ trình hợp ngữ ta sử dụng Chỉ lệnh EQU: Được dùng để định nghĩa số mà không chiếm ngăn nhớ Chỉ lệnh EQU không dành chỗ cất cho liệu gắn giá trị số với nhãn liệu cho nhãn xuất chương trình giá trị số thay nhãn Dưới sử dụng EQU cho số đếm sau số dùng để nạp ghi RS COUNT EQU 25 MOV R3, #count Khi thực lện “MOV R3, #COUNT” ghi R3 nạp giá trị 25 (chú ý đến dấu #) Vậy ưu điểm việc sử dụng EQU gì? Giả sử có số (một giá trị cố định) dùng nhiều chỗ khác chương trình lập trình viên muốn thay đổi giá trị chương trình Bằng việc sử dụng lệnh EQU ta thay đổi số lần hợp ngữ thay đổi tất lần xuất tìm tồn chương trình gắng tìm lần xuất Chỉ lệnh END: Một lệnh quan trọng khác lệnh END Nó báo cho trình hợp ngữ kết thúc tệp nguồn “asm” lệnh END dịng cuối chương trình 8051 có nghĩa mã nguồn thứ sau lệnh END để bị trình hợp ngữ bỏ qua Một số trình hợp ngữ sử dụng END có dấu chấm đứng trước thay cho END 2.5.4 Các quy định đố với nhãn hợp ngữ Bằng cách chọn tên nhãn có nghĩa lập trình viên làm cho chương trình dễ đọc dễ bảo trì hơn, có số quy định mà tên nhãn phải tuân theo Thứ tên nhãn phải thống nhất, tên sử dụng làm nhãn hợp ngữ gồm chữ viết hoa viết thường, số từ đến dấu đặc biệt như: dấu hỏi (?), dấu (≅), dấu gạch (_), dấu đô ($) dấu chu kỳ (.) Ký tự nhãn phải chữ Hay nói cách khác khơng thể số Hex Mỗi trình hợp ngữ có số từ dự trữ từ gợi nhớ cho lệnh mà không dùng để làm nhãn chương trình Ví dụ “MOV” “ADD” Bên cạnh từ gợi nhớ cịn có số tự dự trữ khác, kiểm tra liệt kê từ dự phòng hợp ngữ ta sử dụng 2.6 Các bit cờ ghi đặc biệt PSW 8051 Cũng vi xử lý khác, 8051 có ghi cờ để báo điều kiện số học bit nhớ Thanh ghi cờ 8051 gọi ghi từ trạng thái chương trình PSW Trong phần đưa số ví dụ cách thay đổi chúng 2.6.1 Thanh ghi từ trạng thái chương trình PSW Thanh ghi PSW ghi bit Nó cịn coi ghi cờ Mặc dù ghi PSW rộng bit có bit 8051 sử dụng Hai bit chưa dùng cờ cho người dùng định nghĩa Bốn số cờ gọi cờ có điều kiện, có nghĩa chúng báo số điều kiện kết lệnh vừa thực Bốn cờ cờ nhớ CY (carry), cờ AC (auxiliary cary), cờ chẵn lẻ P (parity) cờ tràn OV (overflow) Như nhìn thấy từ hình 2.4 bit PSW.3 PSW.4 gán RS0 RS1 chúng sử dụng để thay đổi ghi băng Chúng giải thích phần kế sau Các bit PSW.5 PSW.1 bit cờ trạng thái công dụng chung lập trình viên sử dụng cho mục đích • CY CY AC AC PSW.7 PSW.6 RS1 RS0 OV PSW.4 PSW.3 PSW.2 PSW.5 F0 RS1 ; Cờ nhớ ; Cờ RS0 − OV P ; Dành cho người dùng sử dụng mục đích chung ; Bit = chọn băng ; Bit = chọn băng ; Cờ bận Instruction ADD • PSW.1 ; Bit dành cho người dùng ADDC nghĩa P PSW.0 ; Cờ chẵn, lẻ Thiết lập/ SUBB phần cứng chu kỳ lệnh báo tổng MUL số bit ghi A chẵn/ lẻ RS1 RS0 Băng DIV ghi 0 DA 1 RRC RLC 1 SETB C CLR C CPL C Hình 2.4: Các bit ghi PSW Dưới giải thích ngắn gọn bit cờ ANL C, bit ANL C,/ bit ghi PSW ORL C, bit Cờ nhớ CY: Cờ thiết lập bit D7 Cờ tác động sau lệnh cộng bit Nó thiết lập lên xoá ORL C,/bit MOV C, bit lệnh “SETB C” “CLR C” nghĩa cờ nhớ” “xoá cờ nhớ” tương ứng Về CJNE địa theo bit bàn kỹ chương CY OV X X X X X X X X Địa X 00H - 07H 08H - 0FH X 10H - 17H X 18H - 1FH X X X X X X X AC X X X ghi ghi định xoá có nhớ từ trừ trực tiếp “thiết lập lệnh đánh Cờ AC: Cờ báo có nhớ từ bit D3 sang D4 phép cộng ADD trừ SUB Cờ dùng lệnh thực thi phép số học mã BCD (xem chương 6) Cờ chẵn lẻ P: Cờ chẵn lẻ phản ánh số bit ghi A chẵn hay lẻ Nếu ghi A chứa số chẵn bit P = Do vậy, P = A có số lẻ bit Cờ chàn OV: Cờ thiết lập kết phép tính số có dấu lớn tạo bit bậc cao làm tràn bit dấu Nhìn chung cờ nhớ dùng để phát lỗi phép số học không dấu Còn cờ tràn dùng để phát lỗi phép số học có dấu bàn kỹ chương 2.6.2 Lệnh ADD PSW Bây ta xét tác động lệnh ADD lên bit CY, AC P ghi PSW Một số ví dụ làm rõ trạng thái chúng, bit cờ bị tác động lệnh ADD CY, P, AC OV ta tập trung vào cờ CY, AC P, cờ OV nói đến chương liên quan đến phép tính số học số có dấu Các ví dụ 2.2 đến 2.4 phản ánh tác động lệnh ADD lên bit nói Bảng 2.1: Các lệnh tác động lên bit cờ Ví dụ 2.2: Hãy trình bày trạng thái bit cờ CY, AC P sau lệnh cộng 38H với 2FH đây: MOV A, #38H ADD A, #2FH ; Sau cộng A = 67H, CY = Lời giải: + 38 2F 67 00111000 00101111 01100111 Cờ CY = khơng có nhớ từ D7 Cờ AC = có nhớ từ D3 sang D4 Cờ P = ghi A có bit (lẻ) Ví dụ 2.3: Hãy trình bày trạng thái cờ CY, AC P sau phép cộng 9CH với 64H Lời giải: 9C 64 100 + 10011100 01100100 00000000 Cờ CY = có nhớ qua bit D7 Cờ AC = có nhớ từ D3 sang D4 Cờ P = ghi A khơng có bit (chẵn) Ví dụ 2.4: Hãy trình bày trạng thái cờ CY, AC P sau phép cộng 88H với 93H Lời giải: 88 93 11B + 10001000 10010011 00011011 Cờ CY = có nhớ từ bit D7 Cờ AC = khơng có nhớ từ D3 sang D4 Cờ P = số bit A (chẵn) 2.7 Các băng ghi ngăn xếp 8051 Bộ vi điều khiển 8051 có tất 128 byte RAM Trong mục ta bàn vệ phân bố 128 byte RAM khảo sát công dụng chúng ghi ngăn xếp 2.7.1 Phân bố khơng gian nhớ RAM 8051 Có 128 byte RAM 8051 (một số thành viên ý 8052 có 256 byte RAM) 128 byte RAM bên 8051 gán địa từ 00 đến 7FH Như ta thấy chương 5, chúng truy cập trực tiếp ngăn nhớ 128 byte RAM phân chia thành nhóm sau: Tổng cộng 32 byte từ ngăn nhớ 00 đến 1FH dành cho ghi ngăn xếp Tổng cộng 16 byte từ ngăn nhớ 20H đến 2FH dành cho nhớ đọc/ ghi đánh địa theo bit Chương bàn chi tiết nhớ lệnh đánh địa theo bit Tổng cộng 80 byte từ ngăn nhớ 30H đến 7FH dùng cho lưu đọc ghi hay thường gọi bảng nháp (Serach pad) Những ngăn nhớ (80 byte) RAM sử dụng rộng rãi cho mục đích lưu liệu tham số lập trình viên 8051 Chúng ta sử dụng chúng chương sau để lưu liệu nhận vào CPU qua cổng vào-ra 2.7.2 Các băng ghi 8051 Như nói trước, tổng cộng 32 byte RAM dành riêng cho băng ghi ngăn xếp 32 byte chia thành băng ghi băng có ghi từ R0 đến R7 Các ngăn nhớ RAM số 0, R1 ngăn nhớ RAM số 1, R2 ngăn nhớ RAM số v.v Băng thứ hai ghi R0 đến R7 nhớ RAM số ngăn nhớ RAM số 0FH Băng thứ ba ngăn nhớ 10H đến 17H cuối từ ngăn nhớ 18H đến 1FH dùng cho băng ghi R0 đến R7 thứ tư 07 08 0F10 1718 1F 20 R0 - R7 R0 - R7 R0 - R7 R0 - R7 00 7F 2F 30 RAM đánh địa RAM băng nhớ theo bit (Seratch Pad) Băng0 Băng3 Hình 2.5: Ngăn xếp nhớ RAM 8051 Bank Bank Bank Bank R7 F R7 17 R7 1F R7 R6 E R6 16 R6 1E R6 R5 D R5 15 R5 1D R5 R4 C R4 14 R4 1C R4 R3 B R3 13 R3 1B R3 R2 A R2 12 R2 1A R2 R1 R1 11 R1 19 R1 R0 R0 R0 Hình 2.6: Các băng ghi 8051 10 R0 chúng 18 địa Như ta nhìn thấy từ hình 2.5 băng sử dụng khơng gian RAM ngăn xếp Đây vấn đề lập trình 8051 Chúng ta phải khơng sử dụng băng phải đánh không gian khác RAM cho ngăn xếp Ví dụ 2.5: Hãy phát biểu nội dung ngăn nhớ RAM sau đoạn chương trình sau: MOV MOV MOV MOV MOV R0, #99H R1, #85H R2, #3FH R7, #63H R5, #12H ; Nạp R0 giá trị 99H ; Nạp R1 giá trị 85H ; Nạp R2 giá trị 3FH ; Nạp R7giá trị 63H ; Nạp R5 giá trị12H Lời giải: Sau thực chương trình ta có: Ngăn nhớ RAM có giá trị 99H Ngăn nhớ RAM có giá trị 85H Ngăn nhớ RAM có giá trị 3FH Ngăn nhớ RAM có giá trị 63H Ngăn nhớ RAM có giá trị 12H 2.6.3 Băng ghi mặc định Nếu ngăn nhớ 00 đến 1F dành riêng cho bốn băng ghi, băng ghi R0 đến R7 ta phải truy cập tới 8051 cấp nguồn? Câu trả lời băng ghi Đó ngăn nhớ RAM số 0, 1, 2, 3, 4, 5, truy cập với tên R0, R1, R2, R3, R4, R5, R6 R7 lập trình 8051 Nó dễ dàng nhiều tham chiếu ngăn nhớ RAM ơví tên R0, R1 v.v số vị trí ngăn nhớ Ví dụ 2.6 làm rõ khái niệm Ví dụ 2.6: Hãy viết lại chương trình ví dụ 2.5 sử dụng địa RAM thay tên ghi Lời giải: Đây gọi chế độ đánh địa trực tiếp sử dụng địa vị trí ngăn nhớ RAM địa đích Xem chi tiết chương chế độ đánh địa MOV MOV MOV MOV MOV 00, #99H 01, #85H 02, #3FH 07, #63H 05, #12H ; Nạp ghi R0 giá trị 99H ; Nạp ghi R1 giá trị 85H ; Nạp ghi R2 giá trị 3FH ; Nạp ghi R7giá trị 63H ; Nạp ghi R5 giá trị12H 2.6.4 Chuyển mạch băng ghi nào? Như nói trên, băng ghi mặc định 8051 cấp nguồn Chúng ta chuyển mạch sang băng ghi khác cách sử dụng bit D3 D4 ghi PSW theo bảng 2.2 Bảng 2.2: Bit lựa chọn băng ghi RS0 RS1 Băng Băng Băng Băng RS1 (PSW.4) 0 1 RS0 (PSW.3) 1 Bit D3 D4 ghi PSW thường tham chiếu PSW.3 PSW.4 chúng truy cập lệnh đánh địa theo bit SETB CLR Ví dụ “SETB PSW.3” thiết lập PSW.3 chọn băng ghi Xem ví dụ 2.7 Ví dụ 2.7: Hãy phát biểu nội dung ngăn nhớ RAM sau đoạn chương trình đây: SETB MOV MOV MOV MOV MOV PSW.4 R0, #99H R1, #85H R2, #3FH R7, #63H R5, #12H ; Chọn băng ghi ; Nạp ghi R0 giá trị 99H ; Nạp ghi R1 giá trị 85H ; Nạp ghi R2 giá trị 3FH ; Nạp ghi R7giá trị 63H ; Nạp ghi R5 giá trị12H Lời giải: Theo mặc định PSW.3 = PSW.4 = Do vậy, lệnh “SETB PSW.4” bật bit RS1 = RS0 = 0, lệnh băng ghi R0 đến R7 số chọn Băng sử dụng ngăn nhớ từ 10H đến 17H Nên sau thực đoạn chương trình ta có nội dung ngăn nhớ sau: Ngăn nhớ vị trí 10H có giá trị 99H Ngăn nhớ vị trí 11H có giá trị 85H Ngăn nhớ vị trí 12H có giá trị 3FH Ngăn nhớ vị trí 17H có giá trị 63H Ngăn nhớ vị trí 15H có giá trị 12H 2.6.5 Ngăn xếp 8051 Ngăn xếp vùng nhớ RAM CPU sử dụng để lưu thông tin tạm thời Thơng tin dự liệu, địa cỉ CPU cần khơng gian lưu trữ số ghi bị hạn chế 2.6.6 Cách truy cập ngăn xếp 8051 Nếu ngăn xếp vùng nhớ RAM phải có ghi CPU đến Thanh dùng để đến ngăn xếp gọi ghi trỏ ngăn xếp SP (Stack Pointer) Con trỏ ngăn xếp 8051 rộng bit có nghĩa có thể địa từ 00 đến FFH Khi 8051 cấp nguồn SP chứa giá trị 07 có nghĩa ngăn nhớ 08 RAM ngăn nhớ dùng cho ngăn xếp 8051 Việc lưu lại ghi PCU ngăn xếp gọi lần cất vào PUSH việc nạp nội dung ngăn xếp trở lại ghi CPU gọi lấy POP Hay nói cách khác ghi cất vào ngăn xếp để lưu cất lấy từ ngăn xếp để dùng tiếp công việc SP nghiêm ngặt thao tác cất vào (PUSH) lấy (POP) thực thi Để biết ngăn xếp làm việc xét lệnh PUSH POP 2.6.7 Cất ghi vào ngăn xếp Trong 8051 trỏ ngăn xếp đến ngăn nhớ sử dụng cuối ngăn xếp Khi ta cất liệu vào ngăn xếp trỏ ngăn xếp SP tăng lên Lưu ý điều vi xử lý khác khác nhau, đáng ý vi xử lý × 86 SP giảm xuống cất liệu vào ngăn xếp Xét ví dụ 2.8 đây, ta thấy lệnh PUSH thực nội dung ghi cất vào ngăn xếp SP tăng lên Lưu ý byte liệu cất vào ngăn xếp SP tăng lên lần Cũng lưu ý để cất ghi vào ngăn xếp ta phải sử dụng địa RAM chúng Ví dụ lệnh “PUSH 1” cất ghi R1 vào ngăn xếp Ví dụ 2.8: Hãy biểu diễn ngăn xếp trỏ ngăn xếp đoạn chương trình sau Giả thiết vùng ngăn xếp mặc định MOV MOV MOV PUSH PUSH PUSH R6, #25H R1, #12H R4, #0F3H Lời giải: 0B 0A 09 08 Bắt đầu SP = 07 Sau PUSH 0B 0A 09 08 25 SP = 08 Sau PUSP 0B 0A 09 12 08 25 SP = 09 Sau PUSH 0B 0A F3 09 12 08 25 SP = 0A 2.6.8 Lấy nôi dung ghi từ ngăn xếp Việc lấy nội dung từ ngăn xếp trở lai ghi cho qúa trình ngược với nội dung ghi vào ngăn xếp Với lần lấy byte đỉnh ngăn xếp chép vào ghi xác định lệnh trỏ ngăn xếp giảm xuống Ví dụ 2.9 minh hoạ lệnh lấy nội dung khỏi ngăn xếp Ví dụ 2.9: Khảo sát ngăn xếp trình bày nội dung ghi SP sau thực đoạn chương trình sau đây: POP POP POP ; Lấy ngăn xếp trở lại R3 ; Lấy ngăn xếp trở lại R5 ; Lấy ngăn xếp trở lại R2 Lời giải: 0B 54 0A F9 09 76 08 6C Bắt đầu SP = 0B Sau POP3 0B 0A F9 09 76 08 6C SP = 0A Sau POP 0B 0A 09 76 08 6C SP = 09 Sau POP 0B 0A 09 08 6C SP = 08 2.6.9 Giới hạn ngăn xếp Như nói trên, ngăn nhớ 08 đến 1FH RAM 8051 dùng làm ngăn nhớ 20H đến 2FH RAM dự phòng cho nhớ đánh địa theo bit dùng trước cho ngăn xếp Nếu chương trình cho ta cần ngăn xếp nhiều 24 byte (08 đến 1FH = 24 byte) ta đổi SP đến ngăn nhớ 30 đến 7FH Điều thực hiển lẹnh “MOV SP, #XX” 2.6.10 Lệnh gọi CALL ngăn xếp Ngoài việc sử dụng ngăn xếp để lưu cất ghi CPU sử dụng ngăn xếp để lưu cất tam thời địa lệnh đứng lệnh CALL Điều để PCU biết chỗ để quay trở thực tiếp lệnh sau chọn chương trình Chi tiết lệnh gọi CALL trình bỳ chương 2.6.11 Xung đột ngăn xếp băng ghi số Như ta đa nói ghi trỏ ngăn xếp đến vị trí RAM thời dành cho ngăn xếp Khi liệu lưu cất cào ngăn xếp SP tăng lên ngược lại liệu lấy từ ngăn xếp SP giảm xuống Lý PS tăng lên sau PUSH phải biết lấy chắn ngăn xếp tăng lên đến vị trí ngăn nhớ 7FH RAM từ địa thấp đến địa cao Nếu trỏ ngăn xếp giảm sau lệnh PUSH ta nên sử dụng ngăn nhớ 7, 6, v.v RAM thuộc ghi R7 đến R0 băng 0, băng ghi mặc định Việc tăng trỏ ngăn xếp lệnh PUSH đảm bảo ngăn xếp không với tới ngăn nhớ RAM (đáy RAM) nhảy khỏi khơng gian dành cho ngăn xếp Tuy nhiên có vấn đề nảy sinh với thiết lập mặc định ngăn xếp Ví dụ SP = 07 8051 bật nguồn nên RAM thuộc ghi R0 củ băng ghi số Hay nói cách khác băng ghi số ngăn xếp dùng chung không gian nhớ RAM Nếu chương trình cho cần sử dụng băng ghi số số ta đặt lại vùng nhớ RAM cho ngăn xếp Ví dụ, ta cấp vị trí ngăn nhớ 60H RAM cao cho ngăn xếp ví dụ 2.10 Ví dụ 2.10: Biểu diễn ngăn xếp trỏ ngăn xếp lệnh sau: MOV MOV MOV MOV PUSH PUSH PUSH SP, #5FH R2, #25H R1, #12H R4, #0F3H ; Đặt ngăn nhớ từ 60H RAM cho ngăn xếp Lời giải: 63 62 61 60 Bắt đầuSP=5F Sau PUSH 63 62 61 60 25 SP = 60 Sau PUSP 63 62 61 12 60 25 SP = 61 Sau PUSH 63 62 F3 61 12 60 25 SP = 62 ... phải dịch mã máy chương trình trình hợp ngữ (hợp dịch) Hợp ngữ coi ngơn ngữ bậc thấp giao tiếp trực tiếp với cấu trúc bên CPU Để lập trình hợp ngữ, lập trình viên phải biết tất ghi CPU kích thước... chương trình C ta phải sử dụng trình biên dịch C để dịch chương trình dạng mã máy Bây ta xét dạng thức hợp ngữ 8051 sử dụng trình hợp dịch để tạo chương trình sẵn sàng chạy 2.2.1 Cấu trúc hợp ngữ. .. thúc tệp nguồn hợp ngữ Chương trình 2.1: Ví dụ mẫu chương trình hợp ngữ Chương trình 2.1 cho chuỗi câu lệnh dòng lệnh viết lệnh hợp ngữ ADD MOV câu lệnh gọi dẫn Trong lệnh hợp ngữ nói CPU phải

Ngày đăng: 21/12/2013, 21:15

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan