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

Điều khiển hệ thống đèn LED dùng PIC 16f877a

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 (823.99 KB, 49 trang )






TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
KHOA VẬT LÝ


ĐỖ THỊ HẠNH



ĐIỀU KHIỂN HỆ THỐNG ĐÈN LED
DÙNG PIC16F877A


KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC





HÀ NỘI, 2014





TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
KHOA VẬT LÝ




ĐỖ THỊ HẠNH


ĐIỀU KHIỂN HỆ THỐNG ĐÈN LED
DÙNG PIC 16F877A
Chuyên ngành: Vật lý kỹ thuật

KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC

Ngƣời hƣớng dẫn khoa học:
ThS. PHÙNG CÔNG PHI KHANH



HÀ NỘI, 2014





LỜI CẢM ƠN

Trước tiên, tôi xin bày tỏ lòng kính trọng và biết ơn sâu sắc tới thầy
Phùng Công Phi Khanh. Thầy đã tận tình hướng dẫn giúp tôi hoàn thành
khóa luận. Tôi cũng xin gửi lời cảm ơn đến toàn thể các thầy, cô giáo trong
khoa Vật Lý, các thầy cô trong trường Đại học Sư phạm Hà Nội 2 - những
người đã giúp đỡ tôi trong suốt quá trình học tập và tạo điều kiện thuận lợi
giúp tôi hoàn thành khóa luận này.

Cuối cùng, tôi xin cảm ơn gia đình, bạn bè và người thân đã luôn giúp
đỡ, cổ vũ, động viên tôi trong suốt quá trình học tập và hoàn thành khóa luận.
Tôi xin chân thành cảm ơn!



Hà Nội, tháng 5 năm 2014
Sinh viên thực hiện

Đỗ Thị Hạnh











LỜI CAM ĐOAN

Tôi xin cam đoan đề tài “ĐIỀU KHIỂN HỆ THỐNG ĐÈN LED DÙNG
PIC 16F877A” là kết quả của sự nỗ lực cố gắng nghiên cứu, tìm tòi, tra cứu
tài liệu và sự giúp đỡ tận tình của thầy Phùng Công Phi Khanh cùng các thầy,
cô giáo trong khoa Vật Lý trường Đại học Sư phạm Hà Nội 2.
Các kết quả được nêu trong khóa luận này là trung thực và chưa từng
được công bố trong bất kì nghiên cứu nào.
Tôi xin hoàn toàn chịu trách nhiệm với những gì mình khẳng định trên

đây.

Hà Nội, tháng 5 năm 2014
Sinh viên thực hiện

Đỗ Thị Hạnh













MỤC LỤC

Trang
PHẦN I. MỞ ĐẦU
5
PHẦN II. NỘI DUNG
8
Chƣơng 1. Tổng quan về vi điều khiển PIC
8
1.1. PIC là gì?
8

1.2. Kiến trúc PIC
8
1.3. Các dòng PIC và cách lựa chọn vi điều khiển
9
1.4. Ngôn ngữ lập trình cho PIC
10
1.5. Mạch nạp PIC
10
Chƣơng 2. Vài nét về vi điều khiển PIC 16F877A
11
2.1. Sơ đồ chân của vi điều khiển PIC 16F877A
11
2.2. Một vài thông số về vi điều khiển PIC 16F877A
12
2.3. Sơ đồ khối vi điều khiển PIC 16F877A
13
2.4. Tổ chức bộ nhớ
15
2.4.1. Bộ nhớ chương trình
15
2.4.2. Bộ nhớ dữ liệu
17
2.4.3. Stack
19
2.5. Các cổng xuất nhập của PIC 16F877A
19
2.5.1. Port A
19
2.5.2. Port B
20

2.5.3. Port C
22
2.5.4. Port D
2.5.5. Port E
24
24
2.6. Tập lệnh của vi điều khiển PIC
26
Chƣơng 3. Phần mềm Proteus
33





Chƣơng 4. Ứng dụng
36
4.1. Điều khiển Led tự động
36
4.1.1. Yêu cầu
36
4.1.2. Thiết kế mạch điện
37
4.1.3. Thiết kế phần mềm
39
4.1.3.1. Sơ đồ khối
39
4.1.3.2. Chương trình
40
4.2. Điều khiển Led sử dụng nút bấm

