Lập trình hợp ngữ 8051

19 1.1K 21
Lập trình hợp ngữ 8051

Đ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 c¸c ghi bit Trong 8051 chØ cã mét 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 lµ bit cã giá trị cao D7 LSB bit có giá trị thấp D0 (MSB - Most Sigfican bit vµ LSB - Leart Significant Bit) Víi mét 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 cña 8051 b) Mét sè ghi 16 bit cña 8051 A B R0 R1 R2 DPTR PC DPH DPL PC (program counter) R3 R4 R5 R6 R7 Các ghi sử dụng rộng rÃi nhÊt cđa 8051 lµ A (thanh ghi tÝch l), B, R0 R7, DPTR (con trỏ liệu) PC (bộ đếm chương trình) Tất liệu lµ g hi bit trõ DPTR vµ PC 16 bit Thanh ghi tích luỹ A sử dụng cho tất phép toán số học lô-gíc Để hiểu sử dụng ghi ta sÏ giíi thiƯu chóng c¸c vÝ dơ víi c¸c 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 nh­ sau: MOV ; Đích, nguồn; chép nguồn vào đích Lệnh nói CPU chuyển (trong thực tế chép) toán hạng nguồn vào toán hạng đích Ví dụ lệnh MOV A, R0” chÐp néi dung 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 toá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 bÊt kú ghi nµo 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 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 ý r»ng nÕu thiÕu dÊu “#” trước không gây lỗi hợp ngữ cho lệnh hợp 2.1.3 lệ Tuy nhiên, kết không ý muốn người lập trình Đ lỗi thường hay gặp lập trình viên ây Lệnh cộng ADD LƯnh céng ADD cã c¸c phÐp nh­ 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 ngn 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ứ nhÊt 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 toán hạng tức thời (trực tiếp) Các ví dụ trước lệnh ADD báo toán hạng nguồn ghi liệu trực tiếp (tức thời) ghi đích 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 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ò toá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ô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ông ngữ bËc thÊp v× nã 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 cđa CPU vµ kÝch th­íc cđa chóng cịng nh­ 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 gọi mà đối tượng (Object Code) hay mà lệnh Opcode), 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) vµ theo tõng lƯnh vµ sau nã cã mét 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 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 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 hoà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 MOV A, #67H ADD MOV từ gợi nhớ tạo mà lệnh, A, B A, #67H toá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 EDITOR dù giải tuỳ chọn, không bắt buộc PRAGRAM ta nên dùng chúng để mô tả chương trình để giúp cho người khác đọc hiểu myfile.asm chương trình dễ dàng Lưu ý đến nhÃn HERE trường nhÃn ASSEMBLER PRAGRAM chương trình 2.1 Một nhÃn tham chiếu đến lệnh phải cã dÊu hai myfile.lst chÊm (:) ®øng ë sau Trong câu lệnh nhảy other obj file ngắn SJMP 8051 lệnh lại myfile.obj vòng lặp vô hạn Nếu hệ thống có chương trình giám sát LINKER takhông cần dòng lệnh PRAGRAM xoá khỏi chương trình 2.3 Hợp dịch chạy chương trình 8051 Như cấu trúc chương trình hợp ngữ ta đà biết, câu hỏi đặt chương myfile.abs OH PRAGRAM myfile.hex trình tạo hợp dịch làm để chạy được? Các bước để tạo chương trình hợp ngữ chạy là: 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ó nhiều trình soạn thảo tuyệt vời sử lý từ 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 rộng rÃi trình soạn thảo EDIT MS-DOS (hoặc Noterad Windows) chạy hệ điều hành Microsoft Lưu ý rằng, trình soạn thảo phải có 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 thường lệ củ DOS, phần mở rộng tệp nguồn phải asm hay src tuỳ theo trình hợp ngữ mà ta sử dơng TƯp ngn cã phÇn më réng “asm” chøa 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 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 đối tượng tạo tệp đối tượng tuyệt thành phần mở rộng abs Tệp abs sử 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 trình gọi 0H (chuyển đối tượng object dạng số Hex) để tạo tệp với đuôi mở rộng 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 2.3.2 Tệp liệt kê .lst 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 Ngoài việc tạo tệp đối tượng trình hợp ngữ cho tệp liệt kê lst (List file) 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 chØ 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 000C END ; lại vòng lặp ; 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 2.4.2 Địa bắt đầu 8051 cấp nguồn 2.4.3 Đặt mà vào ROM chương trình 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 nµy cã nghÜa lµ 8051 cã thĨ 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? 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 Vcc đế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 Để 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 thÕ nµo? Nh­ ta cã thĨ thÊy, m· lƯnh vµ toá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 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 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 hoà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” “MOV A, #67H” Th× ADD MOV từ gơi nhớ tạo mà lệnh, A, B A, #67H toá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 Địa Mà lệnh 7D chương trình 2.1 Một nh·n bÊt kú tham chiÕu ®Õn mét 0000 25 lƯnh phải có dấu hai chấm (:) đứng sau Trong câu lệnh 0001 0002 F7 nhảy ngắn SJMP 8051 lệnh lại vòng 0003 34 lặp vô hạn Nếu hệ thống có chương 74 trình giám sát takhông cần dòng lệnh 0004 0005 00 xoá khỏi chương trình 0006 2D Chương trình 2.1: Tệp liệt kê 0007 2F Sau chương trình đốt vào ROM 0008 24 thành viên hä 8051 nh­ 8751 hc AT 8951 hc DS 0009 12 5000 mà lệnh toán hạng đưa vào vị trí nhớ 000A 80 000B FE 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 B¶ng néi dung ROM cđa chương trình 2.1 Bảng liệt kê địa 0000 chứa mà 7D mà lệnh để chuyển 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òng 25 toá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 đối víi lƯnh “MOV R7, #34H” Theo c¸ch nh­ 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 lµ m· lƯnh cho “ADD A, R7” M· lƯnh ®èi víi 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 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 lµ mà lệnh chuyển toán hạng vào R7 MOV R7, ” Khi thùc hiƯn m· lƯnh 7F th× 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 lµ m· lƯnh cđa “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 bé nhí ROM trªn chÝp (vÝ dơ 8751, AT 8951) số khác AT 8951 có 8k byte ROM, DS 5000-32 cña Dallas Semiconductor cã 32k byte ROM trªn chÝp Dallas Semiconductor cịng cã motä 8051 với ROM chíp 64k byte Điểm cần nhớ 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 trªn 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 b»ng 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) Chun ®ỉi 32.768 vỊ sè Hex ta nhận giá trị 8000H Do vậy, không gian nhớ dải từ 0000 đến 7FFFH byte byte 0000 0000 byte 0000 0FFF 8751 AT89C51 1FFF 8752 AT89C52 7FFF DS5000-32 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 2.5.2 Chỉ lệnh DB (định nghÜa byte) Bé vi ®iỊu khiĨn chØ cã mét 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 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 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 lµ mét sè vÝ dơ vỊ DB: ORG DATA1: DB DATA2: DB DATA3: DB DATA4: DB DATA5 DB 500H 2B 00110101B 39H ORG 510H “2591” ORG 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áy kép 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 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 hiÖn 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 toà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 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ó số tự dự trữ khác, hÃy 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 bƯt PSW cđa 8051 Cịng nh­ c¸c bé 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ó coi ghi cờ Mặc dù ghi PSW rộng bit có bit 8051 sử dụng Hai bit chưa dùng cờ ch 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ờ lµ 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 PSW.5 RS1 RS0 OV PSW.1 P PSW.4 PSW.3 PSW.2 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 ghi ; Bit = chọn băng ghi ; Cờ bận ; Bit dành cho người dùng định nghĩa PSW.0 ; Cờ chẵn, lẻ Thiết lập/ xoá phần cứng chu kỳ lệnh báo tổng số bit ghi A chẵn/ lẻ RS1 RS0 Băng ghi Địa 0 00H - 07H 1 08H - 0FH 10H - 17H 1 18H - 1FH Hình 2.4: Các bit ghi PSW Dưới giải thích ngắn gọn bit cờ ghi PSW Cờ nhớ CY: Cờ thiết lập có nhớ từ bit D7 Cờ tác động sau lệnh cộng trừ bit Nó thiết lập lên xoá vỊ trùc tiÕp b»ng lƯnh “SETB C” vµ “CLR C nghĩa thiết lập cờ nhớ xoá cờ nhớ tương ứng Về lệnh đánh địa theo bit bàn kỹ chương Cờ AC: Cờ báo có nhớ từ bit D3 sang D4 phép cộng ADD trừ SUB Cờ dïng bëi c¸c 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 = nÕu 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ơ sÏ 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 = nhớ tõ D7 Cê AC = v× cã nhí tõ D3 sang D4 Cê P = v× 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 Instruction ADD ADDC SUBB MUL DIV DA RRC RLC SETB C CLR C CPL C ANL C, bit ANL C,/ bit ORL C, bit ORL C,/bit MOV C, bit CJNE CY X X X 0 X X X X X X X X X X OV X X X X X Cê CY = v× cã nhí qua bit D7 Cê AC = v× cã nhí tõ D3 sang D4 Cờ P = ghi A 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 = v× cã nhí từ bit D7 Cờ AC = nhí tõ D3 sang D4 Cê P = v× số bit A (chẵn) AC X X X 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 ®ang chó ý lµ 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 tõng nhãm nh­ 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ư R0 - R7 Băng0 R0 - R7 R0 - R7 R0 - R7 00 07 08 0F10 1718 1F 20 2F 7F RAM đánh địa 30RAM băng nhớ theo bit (Seratch Pad) 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 10 R0 18 R0 Hình 2.6: Các băng ghi 8051 địa chúng 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 nh­ chØ 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 nh­ SETB vµ 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 = vµ PSW.4 = Do vËy, lƯnh “SETB PSW.4” sÏ bËt bit RS1 = vµ 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 2.6.6 Cách truy cập 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ế 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 lµ nã chØ cã thĨ 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 hÃy 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” lµ 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 2.6.8 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 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 hÃy trình bày nội dung ghi SP sau thực đoạn chương trình sau đây: POP POP ; Lấy ngăn xếp trở lại R3 ; Lấy ngăn xếp trở lại R5 POP ; 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 2.6.9 LÖnh gäi CALL ngăn xếp 2.6.11 Xung đột ngăn xếp băng ghi sè Sau POP 0B 0A 09 08 6C SP = 08 Giới hạn ngăn xÕp 2.6.10 Sau POP 0B 0A 09 76 08 6C SP = 09 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 bëi lĐnh “MOV SP, #XX” 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ë vỊ thùc hiƯn tiÕp c¸c lƯnh sau chän chương trình Chi tiết lệnh gọi CALL trình bỳ chương 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 cđa RAM thc c¸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 mét kh«ng gian cđa bé 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 SP, #5FH R2, #25H R1, #12H R4, #0F3H ; Đặt ngăn nhớ từ 60H RAM cho ngăn xếp PUSH PUSH 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 ... 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ữ. .. 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... 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ông 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

