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

thiết kế quạt thông minh 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 (576.31 KB, 32 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN
MÔN KỸ THUẬT VI XỬ LÝ
Đề tài: Thiết kế Quạt thông minh dùng PIC16F877A
Giảng viên hướng dẫn: TS. Phạm Ngọc Nam
Nhóm sinh viên: TC201-Group10
Họ và tên Lớp SHSV
1. Cao Văn Huy ĐT1-K54 20091217
2. Nguyễn Thanh Tùng ĐT4-K54 20093132
3. Khuất Minh Phúc ĐT4-K54 20092028
4. Lương Văn Huấn ĐT8-K54 20091211
5. Phạm Tuấn Anh ĐT8-K54 20090144
Hà Nội, 04 - 2012
Nhận xét của giảng viên hướng dẫnN
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
………………………………………………………………………………
Hà Nội, Ngày Tháng Năm 2012
Giảng Viên hướng dẫn
(Ký ghi rõ họ tên)
Nhận xét của giảng viên chấm
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
………………………………………………………………………………
Hà Nội, Ngày Tháng Năm 2012
Giảng Viên chấm
(Ký ghi rõ họ tên)
Mục Lục


Lời mở đầu
Trong thập niên cuối thế kỷ 20, kỹ thuật điện tử đã liên tục có những tiến bộ
vượt bậc, đặc biệt là trong kỹ thuật chế tạo vi mạch điện tử. Sự ra đời và phát triển
nhanh chóng của kỹ thuật điện tử mà đặc trưng là kỹ thuật vi xử lý đã tạo một bước
ngoặt quan trọng trong sự phát triển khoa học ngày nay, nó ảnh hưởng quyết định
đến con đường “ tin học hóa”.
Năm 1970, công ty Intel cho ra đời bộ vi xử lý đầu tiên có tên là Intel-4004,
nhằm đáp ứng nhu cầu cần thiết của một công ty kinh doanh là hãng truyền thông
BUSICOM. Intel-4004 là kết quả của một ý tưởng quan trọng trong sự phát triển
kỹ thuật vi xử lý. Do khả năng mềm dẻo hóa trong các thao tác của mình, năm
1970 Intel-4004 đã trở thành vi xử lý đầu tiên trên thế giới. Năm 1972, hãng Intel
cho ra đời bộ vi xử lý 8088. Vẫn chế tạo theo công nghệ PMOS nhưng là loại 8
bits. Đến đây hàng loạt các hãng điện tử nổi tiếng hàng đầu thế giới như National,
Rockwell,… đã nhanh chóng đi vào sản xuất và chế tạo các bộ vi xử lý.
Năm 1974, Hàng Intel cho ra đời bộ vi xử lý 8080 - 8 bít song song được
chế tạp theo công nghệ NMOS đã đánh dấu một bước tiến lớn trên con đường làm
chủ tốc độ xử lý tin của kỹ thuật điện tử hiện đại. Các hãng khác cũng cho ra đời
bộ vi xử lý tương ứng như 6800( Motorola), 8080( Texas Intrusment),…
Ngày nay, những ứng dụng của vi điều khiển đã đi sâu vào đời sống sinh
hoạt và sản xuất của con người, là một phần tất yếu không thể thiếu trong đời sống
hiện đại. Thế kỷ 21 được xem là thế kỷ của khoa học công nghệ, là thế kỷ mà máy
móc được thiết kế và lập trình một cách tự động để thay thế hoạt động của con
người trong sản xuất, cũng như để phục vụ các công việc trong sinh hoạt. Trong
cuộc sống mang tính tự động hóa cao thì các vi xử lý như là một công cụ đắc lực
hỗ trợ cho con người thực hiện nhu cầu ngày càng cao và càng hoàn thiện của
mình.
Đang là sinh viên ngồi trên ghế nhà trường, cơ hội tiếp cận, học tập những
công nghệ tiên tiến, hiện đại chưa nhiều, nên trong quá trình tự học và nghiên cứu,
chúng em đã cố gắng tìm hiểu về bộ vi xử lý, cũng như các ứng dụng của nó, đặc
biệt là vi xử lý PIC16F877A. Với những gì nghiên cứu được nhóm chúng em đã

làm thực hành ứng dụng thông qua việc thiết kế quạt thông minh. Đây là cơ hội rất
lớn cho chúng em trau dồi kiến thức thực tế, áp dụng lý thuyết đã học và rèn luyện
bản thân trong môi trường làm việc nhóm.
Do thời gian thực hiện và kiến thức còn hạn chế nên còn nhiều sai sót trong
quá trình thực hiện đề tài, rất mong được sự bổ sung đóng góp của các thầy cô và
các bạn.
Chúng em xin chân trọng cảm ơn thầy TS. Phạm Ngọc Nam và anh Vũ Hữu
Tiệp đã nhiệt tình hướng dẫn chúng em suốt quá trình học tập.
Chương 1. ĐẶT VẤN ĐỀ VÀ KHẢO SÁT HỆ THỐNG
1.1. Khảo sát và phân tích hệ thống
Ứng dụng đề tài:
Ngày nay, khi công nghệ phát triển, con người đòi hỏi them nhiều thiết bị
thông minh hơn nhằm phục vụ tối đa cho cuộc sống. Nơi đâu cũng sẽ xuất hiện
những nhà máy, khu công nghiệp, công nghệ thông tin và kỹ thuật hiện đại
cũng giúp cuộc sống con người trở nên tốt đẹp và thoải mái hơn.
Với sự bùng nổ của kỹ thuật hiện nay, thì thiết bị thông minh đối với
chúng ta không còn xa lạ nữa. Đề tài hôm nay chúng tôi muốn giới thiệu đó là:
“Quạt thông minh”.
Sẽ không còn phải quạt nan hay quạt tay khi mà có điện, sẽ không phải
bật túp năng hay nút bấm để quạt to hay nhỏ, sẽ không phải thức giấc khi cảm
thấy lạnh. Tất cả các vấn đề trên sẽ được đưa ra và giải quyết bởi một thiết bị
thông minh mà chúng tôi hy vọng nó sẽ mang lại rất nhiều lợi ích cho cuộc
sống con người: “Quạt thông minh”
Quạt thông minh (Smart Fan) có ứng dụng làm mát cho hệ thống mạch
điện tử, mở rộng ra nó có thể ứng dụng để làm mát cho các văn phòng, công ty,
các xưởng sản xuất.
Sơ đồ tổng quát hệ thống:
Khối thời gian thực
(DS1307)
Khối đo nhiệt độ

(LM35)
Khối hiển thị
(LCD, LED)
Vi xử lý
Pic16f877a
Khối nguồn
Động cơ
Các thông số hệ thống
và các phím bấm
1.2. Giải thích sơ đồ khối:
- Vi xử lý pic16f877a điều khiển toàn bộ hệ thống, thu nhận dữ liệu từ
khối thời gian thực, khối đo nhiệt độ, các tín hiệu từ phím bấm rồi xử
lý và đưa ra tín hiệu điều khiển cho các khối hiển thị và động cơ, hoặc
thiết lập lại giá trị cho khối thời gian thực
- Khối thời gian thực: dùng IC thời gian thực DS1307, lưu trữ và cập
nhật thời gian thực, để vi xử lý đối chiếu với thời gian được thiết lập
sẵn để đưa ra các tín hiệu điều khiển.
- Khối đo nhiệt độ: mạch sử dụng sensor LM35, khối có chức năng lấy
tín hiệu nhiệt độ từ môi trường rồi đưa tín hiệu đó vào vi điều khiển
để chuyển đổi thành nhiệt độ.
- Khối hiển thị: gồm có: LCD ,LED 7 thanh, và 1 đèn led. LCD dùng để
hiển thị ngày giờ thực, các thông số trong quá trình cài đặt. 2 LED 7
thanh dùng để hiển thị nhiệt độ môi trường hiện tại. Đèn led báo hiệu
tình trạng hoạt động của mạch: sáng: đang hoạt động, không sáng :
mạch không hoạt động hoặc đang trong chế độ nghỉ.
- Khối động cơ: là một chiếc quạt điện dùng để làm mát hệ thống.
- Khối bàn phím: gồm có 5 nút bấm : menu, up,down, set, reset. Chức
năng chung của khối là gửi đến vi điều khiển các tín hiệu nhằm thiết
lập các thông số cần thiết cho hệ thống.
 Menu: Bật chế độ điều chỉnh , chuyển đổi điều chỉnh các thông số

và thoát khỏi chế độ điều chỉnh. Các chế độ cần điều chỉnh: giờ,
phút hệ thống => nhiệt độ cho phép hoạt động thấp nhất, cao nhất
=> nhiệt độ lý tưởng => giờ phút bảo dưỡng => thời gian cao nhất
quạt quay liên tục => thời gian chờ cho lần chạy tiếp theo. Khi ấn
menu thì lần lượt đi qua các chế độ và dùng phím up ( down) để
tăng ( giảm) thông số, khi điều chỉnh xong cần ấn nút set để lưu
lại. khi hết các chế độ, ấn menu một lần nữa thì về chế độ chờ ban
đầu.
 Up, down: dùng để tăng hoặc giảm giá trị của các thông số ở chế
độ điều chỉnh. Và các thông số được điều chỉnh kiểu quay vòng.
 Set: sau khi điều chỉnh các thông số cần ấn nút này để lưu lại.
 Reset: đưa các thông số của mạch về chế độ mặc định.
- Khối nguồn: có nhiệm vụ cung cấp năng lượng hoạt động cho toàn
mạch.
1.3. Mô tả hoạt động của hệ thống:
- Khi cấp nguồn cho toàn hệ thống: khối cảm biến thu tín hiệu cho vi
điều khiển xử lý và hiển thị lên 2 led 7 thanh. Vi xử lý lấy thời gian
thực được lưu trong DS1307 và thực hiện hiển thị lên LCD
- Các thông số được vi xử lý kiểm tra và nếu thỏa mãn hết thì vi điều
khiển đưa ra tín hiệu cho quạt hoạt động.
- Nếu nhiệt độ quá giới hạn cho phép là 60 độ, thì vi xử lý thực hiện
cho quạt hoạt động. Và điều chỉnh tốc độ theo tham số nhiệt độ của
môi trường. Khi nhiệt độ hệ thống giảm xuống 50 độ trở xuống, thì
quạt sẽ được điều khiển tắt. nếu nhiệt độ sau 45m mà vẫn trong
khoảng 45->70 thì hệ thống tự động bảo dưỡng. sau 10m lại tiếp tục
hoạt động.
- Ở chế độ chờ , LCD hiển thị ngày giờ thực. khi ấn menu thì nó hiển
thị lần lượt các thông số mặc định của từng chế độ để thực hiện cài
đặt. Các thông số hiển thị lần lượt trên LCD:
- Khi ấn up down, các thông số sẽ thay đổi trực tiếp trên LCD. Khi ấn

set thì LCD hiển thị chữ : “Setup done!”. Và các thông số được lưu
thay đổi vào vi xử lý. Khi ấn nút reset thì toàn bộ các thông số của hệ
thống sẽ về giá trị mặc định và LCD hiển thị dòng chữ : “Reset done!”
- Nếu có điện cung cấp cho hệ thống thì đèn led sẽ sáng.
CHƯƠNG 2: PHÂN TÍCH YÊU CẦU
2.1. Yêu cầu về chức năng
- Mạch thực hiện đúng yêu cầu mong muốn
- Hiển thị giờ, phút, ngày, tháng, năm, trên LCD
- Hiển thị nhiệt độ lên LED 7 thanh
- Sử dụng nút bấm để cài đặt thời gian
- Tự động điểu chỉnh tốc độ quạt khi nhiệt độ thay đổi
2.2. Yêu cầu phi chức năng
- Sử dụng vi điều khiển PIC16F877A
- Thiết kế mạch nhỏ hơn 1dm2
- Thời gian thực hiện đề tài 13 tuần
2.3. Mục tiêu thiết kế
- Sử dụng IC cảm biến nhiệt LM35 để đo nhiệt độ phòng
- Sử dụng IC thời gian thực DS1307 để lưu thời gian
- Sử dụng nút bấm để điều chỉnh thời gian
- Tốc độ quạt thay đổi khi nhiệt độ phòng thay đổi
2.4. Kế hoạch thực hiện
Sau khi phân tích hệ thống, và khả năng nhóm phát triển cũng như quá trình
vận hành hệ thống. Kế hoạch có thể thực hiện theo trình tự
Tên quá trình Thời gian Bắt đầu Hoàn thành
Nghiên cứu sơ bộ 1 tuần 13/02/2012 19/02/2012
Phân tích 3 tuần 20/02/2012 11/03/2012
Lập trình, mô phỏng 2 tuần 05/03/2012 18/03/2012
Vẽ schematic 1 tuần 19/03/2012 25/03/2012
layout 2 tuần 26/03/2012 09/04/2012
Đặt mạch in 1.5 tuần 09/04/2012 19/04/2012

Hàn mạch in và làm
báo cáo
2.5 tuần 20/04/2012 06/05/2012
Chương 3: PHÂN TÍCH KIẾN TRÚC HỆ THỐNG
Hệ thống gồm 8 khối chính
- Vi xử lý trung tâm PIC16F877A
- Khối nguồn
- Khối mạch nạp
- Khối led 7 thanh
- Khối cảm biến nhiệt độ
- Khối hiển thị LCD
- Khối giao tiếp DS1307
- Khối nút bấm.
3.1. Vi xử lý trung tâm PIC16F877A:
3.1.1. Sơ đồ chân và sơ đồ nguyên lý của PIC16F877A:
3.1.1.1. Sơ đồ chân:
3.1.1.2. Sơ đồ nguyên lý:
3.1.2. Nhận xét:
Từ sơ đồ chân và sơ đồ nguyên lý như trên, chúng ta có thể rút ra các nhận
xét như sau:
- PIC16F877A có tổng cộng 40 chân.
- Bao gồm 5 PORT, 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 PIC16F877A bao gồm:
• PORT B: 8 chân
• PORT D: 8 chân
• PORT C: 8 chân
• PORT A: 6 chân
• PORT E: 3 chân
3.1.3. Khái quát về chức năng của các port trong vi điều khiển PIC16F877A:

3.1.3.1. PORT A:
PORT A gồm có 6 chân, các chân của port A có thể lập trình để thực
hiện được 2 chức năng “hai chiều” : xuất dữ liệu từ vi điều khiển ra ngoại
vi và nhập dữ liệu từ ngoại vi vào vi điều khiển.
Việc xuất nhập dữ liệu ở PIC16F877A khác với ở họ 8051, tất cả các
port của PIC16F877A, mỗi thời điểm chỉ thực hiện một chức năng xuất
hoặc nhập. Để chuyển từ chức năng này sang chức năng xuất hay nhập
ngược lại, ta phải xử lý bằng phần mềm, không như 8051 tự hiểu lúc nào
là chức năng nhập, lúc nào là chức năng xuất.
Trong kiến trúc phần cứng của PIC16F877A, người ta sử dụng thanh
ghi TRISA ở địa chỉ 85H để điều khiển chức năng I/O trên. Muốn xác lập
các chân nào của PORT A là nhập (input) thì ta set bit tương ứng chân đó
trong thanh ghi TRISA. Ngược lại, muốn chân nào là output thì ta clear
bit tương ứng chân đó trong thanh ghi TRISA. Điều này hoàn toàn tương
tự đối với các PORT còn lại
Ngoài ra, PORT A còn có các chức năng quan trọng sau:
- Ngõ vào Analog của bộ ADC: thực hiện chức năng chuyển từ Analog
sang Digital
- Ngõ vào điện thế so sánh.
- Ngõ vào xung Clock của Timer0 trong kiến trúc phần cứng: thực hiện
các nhiệm vụ đếm xung thông qua Timer0…
- Ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)
3.1.3.2. PORT B:
PORT B có 8 chân, cũng như PORT A, các chân của PORT B cũng
thực hiện đợc 2 chức năng: input và output. Hai chức năng trên được điều
khiển bởi thanh ghi TRISB. Khi muốn chân nào của PORT B là input thì
set bit tương ứng trong thanh ghi TRISB, ngược lại muốn chân nào là
output thì clear bit tương ứng trong TRISB.
Thanh ghi TRISB còn được tích hợp bộ điện trỏe kéo lên có thể điều
khiển được bằng chương trình.