4.2.1. Yêu cầu
41
41
4.2.2. Thiết kế mạch điện
42
4.2.3. Thiết kế phần mềm
44
4.2.3.1. Sơ đồ khối
44
4.2.3.2. Chương trình
44
PHẦN III. KẾT LUẬN
46
TÀI LIỆU THAM KHẢO
47
















5

PHẦN I. MỞ ĐẦU
1. Lí do chọn đề tài
Thế kỉ 21 đã mở ra một kỉ nguyên mới về khoa học - công nghệ. Sự nhảy
vọt mang tính chất đột phá của khoa học đã đem lại những thành tựu hết sức
to lớn trong tất cả các lĩnh vực của đời sống xã hội. Trong số nhiều lĩnh vực
được xã hội quan tâm, chúng ta không thể không kể đến các ứng dụng của vi
điều khiển. Kĩ thuật vi điều khiển đã và đang dần khẳng định vị trí của mình
trong xã hội. Bởi lẽ, nó có thể đáp ứng được yêu cầu của phần lớn các ứng
dụng trong các ngành kĩ thuật, kĩ thuật điện tử và tự động hóa. Bên cạnh họ vi
điều khiển 8051 truyền thống, dòng vi điều khiển PIC ra đời thật sự là một sự
bổ sung về kiến thức cũng như về ứng dụng cho dòng vi điều khiển cũ. Dòng
PIC với giá thành không quá đắt lại đủ mạnh về tính năng, đủ bộ nhớ cho hầu
hết các ứng dụng nên đã và đang được dùng phổ biến. Trong dòng vi điều
khiển này, có một họ PIC với độ dài lệnh là 14 bit và bộ nhớ Flash có khả
năng ghi, xóa tới 100000 lần đã và đang được khai thác để phát triển các ứng
dụng. Đó chính là PIC 16F877A. Việc nghiên cứu phát triển các ứng dụng
của họ PIC này ngày càng thu hút được sự quan tâm, chú ý của sinh viên các
trường kĩ thuật. Trong số rất nhiều các ứng dụng của nó, chúng ta phải kể đến
một số ứng dụng điển hình như: việc phát triển thông tin trong thông tin liên
lạc, điều khiển tự động các máy móc, chế tạo Robot, điều khiển các đèn giao
thông hay những dãy đèn Led trong các biển quảng cáo, trang trí…
Xuất phát từ thực tế đó, chúng tôi chọn đề tài:
“ĐIỀU KHIỂN HỆ THỐNG ĐÈN LED DÙNG PIC 16F877A”
Nhằm đáp ứng nhu cầu học hỏi của bản thân về vi điều khiển đồng thời
góp phần trong xu hướng chung của sinh viên ngành kĩ thuật làm quen và
khai thác sử dụng vi điều khiển PIC.





6

2. Mục đích nghiên cứu
Tìm hiểu về vi điều khiển PIC 16F877A.
Nghiên cứu ứng dụng của vi điều khiển PIC 16F877A trong việc điều
khiển dãy đèn Led.
3. Nhiệm vụ nghiên cứu
Tổng quan về vi điều khiển PIC.
Tìm hiểu dòng PIC 16F877A và mô phỏng hoạt động của nó trong việc
điều khiển đèn Led.
4. Đối tƣợng nghiên cứu
Vi điều khiển PIC 16F877A.
5. Phạm vi nghiên cứu
Nghiên cứu ứng dụng của vi điều khiển PIC 16F877A trong việc điều
khiển dãy đèn Led.
Phần mềm MPLAB (ngôn ngữ MPLAB) hỗ trợ lập trình và biên dịch
chương trình.
Phần mềm Proteus hỗ trợ thiết kế mạch điện.
6. Phƣơng pháp nghiên cứu
Sử dụng phương pháp nghiên cứu lí thuyết kết hợp với phương pháp
thực nghiệm.
7. Ý nghĩa khoa học của đề tài
Điều khiển hệ thống đèn Led là một ứng dụng thực tế mà hiện nay đang
phát triển rất mạnh mẽ và được ứng dụng rộng rãi trong đời sống. Nghiên cứu
đề tài “ĐIỀU KHIỂN HỆ THỐNG ĐÈN LED DÙNG PIC 16F877A” là bước
tiếp cận đầu tiên khi bắt đầu học về dòng PIC 16F877A. Những kiến thức thu
được sau khi hoàn thành xong đề tài này sẽ là những kiến thức nền tảng để có
thể tiếp tục nghiên cứu, phát triển những ứng dụng tiếp theo.