Ngày đăng: 27/10/2013, 22:15

Hình ảnh liên quan

Hình 2.1: a) Một số thanh ghi 8 bit của 8051 - Lập trình hợp ngữ 8051

Hình 2.1.

a) Một số thanh ghi 8 bit của 8051 Xem tại trang 1 của tài liệu.
Hình 2.3: Dải địa chỉ của ROM trên chíp một số thành viên họ 8051. - Lập trình hợp ngữ 8051

Hình 2.3.

Dải địa chỉ của ROM trên chíp một số thành viên họ 8051 Xem tại trang 10 của tài liệu.
Như nhìn thấy từ hình 2.4 thì các bit PSW.3 và PSW.4 được gán như RS0 và RS1 và chúng được sử dụng để thay đổi các thanh ghi băng - Lập trình hợp ngữ 8051

h.

ư nhìn thấy từ hình 2.4 thì các bit PSW.3 và PSW.4 được gán như RS0 và RS1 và chúng được sử dụng để thay đổi các thanh ghi băng Xem tại trang 12 của tài liệu.
Bảng 2.1: Các lệnh tác động lên các bit cờ. - Lập trình hợp ngữ 8051

Bảng 2.1.

Các lệnh tác động lên các bit cờ Xem tại trang 13 của tài liệu.
Hình 2.5: Ngăn xếp các thanh nhớ RAM trong 8051. - Lập trình hợp ngữ 8051

Hình 2.5.

Ngăn xếp các thanh nhớ RAM trong 8051 Xem tại trang 14 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