Tải bản đầy đủ (.pdf) (15 trang)

Nhập môn Lập trình Vi điều khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (254 KB, 15 trang )

Nhập môn Lập trình Vi điều khiển

Nhập môn Lập trình Vi điều
khiển
Bởi:
Nguyễn Phương Quang
Giáo trình này chỉ chú trọng đến phần thực hành lập trình trên vi điều khiển nên không
có phần lý thuyết về vi điều khiển mà thay vào đó là nhập môn lập trình vi điều khiển.
Trong phần này, giáo trình sẽ trình bày những vấn đề lý thuyết cơ bản nhất về hệ 80x86,
vừa đủ cho người học giải quyết các bài tập cơ bản trong chương trình. Sau khi đã vững
phần cơ bản, người học sẽ nâng cao hơn các hiểu biết về vi điều khiển thông qua các bài
tập nâng cao.

1. Tổ chức hệ vi điều khiển :
1.1. Giới thiệu hệ vi điều khiển dùng trong phần mềm mô phỏng:
Như đã giới thiệu ở phần trước hệ vi xử lý dùng trong chương trình mô phỏng này
và hệ vi điều khiển thực tế nói chung bao gồm ba phần chính : bộ vi xử lý (CPU); bộ
nhớ và thiết bị xuất nhập (I/O). Cụ thể trình bày trên hình 2-1.
Bộ mô phỏng bao gồm khối xử lý trung tâm (CPU), 256 byte của bộ nhớ truy xuất
ngẫu nhiên (RAM) và 16 cổng vào ra nhưng chỉ sử dụng 6 port (từ port 0 đến port 5)?

1/15


Nhập môn Lập trình Vi điều khiển

Hình 2-1: Hệ thống vi điều khiển dùng trong phần mềm.
Chương trình mô phỏng có thể lập trình để chạy nhiều chương trình khác nhau. Trong
thực tế, bộ nhớ RAM được thay thế bằng ROM. Ở đây có hàng trăm thí dụ về các hệ
thống như : điều khiển đèn giao thông, các trò chơi giải trí đơn giản, điều khiển ti vi từ
xa, định thời gian cho lò viba, hệ thống điều khiển động cơ xe hơi, bộ điều khiển lò gia


nhiệt, các hệ thống điều khiển môi trường. Tất cả tuỳ thuộc vào sự uyển chuyển của giáo
viên giảng dạy.
1/ Khối xử lý trung tâm:
Khối xử lý trung tâm là " bộ não" của máy vi tính. Tất cả các sự tính toán, quyết
định và việc dịch chuyển dữ liệu đều được thực thi ở đây. CPU dùng các vị trí lưu trữ
tạm thời được gọi là thanh ghi, thanh ghi chỉ nhớ dữ liệu có dung lượng thấp và sẽ mất
dữ liệu khi mất điện nếu mạch không có back up ( mạch làm nhiệm vụ liên tục cấp điện
cho CPU ). Nó chứa khối số học và logic (viết tắt là ALU) khối này thực hiện việc xử
lý. Dữ liệu được lấy từ các thanh ghi, được xử lý và kết quả sau khi xử lý xong được
đưa trở lại các thanh ghi. Lệnh Move (MOV) được sử dụng để dịch chuyển dữ liệu giữa
vùng nhớ RAM và các thanh ghi. Ở đây ta có rất nhiều lệnh, mỗi lệnh thì có một chức
năng riêng. Tập hợp các lệnh này được gọi là tập lệnh.
2/ Các thanh ghi đa năng:

2/15


Nhập môn Lập trình Vi điều khiển

CPU có bốn thanh ghi mục đích chung gọi là AL, BL, CL và DL. Những thanh
ghi này chứa 8 bít hay 1 byte. Các thanh ghi quản lý số không dấu trong vùng từ 0 đến
255 và ô có dấu vùng từ - 128 đến + 127 : ở đây các thanh ghi này sử dụng như vùng
nhớ lưu trữ tạm thời. Các thanh ghi được sử dụng ưu tiên đối với vùng nhớ RAM bởi
vì nó cần 1 khoảng thời gian tương đối dài để chuyển dữ liệu giữa RAM và CPU. Nhìn
chung máy vi tính có tốc độ xử lý nhanh hơn nếu thanh ghi hay bộ nhớ có dung lượng
lớn hơn trong CPU.
Các thanh ghi được gọi tên là AL, BL, CL và DL vì phiên bản 16 bit của CPU này
có nhiều thanh ghi gọi là AH, BH, CH và DH . Chữ "L" có nghĩa là thấp (Low) và chữ
"H" có nghĩa là cao (High). Ở đây, 2 chữ cuối L và H trong các thanh ghi trên chính là
8 bít thấp và 8 bít cao của thanh ghi 16 bit.