7

8. Cấu trúc của khóa luận
Cấu trúc khóa luận gồm 4 chương:
Chương 1. Tổng quan về vi điều khiển PIC
Giới thiệu chung về vi điều khiển PIC: Giới thiệu về kiến trúc PIC, các
dòng PIC, cách lựa chọn vi điều khiển, ngôn ngữ lập trình cho PIC và mạch
nạp PIC.
Chương 2. Vài nét về vi điều khiển PIC 16F877A
Tìm hiểu những nét cơ bản về vi điều khiển PIC 16F877A: Tìm hiểu về
sơ đồ chân, sơ đồ khối, tổ chức bộ nhớ, các cổng xuất nhập và tập lệnh của
PIC 16F877A.
Chương 3. Phần mềm mô phỏng Proteus
Giới thiệu một cách cơ bản về nhiệm vụ và đặc điểm của phần mềm
Proteus.
Chương 4. Ứng dụng
Trong chương này, chúng tôi giới thiệu ứng dụng cụ thể của vi điều
khiển PIC 16F877A trong việc điều khiển dãy đèn Led.







8


PHẦN II. NỘI DUNG
Chƣơng 1. Tổng quan về vi điều khiển PIC
1.1. PIC là gì ?
PIC là viết tắt của “Programable Intelligent Computer’’ có thể dịch là
“máy tính lập trình thông minh” do hãng Genenral Instrument đặt tên cho vi
điều khiển đầu tiên của họ là PIC 1650. PIC 1650 được thiết kế để dùng làm
các thiết bị ngoại vi cho vi điều khiển CP1600. Vi điều khiển này sau đó được
nghiên cứu phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC
ngày nay.
Hiện nay, các sản phẩm vi điều khiển PIC của Microchip đã gần 100
loại: từ họ 10Fxxx đến các họ 12Cxxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA,
16LFxxxA, 18Fxxx, 18LFxxx…
1.2 . Kiến trúc PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai kiểu
kiến trúc: Kiến trúc Havard và kiến trúc Von-Neuman.

Harvard Von-Neuman



8 14 8


Hình 1.1. Kiến trúc Havard và kiến trúc Von-Neuman
Data
memory
CPU

Program
memory

CPU
Program
and
Data
memory



9

Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Điểm
khác biệt giữa hai kiểu kiến trúc là ở cấu trúc bộ nhớ dữ liệu và bộ nhớ
chương trình.
Đối với kiến trúc Von-Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình
nằm chung trong một bộ nhớ. Do đó ta có thể tổ chức một cách linh hoạt bộ
nhớ chương trình và bộ nhớ dữ liệu. Tuy nhiên, điều này chỉ có ý nghĩa khi
tốc độ xử lí của CPU phải rất cao do trong cùng một thời điểm CPU chỉ có thể
tương tác với bộ nhớ dữ liệu hoặc bộ nhớ chương trình. Như vậy, có thể nói
kiến trúc Von-Neuman không thích hợp với cấu trúc của một vi điều khiển.
Vi điều khiển được thiết kế theo kiến trúc Von-Neuman còn được gọi là vi
điều khiển CISC (vi điều khiển có tập lệnh phức tạp) vì độ dài lệnh luôn là
bội số của 8 bit.
Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách
thành hai bộ nhớ riêng biệt. Do đó, trong cùng một thời điểm CPU có thể
tương tác với cả hai bộ nhớ. Như vậy tốc độ xử lí của vi điều khiển được cải
thiện đáng kể. Tập lệnh trong kiến trúc Havard có thể được tối ưu tùy theo
yêu cầu kiến trúc của vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu.
Vi điều khiển được thiết kế theo kiến trúc Havard còn được gọi là vi điều
khiển RISC (vi điều khiển có tập lệnh rút gọn).
1.3. Các dòng PIC và cách lựa chọn vi điều khiển