3.1.3.3. PORT C:
PORT C có 8 chân và cũng thực hiện được 2 chức năng input và
output dưới sự điều khiển của thanh ghi TRISC tương tự như 2 thanh ghi
trên.
Ngoài ra PORT C còn có các chức năng quan trọng sau:
- Ngõ vào xung Clock cho Timer1 trong kiến trúc phần cứng
- Bộ PWM thực hiện chức năng điều xung lập trình được tần số, duty
cycle: sử dụng trong điều khiển tốc độ và vị trí của động cơ…
- Tích hợp các bộ giao tiếp nối tiếp I2C, SPI, SSP, US ART
3.1.3.4. PORT D:
PORT D có 8 chân, thanh ghi TRISD điều khiển 2 chức năng input và
output của port tương tự như trên. PORT D cũng là cổng xuất dữ liệu của
chuẩn giao tiếp song song PSP (Parallel Slave Port).
3.1.3.5. PORT E:
PORT E có 3 chân, thanh ghi điều khiển xuất nhập tương ứng là
TRISE. Các chân ủa PORT E có ngõ vào analog, bên cạnh đó PORT E
còn là các chân điều khiển của chuẩn giao tiếp PSP.
3.1.4. Tại sao sử dụng PIC16F877A mà không sử dụng 8051 cho đề tài này:
Trong chương trình đào tạo, chúng em được học và rút kinh nghiệm
nhiều trên vi điều khiển 8051. Họ vi điều khiển 8051 là một họ vi điều khiển
điển hình, phổ biến, dễ sử dụng, và lập trình, rất phù hợp với sinh viên mới
bắt đầu làm quen đến lập trình cho vi điều khiển thuộc họ 8051 (điển hình là
89C51, 89052…), tuy nhiên, do nhận ra các nhược điểm cơ bản sau:
- Bộ nhớ Ram nội có dung lượng thấp, chỉ có 128 bytes. Điều này gay
trở ngại lớn khi thực hiện các dự án lớn với vi điều khiển 8051. Để
khắc phục ta phải mở rộng them làm hạn chế số chân dành cho các
ứng dingj của vi điều khiển.
- Số lượng các bộ giao tiếp ngoại vi đượ tích hợp sẵn trong 8051 ít,
không có các bộ ADC, PWM, truyền dữ liệu song song. Khi muốn sử
dụng các chức năng này, ta phải sử dụng them các IC bên ngoài, gây