3/ Các thanh ghi chuyên dùng :
Các thanh ghi chuyên dùng trong hệ vi điều khiển dùng trong phần mềm mô phỏng
là IP, SR và SP.
a) Con trỏ lệnh IP
Thanh ghi này chứa địa chỉ lệnh đang được hiện hành. Khi việc thực thi hoàn thành,
IP được giảm xuống và chỉ tới lệnh kế tiếp. Khi bộ nhớ RAM hiển thị, thì con trỏ lệnh
được làm nổi rõ bằng màu đỏ trên nền chữ vàng.
b) Thanh ghi trạng thái SR
Thanh ghi này chứa các cờ để báo cáo về trạng thái CPU. Cờ zero "Z" được thiết
lập bằng 1 nếu việc tính toán có kết quả bằng 0. Cờ dấu "S" được thiết lập bằng 1 nếu
việc tính toán có kết quả âm. Cờ tràn "O"được thiết lập nếu kết quả trong thanh ghi lớn
hơn 255 (tràn số). Ngắt "I" được thiết lập nếu các lệnh ngắt được cho phép.
c) Con trỏ ngăn xếp SP
Ngăn xếp là 1 vùng của tổ chức bộ nhớ sử dụng qui tắc vào sau ra trước (LIFO:
Last In First Out). Con trỏ ngăn xếp chỉ tới ô nhớ ngăn xếp chồng kế tiếp. Ngăn xếp
trong bộ mô phỏng bắt đầu tại địa chỉ BF. Ngăn xếp tăng theo hướng địa chỉ 0, dữ liệu
được cất vào ngăn xếp và lưu giữ cho lần sử dụng sau. Dữ liệu được lấy ra khỏi ngăn
xếp khi cần đến. Con trỏ ngăn xếp quản lý nơi ngăn xếp cất và lấy dữ liệu ra . Khi hiển
thị trong RAM, con trỏ ngăn xếp được tô sáng bằng màu xanh trên nền chữ vàng.
4/ Bộ nhớ RAM :
Bộ mô phỏng có 256 byte RAM, có địa chỉ từ 0 đến 255 ( số thập phân) hay từ 00
đến FF (số Hex). Ðịa chỉ của RAM thường được đặt trong dấu ngoặc vuông ví dụ như
3/15


Nhập môn Lập trình Vi điều khiển

[7C] trong đó 7C là số Hex. [7C] đọc là dữ liệu cất tại ô nhớ 7C. Trong thực tế, đây
chính là? ROM nhưng nói chung chương trình chính sẽ được lưu trữ tại đây.


5/ Các BUS (Busline: luồng liên lạc):
Các BUS là một tập hợp các dây dẫn được sử dụng để mang tín hiệu đi trao đổi
thông tin giữa các thiết bị trong hệ vi xử lý. Chúng thường được in như các đường song
song trong board mạch điện. Khe cắm là các ổ cắm cho phép card có thể kết nối với hệ
thống thông qua các BUS. Ðiển hình một máy tính 8 bit có các thanh ghi với độ rộng 8
bit và 8 đường trong 1 BUS dữ liệu. Một máy tính 16 bit có các thanh ghi 16 bit, BUS
dữ liệu có 16 đường v..v.Có thể dùng hình tượng xa lộ để minh họa các BUS ( Hình
2-2): trên xa lộ có nhiều địa điểm như A, B, C, D. . . Nếu chỉ dùng dây điện để nối (nối
cứng) ta phải tốn rất nhiều đường dây để liên kết giữa các địa điểm lại với nhau nhưng
trên xa lộ này lái xe dù không thông thạo vùng này cứ đi dọc xa lộ là có thể tìm đến địa
điểm cần đến. Rõ ràng với một BUS ta có thể liên kết nhiều thiết bị trong hệ vi xử lý
lại với nhau (mỗi thiết bị có thể xem như một địa điểm trên xa lộ còn xe mang thông tin
trao đổi giữa các thiết bị trong hệ thống) .

4/15


Nhập môn Lập trình Vi điều khiển