Các kí hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit.
PIC16xxxx: độ dài lệnh 14 bit.
PIC18xxxx: độ dài lệnh 16 bit.
C: PIC có bộ nhớ EPROM.
F: PIC có bộ nhớ Flash.
LF: PIC có bộ nhớ Flash hoạt động ở điện áp thấp.



10

Bên cạnh đó một số vi điều khiển có kí hiệu xxFxxx là EEPROM. Nếu
có thêm chữ A ở cuối là Flash (ví dụ: PIC16F877 là EEPROM, còn PIC
16F877A là Flash).
Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC.
Ở Việt Nam phổ biến nhất là các họ vi điều khiển PIC do hãng
Microchip sản xuất.
Cách lựa chọn một vi điều khiển PIC phù hợp:
Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng
dụng. Có nhiều vi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi
điều khiển chỉ có 8 chân. Ngoài ra còn có các vi điều khiển 28, 40, 44 chân.
Cần chọn vi điều khiển PIC có bộ nhớ Flash để có thể nạp, xóa chương
trình được nhiều lần hơn.
Tiếp theo, cần chú ý đến các khối chức năng được tích hợp sẵn trong vi
điều khiển, chuẩn giao tiếp bên trong.
Sau cùng, cần chú ý đến bộ nhớ chương trình mà vi điều khiển cho phép.
1.4. Ngôn ngữ lập trình cho PIC
Ngôn ngữ lập trình cho PIC rất đa dạng. Ngôn ngữ lập trình thấp có
MPLAB được cung cấp miễn phí bởi nhà sản xuất Microchip. Các ngôn ngữ

lập trình cấp cao hơn bao gồm: C, Basic, Pascal, Ngoài ra còn có một số
ngôn ngữ lập trình được phát triển dành riêng cho PIC như PICBasic,
MikroBasic,…
1.5. Mạch nạp PIC
Đây là một dòng sản phẩm rất đa dạng dành cho vi điều khiển PIC. Có
thể sử dụng các mạch nạp được cung cấp bởi nhà sản xuất là hãng Microchip
như: PICSTART plus, MPLAB ICD 2, MPLAB ICD 3, PRO MATE II. Có
thể dùng các sản phẩm này để nạp cho vi điều khiển khác thông qua chương
trình MPLAB. Ngoài ra còn có WARP- 13A, P16PRO40.



11

Chƣơng 2. Vài nét về vi điều khiển PIC 16F877A
2.1. Sơ đồ chân của vi điều khiển PIC 16F877A

Hình 2.1. Sơ đồ chân của vi điều khiển PIC 16F877A
PIC 16F877A có 40 chân được chia thành 5 Port. Trong đó có 2 chân
cấp nguồn, 2 chân GND, 2 chân thạch anh và 1 chân dùng để Reset vi điều
khiển.
5 Port của PIC 16F877A bao gồm: Port B, Port D, Port C (mỗi Port có 8
chân), Port A có 6 chân và Port E có 3 chân.



12

2.2. Một vài thông số về vi điều khiển PIC 16F877A
PIC 16F877A là một vi điều khiển với kiến trúc RISC. Đây là vi điều

khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit, mỗi
lệnh đều được thực thi trong một chu kì xung clock (4 chu kì của bộ dao
động). Là họ vi điều khiển có 40 chân, mỗi chân có một chức năng khác nhau.
Trong đó có một số chân đa công dụng (đa hợp), mỗi chân có thể hoạt động
như một đường xuất/nhập độc lập hoặc là một chức năng đặc biệt dùng để
giao tiếp với các thiết bị ngoại vi. Tốc độ hoạt động tối đa cho phép là 20MHz
với một chu kì lệnh là 200ns.
Một vài thông số về vi điều khiển PIC 16F877A:
 Bộ nhớ chương trình 8K×14 bit.
 Bộ nhớ dữ liệu 368×8 byte RAM và bộ nhớ dữ liệu EEPROM với