tốn kém và khó thực hiện vì dễ bị nhiễu nếu không biết cách chống
nhiễu tốt.
- Ngoài ra còn một số hạn chế khác nhau như số lượng Timer của 8051
ít, chỉ có 2 Timer. Chính điều này làm cho giải thuật khi viết chương
trình gặp khó khăn.
Những nhược điểm căn bản trên của 8051 cũng như yêu cầu
của đề tài, đã khiến chúng em đưa đến quyết định dùng vi điều khiển
PIC16F877A để giải quyết những vấn đề đặt ra của đề tài.
Với kỳ vọng dựa trên nền tảng kiến thức tiếp thu được khi học
vi điều khiển 8051, chúng em rất muốn tự tìm hiểu một họ vi
điềukhiển mới, mạnh hơn, đáp ứng được nhiều yêu cầu hơn, sau nữa
là cho các dự án trong tương lai nếu chúng em có dịp sử dụng vi điều
khiển trong dự án của mình.
Trong quá trình tìm hiểu một họ vi điều khiển mới thỏa mãn
yêu cầu như em đã trình bày trên. Em thấy PIC16F877A là một lựa
chọn lý tưởng. Chỉ cần xem xét qua các port và chức năng của port mà
em đã trình bày ở trên, ta cũng dễ nhận ra những ưu điểm vượt trội so
với vi điều khiển 8051.
Giá của PIC16F877A trên thị trường cũng đắt gấp 2 lần một
chip họ 8051. Sử dụng PIC16F877A trong đề tài này có thể là lãng
phí, nhưng với mục đích nâng cao khả năng tự tìm tòi và học hỏi,
phục vụ mục đích lâu dài sau này, thì đây là một sự lựa chọn chính
xác. Đó là lý do em chọn dùng PIC16F877A cho đề tài này.
3.1.5. Tìm hiểu về PIC16F877A:
3.1.5.1. Cấu trúc phần cứng của PIC16F877A:
PIC16F877A là dòng PIC khá phổ biến, khá đầy đủ những tính năng
phục vụ cho hầu hết tất cả các ứng dụng thự tế. Đây là dòng PIC khá dễ
cho người mới làm quen với PIC, có thể học tập và tạo nền tẳng về họ vi
điều khiển PIC của mình.
Cấu trúc tổng quát:

- 8K Flash Rom
- 368 bytes Ram
- 256 bytes EFPROM
- 5 port vào ra với tín hiệu điều khiển độc lập
- 2 bộ định thời Timer0 và Timer2 8 bit
- 1 bộ định thời Timer1 16 bit có thể hoạt động ở cả chế độ tiết kiệm
điện năng với nguồn xung clock ngoài
- 2 bộ Capture/Compare/PWM
- 1 bộ biến đổi Analog -> Digital 10bit, 8 ngõ vào
- 2 bộ so sánh tương tự
- 1 bộ định thời giám sát (watch dog timer)
- 1 cổng song song 8 bit với các tín hiệu điều khiển
- 1 cổng nối tiếp
- 15 nguồn tắt.
3.1.5.2. Tổ chức bộ nhớ PIC16F877A:
3.1.5.2.1.Bộ nhớ chương trình:
Bộ nhớ chương trình của PIC16F877A là bộ nhớ Flash, dung lượng
8K word (1 word chứa 14 bit) và được phân thành nhiều tranh như hình
trên.
Để mã hóa được địa chỉ 8K word bộ nhớ chương trình, thanh ghi đếm
chương trình PC có dung lượng 13 bit.
Khi vi điều khiển reset, bộ đếm chương trình sẽ trỏ về địa chỉ 0000h.
Khi có ngắt xảy ra thì thanh ghi PC sẽ trỏ đến địa chỉ 0004h.
Bộ nhớ chương trình không bao gồm bộ nhớ Stack và không được địa
chỉ hóa bởi bộ đếm chương trình.
3.1.5.2.2. Bộ nhớ dữ liệu:
Bộ nhớ dữ liệu của PIC16F877A được chia thành 4 bank, mỗi bank có
dung lượng 128 byte.
Mỗi bank của bộ nhớ dữ liệu PIC16F877A bao gồm cả các thanh ghi
có chức năng đặc biệt SFR nằm ở các ô nhớ địa chỉ thấp và các thanh ghi

