ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
LỜI NÓI ĐẦU
Ngày nay Khoa học – Kỹ thuật phát triển mạnh
mẽ,cùng với sự phát triển không ngừng của các ngành kỹ
thuật nói chung và kỹ thuật - điện tử nói riêng. Chúng đã đi
sâu vào mọi mặc đời sống hàng ngày của người dân. Đặc
biệt sử dụng vi điều khiển để điều khiển các thiết bị dân dụng
và các thiết bị công nghiệp. Nắm được tầm quan trọng đó,
em làm đề tài: BÃI GIỮ XE TỰ ĐỘNG để làm đồ án tốt
nghiệp cho mình, vừa để tạo ra 1 sản phẩm có khả năng ứng
dụng trong thực tế.
Những kiến thức và năng lực đạt được trong quá trình
học tập tại trường sẽ được đánh giá qua đợt bảo vệ đồ án tốt
nghiệp. Vì vậy em đã cố gắng tận dụng tất cả những kiến
thức đã học ở trường cùng với sự tìm tòi nghiên cứu, để có
thể hoàn thành tốt đồ án tốt nghiệp này. Những kết quả,
những sản phẩm đạt được trong ngày hôm nay tuy không lớn
lao nhưng nó là thành quả của ba năm học tập tại trường. Là
thành công đầu tiên của em trước khi ra trường.
Do khoảng thời gian và kiến thức còn hạn hẹp, mặc dù
em cố gắng hoàn thành đồ án tốt nghiệp này đúng thời hạn.
Nên không tránh khỏi những thiếu xót mong Quý thầy cô
thông cảm. Em mong nhận được những ý kiến đóng góp tận
tình của quý thầy cô và các bạn. Cuối cùng em xin chân
thành cảm ơn quý thầy cô và các bạn .
SVTH: NGUYỄN BÁ ĐÀO 1
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Lời Cảm Ơn
Sau những năm học tại trường,em đã được học và tiếp
thu nhiều kiến thức mới từ sự chỉ bảo tận tình của Quý Thầy
Cô,sự giúp đỡ của bạn bè. Đây là khoảng thời gian đầy ý
nghĩa. Đồ án tốt nghiệp ra trường là nền tảng quan trọng và
đánh dấu một bước ngoặc mới trong cuộc đời của em.
Em xin gửi lời cảm ơn chân thành đến thầy THƯỢNG
VĂN BÉ đã tận tình hướng dẫn em thực hiện đồ án tốt
nghiệp và cung cấp cho em nhiều kinh nghiệm quý báu.
Em xin chân thành cảm ơn Quý Thầy cô khoa Điện
Tử - Tin Học và các Cán bộ Công nhân viên Trường Cao
Đẳng Kỹ Thuật Cao Thắng, đã tạo điều kiện thuận lợi để em
có thể hoàn thành tốt đồ án tốt nghiệp này
Sinh viên thực hiện:
NGUYỄN BÁ ĐÀO
MỤC LỤC
SVTH: NGUYỄN BÁ ĐÀO 2
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
CHƯƠNG DẪN NHẬP
I.ĐẶT VẤN ĐỀ
II. CHỌN PHƯƠNG ÁN THIẾT KẾ
III.GIỚI HẠN ĐỀ TÀI
IV.MỤC ĐÍCH NGHIÊN CỨU
CHƯƠNG 2: PIC
I.TỔNG QUAN VỀ PIC
II.CẤU TRÚC TỔNG QUÁT PIC 16F877A
III. TẬP LỆNH SỬ DỤNG LẬP TRÌNH PIC TRONG CCS
CHƯƠNG 3: LED 7 ĐOẠN
CHƯƠNG 4:LED HỒNG NGOẠI
I.KHÁI NIỆM VỀ TIA HỒNG NGOẠI
II.LED HỒNG NGOẠI
CHƯƠNG 5:IC
I.IC ỔN ÁP KA 7805
II.LM555
CHƯƠNG 6:THIẾT KẾ VÀ THI CÔNG MẠCH
I.SƠ ĐỒ KHỐI
II.KHỐI NGUỒN
III.KHỐI HIỂN THỊ
IV.KHỐI CẢM BIẾN HỒNG NGOẠI
V.KHỐI VI XỬ LÝ
VI.LƯU ĐỒ GIẢI THUẬT
VII. CODE CHƯƠNG TRÌNH
CHƯƠNG TỔNG KẾT
I.TỔNG KẾT
II.HƯỚNG PHÁT TRIỂN ĐỀ TÀI
TÀI LIỆU THAM KHẢO
SVTH: NGUYỄN BÁ ĐÀO 3
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
CHƯƠNG DẪN NHẬP
I.ĐẶT VẤN ĐỀ:
Ngày nay, khi mà cả thế giới như đang nóng lên vì sự vận động, phát triển về
mọi mặt như kinh tế, chính trị, khoa học kỹ thuật….v…v Trong đó, những ứng
dụng của khoa học kỹ thuật tiên tiến đã và đang làm cho thế giới ngày càng thay
đổi, văn minh hơn và hiện đại hơn. Sự phát triển của Kỹ thuật điện tử đã tạo ra hàng
lọat những thiết bị với các đặc điểm nổi bật như sự chính xác cao, tốc độ nhanh, gọn
nhẹ là những yếu tố rất cần thiết góp phần cho họat động của con người đạt hiệu quả
cao.
Tại các đơ thị lớn như Hà Nội Và TP. Hồ Chí Minh ơ tơ là 1 phương tiện đi
lại khá phổ biến . Nhưng với những bãi giử xe thủ cơng như hiện nay thì rất mất
nhiều thời gian cũng như nhân lực. Để khắc phục được những nhược điểm trên, qua
q trình tìm hiểu, khảo sát vi điển khiển PIC 16F877A em nhận thấy rằng: ứng
dụng vi điều khiển PIC 16F877A vào bãi giữ xe là phương pháp tối ưu, vừa tiết
kiệm được thời gian cả về vật chất. Được sự đồng ý của khoa Điện Tử - Tin Hoc
trường Cao Đẳng Kỹ Thuật Cao Thắng em tiến hành thực hiện đề tài “ Bãi giử xe
tự động”.
Đề tài là sự kết hợp giữa kiến thức học được trong nhà trường với q trình
tìm tòi nghiên cứu và sự hướng dẫn tận tình của giáo viên hướng dẫn, song chắc
chắn khơng tránh khỏi những hạn chế và thiếu sót. Em rất mong nhận được những ý
kiến đóng góp q báu cùng những phê bình, chỉ dẫn của Thầy Cơ và các bạn sinh
viên.
II. CHỌN PHƯƠNG ÁN THIẾT KẾ:
1. Với mạch dùng ICù rời :
Có các ưu điểm sau:
-Cho phép tăng hiệu suất lao động
-Đảm bảo độ chính xác cao
-Tần số đáp ứng của mạch nhanh.
-Khoảng cách đặt phần phát và phần thu xa nhau cho phép nhận biết được
các xe có kích thước lớn.
-Tổn hao công suất bé, mạch có thể sử dụng pin hoặc accu.
-Khả năng đếm rộng.
-Giá thành hạ.
-Mạch đơn giản dễ thực hiện.
SVTH: NGUYỄN BÁ ĐÀO 4
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Với việc sử dụng kỹ thuật số khó có thể đáp ứng được việc thay đổi số đếm.
Muốn thay đổi một yêu cầu nào đó của mạch thì buộc lòng phải thay đổi phần
cứng.Do đó mỗi lần phải lắp lại mạch dẫn đến tốn kém về kinh tế mà nhiều khi
yêu cầu đó không thực hiện được bằng phương pháp này.
Với sự phát triển mạnh của nghành kỹ thuật số đặc biệt là cho ra đời các họ
vi xử lí và vi điều khiển rất đa chức năng do đó việc dùng kỹ thuật vi xử lí, kỹ
thuật vi điều khiển đã giải quyết những bế tắc và kinh tế hơn mà phương pháp
dùng IC rời kết nối lại không thực hiện được.
2. Với mạch dùng kỹ thuật vi xử lí:
Ngoài những ưu điểm như đã liệt kê trong phương pháp dùng IC rời thì
mạch dùng kỹ thuật vi xử lí còn có những ưu điểm sau:
-Mạch có thể thay đổi một cách linh hoạt bằng việc thay đổi phần mềm,
trong khi đó phần cứng không cần thay đổi mà mạch dùng IC rời không thể thực
hiện được.
- Số linh kiện sử dụng trong mạch ít hơn.
-Mạch đơn giản hơn.
-Mạch có thể lưu lại số liệu của các xe trong bãi.
-Mạch cũng có thể kết nối giao tiếp được với máy tính thích hợp cho những
người quản lí tại phòng kỹ thuật nắm bắt được tình hình trong bãi mà khơng vần
có mặt trực tiếp tại bãi
3. Phương pháp dùng vi điều khiển:
Ngoài những ưu điểm có được của hai phương pháp trên, phương pháp này
còn có những ưu điểm :
-Trong mạch có thể sử dụng ngay bộ nhớ trong đối với những chương trình
có quy mô nhỏ, rất tiện lợi mà vi xử lí không thực hiện được.
-Nó có thể giao tiếp nối tiếp trực tiếp với máy tính mà vi xử lí cũng giao
tiếp được với máy tính nhưng là giao tiếp song song nên cần có linh kiện chuyển
đổi dữ liệu từ song song sang nối tiếp để giao tiếp với máy tính.
Trong thiết kế người ta thường chọn phương pháp tối ưu nhưng kinh tế do
đó em chọn phương pháp dùng kỹ thuật vi điều khiển
III.GIỚI HẠN ĐỀ TÀI:
Với thời gian gần năm tuần thực hiện đề tài cũng như trình độ chun mơn
có hạn,chúng em đã cố gắng hết sức để hồn thành đồ án này nhưng chỉ
giải quyết được nhữngvấn đề sau:
Dùng cảm biến hồng ngoại để nhận biết xe vào , xe ra.
SVTH: NGUYỄN BÁ ĐÀO 5
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Hiễn thị số xe có trong bãi bằng led 7 đoạn.
Báo đèn và ngưng đếm số xe vào khi số xe trong bãi đã đầy.
Dùng ngôn ngữ CCS lập trình cho PIC 16F877A.
IV.MỤC ĐÍCH NGHIÊN CỨU :
- Mục đích của người thực hiện đề tài đã tiến hành nghiên cứu là: Trước tiên là đệ
hoàn thành môn học để đũ điều kiện ra trường.
- Với bản thân người thực hiện đề tài, đây chính là một cơ hội tốt để có thể tự kiểm
tra lại kiến thức của mình, đồng thời có cơ hội để nỗ lực vận động tìm hiểu, tiếp cận
nghiên cứu được với những vấn đề mình chưa biết, chưa hiểu rõ nhằm trang bị cho
bản thân nhiều kiến thức bổ ích sau này có thể ứng dụng vào thực tế cuộc sống.
- Tập tính làm việc độc lập, khả năng tự suy nghĩ tìm tòi, học hỏi, phát huy năng lực
của bản than.
- Ngoài ra còn tạo được 1 sản phẩm có tính ứng dụng trong thực tế.
SVTH: NGUYỄN BÁ ĐÀO 6
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
CHƯƠNG 2: PIC
I. TỔNG QUAN VỀ PIC:
1. Pic là gì?
PIC là một họ vi điều khiển RISC được sản xuất bởi công ty Microchip
Technology. Dòng PIC đầu tiên là PIC1650 được phát triển bởi Microelectronics
Division thuộc General_Instrument. PIC bắt nguồn từ chữ viết tắt của
“Programmable Intelligent Computer” (Máy tính khả trình thông minh) là một sản
phẩm của hãng General Instruments đặt cho dòng sản phẩm đầu tiên của họ là
PIC1650. Lúc này, PIC 1650 được dùng để giao tiếp với các thiết bị ngoại vi cho
máy chủ 16 bit CP1600, vì vậy, người ta cũng gọi PIC với tên “Peripheral Interface
Controller” (Bộ điều khiển giao tiếp ngoại vi). CP1600 là một CPU tốt, nhưng lại
kém về các hoạt động xuất nhập, và vì vậy PIC 8-bit được phát triển vào khoảng
năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600. PIC sử dụng microcode đơn
giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bấy giờ,
nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu
kỳ máy (4 chu kỳ của bộ dao động). Năm 1985 General Instruments bán bộ phận vi
điện tử của họ, và chủ sở hữu mới hủy bỏ hầu hết các dự án – lúc đó quá lỗi thời.
Tuy nhiên, PIC được bổ sung EPROM để tạo thành 1 bộ điều khiển vào ra khả trình.
Ngày nay rất nhiều dòng PIC được xuất xưởng với hàng loạt các module ngoại vi
tích hợp sẵn (như USART, PWM, ADC…), với bộ nhớ chương trình từ 512 Word
đến 32K Word.
2. Tại sao dùng Pic?
Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam. Giá
thành không quá đắt. Có đầy đủ các tính năng của một vi điều khiển khi hoạt động
độc lập. Là một sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi điều
khiển mang tính truyền thống: họ vi điều khiển 8051. Số lượng người sử dụng họ vi
điều khiển PIC. Hiện nay tại Việt Nam cũng như trên thế giới, họ vi điều khiển này
được sử dụng khá rộng rãi. Điều này tạo nhiều thuận lợi trong quá trình tìm hiểu và
phát triển các ứng dụng như: số lượng tài liệu, số lượng các ứng dụng mở đã được
phát triển thành công, dễ dàng trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp
khó khăn,… Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp
chương trình từ đơn giản đến phức tạp,… Các tính năng đa dạng của vi điều khiển
PIC, và các tính năng này không ngừng được phát triển.
3. Các dòng Pic và cách lựa chọn Vi điều khiển Pic:
SVTH: NGUYỄN BÁ ĐÀO 7
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Các sản phẩm vi điều khiển PIC của Microchip có gần 100 loại sản phẩm từ
họ 10Fxxx đến các họ 12Cxxx, 12Fxxx, 16Cxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA,
16LFxxxA, 18Fxxx, 18LFxxx, 18Fxxxx, 18LFxxxx,…
Cách phân loại PIC theo chữ cái:
Các họ PIC xxCxxx được đưa vào một nhóm, gọi là OTP (One Time
Programmable): chúng ta chỉ có thể lập trình và nạp chương trình cho nó được một
lần duy nhất.
Nhóm thứ hai có chữ cái F hoặc LF: chúng ta gọi nhóm này là nhóm Flash,
nhóm này cho phép ghi xóa nhiều lần bằng các mạch điện thông thường.
Cách phân loại theo hai con số đầu tiên của sản phẩm:
Loại thứ nhất là dòng PIC cơ bản( Base – line ), gồm các PIC 12Cxxx, có độ dài
12bit.
Loại thứ hai là các dòng PIC 10F, 12F va 16F, gọi là dòng phổ thông ( Mid –
Range ), có dộ dài 14 bit.
Loại thứ ba là dòng PIC 18( High – End ), có độ dài 16 bit.
Ở 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 18, 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.
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 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 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,…
5. 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.
II.CẤU TRÚC TỔNG QUÁT PIC 16F877A
1.Một vài thông số về Pic 16F877A
SVTH: NGUYỄN BÁ ĐÀO 8
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Đâ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 368 byte RAM và bộ nhớ dữ liệu EEPROM với dung
lượng 256 byte. Số PORT I/O là 5 với 33 pin I/O
Các đặc tính ngoại vi bao gồm các khối chức năng sau:
• Timer0: bộ đếm 8 bit.
• Timer1: bộ đếm 16 bit với bộ chia tần số, có thể họat động trong cả chế độ tiết
kiệm năng lượng( Sleep Mode) với nguồn xung clock ngoài.
• Timer2: bộ đếm 8 bit.
• 2 bộ Capture/Compare/PWM.
• 1 bộ biến đổi Analog –>Digital 10 bit, 8 ngõ vào.
• 2 bộ so sánh tương tự( Compartor).
• 1 bộ định thời giám sát( Watchdog Timer).
• 15 nguồn ngắt( Interrupts)
• Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển RD,
WR, CS ở bên ngoài.
• 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ỉ.
• 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.
Một vài đặc tính khác của vi điều khiển như:
• Được chế tao bằng công nghệ CMOS.
• 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.
• 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.
• 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 1.1: Tóm tắt đặc điểm của PIC16F877A
SVTH: NGUYỄN BÁ ĐÀO 9
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Tần số hoạt động DC-20MHz
Reset và Delay POR, BOR (PWRT, OST)
Bộ nhớ chương trình Flash
(14-bit word)
8K
Bộ nhớ dữ liệu (byte) 368
Bộ nhớ dữ liệu EEPROM (byte) 256
Các ngắt 15
Các Port xuất/nhập Port A, B, C, D, E
Timer 3
Module Capture/Compare/PWM 2
Giao tiếp nối tiếp MSSP, USART
Giao tiếp song song PSP
Module A/D 10-bit 8 kênh ngõ vào
Bộ so sánh tương tự 2
Tập lệnh 35 lệnh
Số chân 40 chân PDIP
44 chân PLCC
44 chân TQFP
44 chân QFN
2.Sơ đồ chân ,cấu trúc và chức năng PIC 16F877A loại 40 chân PDIP
SVTH: NGUYỄN BÁ ĐÀO 10
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Hình 1: Sơ đồ chân Pic 16F877A loại 40 chân PDIP
Chức năng các chân :
* Chân OSC1/CLKI (13) : ngõ vào dao động thạch anh hoặc xung clock bên ngoài.
- OSC1 : ngõ vào dao động thạch anh hoặc xung clock bên ngoài. Ngõ vào Schmit
trigger khi được cấu tạo ở chế độ RC ; một cách khác của CMOS.
- CLKI : ngõ vào nguồn xung bên ngoài. Luôn được kết hợp với chức năng OSC1.
* Chân OSC2/CLKO (13) : ngõ vào dao động thạch anh hoặc xung clock
- OSC2 : Ngõ ra dao động thạch anh. Kết nối đến thạch anh hoặc bộ cộng hưởng.
- CLKO : ở chế độ RC, ngõ ra của OSC2, bằng tần số của OSC1 và chỉ ra tốc độ của
chu kỳ lệnh.
* Chân /V
PP
(1) :
- MCLR : Hoạt động Reset ở mức thấp
- V
PP
: ngõ vào áp lập trình
* Chân RA0/AN0 (2) :
- RA0 : xuất/nhập số
- AN0 : ngõ vào tương tự 0
* Chân RA1/NA1 (3) :
- RA1 : xuất/nhập số
- AN1 : ngõ vào tương tự 1
* Chân RA2/NA2/V
REF-
/CV
REF
(4) :
- RA2 : xuất/nhập số
SVTH: NGUYỄN BÁ ĐÀO 11
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
- AN2 : ngõ vào tương tự 2
- V
REF -:
ngõ
vào điện áp chuẩn (thấp) của bộ A/D
- CV
REF
: điện áp tham chiếu V
REF
ngõ ra bộ so sỏnh
* Chân RA3/NA3/V
REF+
(5) :
- RA3 : xuất/nhập số
- AN3 : ngõ vào tương tự 3
- V
REF+
: ngõ vào điện áp chuẩn (cao) của bộ A/D
* Chân RA4/TOCKI/C1OUT (6) :
- RA4 : xuất/nhập số - mở khi được cấu tạo như ngõ ra
- TOCKI : ngõ vào xung clock bên ngoài cho Timer 0
- C1 OUT : Ngõ ra bộ so sánh 1
* Chân RA5/AN4/ /C2OUT (7) :
- RA5 : xuất/nhập số
- AN4 : ngõ vào tương tự 4
- SS : ngõ vào chọn lựa SPI phụ
- C2 OUT : ngõ ra bộ so sánh 2
* RB0/INT (33) :
- RB0 : xuất/nhập số
- INT : ngắt ngoài
* RB1 (34) : xuất/nhập số
* RB2 (35) : xuất/nhập số
* RB3/PGC :
- RB3 : xuất/nhập số
- Chân cho phép lập trình điện áp thấp ICPS
* RB4 (37), RB5 (38) : xuất/nhập số
* RB6/PGC (39) :
- RB6 : xuất/nhập số
- PGC : mạch dũ sai và xung clock lập trình ICSP
* RB7/PGD (40) :
- RB7 : xuất/nhập số
- PGD : mạch dữ sai và dữ liệu lập trình ICSP
SVTH: NGUYỄN BÁ ĐÀO 12
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
* Chân RC0/T1 OCO/T1CKI (15) :
- RC0 : xuất/nhập số
- T1 OCO : ngõ vào bộ dao động Timer 1
- T1 CKI : ngõ vào xung clock bên ngoài Timer 1
* Chân RC1/T1 OSI/CCP2 (16) :
- RC1 : xuất/nhập số
- T1 OSI : ngõ vào bộ dao động Timer 1
- CCP2 : ngõ vào Capture 2, ngõ ra compare 2, ngõ ra PWM2
* Chân RC2/CCP1 (17) :
- RC2 : xuất/nhập số
- CCP1 : ngõ vào Capture 1, ngõ ra compare 1, ngõ ra PWM1
* Chân RC3/SCK/SCL (18):
- RC3 : xuất/nhập số
- SCK : ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ SPI
- SCL : ngõ vào xung clock nối tiếp đồng bộ/ ngõ ra của chế độ I
2
C
* Chân RC4/SDI/SDA (23) :
- RC4 : xuất/nhập số
- SDI : dữ liệu vào SPI
- SDA : xuất/nhập dữ liệu vào I
2
C
* Chân RC5/SDO (24) :
- RC5 : xuất/nhập số
- SDO : dữ liệu ra SPI
* Chân RC6/TX/CK (25) :
- RC6 : xuất/nhập số
- TX : truyền bất đồng bộ USART
- CK : xung đồng bộ USART
* Chân RC7/RX/DT (26) :
- RC7 : xuất/nhập số
- RX : nhận bất đồng USART
- DT : dữ liệu đồng bộ USART
* Chân RD0/PSP0 (19) :
SVTH: NGUYỄN BÁ ĐÀO 13
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
- RD0 : xuất/nhập số
- PSP0 : dữ liệu port nhánh song song
* Chân RD1/PSP1 (20) :
- RD1 : xuất/nhập số
- PSP1 : dữ liệu port nhánh song song
* Các chân RD2/PSP2 (21), RD3/PSP3 (22), RD4/PSP (27), RD5/PSP5 (28),
RD6/PSP6 (29), RD7/PSP7 (30) tương tự chân 19,20.
* Chân RE0/ /AN6 (8) :
- RE0 : xuất nhập số
- RD : điều khiển việc đọc ở port nhánh song song
- AN5 : ngõ vào tương tự 5
* Chân RE1/ /AN6 (9) :
- RE1 : xuất/nhập số
- WR : điều khiển việc ghi ở port nhánh song song
- AN6 : ngõ vào tương tự 6
* Chân RE2/ /AN7 (10) :
- RE2 : xuất/nhập số
- CS : Chip lựa chọn sự điều khiển ở port nhánh song song
- AN7 : ngõ vào tương tự 7
* Chân V
DD
(11,32), và V
SS
(12,31) : là các chân nguồn của PIC.
3.Sơ đồ khối của Pic16F877A
SVTH: NGUYỄN BÁ ĐÀO 14
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Hình 2: Sơ đồ khối vi điều khiển PIC16F877A
4.Tổ chức bộ nhớ:
Bộ nhớ chương trình( 8K Flash ROM), bộ nhớ dữ liệu( 368 bytes RAM) và bộ
nhớ dữ liệu EEPROM( 256 bytes).
4.1. Tổ chức của bộ nhớ chương trình:
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ Flash, có bộ
đếm chương trình( Program Counter) dài 13 bit có thể định địa chỉ cho 8K không
gian bộ nhớ, 8K không gian bộ nhớ được chia làm 8 trang 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 bao gồm một ngăn xếp( Stack) 8 mức.
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).
Ngăn xếp và bản đồ bộ nhớ chương trình:
SVTH: NGUYỄN BÁ ĐÀO 15
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
4.2 Tổ chức của bộ nhớ dữ liệu:
Bộ nhớ dữ liệu của PIC được chia ra làm nhiều bank. Đối với PIC16F877A bộ
nhớ dữ liệu được chia ra làm 4 bank: bank 0, bank 1, bank 2 và bank 3. Mỗi bank có
dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFR (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ộ 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.
Các bank được lựa chọn bằng bitb RP0 và bit RP1 ở thanh ghi Status.
RP1:RP0 Bank
00 0
01 1
10 2
11 3
Vùng RAM đa mục đích GPR:
Vùng RAM đa mục đích có chiều rộng là 8 bit và được truy xuất trực tiếp hoặc
gián tiếp thông qua thanh ghi FSR. Đâ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.
SVTH: NGUYỄN BÁ ĐÀO 16
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Sơ đồ bộ nhớ dữ liệu PIC16F877A
4.3 Bộ nhớ dữ liệu EEPROM và bộ nhớ chương trình FLASH:
Bộ nhớ dữ liệu EEPROM và bộ nhớ chương trình FLASH cho phép đọc hoặc
ghi trong suốt hoạt động bình thường trong phạm vi VDD. Những thao tác này xảy
ra trên một byte đơn cho bộ nhớ dữ liệu EEPROM và trên một từ đơn cho bộ nhớ
chương trình FLASH. Một thao tác ghi gây ra sự xóa rồi ghi, thao tác này được thực
hiện trên một byte hoặc một từ được chỉ định. Sự truy cập vào bộ nhớ chương trình
SVTH: NGUYỄN BÁ ĐÀO 17
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
phải kể đến sự tính toán checksum. Ghi một byte hoặc một word sẽ tự động xóa
vùng nhớ và ghi lên giá trị mới (xóa trước khi ghi). Việc ghi vào bộ nhớ dữ liệu
EEPROM không ảnh hưởng đến hoạt động của thiết bị. Việc ghi vào bộ nhớ chương
trình sẽ dừng thực thi các lệnh cho đến khi quá trình ghi hoàn thành. Bộ nhớ chương
trình không thể được truy cập trong suốt quá trình ghi. Trong suốt quá trình ghi, bộ
dao động tiếp tục chạy, thiết bị ngoại vi vẫn tiếp tục hoạt động và những sự kiện về
ngắt sẽ được phát hiện và đợi cho đến khi quá trình ghi hoàn thành. Khi quá trình
ghi hoàn thành, lệnh tiếp theo trong hàng đợi lệnh sẽ được thực hiện và một rẽ
nhánh đến vectơ ngắt sẽ xảy ra đến ngắt được phép và gây ra trong suốt quá trình
ghi. Việc đọc và ghi truy cập đến cả hai bộ nhớ xảy ra gián tiếp thông qua việc đặt
những thanh ghi mục đích chung (SFR). Có sáu thanh ghi mục đích chung được sử
dụng là:
Bộ nhớ dữ liệu EEPROM cho phép những thao tác đọc và ghi byte không can
thiệp đến những thao tác bình thường của bộ vi điều khiển. Khi có sự trao đổi với bộ
nhớ dữ liệu EEPROM, thanh ghi EEADR giữ địa chỉ sẽ được truy cập. Phụ thuộc
vào thao tác, thanh ghi EEDATA giữ dữ liệu được ghi hoặc được đọc tại địa chỉ
trong thanh ghi EEADR. PIC16F877A có 256 byte cho bộ nhớ dữ liệu EEPROM và
do đó nó sử dụng tất cả 8 bit của EEADR. Bộ nhớ chương trình FLASH không cho
phép truy cập vào quá trình đọc, nhưng quá trình ghi sẽ dừng thực thi các lệnh cho
đến khi quá trình ghi hoàn thành. Khi trao đổi với bộ nhớ chương trình cặp thanh
ghi EEADRH:EEADR sẽ tạo thành một từ hai byte, và sẽ chứa 13 bit địa chỉ của
vùng nhớ được truy cập. Sự kết hợp hai thanh ghi EEDATH:EEDATA sẽ chứa dữ
liệu 14 bit cho việc ghi, hoặc phản ánh giá trị của bộ nhớ chương trình sau mỗi lần
đọc. Giống sự truy cập vào bộ nhớ dữ liệu EEPROM, giá trị của những thanh ghi
EEADRH:EEADR phải bên trong phạm vi hợp lệ của bộ nhớ chương trình, phụ
thuộc vào linh kiện (0000h đến 1FFFh đối với PIC16F873/83.9)
4.4 Quá trình đọc bộ nhớ dữ liệu EEPROM:
Quá trình đọc bộ nhớ dữ liệu EEPROM chỉ yêu cầu địa chỉ cần truy cập phải được
ghi vào thanh ghi EEADR và xóa bit EEPGD. Sau khi bit RD được set, dữ liệu sẽ phải sẵn
sàng trong thanh ghi EEDATA trong chu kỳ lệnh kế tiếp. EEDATA sẽ giữ giá trị này cho
đến khi thao tác đọc kế tiếp được bắt đầu hoặc cho đến khi nó được ghi bởi vi chương
trình.
Các bước trong quá trình đọc bộ nhớ dữ liệu EEPROM là:
1. Ghi địa chỉ cần truy cập vào thanh ghi EEADR và hãy chắc rằng địa chỉ này thì
không lớn hơn kích thước bộ nhớ của linh kiện PIC16F877A .
2. Xóa bit EEPGD để trỏ đến bộ nhớ dữ liệu EEPROM.
3. Set bit RD để bắt đầu thao tác đọc.
4. Đọc dữ liệu từ thanh ghi EEDATA.
4.5 Quá trình ghi vào bộ nhớ dữ liệu EEPROM:
Quá trình ghi dữ liệu vào bộ nhớ dữ liệu EEPROM được tiến hành qua vài
bước. Cả địa chỉ và giá trị dữ liệu cần phải được ghi vào những thanh ghi mục đích
SVTH: NGUYỄN BÁ ĐÀO 18
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
chung SFR. Bit EEPGD cần phải được xóa, và bit WREN phải được set để cho phép
ghi. Bit WREN phải bị xóa trong suốt thời gian ngoại trừ trong quá trình ghi vào bộ
nhớ dữ liệu EEPROM. Bit WR chỉ có thể được set khi bit WREN đã được set trước
đó, chúng không thể được set cùng lúc. Bit WREN sau đó phải được xóa bằng vi
chương trình sau khi ghi.
Các bước trong quá trình ghi vào bộ nhớ dữ liệu EEPROM:
1. Nếu bước thứ 10 chưa được thực hiện, hãy kiểm tra bit WR để xem việc ghi có
đang tiến hành.
2. Ghi địa chỉ cần truy cập vào thanh ghi EEADR và hãy chắc rằng địa chỉ này thì
không lớn hơn kích thước bộ nhớ của linh kiện PIC16F877A.
3. Ghi giá trị dữ liệu 8 bit được chương trình hóa vào thanh ghi EEDATA.
4. Xóa bit EEPGD để trỏ đến bộ nhớ dữ liệu EEPROM.
5. Set bit WREN để cho phép những thao tác lập trình.
6. Không cho phép những ngắt.
7. Thực hiện chuỗi 5 lệnh đặc biệt sau:
o Ghi giá trị 55h vào EECON2 qua hai bước (đầu tiên đưa vào W, sau đó
mới đưa EECON2).
o Ghi giá trị AAh vào EECON2 qua hai bước (đầu tiên đưa vào W, sau đó
mới đưa vào EECON2).
o Set bit WR.
8. Cho phép các ngắt (nếu sử dụng ngắt).
9. Xóa bit WREN để không cho phép các thao tác lập trình.
10.Tại thời điểm chu kỳ ghi hoàn thành, bit WR bị xóa và bit cờ ngắt EEIF được
set. Nếu bước 1 chưa được thực hiện, sau đó vi chương trình sẽ kiểm tra xem
EEIF được set hay chưa hoặc bit WR có bị xóa hay không để báo kết thúc chu
kỳ chương trình.
4.6 Quá trình đọc bộ nhớ chương trình FLASH
Quá trình đọc bộ nhớ chương trình FLASH cũng giống với quá trình đọc bộ
nhớ dữ liệu EEPROM, chỉ cần thêm vào hai lệnh NOP sau khi set bit RD. Hai chu
kỳ lệnh được thực hiện bởi lệnh NOP sẽ được bộ vi điều khiển sử dụng để đọc dữ
liệu ra khỏi bộ nhớ chương trình và chèn giá trị đó vào trong cặp thanh ghi
EEDATH:EEDATA. Dữ liệu sẽ được sẵn sàng ở lệnh thứ hai. EEDATH và
EEDATA sẽ giữ giá trị này cho đến khi thao tác đọc tiếp theo được bắt đầu, hoặc
cho đến khi chúng được ghi bởi vi chương trình.
Các bước trong quá trình đọc bộ nhớ chương trình FLASH:
1. Ghi địa chỉ cần truy cập vào cặp thanh ghi EEADRH:EEADR. Hãy chắc rằng
địa chỉ đó không lớn hơn kích thước bộ nhớ của linh kiện PIC16F877A.
2. Set bit EEPGD để trỏ đến bộ nhớ chương trình FLASH.
3. Set bit RD để bắt đầu thao tác đọc.
4. Thực hiện hai lệnh NOP để cho phép bộ vi điều khiển đọc dữ liệu ra khỏi bộ nhớ
chương trình.
5. Đọc dữ liệu từ cặp thanh ghi EEDATH:EEDATA.
SVTH: NGUYỄN BÁ ĐÀO 19
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
4.7 Quá trình ghi dữ liệu vào bộ nhớ chương trình FLASH
Các bước trong quá trình ghi dữ liệu vào bộ nhớ chương trình FLASH:
1. Ghi địa chỉ cần truy cập vào cặp thanh ghi EEADRH:EEADR. Chắc rằng địa chỉ
này thì không lớn hơn kích thước bộ nhớ của linh kiện PIC16F877A.
2. Ghi giá trị dữ liệu 14 bit đã được chương trình hóa vào cặp thanh ghi
EEDATH:EEDATA.
3. Set bit EEPGD để trỏ đến bộ nhớ chương trình FLASH.
4. Set bit WREN để cho phép những thao tác lập trình.
5. Không cho phép ngắt.
6. Thực hiện chuỗi 5 lệnh đặc biệt sau:
o Ghi giá trị 55h vào EECON2 qua hai bước (đầu tiên đưa vào W, sau đó
đưa vào EECON2 ).
o Ghi giá trị AAh vào EECON2 qua hai bước ( đầu tiên đưa vào W, sau đó
đưa vào EECON2).
o Set bit WR.
7. Thực hiện hai lệnh NOP để cho phép bộ vi điều khiển thiết lập thao tác ghi.
8. Cho phép các ngắt (nếu sử dụng ngắt).
9. Xóa bit WREN để không cho phép các thao tác lập trình.
Tại thời điểm chu kỳ ghi hoàn thành, bit WR bị xóa và bit cờ ngắt EEIF được
set. Khi bộ vi điều khiển không thực hiện các lệnh trong suốt chu kỳ ghi, vi chương
trình sẽ không nhất thiết phải kiểm tra cả EEIF, hoặc WR, để xác định quá trình ghi
đã hoàn thành hay chưa.
Vi điều khiển PIC16F877A có hai cơ chế bảo vệ mã, một bit dành cho bộ nhớ
dữ liệu EEPROM và hai bit dành cho bộ nhớ chương trình FLASH. Dữ liệu có thể
được đọc và ghi vào bộ nhớ dữ liệu EEPROM , bất chấp trạng thái của bit bỏa vệ
mã CPD. Khi sự bảo vệ mã được cho phép và bit CPD bị xóa thì sự truy cập ngoài
thông qua bit ICSP không được cho phép, bất chấp trạng thái của những bit bảo vệ
mã bộ nhớ chương trình.
Trạng thái của những bit bảo vệ mã bộ nhớ chương trình CP0 và CP1 không
ảnh hưởng đến sự thực hiện những lệnh bên ngoài bộ nhớ chương trình. PIC16F87X
có thể luôn luôn đọc những giá trị trong bộ nhớ chương trình, bất chấp trạng thái
của những bit bảo vệ mã. Tuy nhiên, trạng thái của những bit bảo vệ mã và bit WRT
sẽ có những ảnh hưởng khác nhau đến quá trình ghi vào bộ nhớ chương trình. Bit
WRT là bit dùng để bảo vệ quá trình ghi vào bộ nhớ chương trình FLASH. Bit này
chỉ có thể được truy cập khi PIC16F87X được lập trình qua ICSP . Khi sự bảo vệ
ghi được cho phép, bất kì lệnh ghi nào đến bộ nhớ chương trình FLASH đều sẽ bị
ngăn cản. Sự bảo vệ chế độ ghi không ảnh hưởng đến quá trình đọc bộ nhớ chương
trình.
Trạng thái đọc ghi của bộ nhớ chương trình FLASH nội
SVTH: NGUYỄN BÁ ĐÀO 20
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
4.8 Sự phân trang bộ nhớ chương trình:
PIC16F877A có khả năng định vị một khối liên tục 8K từ của bộ nhớ chương
trình. Các lệnh CALL và GOTO chỉ cung cấp 11 bit địa chỉ và chỉ xác định được 2K
bộ nhớ chương trình. Khi thực hiện lệnh CALL hoặc GOTO, 2 bit cao nhất của địa
chỉ được cung cấp bởi PCLATH<4:3>. Khi thực hiện lệh CALL hoặc GOTO, người
sử dụng phải bảo đảm rằng trang chọn bit phải được lập trình để trang bộ nhớ
chương trình được định địa chỉ. Nếu lệnh CALL (hoặc ngắt) được thi hành, toàn bộ
13 bit của PC sẽ được cất vào ngăn xếp. Vì vậy việc vận dụng các bit
PCLATH<3:4> thì không đòi hỏi lệnh Return để lấy địa chỉ từ ngăn xếp.
5. Các đặc tính của Oscillator
Pic16F877A có khả năng sử dụng một trong 4 loại oscillator, đó là:
LP: (low power crystal).
XT: thạch anh bình thường.
HS: (high-speed crystal).
RC: (resistor/capacitor) dao động do mạch rc tạo ra. đối với các loại oscillator lp, hs,
xt, Oscillator được gắn vào vi điều khiển thông
qua các pin osc1/clki và Osc2/Clko.
đối với các ứng dụng không cần các loại oscillator tốc độ cao, ta có thể sử dụng
mạch dao động rc làm nguồn cung cấp xung hoạt động cho vi vi điều khiển. tần số
tạo ra phụ thuộc vào các giá trị điện áp, giá trị điện trở và tụ điện, bên cạnh đó là sự
ảnh hưởng của các yếu tố như nhiệt độ, chất lượng của các linh kiện.
các linh kiện sử dụng cho mạch rc oscillator phải bảo đảm các giá trị sau:
3 k < rext < 100 k
cext >20 pf
6. Các chế độ Reset
Có nhiều chế độ reset vi điều khiển, bao gồm:
Power-on Reset POR (Reset khi cấp nguồn hoạt động cho vi điều khiển).
SVTH: NGUYỄN BÁ ĐÀO 21
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
Reset trong quá trình hoạt động.
Từ chế độ sleep.
WDT reset (reset do khối WDT tạo ra trong quá trình hoạt động).
WDT wake up từ chế độ sleep.
Brown-out reset (BOR).
- Power-on reset (POR): Đây là xung reset do vi điều khiển tạo ra khi phát hiện
nguồn cung cấp VDD. Khi hoạt động ở chế độ bình thường, vi điều khiển cần được
đảm bảo các thông số về dòng điện, điện áp để hoạt động bình thường. Nhưng nếu
các tham số này không được đảm bảo, xung reset do POR tạo ra sẽ đưa vi điều
khiển về trạng thái reset và chỉ tiếp tục hoạt động khi nào các tham số trên được
đảm bảo.
- Power-up Timer (PWRT): đây là bộ định thời hoạt động dựa vào mạch RC bên
trong
vi điều khiển. Khi PWRT được kích hoạt, vi điều khiển sẽ được đưa về trạng thái
reset.
PWRT sẽ tạo ra một khoảng thời gian delay (khoảng 72 ms) để VDD tăng đến giá
trị thích
hợp.
- Oscillator Start-up Timer (OST): OST cung cấp một khoảng thời gian delay bằng
1024 chu kì xung của oscillator sau khi PWRT ngưng tác động (vi điều khiển đã đủ
điều kiện hoạt động) để đảm bảo sự ổn định của xung do oscillator phát ra. Tác
động của OST còn xảy ra đối với POR reset và khi vi điều khiển được đánh thức từ
chế đợ sleep. OST chỉ tác động đối với các lọai oscillator là XT, HS và LP.
- Brown-out reset (BOR): Nếu VDD hạ xuống thấp hơn giá trị VBOR (khoảng 4V)
và kéo dài trong khoảng thời gian lớn hơn TBOR (khoảng 100 us), BOR được kích
hoạt và vi điều khiển được đưa về trạng thái BOR reset. Nếu điện áp cung cấp cho
vi điều khiển hạ xuống thấp hơn VBOR trong khoảng thời gian ngắn hơn TBOR, vi
điều khiển sẽ không được reset. Khi điện áp cung cấp đủ cho vi điều khiển hoạt
động, PWRT được kích hoạt để tạo ra một khoảng thời gian delay (khoảng 72ms).
Nếu trong khoảng thời gian này điện áp cung cấp cho vi điều khiển lại tiếp tục hạ
xuống dưới mức điện áp VBOR, BOR reset sẽ lại được kích hoạt khi vi điều khiển
đủ điện áp hoạt động. Một điểm cần chú ý là khi BOR reset được cho phép, PWRT
cũng sẽ hoạt động bất chấp trạng thái của bit PWRT.
- Tóm lại để vi điều khiển hoạt động được từ khi cấp nguồn cần trải qua các bước
sau: POR tác động.
PWRT (nếu được cho phép hoạt động) tạo ra khoảng thời gian delay TPWRT để ổn
định nguồn cung cấp.
OST (nếu được cho phép) tạo ra khoảng thời gian delay bằng 1024 chu kì xung của
oscillator để ổn định tần số của oscillator.
Đến thời điểm này vi điều khiển mới bắt đầu hoạt động bình thường. Thanh ghi điều
khiển và chỉ thị trạng thái nguồn cung cấp cho vi điều khiển là thanh ghi PCON
SVTH: NGUYỄN BÁ ĐÀO 22
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
7. Thanh ghi đếm chương trình PC( Program Counter):
Thanh ghi đếm chương trình( PC ) chứa địa chỉ của lệnh được thực hiện kế
tiếp. Bộ đếm chương trình (PC) có độ rộng 13 bit. Byte thấp là thanh ghi PCL, nó có
thể đọc và ghi. Ba bit cao là thanh ghi PCH (PC<12:8>) không cho phép đọc nhưng
nó cho phép ghi gián tiếp thông qua thanh ghi PCLATH. Khi Reset thì ba bit cao
của PC sẽ bị xoá.
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.
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ị 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.
SVTH: NGUYỄN BÁ ĐÀO 23
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
8. Thanh ghi EECON1 và EECON2:
Thanh ghi EECON1 là thanh ghi điều khiển sự cấu hình và sự truy cập. Thanh
ghi EECON2 không phải là thanh ghi vật lý được bổ sung, nhưng nó được sử dụng
để ghi một chuỗi nhớ để ngăn chặn sự ghi vô ý.
Một vài bit được sử dụng để điều khiển các thao tác đọc hoặc ghi đến bộ nhớ
dữ liệu EEPROM và bộ nhớ chương trình FLASH. Bit EEPGD xác định sự truy cập
đến bộ nhớ chương trình hoặc bộ nhớ dữ liệu. Khi bị xóa, những thao tác tiếp theo
sẽ làm việc trên bộ nhớ dữ liệu EEPROM. Khi được đặt, tất cả những thao tác tiếp
theo sẽ thao tác trên bộ nhớ chương trình.
Thao tác đọc sử dụng một bit thêm vào là RD, mà nó bắt đầu cho thao tác đọc
từ vùng nhớ mong muốn. Mỗi lần bit này được đặt, giá trị của vùng nhớ này sẽ được
sẵn sàng trong thanh ghi dữ liệu. Bit này không thể xóa bằng vi chương trình. Nó sẽ
tự động xóa sau khi thao tác đọc kết thúc. Khi đọc bộ nhớ dữ liệu EEPROM, dữ liệu
sẽ được chuẩn bị sẵn trong thanh ghi EEDATA trong chu kỳ lệnh kế tiếp sau khi bit
RD được đặt. Khi đọc bộ nhớ chương trình, sau khi bit RD được đặt, dữ liệu sẽ
được load vào cặp thanh ghi EEDATH:EEDATA sau lệnh thứ hai.
Thao tác ghi có hai bit điều khiển, WR và WREN, và hai bit trạng thái
WRERR và EEIF. Bit WREN được sử dụng để cho phép hoặc không cho phép ghi.
Khi bit WREN bị xóa, thao tác ghi sẽ không được cho phép. Do đó, bit WREN cần
phải được set trước khi thực hiện thao tác ghi. Bit WR được sử dụng để bắt đầu cho
thao tác ghi. Nó sẽ tự động xóa sau khi thao tác ghi kết thúc. Cờ ngắt EEIF được sử
dụng để xác định việc ghi vào bộ nhớ đã hoàn thành. Cờ này cần phải được xóa
bằng phần mềm trước khi bit WR được set. Đối với bộ nhớ dữ liệu EEPROM, mỗi
lần bit WREN và WR đã được set, địa chỉ của vùng nhớ mong muốn trong thanh ghi
EEADR sẽ bị xóa, sau đó là việc ghi dữ liệu vào thanh ghi EEDATA. Khi thao tác
ghi hoàn thành, bit cờ EEIF sẽ được set. Đối với bộ nhớ chương trình, mỗi lần bit
WREN và WR đã được set, bộ vi điều khiển sẽ ngừng thực hiện các lệnh. Vùng nhớ
mong muốn được trỏ đến bởi EEADRH:EEADR sẽ bị xóa. Sau đó, giá trị dữ liệu
trong EEADTH:EEDATA sẽ được chương trình hóa. Khi hòan thành bit cờ EEIF sẽ
được set và bộ vi điều khiển sẽ tiếp tục thực hiện.
Thanh ghi EECON1(địa chỉ 18Ch)
SVTH: NGUYỄN BÁ ĐÀO 24
ĐỒ ÁN TỐT NGHIỆP BÃI GIỮ XE
9.Định địa chỉ gián tiếp , các thanh ghi INDF và FSR:
Thanh ghi INDF không phải là thanh ghi vật lý. Địa chỉ của thanh ghi INDF sẽ
được định vị gián tiếp. Định vị gián tiếp có thể thực hiện được bằng cách sử dụng
thanh ghi INDF. Trên thực tế, bất kì lệnh nào sử dụng thanh ghi INDF để truy cập
thanh ghi con trỏ bằng thanh ghi FSR (File Select Register). Việc đọc chính thanh
ghi INDF, một cách gián tiếp (FSR = ‘0’) sẽ có giá trị 00h. Một địa chỉ 9 bit có hiệu
quả thu được bằng cách ghép 8 bit của thanh ghi FSR với bit IRP (STATUS<7>),
như được chỉ bên dưới. Một chương trình mẫu dùng để xoá vùng RAM từ 20h đến
2Fh sử dụng cách định địa chỉ gián tiếp.
SVTH: NGUYỄN BÁ ĐÀO 25