dung lượng 256×8 byte.
 Có 5 Port I/O (Port A, Port B, Port C, Port D, Port E) với 33 pin I/O,
tín hiệu điều khiển độc lập.
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
 Bộ nhớ Flash với khả năng ghi xóa được 100000 lần.
 Bộ nhớ EEPROM với khả năng ghi xóa được 1000000 lần.
 Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.
 Có khả năng tự nạp chương trình với sự điều khiển của phần mềm.
 Nạp được chương trình ngay trên mạch điện ICSP (In Circuit Serial
Programming) thông qua 2 chân.
 Watchdog Timer với bộ dao động trong.




13

2.3. Sơ đồ khối vi điều khiển PIC 16F877A
Sơ đồ khối của PIC 16F877A bao gồm các khối chức năng sau:
 Khối ALU (Arithmetic Logic Unit).

 Khối bộ nhớ chương trình (Flash Program Memory).
 Khối bộ nhớ chứa dữ liệu (EEPROM - Data EPROM).
 Khối bộ nhớ file thanh ghi RAM (RAM file Register).
 Khối giả mã lệnh và điều khiển (Instruction Decode Control).
 Khối thanh ghi đặc biệt.
 Khối ngoại vi Timer.
 Khối giao tiếp nối tiếp.
 Khối chuyển đổi tín hiệu tương tự sang số ADC.
 Khối các Port xuất/nhập.



14


Hình 2.2. Sơ đồ khối vi điều khiển PIC 16F877A



15

2.4. Tổ chức bộ nhớ
Cấu trúc của bộ nhớ của vi điều khiển PIC16F877A bao gồm: Bộ nhớ
chương trình (Program memory) và bộ nhớ dữ liệu (Data memory).
2.4.1. Bộ nhớ chương trình
Bộ nhớ chương trình của vi điều khiển PIC 16F877A là bộ nhớ Flash.
Dung lượng bộ nhớ 8K word (1word = 14 bit) và được phân thành nhiều
trang từ page 0 đến page 3. Bộ nhớ chương trình có khả năng chứa được
8*1024 = 8192 lệnh (vì mỗi lệnh sau khi mã hóa sẽ có dung lượng 1 word).
PIC16F877A có bộ đếm chương trình dài 13 bit có thể định địa chỉ cho

8K không gian bộ nhớ. Mọi sự truy cập ngoài vùng không gian này sẽ không
có tác dụng. Bộ nhớ chương trình còn có các ngăn xếp (stack) với 8 mức.
Vector Reset được đặt ở địa chỉ 0000h và vector ngắt ngoại vi được đặt ở địa
chỉ 0004h. Khi PIC được Reset thì chương trình sẽ nhảy về vị trí vector Reset
và bắt đầu thực hiện tại đó.



16


Hình 2.3. Bộ nhớ chương trình PIC16F877A




17

2.4.2. Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC 16F877A bao gồm 4 Bank: Bank 0, Bank 1,
Bank 2 và Bank 3.
Bảng 2.1. Lựa chọn Bank của bộ nhớ dữ liệu trong PIC
RP1:RP0
Bank
00
0
01
1
10
2

11
3

Mỗi Bank có dung lượng 128 byte bao gồm: các thanh ghi mục đích
chung và các thanh ghi có chức năng đặc biệt SFR (Special Function
Registers).
Các vùng RAM đa mục đích (GPR – General Purpose RAM) có chiều
rộng là 8 bit và được truy cập trực tiếp hoặc gián tiếp thông qua thanh ghi
chức năng đặc biệt.
Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lý trung tâm
và các hàm chức năng ngoại vi để điều khiển hoạt động của các thiết bị. Các
thanh ghi chức năng đặc biệt được chia làm 2 loại: loại thứ nhất dùng cho các
chức năng ngoại vi (ngắt, so sánh, điều biến xung PWM, ), loại thứ hai dùng
cho các chức năng bên trong của vi điều khiển (các phép tính số học, truy
xuất dữ liệu, ).



18

Hình 2.4. Sơ đồ bộ nhớ dữ liệu PIC16F877A