mục đích dùng cung GPR năm ở vùng địa chỉ còn lại của mỗi bank thanh
ghi. Vùng ô nhớ các thanh ghi mục đích dùng chung này chính là nơi
người dùng sẽ lưu dữ liệu trong quá trình viết chương trình. Tất cả các
biến dữ liệu nên được khai báo chứa trong vùng địa chỉ này.
Trong cấu trúc bộ dữ liệu của PIC16F877A, các thanh ghi SFR nào
mà thường xuyên được sử dụng ( như thanh ghi STATUS) sẽ được đặt ở
tất cả các bank để thuận tiện trong việc truy xuất. Sở dĩ như vậy là vì, để
truy xuất một thanh ghi nào đó trong bộ nhớ của PIC16F877A ta cần phải
khai báo đúng bank chứa thanh ghi đó, việc đặt các thanh ghi sử dụng
thường xuyên giúp ta thuận tiện hơn rât nhiều trong qua trình truy xuất,
làm giảm lệnh chương trình.
Dựa trên sơ đồ 4 bank bộ nhớ dữ liệu PIC16F877A t rút ra các nhận
xét sau:
- Bank0 gồm các ô nhớ có địa chỉ từ 00h đến 77h, trong đó các thanh
ghi dùng chung để dữ liệu của người dùng địa chỉ từ 20h đến 7Fh. Các
thanh ghi PORTA, PORTB, PORTC, PORTD, PORTE đều chứa ở
bank0, do đó để truy xuất dữ liệu các thanh ghi này ta phải chuyển
đên bank0. Ngoài ra một vài các thanh ghi thông dụng khác cũng chứa
ở bank0.
- Bank1 gồm các ô nhớ có địa chỉ từ 80h đến FFh. Các thanh ghi dùng
chung có địa chỉ từ A0h đến EFh. Các thanh ghi TRISA, TRISB,
TRISC, TRISD, TRISE cũng được chứa ở bank1.
- Tương tự ta có thể suy ra các nhận xét cho bank2 và bank3 dựa vào sơ
đồ trên.
Cũng quan sát ở sơ đồ trên, ta nhận thấy thanh ghi STATUS, FSR…
có mặt trên cả 4bank. Một điều quan trọng cần nhắc lại trong việc truy
xuất dữ liệu của PIC16F877A là : phải khai báo đúng bank chứa thanh
ghi đó. Nếu thanh ghi nào mà 4 bank đều chứ thì không cần phải
chuyển bank.
3.1.5.2.3.Một vài thanh ghi có chức năng đặc biệt SFR:

 Thanh ghi STATUS : thanh ghi này có mặt ở cả 4 bank thanh ghi