Hình 2-2 : Minh họa BUS thông qua hình tượng xa lộ.
Dựa vào tính chất thông tin tải trên Bus, người ta phân làm ba loại chính:
a) Bus dữ liệu : được sử dụng để mang dữ liệu giữa CPU, RAM và port nhập / xuất
(I/O). Bộ mô phỏng này có bus dữ liệu 8 bit.
b) Bus địa chỉ: được sử dụng để xác định địa chỉ của bộ nhớ RAM hay port I/O
được sử dụng. Bộ mô phỏng này có 8 bit địa chỉ.
c) Bus điều khiển: xác định RAM hay khối I/O được truy xuất. Nó cũng xác định
việc đọc hay viết dữ liệu. Dữ liệu được viết vào hay xuất ra trên CPU đến RAM hay
cổng I/ O cũng do bus điều khiển này.
6/ Các yếu tố phụ trợ khác:
a) Ðồng hồ hệ thống (clock): là đường mang những xung có tần số ổn định để các

bộ phận trong hệ vi xử lý có thể làm việc đồng bộ với nhau, các lệnh trong bộ vi xử lý
thực thi cũng dựa vào các chu kỳ xung này. Do vậy tốc độ hệ vi xử lý bị ảnh hưởng rất
nhiều bởi tần số xung clock. Tốc độ xung clock hiện nay đã đạt đến vài tỉ chu kỳ mỗi
giây (vào năm 2002). Bộ mô phỏng trong phần mềm có thể điều chỉnh được tần số xung
clock nên tốc độ thực thi lệnh cũng điều chỉnh được trong một khoảng khá rộng và trơn
mà không cần chọn thay đổi thạch anh dao động.
b) Ngắt cứng: hệ thống cần có ít nhất 1 đường ngắt giúp CPU đáp ứng được các
yêu cầu của phần cứng như máy in đang chạy nhưng hết giấy, nhấn nhả phím, rê chuột...
CPU sẽ xử lý chương trình phục vụ ngắt để trả lời lệnh ngắt trên. Khi hoàn thành chương
trình ngắt, nó sẽ tiếp tục các thao tác đang làm trước khi nhu cầu ngắt xuất hiện. Phần

5/15


Nhập môn Lập trình Vi điều khiển

mềm mô phỏng này có sẵn một đường ngắt và bộ định thời tạo xung ngắt tạo ra những
xung ngắt có tần số điều chỉnh được (xem ví dụ 11 phần cơ bản).

1?2 . Nguyên lý làm việc của hệ vi điều khiển trong phần mềm:
Hoạt động bên trong của vi điều khiển rất phức tạp, nó điều khiển hoạt động của mọi
thành phần trong hệ thống. Nhưng thật ra vi điều khiển chỉ lập đi lập lại chu kỳ đón và
thực thi lệnh (còn gọi là chu kỳ tìm nạp + giải mã + thi hành lệnh) thực hiện theo từng
bước sau :
* Tìm nạp lệnh tiếp theo từ bộ nhớ vào thanh ghi lệnh IR. Trong chương trình này CPU
tìm nạp lệnh theo địa chỉ mà IP chỉ tới: đón hay tìm nạp lệnh.
* Ðịnh loại lệnh vừa tìm nạp, nếu lệnh dùng dữ liệu trong bộ nhớ thì CPU sẽ tìm đến
và nạp vào thanh ghi bên trong CPU: giải mã lệnh.
* Thi hành lệnh vừa giải mã xong và lưu kết quả ở nơi thích hợp: thi hành lệnh.
Sau khi thực hiện xong 3 bước này CPU lại tìm đến lệnh tiếp theo trong chương trình để

tuần tự thực hiện lặp lại 3 bước trên. Có thể minh họa bằng hình 2-3.

Hình 2-3 : CPU liên tục tìm nạp và thi hành lệnh

6/15


Nhập môn Lập trình Vi điều khiển

Như vậy dù cho chương trình CPU thì rất phức tạp nhưng về cơ bản nó cũng chỉ thực
hiện 2 hoạt động: tìm lệnh, thi hành, tìm lệnh, thi hành.và cứ như thế mà tiếp diễn. CPU
sẽ thực thi được toàn bộ chương trình.
Cụ thể hơn ta quan sát một ví dụ sau trong chương trình mô phỏng. Mở bài tập về động
cơ bước ở phần bài tập cơ bản trong đĩa CD này, bạn sẽ gặp giao diện của bài tập như
sau:

7/15


Nhập môn Lập trình Vi điều khiển

Trên màn hình hiển thị chương trình điều khiển động cơ bước quay theo một chiều cố
định. Nhấp chuột vào Step , vi điều khiển sẽ thực hiện lệnh MOV AL,1. Màn hình sau
sẽ diễn tả tác động của lệnh này lên vi điều khiển như sau:

8/15


Nhập môn Lập trình Vi điều khiển


9/15


Nhập môn Lập trình Vi điều khiển