19

2.4.3. Stack
Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là
một vùng nhớ đặc biệt không cho phép đọc hay ghi. Khi lệnh CALL được
thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ

đếm chương trình PC tự động được vi điều khiển cất vào trong Stack. Khi
một trong các lệnh RETURN, RETLW hay RETFIE được thực thi, giá trị PC
sẽ tự động được lấy ra từ trong Stack, vi điều khiển sẽ thực hiện tiếp chương
trình theo đúng quy trình định trước.
Trong vi điều khiển PIC 16F877A, bộ nhớ Stack có khả năng chứa được
8 địa chỉ và hoạt động theo cơ chế xoay vòng. Nghĩa là, giá trị cất vào bộ nhớ
Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào
bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá trị cất vào Stack lần thứ 2. Các thao
tác với bộ nhớ này sẽ hoàn toàn được điều khiển bởi CPU.
2.5. Các cổng xuất nhập của vi điều khiển PIC 16F877A
2.5.1. Port A
Port A là Port hai chiều bao gồm 6 pin I/O. Thanh ghi định hướng dữ
liệu tương ứng là TRISA. Một chân của Port A sẽ ở trạng thái Input nếu ta
“set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược
lại. Nếu muốn xác lập chức năng của một chân trong Port A là Output, ta
“clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA.
Đọc thanh ghi Port A là đọc trạng thái ở các chân nhưng khi ghi thì dữ
liệu sẽ vào ở mạch chốt Port. Tất cả hoạt động ghi gồm ba giai đoạn: đọc -
hiệu chỉnh - ghi, do đó ghi dữ liệu vào một Port được hiểu ngầm là đọc dữ
liệu từ Port rồi hiệu chỉnh và sau cùng là ghi dữ liệu vào mạch chốt dữ liệu.
Hoạt động của mỗi chân được lựa chọn bằng cách clear/set các bit điều
khiển cho phù hợp trong thanh ghi ADCON1 hoặc thanh ghi CMCON1.



20

Khi các chân của Port A được sử dụng là ngõ vào thì các bit của thanh
ghi TRISA phải luôn bằng 1.
Bảng 2.2. Bảng các chức năng của Port A

Tên
Bit #
Chức năng
RA0/AN0
Bit 0
Port I/O
RA1/AN1
Bit 1
Port I/O
RA2/AN2/V
REF-
/CV
REF
Bit 2
Port I/O hoặc V
REF-
hoặc CV
REF

RA3/AN3/ V
REF+

Bit 3
Port I/O hoặc V
REF+

RA4/TOCKI/C1OUT
Bit 4
Port I/O hoặc ngõ vào xung
clock cho Timer 0 hoặc ngõ ra

bộ so sánh.
RA5/AN4/𝑆𝑆



/C2OUT
Bit 5
Port I/O hoặc ngõ vào tương tự.

2.5.2. Port B
Port B là Port hai chiều gồm 8 chân RB0 - RB7. Thanh ghi định hướng
Port B là TRISB. Việc ghi các giá trị nào vào thanh ghi TRISB sẽ quy định
các chân của Port B là Input hay Output: 0 = Output, 1 = Input.
Ba chân của Port B được đa hợp với mạch điện gỡ rối bên trong và chức
năng lập trình điện áp thấp: RB3/PGM, RB6/PGC, RB7/PGD.
Mỗi chân của Port B có một điện trở kéo lên nguồn Vdd. Chức năng này
hoạt động khi bit RBPU (OPTION<7>) được xóa. Khi Port B được thiết lập
là các ngõ ra thì sẽ tự động tắt chức năng điện trở kéo lên cũng tương tự khi
CPU bị Reset lúc mới cấp điện.




21

Bảng 2.3. Bảng các chức năng của Port B
Tên
Bit #
Chức năng
RB0/INT