địa chỉ 03h, 83h, 103h và 183h: 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 : có mặt ở bank2 và bank3 có địa chỉ 81h
và 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 : có mặt ở cả 4 bank ở địa chỉ 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 báo tràn Timer0, ngắt ngoại vi RB0/INT và ngắt khi thay
đổi trạng thái tại các chân của PORTB.
 Thanh ghi PIE1 : địa chỉ 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 : địa chỉ 0Ch, chắc cơ ngắt của các khối chức năng
ngoại vi, cách ngắt này được cho phép bởi các bit điều khiển chứa
trong thanh ghi PIE1.
 Thanh ghi PIE2 : địa chỉ 8Dh, chứa các bit điều khiển các ngắt của
khối chức năng CCP, SSP bú, ngắt của bộ so sánh và ngắt ghi vào
bộ nhớ EEPROM.
 Thanh ghi PIR2 : địa chỉ 0Dh, chứa cò ngắt của các khối chức năng
ngoại vị, các ngắt này được ho phép bởi các bit điều khiển chứa
trong thanh ghi PIE2.
 Thanh ghi PCON : địa chỉ 8Eh, chứa các cờ hiệu cho biết trạng thái
chế độ reset của vi điều khiển.
3.1.5.3. Thanh ghi W(work) và tập lệnh của PIC16F877A
3.1.5.3.1.Thanh ghi W:
Đây là thanh ghi rất đặc biệt trong PIC16F877A. Nó có vai trò tương
tự như thanh ghi Accummulator 8051, tuy nhiên tầm ảnh hưởng cua nó

rộng hơn nhiều.
Tập lệnh của PIC16F877A có tất cả 35 lệnh thì sự góp mặt của thanh
ghi W là 23 lệnh. Hầu hết các lệnh của PIC16F877A đều lien quan đến
thanh ghi W. Ví dụ như: trong PIC chúng ta không được phép chuyển
trực tiếp giá trị của một thanh ghi khác mà phải chuyển thông qua thanh
ghi W.
Thanh ghi W có 8 bit và không xuất hiện trong bất kỳ bank thanh ghi
nào của bộ nhớ dữ liệu của PIC16F877A. Mỗi dòng lệnh trong
PIC16F877A được mô tả trong 14 bit. Khi ta thực hiện một lệnh nào đó,
nó phải lưu địa chỉ của thanh ghi bị tác động ( chiếm 8 bit) và giá trị một
hằng số k nào đó ( them 8 bit nữa) là 16 bit, vượt quá giới hạn 14 bit. Do
vậy ta không thể nào tiến hành một phép tính toán trực tiếp nào giữa 2
thanh ghi với nhau hoặc giữa một thanh ghi với một hằng số k. Hầu hết
các lệnh của PIC16F877A đều phải lien quan đến thanh ghi W cũng vì lý

×