Tải bản đầy đủ (.doc) (68 trang)

Sách tổng hợp hóa dầu

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 (1.47 MB, 68 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN TỬ
LUẬN VĂN TỐT NGHIỆP
Đề tài: Nghiên cứu về vi điều khiển PIC 16F877A và
một số ứng dụng.
Cụ thể: Nghiên cứu và thiết kế bộ KIT PIC 16F877A
GV hướng dẫn :
SV thực hiện :
Lớp : Điện Tử 1 K2
Khoa : Điện Tử
Trường : Đại học Công Nghiệp Hà Nội

LUẬN VĂN TỐT NGHIỆP
BỘ CÔNG THƯƠNG CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐH CÔNG NGHIỆP HÀ NỘI Độc lập - Tự do - Hạnh phúc
THỰC TẬP TỐT NGHIỆP ĐẠI HỌC
Họ và tên học sinh : TRẦN XUÂN CHIẾN
Lớp : ĐIỆN TỬ 1 K2
Khoá : 2…… Khoa, Trung tâm : ĐIỆN TỬ
Tên đề tài: Nghiên cứu về vi điều khiển PIC 16F877A và một số ứng dụng.
Cụ thể: Nghiên cứu và thiết kế bộ KIT PIC 16F877A
Giáo viên hướng dẫn : PHẠM THỊ QUỲNH TRANG
NỘI DUNG YÊU CẦU
TT Nội dung
1 Tổng quan về vi điều khiển
2 Giới thiệu về PIC 16F877A
3 Ứng dụng PIC 16F877A xây dựng bộ kit thực hành vi điều khiển
4
Ngày giao đề tài : …………………………………. Ngày hoàn thành : ………………………………….
GIÁO VIÊN HƯỚNG DẪN TRƯỞNG KHOA


SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
2
LUẬN VĂN TỐT NGHIỆP
Đánh giá và nhận xét của GV hướng dẫn
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................

........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
........................................................................................................................................
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
3
LUẬN VĂN TỐT NGHIỆP
MỤC LỤC
LỜI MỞ ĐẦU
Ngày nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹ thuật
và trong dân dụng. Các bộ vi điều khiển có khả năng xử lý nhiều hoạt động phức tạp
mà chỉ cần một chip vi mạch nhỏ, nó đã thay thế các tủ điều khiển lớn và phức tạp
bằng những mạch điện gọn nhẹ, dễ dàng thao tác sử dụng.
Vi điều khiển không những góp phần vào kỹ thuật điều khiển mà còn góp phần to
lớn vào việc phát triển thông tin. Chính vì các lý do trên, việc tìm hiểu, khảo sát vi
điều khiển là điều mà các sinh viên ngành điện mà đặc biệt là chuyên ngành kỹ thuật
điện-điện tử phải hết sức quan tâm. Đó chính là một nhu cầu cần thiết và cấp bách
đối với mỗi sinh viên, đề tài này được thực hiện chính là đáp ứng nhu cầu đó.
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và sử
dụng đươc lại là một điều rất phức tạp. Phần công việc xử lý chính vẫn phụ thuộc vào
con người, đó chính là chương trình hay phần mềm. Nếu không có sự tham gia của
con người thì hệ thống vi điều khiển cũng chỉ là một vật vô tri. Do vậy khi nói đến vi
điều khiển cũng giống như máy tính bao gồm 2 phần là phần cứng và phần mềm.
Mặc dù vi điều khiển đã đi được những bước dài như vậy nhưng để tiếp cận được
với kỹ thuật này không thể là một việc có được trong một sớm một chiều. Để tìm
hiểu bộ vi điều khiển một cách khoa học và mang lại hiệu quả cao làm nền tản cho
việc xâm nhập vào những hệ thống tối tân hơn. Việc trang bị những kiến thức về vi
điều khiển cho sinh viên là hết sức cần thiết. Xuất phát từ thực tiển này em đã đi đến
quyết định Thiết kế bộ Kit Vi Điều Khiển PIC 16F877A nhằm đáp ứng nhu cầu

ham muốn học hỏi của bản than và giúp cho các bạn sinh viên dễ tiếp cận và hiểu sâu
hơn về VĐK PIC.
Trong quá trình thực hiện đề tài vẫn còn nhiều sai sót, mong nhận được nhiều ý
kiến đóng góp từ cô và các bạn.
Em chân thành cảm ơn!
Hà nội, ngày 19 tháng 4 năm 2011
Sinh viên
Trần Xuân Chiến
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
4
LUẬN VĂN TỐT NGHIỆP
CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN
1.1 GIỚI THIỆU KHÁI QUÁT VỀ VI ĐIỀU KHIỂN
1.1.1 GIỚI THIỆU CHUNG
Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính toán,
xử lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả
đối với các bài toán và hệ thống lớn.Tuy nhiên đối với các ứng dụng nhỏ, tầm tính
toán không đòi hỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cần cân nhắc.
Bởi vì hệ thống dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các khối mạch
điện giao tiếp phức tạp như nhau. Các khối này bao gồm bộ nhớ để chứa dữ liệu và
chương trình thực hiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển
trở lại, các khối này cùng liên kết với vi xử lý thì mới thực hiện được công việc. Để
kết nối các khối này đòi hỏi người thiết kế phải hiểu biết tinh tường về các thành
phần vi xử lý, bộ nhớ, các thiết bị ngoại vi. Hệ thống được tạo ra khá phức tạp,
chiếm nhiều không gian, mạch in phức tạp và vấn đề chính là trình độ người thiết kế.
Kết quả là giá thành sản phẩm cuối cùng rất cao, không phù hợp để áp dụng cho các
hệ thống nhỏ.
Vì một số nhược điểm trên nên các nhà chế tạo tích hợp một ít bộ nhớ và một số
mạch giao tiếp ngoại vi cùng với vi xử lý vào một IC duy nhất được gọi là
Microcontroller- Vi điều khiển.

Một số đặc điểm khác nhau giữa vi xử lí và VĐK:
- Về phần cứng: VXL cần được ghép thêm các thiết bị ngoại vi bên ngoài như bộ
nhớ, và các thiết bị ngoại vi khác, … để có thể tạo thành một bản mạch hoàn
chỉnh. Đối với VĐK thì bản thân nó đã là một hệ máy tính hoàn chỉnh với CPU,
bộ nhớ, các mạch giao tiếp, các bộ định thời và mạch điều khiển ngắt được tích
hợp bên trong mạch.
- Về các đặc trưng của tập lệnh: Do ứng dụng khác nhau nên các bộ VXL và VĐK
cũng có những yêu cầu khác nhau đối với tập lệnh của chúng. Tập lệnh của các
VXL thường mạnh về các kiểu định địa chỉ với các lệnh cung cấp các hoạt động
trên các lượng dữ liệu lớn như 1byte, ½ byte, word, double word,...Ở các bộ
VĐK, các tập lệnh rất mạnh trong việc xử lý các kiêu dữ liệu nhỏ như bit hoặc
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
5
LUẬN VĂN TỐT NGHIỆP
một vài bit.
- Do VĐK cấu tạo về phần cứng và khả năng xử lí thấp hơn nhiều soi với VXL nên
giá thành của VĐK cũng rẻ hơn nhiều. Tuy nhiên nó vẫn đủ khả năng đáp ứng
được tất cả các yêu cầu của người dùng.
Vi điều khiển được ứng dụng trong các dây chuyền tự động loại nhỏ, các robot có
chức năng đơn giản, trong máy giặt, ôtô v.v...
1.1.2 PHÂN LOẠI
 Độ dài thanh ghi
Dựa vào độ dài của các thanh ghi và các lệnh của VĐK mà người ta chia ra các loại
VĐK 8bit, 16bit, hay 32bit....
Các loại VĐK 16bit do có độ dài lệnh lớn hơn nên các tập lệnh cũng nhiều hơn,
phong phú hơn. Tuy nhiên bất cứ chương trình nào viết bằng VĐK 16bit chúng ta
đều có thể viết trên VDK 8bit với chương trình thích hợp.
 Kiến trúc CISC và RISC
VXL hoặc VĐK CISC là VĐK có tập lệnh phức tạp. Các VĐK này có một số
lượng lớn các lệnh nên giúp cho người lập trình có thể linh hoạt và dễ dàng hơn khi

viết chương trình. VĐK RISC là VĐK có tập lệnh đơn giản. Chúng có một số lương
nhỏ các lệnh đơn giản. DO đó, chúng đòi hỏi phần cứng ít hơn, giá thành thấp hơn,
và nhanh hơn so với CISC. Tuy nhiên nó đòi hỏi người lập trình phải viết các chương
trình phức tạp hơn, nhiều lệnh hơn.
 Kiến trúc Harvard và kiến trúc Vonneumann
Kiến trúc Harvard sử dụng bộ nhớ riêng biệt cho chương trình và dữ liệu. Bus địa chỉ
và bus dữ liệu độc lập với nhau nên quá trình truyền nhận dữ liệu đơn giản hơn Kiến
trúc Vonneumann sử dụng chung bộ nhớ cho chương trình và dữ liệu. Điều này làm
cho VĐK gọn nhẹ hơn, giá thành nhẹ hơn.
Một số loại VĐK có trên thị trường:
- VĐK MCS-51: 8031, 8032, 8051, 8052, ...
- VĐK ATMEL: 89Cxx, AT89Cxx51..
- VĐK AVR AT90Sxxxx
- VĐK PIC 16C5x, 17C43...
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
6
LUẬN VĂN TỐT NGHIỆP
1.1.3 CẤU TRÚC TỔNG QUAN CỦA VDK
 CPU:
Là trái tim của hệ thống. Là nơi quản lí tất cả các hoạt động của VĐK. Bên trong
CPU gồm:
- ALU là bộ phận thao tác trên các dữ liệu
- Bộ giải mã lệnh và điều khiển, xác định các thao tác mà CPU cần thực
hiện
- Thanh ghi lệnh IR, lưu giữ opcode của lệnh được thực thi
- Thanh ghi PC, lưu giũ địa chỉ của lệnh kế tiếp cần thực thi
- Một tập các thanh ghi dùng để lưu thông tin tạm thời
 2. ROM:
ROM là bộ nhớ dùng để lưu giữ chương trình. ROM còn dùng để chứa số liệu
các bảng, các tham số hệ thống, các số liệu cố định của hệ thống. Trong quá

trình hoạt động nội dung ROM là cố định, không thể thay đổi, nội dung ROM
chỉ thay đổi khi ROM ở chế độ xóa hoặc nạp chương trình.
 RAM:
RAM là bọ nhớ dữ liệu. Bộ nhớ RAM dùng làm môi trường xử lý thông tin,
lưu trữ các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lí
thông tin. Nó cũng dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác
thu phát, chuyển đổi dữ liệu.
 BUS:
BUS là các đường dẫn dùng để di chuyển dữ liệu. Bao gồm: bus địa chỉ, bus
dữ liệu , và bus điều khiển
 BỘ ĐỊNH THỜI: Được sử dụng cho các mục đích chung về thời gian.
 WATCHDOG: Bộ phận dùng để reset lại hệ thống khi hệ thống gặp “bất
thường”.
 ADC: Bộ phận chuyển tín hiệu analog sang tín hiệu digital. Các tín hiệu bên
ngoài đi vào VDK thường ở dạng analog. ADC sẽ chuyển tín hiệu này về dạng tín
hiệu digital mà VDK có thể hiểu được.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
7
LUẬN VĂN TỐT NGHIỆP
1.2 KHÁI QUÁT VỀ VI ĐIỀU KHIỂN PIC
1.2.1 PIC LÀ GÌ ?
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là “máy
tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điều khiển đầu
tiên của họ: PIC1650 đượ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.
1.2.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 dạng kiến trúc:
kiến trúc Von Neuman và kiến trúc Havard.
Hình 1.1: Kiến trúc Havard và kiến trúc Von-Neuman

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
kiến trúc Havard và kiến trúc Von-Neuman 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, cân đối 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, vì với cấu trúc đó, 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.
Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra 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ể.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
8
LUẬN VĂN TỐT NGHIỆP
Một điểm cần chú ý nữa là 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. Ví
dụ, đối với vi điều khiển dòng 16F, độ dài lệnh luôn là 14 bit (trong khi dữ liệu được
tổ chức thành từng byte), còn đối với kiến trúc Von-Neuman, độ dài lệnh luôn là bội
số của 1 byte (do dữ liệu được tổ chức thành từng byte). Đặc điểm này được minh
họa cụ thể trong hình 1.1.
1.2.3 RISC VÀ CISC
Như đã trình bày ở trên, kiến trúc Havard là khái niệm mới hơn so với kiến trúc
Von-Neuman. Khái niệm này được hình thành nhằm cải tiến tốc độ thực thi của một
vi điều khiển.
Qua việc tách rời bộ nhớ chương trình và bộ nhớ dữ liệu, bus chương trình và bus
dữ liệu, CPU có thể cùng một lúc truy xuất cả bộ nhớ chương trình và bộ nhớ dữ liệu,
giúp tăng tốc độ xử lí của vi điều khiển lên gấp đôi. Đồng thời cấu trúc lệnh không
còn phụ thuộc vào cấu trúc dữ liệu nữa mà có thể linh động điều chỉnh tùy theo khả
năng và tốc độ của từng vi điều khiển. Và để tiếp tục cải tiến tốc độ thực thi lệnh, tập

lệnh của họ vi điều khiển PIC được thiết kế sao cho chiều dài mã lệnh luôn cố định
(ví dụ đối với họ 16Fxxxx chiều dài mã lệnh luôn là 14 bit) và cho phép thực thi lệnh
trong một chu kì của xung clock ( ngoại trừ một số trường hợp đặc biệt như lệnh
nhảy, lệnh gọi chương trình con … cần hai chu kì xung đồng hồ). Điều này có nghĩa
tập lệnh của vi điều khiển thuộc cấu trúc Havard sẽ ít lệnh hơn, ngắn hơn, đơn giản
hơn để đáp ứng yêu cầu mã hóa lệnh bằng một số lượng bit nhất định.
Vi điều khiển được tổ chức theo kiến trúc Havard còn được gọi là vi điều khiển
RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọ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 (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp vì
mã lệnh của nó không phải là một số cố định mà luôn là bội số của 8 bit (1 byte).
1.2.4 PIPELINING
Đây chính là cơ chế xử lí lệnh của các vi điều khiển PIC. Một chu kì lệnh của vi
điều khiển sẽ bao gồm 4 xung clock. Ví dụ ta sử dụng oscillator có tần số 4 MHZ, thì
xung lệnh sẽ có tần số 1 MHz (chu kì lệnh sẽ là 1 us). Giả sử ta có một đoạn chương
trình như sau:
1. MOVLW 55h
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
9
LUẬN VĂN TỐT NGHIỆP
2. MOVWF PORTB
3. CALL SUB_1
4. BSF PORTA,BIT3
5. instruction @ address SUB_1
Ở đây ta chỉ bàn đến qui trình vi điều khiển xử lí đoạn chương trình trên thông
qua
từng chu kì lệnh. Quá trình trên sẽ được thực thi như sau:
Hình 1.2: Cơ chế pipelining
- TCY0: đọc lệnh 1
- TCY1: thực thi lệnh 1, đọc lệnh 2

- TCY2: thực thi lệnh 2, đọc lệnh 3
- TCY3: thực thi lệnh 3, đọc lệnh 4.
- TCY4: vì lệnh 4 không phải là lệnh sẽ được thực thi theo qui trình thực thi của
chương trình (lệnh tiếp theo được thực thi phải là lệnh đầu tiên tại label
SUB_1) nên chu kì thực thi lệnh này chỉ được dùng để đọc lệnh đầu tiên tại
label SUB_1. Như vậy có thể xem lênh 3 cần 2 chu kì xung clock để thực thi.
- TCY5: thực thi lệnh đầu tiên của SUB_1 và đọc lệnh tiếp theo của SUB_1.
Quá trình này được thực hiện tương tự cho các lệnh tiếp theo của chương trình.
Thông thường, để thực thi một lệnh, ta cần một chu kì lệnh để gọi lệnh đó, và một
chu kì xung clock nữa để giải mã và thực thi lệnh. Với cơ chế pipelining được trình
bày ở trên, mỗi lệnh xem như chỉ được thực thi trong một chu kì lệnh. Đối với các
lệnh mà quá trình thực thi nó làm thay đổi giá trị thanh ghi PC (Program Counter) cần
hai chu kì lệnh để thực thi vì phải thực hiện việc gọi lệnh ở địa chỉ thanh ghi PC chỉ
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
10
LUẬN VĂN TỐT NGHIỆP
tới. Sau khi đã xác định đúng vị trí lệnh trong thanh ghi PC, mỗi lệnh chỉ cần một
chu kì lệnh để thực thi xong.
1.2.5 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC
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 (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là kí hiệu cũ
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 PIC16F877A 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, các 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.
- Ngoài ra mọi thông tin về cách lựa chọn vi điều khiển PIC có thể được tìm
thấy trong cuốn sách “Select PIC guide” do nhà sản xuất Microchip cung cấp.
1.2.6 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 cấp 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
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
11
LUẬN VĂN TỐT NGHIỆP
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.2.7 MẠCH NẠP PIC
Đây cũng 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 PM 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. Dòng
sản phẩm chính thống này có ưu thế là nạp được cho tất cả các vi điều khiển PIC, tuy
nhiên giá thành rất cao và thường gặp rất nhiều khó khăn trong quá trình mua sản
phẩm.
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều
mạch nạp được thiết kế dành cho vi điều khiển PIC. Có thể sơ lược một số mạch nạp

cho PIC như sau:
- JDM programmer: mạch nạp này dùng chương trình nạp Icprog cho phép nạp các
vi điều khiển PIC có hỗ trợ tính năng nạp chương trình điện áp thấp ICSP (In
Circuit Serial Programming). Hầu hết các mạch nạp đều hỗ trợ tính năng nạp
chương trình này.
- WARP-13A và MCP-USB: hai mạch nạp này giống với mạch nạp PICSTART
PLUS do nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch
MPLAB, nghĩa là ta có thể trực tiếp dùng chương trình MPLAB để nạp cho vi
điều khiển PIC mà không cần sử dụng một chương trình nạp khác, chẳng hạn như
ICprog.
- P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông còn thiết
kế cả chương trình nạp, tuy nhiên ta cũng có thể sử dụng chương trình nạp Icprog.
- Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dụng dành
cho PIC như P16PRO40.
Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể tự
lắp ráp một cách dễ dàng, và mọi thông tin về sơ đồ mạch nạp, cách thiết kế, thi công,
kiểm tra và chương trình nạp đều dễ dàng tìm được và download miễn phí thông qua
mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi điều
khiển được hỗ trợ, bên cạnh đó mỗi mạch nạp cần được sử dụng với một chương
trình nạp thích hợp.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
12
LUẬN VĂN TỐT NGHIỆP
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC16F877A
2.1 GIỚI THIỆU CHUNG
2.1.1 CÁC DẠNG SƠ ĐỒ CHÂN
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
13
LUẬN VĂN TỐT NGHIỆP
Hình 2.1 Vi điều khiển PIC16F877A/PIC16F874A và các dạng sơ đồ chân

2.1.2 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F877A
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
14
LUẬN VĂN TỐT NGHIỆP

Hình 2.2 Sô ñoà khoái vi ñieàu khieån PIC16F877A.
Hình 2.2 là sơ đồ khối của PIC 16F877A, gồm các khối:
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
15
LUẬN VĂN TỐT NGHIỆP
- Khối ALU – Arithmetic Logic Unit.
- Khối bộ nhớ chứa chương trình – Flash Program Memory.
- Khối bộ nhớ chứa dữ liệu EPROM – Data EPROM.
- Khối bộ nhớ file thanh ghi RAM – RAM file Register.
- Khối giải 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.
2.1.3 CHỨC NĂNG CÁC CHÂN CỦA PIC16F877A
• Chân OSC1/CLK1(13): ngõ vào kết nối với dao động thạch anh hoặc ngõ vào
nhận xung clock từ bên ngoài.
• Chân OSC2/CLK2(14): ngõ ra dao động thạch anh hoặc ngõ ra cấp xung
clock.
• Chân (1) có 2 chức năng
- : ngõ vào reset tích cực ở mức thấp.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
16
LUẬN VĂN TỐT NGHIỆP

- Vpp: ngõ vào nhận điện áp lập trình khi lập trình cho PIC.
• Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có 2 chức năng
- RA0,1,2: xuất/ nhập số.
- AN 0,1,2: ngõ vào tương tự của kênh thứ 0,1,2.
• Chân RA2/AN2/VREF-/CVREF+(4): xuất nhập số/ ngõ vào tương tự của
kênh thứ 2/ nhõ vào điện áp chuẩn thấp của bộ AD/ ngõ vào điện áp chẩn cao
của bộ AD.
• Chân RA3/AN3/VREF+(5): xuất nhập số/ ngõ vào tương tự kênh 3/ ngõ vào
điện áp chuẩn (cao) của bộ AD.
• Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ ngõ vào xung clock bên ngoài
cho Timer 0/ ngõ ra bộ so sánh 1.
• Chân RA5/AN4/ / C2OUT(7): xuất nhập số/ ngõ vào tương tự kênh 4/ ngõ
vào chọn lựa SPI phụ/ ngõ ra bộ so sánh 2.
• Chân RB0/INT (33): xuất nhập số/ ngõ vào tín hiệu ngắt ngoài.
• Chân RB1(34), RB2(35): xuất nhập số.
• Chân RB3/PGM(36): xuất nhập số/ cho phép lập trình điện áp thấp ICSP.
• Chân RB4(37), RB5(38): xuất nhập số.
• Chân RB6/PGC(39): xuất nhấp số/ mạch gỡ rối và xung clock lập trình ICSP.
• Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối và dữ liệu lập trình ICSP.
• Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào bộ giao động Timer1/
ngõ vào xung clock bên ngoài Timer 1.
• Chân RC1/T1OSI/CCP2(16) : xuất nhập số/ ngõ vào bộ dao động Timer 1/
ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2.
• Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1 ,ngõ ra compare1, ngõ
ra PWM1.
• Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng bộ,
ngõ ra chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ ra của chế độ
I2C.
• Chân RC4/SDI/SDA(23): xuất nhập số/ dữ liệu vào SPI/ xuất nhập dữ liệu
I2C.

• Chân RC5/SDO(24): xuất nhập số/ dữ liệu ra SPI.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
17
LUẬN VĂN TỐT NGHIỆP
• Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xung đồng
bộ USART.
• Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART.
• Chân RD0-7/PSP0-7(19-30): xuất nhập số/ dữ liệu port song song.
• Chân RE0/ /AN5(8): xuất nhập số/ điều khiển port song song/ ngõ vào
tương tự 5.
• Chân RE1/ /AN6(9): xuất nhập số/ điều khiển ghi port song song/ ngõ vào
tương tự kênh thứ 6.
• Chân RE2/ /AN7(10): xuất nhấp số/ Chân chọn lụa điều khiển port song
song/ ngõ vào tương tự kênh thứ 7.
• Chân VDD(11, 32) và VSS(12, 31): là các chân nguồn của PIC.
2.1.4 ĐẶC ĐIỂM VI ĐIỀU KHIỂN PIC16F877A
Đâ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. Tốc độ hoạt động tối đa
cho phép là 20 MHz với một chu kì lệnh là 200ns. Bộ nhớ chương trình 8Kx14 bit,
bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256x8
byte. Số PORT I/O là 5 với 33 pin I/O. Có 8 kênh chuyển đổi A/D
 Các đặc tính ngoại vi bao gồmcác khối chức năng sau:
- Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit.
- Timer1: bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm
dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ
sleep.
- Timer2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler.
- Hai bộ Capture/so sánh/điều chế độ rông xung.
- Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.
- Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ.

- Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển
RD, WR,
 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 100.000 lần.
- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
18
LUẬN VĂN TỐT NGHIỆP
- Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm.
- 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.
- Chức năng bảo mật mã chương trình.
- Chế độ Sleep.
- Có thể hoạt động với nhiều dạng Oscillator khác nhau.
Bảng 2.3: Tóm tắt đặc điểm của VDK PIC 16F877A
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
19
LUẬN VĂN TỐT NGHIỆP
2.2 TỔ CHỨC BỘ NHỚ
Cấu trúc bộ nhớ của vi điều khiển PIC16F877A bao gồm bộ nhớ chương trìn
(Program memory) và bộ nhớ dữ liệu (Data Memory).
2.2.1 BỘ NHỚ CHƯƠNG TRÌNH
Bộ nhớ chương trình của vi điều khiển
PIC16F877A là bộ nhớ flash, dung lượng bộ
nhớ 8K word (1 word = 14 bit) và được phân
thành nhiều trang (từ page0 đến page 3) .
Như vậy bộ nhớ chương trình có khả năng
chứa được 8*1024 = 8192 lệnh (vì một lệnh

sau khi mã hóa sẽ có dung lượng 1 word (14
bit).
Để mã hóa được địa chỉ của 8K word
bộ nhớ chương trình, bộ đếm chương trình có
dung lượng 13 bit (PC<12:0>).
Khi vi điều khiển được reset, bộ đếm
chương trình sẽ chỉ đến địa chỉ 0000h (Reset
vector). Khi có ngắt xảy ra, bộ đếm chương
trình sẽ chỉ đến địa chỉ 0004h (Interrupt
vector).
Bộ nhớ chương trình không bao Hình 2.4 Bộ nhớ chương trình
PIC16F877A
gồm bộ nhớ stack và không được địa chỉ hóa bởi
bộ đếm chương trình. Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau.
2.2.2 BỘ NHỚ DỮ LIỆU
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank. Đối với
PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank. Mỗi bank có dung lượng 128
byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register)
nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose
Register) nằm ở vùng địa chỉ còn lại trong bank. Các thanh ghi SFR thường xuyên
được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
20
LUẬN VĂN TỐT NGHIỆP
nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của
chương trình.
Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như sau:
Hình 2.5 Sơ đồ bộ nhớ dữ liệu PIC16F877A
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
21

LUẬN VĂN TỐT NGHIỆP
1. THANH GHI CHỨC NĂNG ĐẶC BIỆT SFR
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập và điều
khiển các khối chức năng được tích hợp bên trong vi điều khiển. Có thể phân thanh
ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và
thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví dụ
như ADC, PWM, …). Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức
năng bên trong. Các thanh ghi dùng để thiết lập và điều khiển các khối chức năng sẽ
được nhắc đến khi ta đề cập đến các khối chức năng đó.
Thanh ghi STATUS (03h, 83h, 103h, 183h):thanh ghi chứa kết quả thực hiện
phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ
nhớ dữ liệu.
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho phép đọc và ghi, cho
phép điều khiển chức năng pull-up của các chân trong PORTB, xác lập các tham số
về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0.
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho phép đọc và ghi,
chứa các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT
và ngắt interrput- on-change tại các chân của PORTB.
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chức
năng ngoại vi.
Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
22
LUẬN VĂN TỐT NGHIỆP
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năng
CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các
ngắt
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2.


Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset
của vi điều khiển.
2. THANH GHI MỤC ĐÍCH CHUNG GPR
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh
ghi
FSG (File Select Register). Đây là các thanh ghi dữ liệu thông thường, người sử dụng
có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các
biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình.
2.2.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 hat 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 qui trình định trước.
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
23
LUẬN VĂN TỐT NGHIỆP
Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA 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ị 6 cất vào Stack lần thứ 2.
Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết
được khi nào stack tràn. Bên cạnh đó tập lệnh của vi điều khiển dòng PIC cũng
không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack sẽ hoàn toàn được điều
khiển bởi CPU.
2.3 CÁC CỔNG XUẤT NHẬP CỦA PIC16F877A
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương
tác

với thế giới bên ngoài. Sự tương tác này rất đa dạng và thông qua quá trình tương tác
đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng.
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách
bố trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân
trong mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích hợp sẵn
bên trong các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập
thông thường, một số chân xuất nhập còn có thêm các chức năng khác để thể hiện sự
tác động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của
từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển
được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó.
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB,
PORTC, PORTD và PORTE. Cấu trúc và chức năng của từng cổng xuất nhập sẽ
được đề cập cụ thể trong phần sau.
2.3.1 PORTA
PORTA (RPA) bao gồm 6 I/O pin. Đây là các chân “hai chiều” (bidirectional pin),
nghĩa là có thể xuất và nhập được. Chức năng I/O này được điều khiển bởi thanh ghi
TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là input,
ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại,
muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều
khiển tương ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương
tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là
SV: TRẦN XUÂN CHIẾN LỚP: ĐIỆN TỬ 1 K2
24
LUẬN VĂN TỐT NGHIỆP
TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là
TRISD vàđối với PORTE là TRISE).
Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ
vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous
Serial Port). Đặc tính này sẽ được trình bày cụ thể trong phần sau.
Các thanh ghi SFR liên quan đến PORTA bao gồm:

- PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA.
- TRISA (địa chỉ 85h) : chứa giá trị các pin trong PORTA.
- CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh.
- CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp.
- ADCON1 (đòa chỉ 9Fh) : thanh ghi điều khiển bộ ADC.
2.3.2 PORTB
PORTB (RPB) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là
TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong q trình nạp
chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan
đến ngắt ngoại vi và bộ Timer0. PORTB còn được tích hợp chức năng điện trở kéo
lên được điều khiển bởi chương trình.
Các thanh ghi SFR liên quan đến PORTB bao gồm:
- PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB
- TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập
- OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ Timer0.
2.3.3 PORTC
PORTC (RPC) gồm 8 pin I/O. Thanh ghi điều khiển xuất nhập tương ứng là
TRISC. Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ
Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.
Các thanh ghi điều khiển liên quan đến PORTC:
- PORTC (đòa chỉ 07h) : chứa giá trò các pin trong PORTC
- TRISC (đòa chỉ 87h) : điều khiển xuất nhập.
2.3.4 PORTD
PORTD (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng là
TRISD. PORTD còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (Parallel Slave
Port).
SV: TRẦN XN CHIẾN LỚP: ĐIỆN TỬ 1 K2
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×