Bit 0
Port I/O hoặc ngõ vào ngắt. Có lập trình
điện trở kéo lên.
RB1
Bit 1
Port I/O. Có lập trình điện trở kéo lên.
RB2
Bit 2
Port I/O. Có lập trình điện trở kéo lên.
RB3/PGM
Bit 3
Port I/O hoặc lập trình ở chế độ LVP. Có
lập trình điện trở kéo lên.
RB4
Bit 4
Port I/O (ngắt khi có thay đổi). Có lập
trình điện trở kéo lên.
RB5
Bit 5
Port I/O (ngắt khi có thay đổi). Có lập trình
điện trở kéo lên.
RB6/PGC
Bit 6
Port I/O (ngắt khi có thay đổi) hoặc chân
mạch gỡ rối. Có lập trình điện trở kéo lên.
Xung lập trình nối tiếp.
RB7/PGD
Bit 7
Port I/O (ngắt khi có thay đổi) hoặc chân
mạch gỡ rối. Có lập trình điện trở kéo lên.

Dữ liệu lập trình nối tiếp.

Bốn chân RB4 - RB7 có chức năng ngắt (Interrupt) khi trạng thái chân
Port thay đổi (khi chân Port được quy định là Output thì chức năng này không
hoạt động). Chỉ có những chân được thiết lập ở cấu hình là ngõ vào thì mới có
chức năng ngắt. Các chân ngõ vào (RB4-RB7) được so sánh với giá trị cũ đã
được chốt trong lần đọc trước của Port B.



22

Khi có trạng thái sai lệch giữa hai giá trị này, ngắt sẽ xảy ra với cờ ngắt
RBIF (INTCON<0>) bật lên, ngắt có thể làm cho vi điều khiển thoát khỏi
trạng thái Sleep Mode.
Điều kiện không tương thích sẽ tiếp tục làm cờ báo ngắt RBIF bằng 1.
Khi đọc Port B sẽ chấm dứt điều kiện không tương thích và cho phép xóa bit
cờ báo ngắt RBIF.
2.5.3. Port C
Port C gồm 8 chân từ RC0 - RC7. Việc ghi các giá trị nào vào thanh ghi
TRISC sẽ quy định các chân của Port C là Input hay Output: Output = 0,
Input = 1.
Việc đọc thanh ghi Port C tương ứng với việc đọc các trạng thái của các
chân của Port C. Việc ghi giá trị vào thanh ghi Port C sẽ thay đổi các trạng
thái của các chân của Port C.
Các chân của Port C được đa hợp với các chức năng ngoại vi (bộ so
sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP,
UART). Khi các hàm chức năng ngoại vi được cho phép, thì cần quan tâm
chặt chẽ tới giá trị các bit của thanh ghi TRISC. Một số chức năng ngoại vi sẽ
ghi các giá trị 0 đè lên các bit của thanh ghi TRISC và mặc định các chân là

ngõ vào. Do đó cần phải xem xét kỹ các tính năng của các hàm ngoại vi để
thiết lập giá trị các bit trong thanh ghi TRISC cho chính xác.








23

Bảng 2.4. Bảng các chức năng của Port C
Tên
Bit #
Chức năng
RC0/T1OSO/T1CKI
Bit 0
Port I/O hoặc ngõ ra bộ dao động Timer 1/
ngõ vào xung của Timer 1.
RC1/T1OSI/CCP2
Bit 1
Port I/O hoặc ngõ vào bộ dao động
Timer 1/ ngõ vào Capture,
ngõ ra Compare2/ ngõ ra PWM.
RC2/CCP1
Bit 2
Port I/O hoặc / ngõ vào Capture1/ ngõ ra
Compare1/ ngõ ra PWM.
RC3/SCK/SCL

Bit 3
RC3 cũng có thể là xung clock nối tiếp đồng
bộ cho chế độ SPI và I
2
C.
RC4/SDI/SDA
Bit 4
RC4 cũng có thể là dữ liệu SPI hoặc dữ liệu
xuất/nhập cho chế độ I
2
C.
RC5/SDO
Bit 5
Port I/O hoặc là ngõ ra dữ liệu Port nối tiếp
đồng bộ.
RC6/TX/CK
Bit 6
Port I/O hoặc truyền bất đồng bộ USART
hoặc xung đồng bộ.
RC7/RX/DT
Bit 7
Port I/O hoặc nhận bất đồng bộ USART
hoặc dữ liệu đồng bộ.

×