Lập trình hợp ngữ họ MCS-51_chương 3 - Pdf 70

Bài giảng VI XỬ LÝ Chương 3: Lập trình hợp ngữ họ MCS-51
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ử lý 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ử lý để 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Ử LÝ VÀ 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ử lý 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ử
lý 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:

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 vì 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 ký tự, không chứa khoảng trắng,
phải bắt đầu bằng ký tự chữ, dấu ‘?’ hay dấu ‘_’ và tiếp theo phải là các ký tự chữ, các
ký 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 ký 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.

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Ử LÝ Chương 3: Lập trình hợp ngữ họ MCS-51
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ử lý 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ử lý hay vi điều khiển sử dụng trong quá trình thực thi lệnh.

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Ử LÝ Chương 3: Lập trình hợp ngữ họ MCS-51
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.
Ví dụ: (R1) = 30H, (30H) = 52H
INC @R1 ; tăng nội dung ô nhớ được trỏ bởi R1


(R1) = 30H, (30H) = 53H


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Ử LÝ Chương 3: Lập trình hợp ngữ họ MCS-51
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.

Ví 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.
Ví 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

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

→ (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

- 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ử lý 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ý 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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status