You are on page 1of 26

BỘ MÔN ĐIỆN TỬ

DEPARTMENT OF ELECTRONICS

TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ


DÀNH CHO GIẢNG DẠY THEO HÌNH THỨC TRỰC
TUYẾN DÙNG PHẦN MỀM KEIL VÀ PROTEUS
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

CHƯƠNG 1 VIẾT CHƯƠNG TRÌNH ASSEMBLY VỚI


Keil µVision 4
Các hệ thống vi xử lý hoặc vi điều khiển đều cần có một phần mềm (chương trình)
để điều khiển hoạt động của nó. Chương trình này được giữ trong bộ nhớ chương
trình (program memory) của MCU. Ở cấp thấp nhất, chương trình trong hệ thống
là các bit nhị phân thường được gọi là mã máy.
Tuy nhiên, người lập trình rất khó để thao tác với các bit nhị phân. Trong thực tế,
các chương trình sẽ được viết trên máy tính bằng hợp ngữ (assembly) hoặc các
ngôn ngữ cấp cao khác như C/C++, Basic,… Các chương trình này sẽ cần phải
qua bước biên dịch, liên kết để chuyển sang dạng mã máy phù hợp với loại MCU
đang dùng. Công cụ để thực hiện các bước này được gọi là chương trình dịch hợp
ngữ (assembler), chương trình biên dịch (compiler), và chương trình liên kết
(linker). Mỗi loại MCU thường có một chương trình dịch hợp ngữ của riêng nó.
Trong tài liệu thí nghiệm này, người lập trình có thể sử dụng chương trình Keil
µVision 4, với trình biên dịch C51. Bản dùng thử có thể được tải tại
www.keil.com, cho phép biên dịch các chương trình assembly và C với giới hạn
kích thước chương trình là 2KB. Ngoài ra cũng có thể dùng chương trình biên
dịch miễn phí SDCC (tại http://sdcc.sourceforge.net/). Đây cũng là một bộ công cụ
rất hữu ích cho người lập trình.

1.1 Tạo một project trong Keil µVision 4


Để tạo một project với Keil µVision 4 ta theo các bước sau:
- Khởi động chương trình Keil µVision 4
- Chọn Project-New Project. Chọn thư mục phù hợp và gõ tên project vào cửa
sổ Create New Project. Chọn Save như ở Hình 1.

Hình 1: Tạo project mới với µVision 4.


TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Trong cửa sổ Select Device, chọn Atmel-AT89S52. Đây là CPU sử dụng trên kit
thí nghiệm. Click OK.

Hình 2: Chọn vi điều khiển cho project


Khi chương trình hiện cửa sổ hỏi: “Copy ‘STARTUP.A51’ to project folder and
Add File To Project”, chọn NO
Chọn File-New để tạo một file text mới.
Chọn File-Save để lưu file này với tên file phù hợp và đuôi là .A51

Hình 3: Tạo file mới với đuôi .A51


Click chuột phải vào tab ‘Source Group 1’ chọn Add files to Group ‘Source
Group 1’.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Hình 4: Thêm file vào project


Chọn Files of Type là Asm Source file. Chọn file vừa tạo và click Add

Hình 5: Chọn file assembly để thêm vào project


Chọn Project-Option for Target ‘Target 1’, chọn Tab Output, chọn Create Hex
File.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Hình 6: Cấu hình chương trình biên dịch để tạo file hex
Giả sử chương trình được viết có tên main.A51. Để bắt đầu chương trình, người
sử dụng phải dùng dẫn xuất ORG tại địa chỉ 0000h như sau:
ORG 0000h
; phần thân chương trình.
END

Hình 7: Biên soạn và biên dịch chương trình


TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Chọn Project-Build Target. Nếu chương trình không có lỗi, chương trình sẽ biên
dịch thành công với số lỗi (error) là 0, đồng thời file kết quả biên dịch sẽ được
tạo ra với đuôi .hex.

1.2 Tính năng debug (gỡ lỗi) trong Keil µVision 4


Người lập trình có thể mô phỏng chương trình bằng cách sử dụng simulator có
sẵn của Keil µVision như sau:
Chọn Debug -> Start/Stop Debug Session

Hình 8: Tính năng Debug trong Keil


Kết quả mô phỏng sẽ hiển thị như hình dưới đây:

Hình 9: Giao diện tính năng Debug.


TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Màn hình Debug của Keil µVision bao gồm các thành phần chính sau:

1.2.1 Cửa sổ Disassembly

Hình 10: Cửa sổ Disassemply


Cửa sổ Disassembly hiển thị việc thực thi chương trình trong mã assembly. Khi
cửa sổ Disassembly hoạt động, thì tất cả các lệnh gỡ lỗi-bước sẽ hoạt động ở cấp
độ assembly. (Nếu người lập trình chạy Debug nhưng không hiển thị cửa sổ
Disassembly có thể mở bằng cách nhấn View — Disassembly Window).
Như đa số các trình IDE khác, Keil hổ trợ người dùng tính năng Breakpoint.
Breakpoint kích hoạt các điểm trong chương trình của người lập trình để ngừng
thi hành hoặc thực hiện chức năng Debug. Để có thể đặt các điểm Breakpoint,
sinh viên có thể nhấp đôi chuột trái vào trước một dòng lệnh, khi đó ngay tại trước
dòng lệnh này sẽ xuất hiện một ô vuông màu đỏ để đánh dấu điểm Breakpoint.
Tương tự, người lập trình cũng có thể xóa điểm breakpoint này bằng cách nhấp
đôi chuột một lần nữa vào dòng lệnh.
Ngoài ra thanh bên trái của sổ Disassembly biểu thị hành vi của dòng lệnh thông
qua một số màu như sau:
- No code: Các dòng không có mã được đánh dấu bằng một khối màu
xám nhạt.
- Unexecuted Code: Các dòng chưa thực hiện (instructions) được đánh
dấu bằng một khối màu xám đậm.
- Executed Code: Các dòng được thực hiện đầy đủ (instructions) được
đánh dấu bằng một khối màu xanh lá cây. Khối màu xanh lá cây trên lệnh
rẽ nhánh cho biết rằng cả điều kiện đúng và sai đều đã được kiểm tra.
- Branch Condition True: Một khối xanh lam chỉ ra rằng chỉ điều kiện
này của một nhánh là đúng và do đó luôn được thực thi.
- Branch Condition False: Một khối màu cam chỉ ra rằng điều kiện
này của một nhánh không bao giờ đúng và do đó không bao giờ thực thi.

1.2.2 Thanh công cụ Debug


TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

- Reset CPU: Đặt CPU về trạng thái ban đầu.


- Run: Tiếp tục thực hiện chương trình cho đến khi đạt đến điểm
ngắt hoạt động tiếp theo.
- Stop: Dừng chương trình ngay lập tức.
- Step Into: thực hiện một lệnh duy nhất, thực hiện dòng lệnh hiện
tại.
- Step Over: Thực hiện một bước duy nhất trên một hàm.
- Step Out: Hoàn tất việc thực thi hàm hiện tại và dừng sau đó.
- Run to Cursor: Thực thi chương trình cho đến khi đạt đến điểm
Breakpoint kế tiếp.

1.2.3 Thanh ghi


Cửa sổ Thanh ghi hiển thị và cho phép sửa đổi nội dung của các thanh ghi, liệt kê
các chế độ hoạt động của vi điều khiển, các trạng thái hệ thống và bên trong.

Hình 11: Cửa sổ thanh ghi


TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

- Register: Liệt kê các thanh ghi của vi điều khiển 8051.


- Value: Giá trị của thanh ghi. Sinh viên có thể nhấp đôi chuột vào từng
giá trị của thanh ghi để có thể sửa đổi.

1.2.4 Bộ nhớ của vi điều khiển:


Bảng dưới đây trình bày các lớp bộ nhớ sử dụng để lập trình kiến trúc 8051:
Bảng 1: lớp bộ nhớ sử dụng để lập trình kiến trúc 8051
Memory Tầm địa chỉ Mô tả
class
DATA D:00 – D:7F Địa chỉ trực tiếp trên RAM (RAM nội).
BIT D:20 – D:2F Địa chỉ định vị BIT trên RAM (RAM
nội); truy cập bit instructions.
IDATA I:00 – I:FF Định địa chỉ gián tiếp trên RAM (RAM
nội); có thể được truy cập bằng @R0
hoặc @R1.
XDATA X:0000-X:FFFF Truy cập RAM 64 KB (RAM ngoại).
Được truy cập bằng lệnh MOVX.
CODE C:0000 – C:FFFF Truy cập ROM 64 KB (chỉ đọc)
BANK 0 B0:0000 – B0:FFFF Mã Bank để mở rộng không gian mã
… BANK 31 B31:0000 – chương trình lên 32 x 64KB ROM.
B31:FFFF
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

CHƯƠNG 2 TỔNG QUAN VỀ PHẦN MỀM MÔ


PHỎNG PROTEUS
2.1 Tổ chức tài liệu hướng dẫn
Kit thí nghiệm được mô phỏng trong cái bài thí nghiệm được thiết kế dựa trên họ
vi điều khiển MCS-51. Tài liệu hướng dẫn thí nghiệm này giúp người sử dụng
tiếp cận với các kiến thức cơ bản về vi điều khiển 8051 nhanh chóng hơn. Tài liệu
thí nghiệm bao gồm tài liệu hướng dẫn sử dụng phần mềm mô phỏng Proteus, các
bài thí nghiệm, và một số mã nguồn để tham khảo.
Tài liệu hướng dẫn sẽ giới thiệu các thành phần của kit thí nghiệm được mô
phỏng, được tổ chức thành các phần như sau:
 Lý thuyết cơ bản: phần này sẽ tóm tắt sơ lược các kiến thức lý thuyết
có liên quan đến bài thí nghiệm.
 Thiết kế phần cứng: nội dung của phần này sẽ giúp người sử dụng
nắm được chi tiết về sơ đồ và cách thức thiết kế phần cứng của kit thí
nghiệm. Người sử dụng cần hiểu rõ các nội dung được đề cập trong
phần này. Các thiết kế phần cứng này hoàn toàn có thể ứng dụng trong
thực tế.
 Phần mềm giao tiếp: phần này sẽ giúp người sử dụng nắm được các
kỹ thuật để xây dựng phần mềm đáp ứng yêu cầu của bài thí nghiệm.
Các nội dung được đề cập trong phần này cũng sẽ rất hữu dụng trong
thực tế.
Mỗi bài thí nghiệm được tổ chức thành các phần như sau:
 Mục tiêu: giúp người học nắm được mục tiêu cụ thể của bài thí
nghiệm.
 Yêu cầu: phần này sẽ đưa ra yêu cầu cụ thể của bài thí nghiệm.
 Hướng dẫn: phần này nêu một số hướng dẫn để sinh viên có thể lập
trình dễ dàng hơn
 Kiểm tra: giúp người sử dụng đáng giá mức độ đạt được các mục tiêu
của bài thí nghiệm, đồng thời gợi ý một số hiệu chỉnh nhằm làm phong
phú nội dung thí nghiệm.

2.2 Giới thiệu phần mềm mô phỏng Proteus


Phần mềm vẽ Proteus là phần mềm vẽ mạch điện tử được phát triển bởi công ty
Lancenter Electronics. Phần mềm có thể mô tả hầu hết các linh kiện điện tử thông
dụng hiện nay. Vì vậy trong phần thí nghiệm của môn Kỹ thuật số, sinh viên cần
phải hiểu rõ nguyên lý sơ đồ mạch của từng bài thí nghiệm bằng cách sử dụng
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

phần mềm Proteus để thực hiện mô phỏng trước các mạch này trước khi tiến hành
thực hiện bài thí nghiệm.
Cài đặt phần mềm mô phỏng Proteus
Phần mềm Proteus hiện nay khá phổ biến với nhiều người dùng đặc biệt là các kỹ
sư điện tử, vì vậy tài liệu hướng dẫn cài đặt Proteus có khá nhiều trên các diễn
đàn Điện - Điện tử. Sinh viên có thể tìm kiếm trên Google hoặc Youtube các tài
liệu hướng dẫn hay các Video cài đặt một cách dễ dàng.
Tài liệu thí nghiệm này được viết dựa trên phần mềm Proteus phiên bản 8.8 SP1

2.3 Hướng dẫn mô phỏng


2.3.1 Hướng dẫn sử dụng giao động ký quan sát sóng trên Proteus
Trong một số bài thí nghiệm, sẽ có sử dụng dao động ký quan sát xung trên các
chân tín hiệu, sau đây là hướng dẫn sử dụng dao động ký trong proteus. Để lấy
khối dao động ký, ta chọn gói INSTRUMENT và chọn OSSCILLOSCOPE như
hình sau.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Kết nối dây: Vì mạch được thiết kế vẽ theo khối, các dây không thể đi ra ngoài
khối nên sử dụng cách nối dây bằng đặt tên, các dây cùng tên thì nối với nhau.
Dao động ký mô phỏng có 4 kênh là A, B, C, D dùng kênh nào thì nối dây vào
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

kênh đó. Ví dụ ở đây dùng kênh A, click vào dây kênh A, vẽ 1 đoạn dây nhỏ và
double click để có nút ngắt dây.

Tiếp theo đó, chọn tab Component mode, chọn mode này mới làm bước tiếp theo
được.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Tại đoạn dây, trỏ chuột vào đoạn dây vừa vẽ, click chuột phải, chọn Place Wire
Label.

Sau đó đặt tên là P1.0, tương tự với các chân còn lại.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Lưu ý rằng các bạn phải quan sát chế độ DC mới xem được xung. Còn các thông
số time/div, V/div sinh viên tự nghiệm lại khiến thức khi xưa học TN VLBD.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

DC

Time/Div

2.3.2 Xử lý trường hợp không hiện cửa sổ dao động ký khi mô


phỏng
Lỗi này xảy ra khi tắt cửa sổ dao động ký ở lần mô phỏng trước, sau khi mô phỏng
lại thì cửa sổ này sẽ không hiện nữa. Lỗi này đều xảy ra với các khối có cửa sổ
giao tiếp như LOGIC ANALYZER, SERIAL…
Để khắc phục lỗi này ta làm như sau: Thoát khỏi chế độ mô phỏng. Vào menu
Debug/ Reset Debug Popup Windows. -> Yes. Sau đó vào mô phỏng bình thường
thôi.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

2.3.3 Xử lý trường hợp crash khi mô phỏng.


Khi chạy mô phỏng được một thời gian, chương trình mô phỏng tự tắt, lỗi này có
thể liên quan đến quá trình cài đặt proteus. Để khắc phục lỗi, có thể tham khảo
đường dẫn sau:
https://www.youtube.com/watch?v=dGGFyJjAo3k&feature=youtu.be&fb
clid=IwAR0GTd0R3nVBo1jb39Plrr59aaw1Xskp_m8zkhV8F8oKsdjk97
_JPBLj_EQ
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Mạch thí nghiệm được mô phỏng có hình dạng và các khối cơ bản như Hình 1.

2.3.4 Nạp chương trình cho 8051


Nạp file *.hex đã được tạo bởi trình biên dịch KeilC vào mô phỏng.
Mạch mô phỏng sử dụng vi điều khiển họ MCS-51 có tên mã AT89C51 bao gồm
4 Port (P0 -> P3).

Hình 12: Khối vi điều khiển


Trong phần mềm mô phỏng Proteus, sinh viên có thể nạp chương trình để mô
phỏng bằng cách sau:
Nhấp đôi chuột vào vi điều khiển
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Hình 13: Nạp chương trình cho vi điều khiển trong Proteus
Nhấn vào biểu tượng và dẫn đến file HEX mà Keil µVision biên dịch được.
Nhấn OK.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

2.3.5 Minh họa quá trình mô phỏng thí nghiệm 4.1


Yêu cầu:
“Viết chương trình tạo sóng vuông 1 Hz trên chân P1.0 sử dụng timer 0 ở chế độ
1”
Chương trình mẫu:

ORG 0000H
MOV TMOD,#01H
LOOP:
CPL P1.0
MOV R1,#10
LP1: ACALL DL
DJNZ R1,LP1
SJMP LOOP
DL:
MOV TH0,#HIGH(-46079)
MOV TL0,#LOW(-46079)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
END
Các bước thực hiện:
Bước 1: Nạp chương trình vào vi điều khiển 8051:
Nhấp đôi chuột vào vi điều khiển sau đó chọn biểu tượng và chọn tệp .hex đã
được biên dịch:
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Bước 2: Sử dụng Oscilloscope:

Để sử dụng Oscilloscope, chúng ta nhấn vào biểu tượng ở thanh công cụ bên
trái và chọn OSCILLOSCOPE. Tiếp theo, di chuyển con trỏ chuột ra màn hình
thiết kế và nhấn trái chuột vào vị trí thích hợp để đặt Oscilloscope.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Bước 3: Nối tín hiệu cần đo vào đồng hồ Oscilloscope:


Với Proteus, đồ hồ Oscilloscope cung cấp cho chúng ta 4 ngõ vào tín hiệu. Vì
vậy, chúng ta có thể cùng lúc đo được 4 tín hiệu chỉ với 1 đồng hồ Oscilloscope
(người lập trình có thể tạo nhiều Oscilloscope để đo được nhiều tín hiệu hơn).
Người lập trình nối dây từ tín hiệu cần đo (trong bài ví dụ này là chân P1.0) đến
1 trong bốn tín hiệu ngõ vào của Oscilloscope. Sau đó người lập trình nhấn nút
để chạy chương trình.
Bước 4: Đọc tín hiệu đo được từ Oscilloscope:
Sau khi bấm chạy sẽ xuất hiện màn hình giao diện Oscilloscope như hình dưới
đây:
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Cửa sổ bên trái là 4 tín hiệu mà Oscilloscope đo được, và cửa sổ bên phải được
dùng để điều chỉnh dạng sóng đo được để có thể dễ nhìn hơn.
Chức năng của các cửa sổ bên phải bao gồm như sau:
Channel A, Channel B, Channel C, Channel D: cung cấp các chức năng thao
tác với sóng trên từng kênh:

- : được dùng để điều chỉnh vị trí của sóng trên màn hình hiển thị
sóng.

- : điều chỉnh chế độ hiển thị các thành phần của sóng như thành
phần AC, DC, hoặc GND. Ngoài ra người lập trình có thể tắt hiển thị
một sóng bất kì bằng cách gạc xuống OFF tại kênh tương ứng.

- : điều chỉnh biên độ hiển thị sóng.


- : đảo ngược tín hiệu sóng.
- : cộng hai tín hiệu sóng.
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Horizontal: cung cấp người dùng chức năng như điều chỉnh thang thời gian hoặc
vẽ đồ thị đặc tuyến biên độ.

2.3.6 Minh họa quá trình mô phỏng giao tiếp cổng nối tiếp
Yêu cầu:
“Viết chương gửi chuỗi kí tự đến giao diện của serial terminal”
Chương trình mẫu:

ORG 0000H
MOV SCON,#52H
MOV PCON,#80H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
ACALL STRING
SJMP $
PHAT:
JNB TI,$
CLR TI
MOV SBUF,A
RET
STRING:
MOV R0,#0
LAP:
MOV A,R0
MOV DPTR,#MESSAGE
MOVC A,@A+DPTR
JZ KT
ACALL PHAT
INC R0
AJMP LAP
KT:
MOV R0,#0
RETMESSAGE: DB "BO MON DIEN TU",0
END
Các bước thực hiện:
Bước 1: Nạp chương trình cho vi điều khiển (tương tự như phần trước)
TÀI LIỆU THÍ NGHIỆM VI XỬ LÝ BỘ MÔN ĐIỆN TỬ

Bước 2: Chạy chương trình.


Sau khi chúng ta cho chạy chương trình, phần mềm Proteus sẽ hiển thị cho chúng
ta cửa sổ Virtual Terminal được dùng để giao tiếp giữa vi điều khiển với giao
diện nối tiếp ảo của Proteus

Tại màn hình này chúng ta có thể nhận được chuỗi ký tự được gửi từ vi điều khiển
hoặc từ giao diện ảo này gửi đến vi điều khiển bằng cách nhập trực tiếp chuỗi kí
tự vào màn hình này.
Lưu ý: Nếu người lập trình bấm tắt cửa sổ Virtual Terminal. Người dùng có thể
mở lại bằng cách chọn Debug -> Virtual Terminal

You might also like