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

Bài tập thực hành vi điều khiển H8SX1582

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 (3.12 MB, 105 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH
---------WX---------

BÀI TẬP THỰC HÀNH
VI ĐIỀU KHIỂN H8SX/1582

TP.HỒ CHÍ MINH,12 - 2007


Mục Lục
Bài 1: Biên dịch và debug một chương trình đơn giản ..................................................1
1.1. Nội dung ................................................................................................................1
1.2. Project workspace ..................................................................................................1
1.3. Build project tutorial..............................................................................................4
1.4. Download và chạy chương trình tutorial ...............................................................9
1.5. Các file trong project ...........................................................................................13
Bài 2: Khảo sát I/O port...................................................................................................16
2.1. Nội dung ..............................................................................................................16
2.2. Tóm tắt lý thuyết..................................................................................................16
2.3. Lập trình C ...........................................................................................................19
2.4. Bài tập ..................................................................................................................21
Bài 3: Xử lý ngoại lệ và ngắt quãng ................................................................................24
3.1. Nội dung ..............................................................................................................24
3.2. Tóm tắt lý thuyết..................................................................................................24
3.3. Thực hành – Bài tập.............................................................................................36
Bài 4: Khảo sát các bộ định thời .....................................................................................37
4.1. Nội dung ..............................................................................................................37
4.2. Tổng quan về bộ định thời 16 bit (TPU) .............................................................37
4.3. Các thanh ghi của bộ định thời ............................................................................37


4.4. Cách sử dụng interval timer.................................................................................40
4.5. Cách sử dụng TPU làm bộ phát xung clock ........................................................41
4.6. Bài tập ..................................................................................................................42
Bài 5: Khảo sát kỹ thuật quét LED.................................................................................43
5.1 Nội dung...............................................................................................................43
5.2 Khảo sát kỹ thuật quét LED.................................................................................43
5.3 Hiển thị ảnh trên ma trận LED.............................................................................44
5.4 Bài tập ..................................................................................................................45
Bài 6: Khảo sát kỹ thuật quét phím, chống rung phím nhấn.......................................47
6.1. Nội dung ..............................................................................................................47
6.2. Khảo sát kỹ thuật quét phím ................................................................................47
6.3. Khảo sát kỹ thuật chống rung phím.....................................................................49
6.4. Bài tập ..................................................................................................................53
Bài 7: Khảo sát bộ truyền nhận nối tiếp SCI của H8SX/1582......................................55
7.1
Nội dung ..............................................................................................................55
7.2
Tổng quan về bộ truyền nhận dữ liệu nối tiếp SCI..............................................55
7.3
Các thanh ghi của bộ truyền nhận dữ liệu nối tiếp SCI .......................................55
7.4
Các hoạt động của bộ giao tiếp nối tiếp SCI .......................................................60
7.5
Bài tập ..................................................................................................................64
Bài 8: Khảo sát module LCD của Starter Kit................................................................66


8.1
Nội dung ..............................................................................................................66
8.2

Tổng quan về module LCD .................................................................................66
8.3
Bài tập ..................................................................................................................69
Bài 9: Khảo sát bộ A/D của H8SX/1582 .........................................................................70
9.1
Nội dung ..............................................................................................................70
9.2
Tổng quan về bộ A/D ..........................................................................................70
9.3
Các thanh ghi của bộ A/D....................................................................................70
9.4
Các hoạt động của bộ A/D...................................................................................72
9.5
Bài tập ..................................................................................................................75
Bài 10: Khảo sát bộ truyền dữ liệu DTC (Data Tranfer Controller) ..........................76
10.1 Nội dung bài thí nghiệm ......................................................................................76
10.2 Tổng quan về bộ truyền dữ liệu DTC ..................................................................76
10.3 Các thanh ghi của DTC........................................................................................76
10.4 Các chế độ hoạt động của DTC ...........................................................................80
10.5 Ví dụ sử dụng DTC..............................................................................................82
10.6 Bài tập ..................................................................................................................83
Bài 11: Khảo sát bộ điều khiển DMA .............................................................................84
11.1 Nội dung...............................................................................................................84
11.2 Tổng quan về bộ điều khiển DMA ......................................................................84
11.3 Các thanh ghi của DMA ......................................................................................84
11.4 Các chế độ hoạt động của DMA..........................................................................93
11.5 Ví dụ sử dụng DMA ............................................................................................94
11.6 Bài Tập.................................................................................................................96
Bài 12: Khảo sát bộ phát sinh xung khả lập trình PPG................................................97
12.1 Nội dung...............................................................................................................97

12.2 Tổng quan về bộ phát sinh khả lập trình PPG .....................................................97
12.3 Các thanh ghi của PPG ........................................................................................97
12.4 Các chế độ hoạt động.........................................................................................101
12.5 Ví dụ sử dụng PPG ............................................................................................101


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Bài 1: Biên dịch và debug một
chương trình đơn giản
1.1. Nội dung
Phần hướng dẫn này sẽ giải thích các vấn đề sau đây:
• Cách biên dịch, link, download và chạy một chương trình đơn giản trên
RSK.
• Cách xây dựng một ứng dụng nhúng.
• Cách sử dụng các công cụ của Renesas.
Công cụ tạo project sẽ tạo ra một project tutorial với 2 cách build có thể chọn lựa
được:
• Debug: project được build để chạy với sự hỗ trợ của thiết bị debug.
• Release: project được build thành sản phẩm, không cần thiết bị debug

1.2. Project workspace
1.2.1.

Giới thiệu

HEW là một công cụ phát triển được tích hợp, cho phép người dùng viết, biên
dịch, lập trình và debug một phần mềm ứng dụng trên bất cứ vi điều khiển nào của

Renesas. HEW sẽ được cài đặt khi cài đặt khi cài đặt phần mềm cho RSK.
Để bắt đầu sử dụng RSK, phần hướng dẫn này sẽ mô tả các bước để tạo và debug
các ví dụ được cung cấp sẵn.

1.2.2.

Tạo một project workspace mới

Tạo một workspace mới từ menu File → New Workspace, hoặc chọn “Create a
new project workspace” khi hộp thoại “Welcome!” hiện lên.

Khoa học & Kỹ thuật máy tính

-1-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Ví dụ trên cho thấy một hộp thoại New Project Workspace với các lựa chọn như
sau:

• Chọn họ CPU “H8S, H8/300” và Tool-chain “Hitachi H8S, H8/300
Standard”
• Chọn loại project là “RSKH8SX1582” trong danh sách project
• Nhập tên cho workspace, tất cả các file sẽ được lưu vào một thư mục có
cùng tên này.

Vùng tên của project sẽ được tự động thêm vào để phù hợp với tên workspace đã

nhập. Tên này cũng có thể thay đổi tùy theo người dùng. Lưu ý là HEW cho phép
thêm nhiều project vào chung 1 workspace. Có thể bạn sẽ thêm một project với các
code mẫu sau này, do đó nên chọn một tên phù hợp cho project tutorial.
• Nhấn <OK> để bắt đầu tạo project.
Hộp thoại sau sẽ hiện ra

Khoa học & Kỹ thuật máy tính

-2-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Chọn “Tutorial code” (sẽ giải thích sau trong phần hướng dẫn này). Phần
“Sample code” cung cấp một số ví dụ sử dụng các thiết bị ngoại vi. Phần
“Application” dùng để xây dựng các ứng dụng với thiết bị debug đã được cấu hình
sẵn.
Nhấn <Finish> để bắt đầu tạo project, một hộp thoại xác nhận sẽ hiện lên, chọn
<OK> để tạo project và thêm các file cần thiết cho project.
Một cấu trúc cây sẽ cho thấy tất cả các file trong project, để xem file main.c,
double click vào tên file, một cửa sổ mới sẽ cho thấy code trong file đó.

1.2.3.

Thiết lập cơ chế build

Workspace đã được tạo ra có thể được build theo 2 cách. Các cách build này cho
phép 1 project được build với nhiều chọn lựa khác nhau của trình biên dịch.

Cách build chương trình được chọn từ drop list bên trái trên toolbar. Có 2 lựa
chọn là “Debug” và “Release”. Khi chọn “Debug”, chương trình sẽ được build để chạy
với sự hỗ trợ của thiết bị debug, ngược lại, khi chọn “Release”, chương trình sẽ được
build để có thể nạp thẳng vào ROM.
Chọn cách build “Debug”

Sau đó chọn tiếp “Session_H8SX_1582_Hmon” trong droplist bên phải

Khoa học & Kỹ thuật máy tính

-3-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

1.3. Build project tutorial
1.3.1.

Build mã nguồn

Có 3 cách để build mã nguồn nhanh:
trên toolbar. Cách này sẽ build tất cả các mã
• Chọn nút “Build All”
nguồn có trong project, kể cả thư viện chuẩn.
trên toolbar. Cách này sẽ build tất cả các file có sự
• Chọn nút “Build”
thay đổi kể từ lần build trước đó. Thư viện chuẩn sẽ không được build, trừ khi
có một sự thay đổi nào đó.

• Nhấn <F7>, tương đương với nhấn nút “Build” trên toolbar.
Hãy build project tutorial bằng cách nhấn <F7> hoặc một trong các nút build đã
nói trên. Trong suốt quá trình build, mỗi trạng thái sẽ được báo trên cửa sổ thông báo.
Quá trình build sẽ kết thúc với số lỗi và số warning gặp được.

1.3.2.

Kết nối thiết bị debug

Phần này mặc định là đã cài đặt driver cho thiết bị debug E8, đồng thời không
cần phải cấp nguồn cho board, nguồn sẽ được lấy từ cổng USB của máy tính.
• Nối thiết bị debug với cổng USB trên máy tính.
• Nối thiết bị debug với board mạch, chỗ kết nối được đánh dấu “E8” và nằm
gần với chỗ cắm nguồn.

1.3.3.

Kết nối với board bằng E8Direct và HMon

Phần này sẽ hướng dẫn cách kết nối với thiết bị, lập trình bộ nhớ Flash và thực thi
chương trình.
E8 cung cấp một interface gọi là E8Direct, cho phép kết nối chương trình debug
HMon với board mạch chính.
Để có thể lập trình bộ nhớ Flash, ta cần phải thiết lập cấu hình trước. Việc cấu
hình này chỉ cần làm một lần cho mỗi project.
• Chọn “FDT Wizard” từ thanh công cụ FDT

Nếu flash kernel đã được cấu hình trước thì một cửa sổ xác nhận sẽ được mở ra
với các thiết lập trước đó của kernel. Để sửa lại cấu hình này chỉ cần double click vào
thành phần muốn sửa. Nếu FDT đã được cấu hình sẵn thì có thể bỏ qua phần này và

đọc tiếp phần “Kết nối với HMon”.
Bước đầu tiên là chọn thiết bị phù hợp từ các kernel đã được cài đặt sẵn, các
kernel này nằm sẵn trong drop list, người dùng chỉ cần chọn lựa đúng thiết bị. Trong
trường hợp phải build lại kernel (ví dụ tần số của thạch anh trên board bị thay đổi) thì

Khoa học & Kỹ thuật máy tính

-4-


Bài tập thực hành H8SX/1582

đường
dẫn
để
cài
đặt
lại
Installation>\Kernels\ProtC\1582\Renesas\1_0_00.RSK>

ĐH. Bách Khoa TP. HCM

kernel




• Chọn thiết bị từ drop list.
• Nhấn <Next>

Nếu bạn copy kernel đến một vị trí khác để thay đổi tần số thạch anh thì thiết bị sẽ
không được liệt kê, trong trường hợp này:
• Nhấn <Other…> và đưa đường dẫn đến kernel bạn đã sửa.
• Chọn “E8Direct” trong hộp thoại kế tiếp
• Nhấn <Next>

• Các thiết lập mặc định được sử dụng cho board RSK chuẩn
• Xác nhận tần số thạch anh sử dụng trên board
• Xác nhận hệ số nhân tần số cho clock chính
Khoa học & Kỹ thuật máy tính

-5-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

• Xác nhận hệ số nhân tần số clock cho thiết bị ngoại vi
• Nhấn <Next>

• Chọn “BOOT mode”
• Chọn “Use default”
• Nhấn <Next>

• Chọn “Automatic” và “Advanced”
• Nhấn <Next>

Khoa học & Kỹ thuật máy tính


-6-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

• Hộp thoại warning sẽ hiện ra
• Chọn <OK>

• Nhấn <Next> trong hộp thoại kế tiếp
• Nhấn <OK> trong hộp thoại warning

• Nhấn <Finish> trong hộp thoại kế tiếp
• Save workspace File → Save Workspace
Khoa học & Kỹ thuật máy tính

-7-


Bài tập thực hành H8SX/1582

1.3.4.

ĐH. Bách Khoa TP. HCM

Kết nối với HMon

Bây giờ ta có thể kết nối với thiết bị
• Nhấn nút “Connect” trên toolbar


như sau

HMon sẽ tự động nhận biết cấu hình của Flash bên trong
thiết bị thông qua FDT kernel ta đã thiết lập trước đó. HMon
cũng cần phải biết thông tin về vị trí của các thanh ghi IO và
RAM nội/ngoại. Các thông tin này được lưu trong một file
“.TCF”, file này được cung cấp chung với HEW. Để cho phép
người dùng có thể thay đổi file TCF này, hộp thoại sau đây
được hiện ra để cho phép người dùng lựa chọn
• Chọn file TCF phù hợp với board RSK của bạn
• Nhấn <OK>
• Chọn Yes trong hộp thoại kế tiếp
Một hộp thoại khác sẽ xuất hiện, cho phép chọn tốc độ baud và phương pháp cấp
nguồn cho board mạch.
• Thiết lập các thông số như trong hình rồi chọn <OK>

Khoa học & Kỹ thuật máy tính

-8-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

HMon sẽ kết nối với board mạch, nếu thành công thì thông báo “Connected” sẽ
xuất hiện trong cửa sổ output.

1.4. Download và chạy chương trình tutorial

Khi mã nguồn đã được build, cần phải dowwnload nó xuống board để thực thi.
Sau khi đã kết nối thiết bị, một thành phần mới sẽ được thêm vào workspace, có
tên là “Download Modules”.
• Click phải vào module được
liệt kê và chọn “Download
module”

Hộp thoại download sẽ xuất hiện

Khoa học & Kỹ thuật máy tính

-9-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Hộp thoại này cung cấp nhiều lựa chọn để download chương trình, đồng thời nó
cũng cho phép chỉnh sửa lại các thông số để kết nối HMon với thiết bị.
HMon có một bộ đệm lưu lại chương trình hiện tại đang nạp trong trong thiết bị.
Bộ đệm này cho phép giảm thời gian lập trình cho thiết bị bằng cách không ghi lên
những vùng trên thiết bị mà không có sự thay đổi giữa 2 lần biên dịch. Trong lần kết
nối đầu tiên thì bộ đệm này sẽ rỗng. Chọn “Upload and Compare” sẽ đọc lại chương
trình từ thiết bị và so sánh với bộ đệm của HMon.
• Chọn bất kỳ một cách download và nhấn <OK>
Sau khi download xong, chương trình có thể được thực thi. Để bắt đầu debug
chương trình, ta reset lại CPU và thiết bị debug
• Nhấn “Reset CPU” trên toolbar.
Cửa sổ hiển thị mã sẽ hiển thị mã nguồn của project tutorial tại điểm bắt đầu. Một

mũi tên cho biết vị trí hiện tại của program counter.

Khoa học & Kỹ thuật máy tính

-10-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Chúng ta sẽ bỏ qua đoạn mã khởi động cho thiết bị và đi vào chương trình chính.
• Mở file resetprg.c
• Đặt một breakpoint tại vị trí gọi hàm main() bằng cách double click vào cột
chứa mũi tên PC; hoặc chọn dòng và nhấn <F9>; hoặc click phải vào dòng và
chọn “Toggle breakpoint”
• Nhấn “Reset Go” trên
toolbar.
Chương trình sẽ thực thi tới điểm breakpoint. Tại đây, tất cả các đoạn mã khởi
động cho thiết bị đã được thực thi.
• Nhấn “Step In” trên toolbar
Cửa sổ hiển thị mã sẽ mở file “main.c” và hiển thị vị trí mới của
program counter.

Mã nguồn của project tutorial đã bao gồm các đoạn mã dùng để hiển thị màn hình
LCD. Trong phần này ta không cần quan tâm chi tiết về giao tiếp với LCD, ta chỉ cần
biết LCD là thiết bị write-only và do đó, việc có hay không có LCD cũng không ảnh
hưởng đến chương trình đang thực thi.
• Đặt một điểm breakpoint tại vị trí gọi hàm “TimerADC();”
• Click phải vào hàm “FlashLEDs();” và chọn “Go to cursor”; hoặc

để con trỏ tại vị trí hàm “FlashLEDs()” và nhấn “Go to Cursor”
trên toolbar.
Khoa học & Kỹ thuật máy tính

-11-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Chương trình sẽ chạy đến dòng được chọn và dừng lại tại đó. Một điểm
breakpoint tạm thời được tự động đưa vào mã nguồn và sau đó sẽ được gỡ bỏ khi
chương trình dừng lại tại đó.
• Nhấn vào nút “Step Over trên toolbar
Chương trình sẽ chạy tiếp tục và các đèn LED sẽ chớp 200 lần. Chương trình sẽ
không dừng lại nếu đèn chưa chớp đủ 200 lần hoặc có một nút nhấn được nhấn.
• Khi đèn đang chớp, nhấn nút SW1 trên board để thoát khỏi hàm FlashLEDs().
Chương trình sẽ chạy tới vị trí breakpoint ta đã thiết lập tại hàm Timer.
Có nhiều phiên bản của hàm định thời, phụ thuộc vào các thiết bị ngoại vi có sẵn
trên board. Hàm định thời mặc định là TimerADC.
Hàm định thời thiết lập một ngắt quãng trên một bộ định thời bên trong thiết bị.
Việc khởi động cho ngắt quãng được thực hiện trong lúc cài đặt phần cứng và được đặt
trong file “interrupts.c”.
• Mở file “interrupts.c”
• Xem lại file này và tìm vị trí hàm ngắt quãng làm thay đổi các chân nối với
LED, INT_TGI1B_TPU1(void)
• Đặt một điểm breakpoint tại vị trí chân đèn LED được thay
đổi.
• Nhấn “Go” hoặc <F5> để chạy tiếp chương trình.

Chương trình sẽ dừng tại vị trí hàm ngắt quãng. Bây giờ ta có thể chạy bên trong
hàm ngắt quãng.
• Xóa bỏ điểm breakpoint trong hàm ngắt quãng (double click lên nó)
• Nhấn “Step Over” để chạy qua lệnh đó và quan sát đèn LED tắt
• Nhấn “Go” để chạy tiếp chương trình.
Chương trình sẽ chạy tiếp tục đến vòng lặp vô tận tại cuối hàm Main(). Các đèn
LED sẽ chớp tắt liên tục.
• Nhấn nút “Stop” trên toolbar để
dừng chương trình.
• Nhấn Ctrl-B để mở cửa sổ
breakpoint.
• Chọn “Remove All” và sau đó nhấn
<OK> để thoát.

• Mở file “main.c”
• Đặt một điểm breakpoint tại hàm “StaticsTest();”
Hàm StaticsTest() dùng để minh họa việc sao chép thành công toàn bộ các biến
đã được khởi tạo từ bộ nhớ flash vào RAM.
• Nhấn nút “Reset Go” trên toolbar.
Khoa học & Kỹ thuật máy tính

-12-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Chương trình sẽ chạy đến điểm breakpoint. (nhấn một nút bất kì trên board để
thoát khỏi đoạn chương trình chớp LED)

• Nhấn vào nút “Step In” trên toolbar.
Chúng ta có thể xem các biến trong quá trình debug chương trình. Để xem giá trị
của một biến, đưa chuột lên biến đó, nếu giá trị của biến đã có sẵn thì giá trị đó sẽ
được hiện lên phía trên biến (tool-tip text)

Đưa chuột lên phía trên biến “ucStr” để xem giá trị của biến này, sau đó click
phải lên biến và chọn “Instant Watch”.
• Một hộp thoại khác sẽ hiện lên cho thấy tên biến đó và các giá trị chi tiết
khác. Nhấn vào nút <Add>.
Hộp thoại sẽ đóng lại và một cửa sổ khác được mở ra, trong đó có chứa biến cần
xem. Ta sẽ thấy biền “ucStr” đã được khởi tạo giá trị “ STATIC ”
• Đặt một điểm breakpoint tại vị trí hàm “DisplayString()” bên trong vòng lặp
• Nhấn “Go” để tiếp tục chạy chương trình. Khi chương trình dừng lại, bạn sẽ
thấy dòng thứ 2 trên LCD đã được thay đổi nội dung
Quan sát trong cửa sổ xem biến ta sẽ thấy kí tự đầu tiên của biến chuỗi đã được
thay thế bởi kí tự đầu tiên của chuỗi hằng.
• Gỡ bỏ breakpoint.
• Click phải trên hàm “DisplayString” nằm sau vòng lặp và chọn “Go to
cursor”
Quan sát lại ta sẽ thấy biến chuỗi đã được khởi tạo ở đầu chương trình và có thể
được sửa lại với nội dung “TESTTEST”. Chuỗi kí tự mới cũng được hiển thị trên màn
hình LCD.

1.5. Các file trong project
1.5.1.
Đoạn mã khởi động chương trình (Resetprg.c/
resetprg.h)
Đây là điểm bắt đầu của chương trình chính. Tùy thuộc vào trình biên dịch được
sử dụng, file này sẽ được dùng làm điểm bắt đầu thực sự của chương trình hoặc là sẽ
được gọi trong quá trình khởi động môi trường.


Khoa học & Kỹ thuật máy tính

-13-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Việc khởi tạo các biến sử dụng trong trình biên dịch C và khởi tạo các con trỏ
stack được thực hiện trong hàm _INITSCT.
Hàm “HardwareSetup()” sẽ khởi động phần cứng của thiết bị và các thiết bị ngoại
vi cần sử dụng.
Sau đó hàm main() sẽ được gọi để thực thi chương trình chính.

1.5.2.
Đoạn mã khởi động phần cứng (Hwsetup.c/
hwsetup.h)
Có 4 bước chung để thiết lập ban đầu cho vi điều khiển, do đó đoạn mã thực hiện
quá trình này cũng được chia nhỏ thành 4 hàm tương ứng như sau:

Khoa học & Kỹ thuật máy tính

-14-


Bài tập thực hành H8SX/1582

1.5.3.


ĐH. Bách Khoa TP. HCM

Đoạn mã chính (main.c/ main.h)

Khoa học & Kỹ thuật máy tính

-15-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Bài 2: Khảo sát I/O port
2.1. Nội dung
• Khảo sát các thanh ghi của các port I/O
• Lập trình truy xuất các port I/O

2.2. Tóm tắt lý thuyết
Phần này sẽ giới thiệu sơ bộ cách sử dụng các port I/O của H8. Thông thường
mỗi port I/O được điều khiển bởi 3 thanh ghi.

2.2.1.

Thanh ghi chỉ chiều dữ liệu (PnDDR)

Đây là một thanh ghi 8 bit chỉ ghi, được dùng để xác định chiều dữ liệu của port
là ngõ nhập hay ngõ xuất (cho mỗi bit). Nếu được đọc ra thì thanh ghi này luôn có giá
trị không xác định.

Khi một port hoạt động ở chế độ I/O, chân của port trở thành ngõ xuất nếu giá trị
của bit tương ứng trong thanh ghi DDR là 1; chân của port trở thành ngõ nhập nếu giá
trị của bit tương ứng trong thanh ghi DDR là 0.

Chú ý: Đối với port B thì 3 bit thấp của thanh ghi này là hợp lệ còn 5 bit cao không
được sử dụng.
Hình 2.1: Thanh ghi PnDDR

2.2.2.

Thanh ghi dữ liệu (PnDR)

Đây là một thanh ghi 8 bit có thể đọc, ghi. Thanh ghi này được dùng để chứa dữ
liệu xuất ra ngoài khi port dùng ở chế độ ngõ xuất.

Chú ý: Đối với port B thì 3 bit thấp của thanh ghi này là hợp lệ còn 5 bit cao không
được sử dụng.
Hình 2.2: Thanh ghi PnDR

2.2.3.

Thanh ghi port (PORTn)

Đây là một thanh ghi 8 bit cho biết trạng thái (0 hay là 1) các chân của port. Đây
là thanh ghi chỉ đọc.
Khi thanh ghi PORT được đọc thì:
Khoa học & Kỹ thuật máy tính

-16-



Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

• Nếu bit trong thanh ghi DDR = 1 thì bit tương ứng trong thanh ghi DR sẽ được
đọc.
• Nếu bit trong thanh ghi DDR = 0 thì trạng thái của chân tương ứng được đọc.

Chú ý: Đối với port B thì 3 bit thấp của thanh ghi này là hợp lệ còn 5 bit cao không
được sử dụng.
Hình 2.3: Thanh ghi PORTn
Bảng 2.1: Bảng các thanh ghi của các port I/O
Tên thanh ghi

Tên viết
tắt
P1DDR

R/W

Địa chỉ

Số bit

H’ FFFB80

8

P1DR

PORT1

R/W
R

H’ 00
Không xác
định

H’ FFFF50
H’ FFFF40

8
8

Thanh ghi chiều dữ liệu
port 2
Thanh ghi dữ liệu port 2
Thanh ghi port 2

P2DDR

W

H’ 00

H’ FFFB81

8


P2DR
PORT2

R/W
R

H’ 00
Không xác
định

H’ FFFF51
H’ FFFF41

8
8

Thanh ghi chiều dữ liệu
port 3
Thanh ghi dữ liệu port 3
Thanh ghi port 3

P3DDR

W

H’ 00

H’ FFFB82

8


P3DR
PORT3

R/W
R

H’ 00
Không xác
định

H’ FFFF52
H’ FFFF42

8
8

Thanh ghi port 4

PORT4

R

Không xác
định

H’ FFFF43

8


Thanh ghi port 5

PORT5

R

Không xác
định

H’ FFFF44

8

Thanh ghi chiều dữ liệu
port 6
Thanh ghi dữ liệu port 6
Thanh ghi port 6

P6DDR

W

H’ 00

H’ FFFB85

8

P6DR
PORT6


R/W
R

H’ 00
Không xác
định

H’ FFFF55
H’ FFFF45

8
8

Thanh ghi chiều dữ liệu
port 1
Thanh ghi dữ liệu port 1
Thanh ghi port 1

Khoa học & Kỹ thuật máy tính

W

Giá trị ban
đầu
H’ 00

-17-



Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Thanh ghi chiều dữ liệu
port A
Thanh ghi dữ liệu port A
Thanh ghi port A

PADDR

W

H’ 00

H’ FFFB89

8

PADR
PORTA

R/W
R

H’ 00
Không xác
định

H’ FFFF59

H’ FFFF49

8
8

Thanh ghi chiều dữ liệu
port B
Thanh ghi dữ liệu port B
Thanh ghi port B

PBDDR

W

H’ 00

H’ FFFB8A

8

PBDR
PORTB

R/W
R

H’ 00
Không xác
định


H’ FFFF5A
H’ FFFF4A

8
8

Thanh ghi chiều dữ liệu
port D
Thanh ghi dữ liệu port D
Thanh ghi port D

PDDDR

W

H’ 00

H’ FFFB8C

8

PDDR
PORTD

R/W
R

H’ 00
Không xác
định


H’ FFFF5C
H’ FFFF4C

8
8

Thanh ghi chiều dữ liệu
port H
Thanh ghi dữ liệu port H
Thanh ghi port H

PHDDR

W

H’ 00

H’ FFFBA8

8

PHDR
PORTH

R/W
R

H’ 00
Không xác

định

H’ FFFBA4
H’ FFFBA0

8
8

Thanh ghi chiều dữ liệu
port I
Thanh ghi dữ liệu port I
Thanh ghi port I

PIDDR

W

H’ 00

H’ FFFBA9

8

PIDR
PORTI

R/W
R

H’ 00

Không xác
định

H’ FFFBA5
H’ FFFBA1

8
8

Thanh ghi chiều dữ liệu
port J
Thanh ghi dữ liệu port J
Thanh ghi port J

PJHDD
R
PJDR
PORTJ

W

H’ 00

H’ FFFBAA

8

R/W
R


H’ 00
Không xác
định

H’ FFFBA6
H’ FFFBA2

8
8

Thanh ghi chiều dữ liệu
port K
Thanh ghi dữ liệu port K
Thanh ghi port K

PKDDR

W

H’ 00

H’ FFFBAB

8

PKDR
PORTK

R/W
R


H’ 00
Không xác
định

H’ FFFBA7
H’ FFFBA3

8
8

Khoa học & Kỹ thuật máy tính

-18-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

2.3. Lập trình C
Khi chúng ta lập trình để sử dụng các port I/O thì điều cần thiết là phải truy xuất
các thanh ghi của chúng. Toàn bộ các thanh ghi chức năng ngoại vi, bao gồm cả I/O
port đều được “map” vào không gian bộ nhớ. Chúng có thể được truy xuất dễ dàng
thông qua các con trỏ của C.

Ví dụ về sử dụng input port

Ví dụ về sử dụng output port
Khi sử dụng các thanh ghi chức năng ngoại vi, chúng ta sử dụng các bit của nó sẽ

tiện lợi hơn. Tuy nhiên, đôi khi chúng ta cũng cần phải truy xuất các thanh ghi này
theo đơn vị là byte. Do đó, ta khai báo các thanh ghi này thành dạng cấu trúc struct sẽ
dễ sử dụng hơn. Ví dụ sau cho thấy cách khai báo các thanh ghi theo dạng struct và sau
đó truy xuất các thanh ghi này theo đơn vị byte lẫn bit.

Khoa học & Kỹ thuật máy tính

-19-


Bài tập thực hành H8SX/1582

Khoa học & Kỹ thuật máy tính

ĐH. Bách Khoa TP. HCM

-20-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Kiểu định nghĩa như trên được tập hợp vào một file có tên là “iodefine.h”. Môi
trường phát triển của Renesas cho phép bạn include file này vào chương trình của
mình để sử dụng như trong ví dụ sau đây.

2.4. Bài tập
Tạo một workspace mới tên là “Exercises” cho các bài tập. Workspace có dạng là
“Application”, mỗi bài tập sau này sẽ thành một project trong workspace này.


2.4.1.

Bài 1

Nội dung: làm quen với cách sử dụng port I/O bằng cách định nghĩa theo đơn vị
byte, xuất dữ liệu làm sáng/ tắt các đèn LED trên board.
Tạo một project có tên là 01_port trong workspace “Exercises” vừa tạo.
Khoa học & Kỹ thuật máy tính

-21-


Bài tập thực hành H8SX/1582

ĐH. Bách Khoa TP. HCM

Trong file “main.c” của project, định nghĩa các port như sau:

Trong hàm main sinh viên thêm vào các đoạn mã để thực hiện các công việc sau
đây

2.4.2.

Bài 2

Nội dung: sử dụng các port I/O để nhận phím nhấn và xuất dữ liệu ra đèn LED
Các thông tin cần biết:
• Các đèn LED 0, 1, 2, 3 tương ứng với các port PI.0 – PI.3
• Các nút nhấn SW1, SW2 tương ứng với các port P2.0, P2.1, nút nhấn SW3

ứng với P1.7
• Nút nhấn và đèn LED đều tích cực mức 0.
Sinh viên tự định nghĩa thêm các thanh ghi của port 1, port 2 và thực hiện các
công việc sau đây:
• Viết chương trình nhận vào các nút nhấn SW1, SW2, SW3 và mở các LED
tương ứng như sau: nếu SW1 được nhấn thì chỉ sáng LED0, nếu SW2 được
nhấn thì chỉ sáng LED1, nếu SW3 được nhấn thì chỉ sáng LED2.
Khoa học & Kỹ thuật máy tính

-22-


×