Ta thấy số hexa 1 đã được nạp vào thanh ghi AL, thanh ghi IP (con trỏ lệnh) chỉ ra địa
chỉ kế tiếp của lệnh mà vi điều khiển sắp thực hiện (OUT 05) nằm ở ô nhớ 03. Các thanh
ghi khác không tham gia vào lệnh này nên không có thay đổi gì. Tiếp tục nhấp Step , ta
thấy:

Lệnh OUT 05 xuất dữ liệu chứa trong thanh ghi AL (là 01) sang port 05 điều khiển động
cơ bước cho phép nhóm cuộn dây đầu tiên trong 4 nhóm có điện (có thể xem chi tiết hơn
về động cơ bước trong phần giới thiệu của đĩa CD này). Con trỏ lệnh IP tự động tăng
thêm 2 đơn vị (do lệnh OUT 05 chiếm đến 2 byte nhớ trong RAM) chỉ ra địa chỉ kế tiếp
10/15


Nhập môn Lập trình Vi điều khiển

của lệnh mà vi điều khiển sắp thực hiện (MOV AL,2) nằm ở ô nhớ 05. Cũng giống như
trên các thanh ghi khác không tham gia nên không thay đổi dưới tác động của lệnh này.
Tiếp tục nhấp vào Step , ta nhận thấy:

Tương tự trên, số hexa 2 được nạp vào thanh ghi AL và con trỏ IP tăng lên 08 chỉ ra
lệnh kế tiếp là OUT 05 nằm ở địa chỉ 08 trong RAM. Tiếp tục nhấp Step , ta thấy:

Tương tự, như trên ta thấy tác động của lệnh OUT 05 làm động cơ bước quay đi một
góc 10o . Tiếp tục nhấp Step và cứ như thế tiếp tục cho đến lệnh cuối cùng JMP start.

11/15



Nhập môn Lập trình Vi điều khiển

12/15


Nhập môn Lập trình Vi điều khiển

Nếu như từ đầu đến đây vi điều khiển thực hiện tuần tự từng lệnh từ trên xuống thì đến
đây vi điều khiển thực hiện một bước nhảy. Nó sẽ nhảy đến nơi có chứa nhãn start, trong
chương trình này nhãn start ở ngay đầu chương trình nên giá trị con trỏ lệnh IP là 00 .
Nhấp Step.

13/15


Nhập môn Lập trình Vi điều khiển

Nếu bạn nhấp Run hay F9 chương trình mô phỏng sẽ liện tục lặp lại các bước vừa nêu.
Qua ví dụ đơn giản vừa nêu ở trên, ta thấy bình thường vi điều khiển sẽ thực hiện tuần
tự từng lệnh một từ điểm xuất phát được định ra bởi người lập trình chỉ khi nào gặp các
lệnh nhảy, gọi chương trình con (nhấp vào đây để xem minh hoạ : chương trình con một
cấp; chương trình con đa cấp), gọi chương trình ngắt...thì tính tuần tự trên mới tạm thời
bị gián đoạn. Từ đây ta có thể nhận thấy, với cùng một yêu cầu đặt ra cho hệ thống vi
xử lý sẽ có nhiều chương trình cùng thoả mãn được yêu cầu trên, chương trình này thì
dài còn chương trình kia thì lại ngắn, điều này tuỳ thuộc vào nhiều yếu tố như khả năng
của người lập trình, cấu trúc phần cứng của hệ thống.. .

2. Trình tự lập trình vi điều khiển


14/15


Nhập môn Lập trình Vi điều khiển

Chương trình vi điều khiển là tập hợp các lệnh xắp xếp theo một trình tự nhất
định, các lệnh này được lấy trong tập lệnh của bộ vi điều khiển (Microcontroller) đang
sử dụng trong hệ thống. Bộ vi điều khiển sẽ thực hiện các lệnh nàỵ để đạt được một số
kết qủa mà chương trình đặt ra. Do vậy, lập trình là tuỳ vào yêu cầu của bài toán thiết
kế, người lập trình sẽ viết ra một chương trình chạy được trên hê vi điều khiển đang sử
dụng đưa hệ thống vào làm việc đúng theo yêu cầu của bài toán đã đặt ra.
Ðể thiết kế chương trình một cách chính xác, ta cần thực hiện những bước sau:
2.1 Phân tích các yêu cầu của đề bài.
2.2 Xây dựng lưu đồ giải thuật.
2.3 Thiết kế chương trình
2.4 Viết chương trình
2.5 Biên dịch chương trình
2.6 Thưc hiện gỡ rối chương trình
2.7 Nạp chương trình vào phần cứng và kiểm tra kết quả.
Thực hiện đúng quy trình trên sẽ giúp giảm thiểu thời gian kiểm tra cũng như phát
hiện kịp thời những thiếu sót khi thực hiện.

15/15



×