Chức năng của CPU là tiến hành các thao tác tính toán, xử lí,đưa ra các tín hiệuđịa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lậptrình đưa ra thông qua các l
Trang 1L I CÁM N ỜI CÁM ƠN ƠN
Lời đầu tiên em xin gửi lời cảm ơn chân thành đến thầy giáo hướng dẫn PhạmHoàng Vương bộ môn Kỹ thuật máy đã giúp đỡ em rất nhiều trong quá trình thựchiện đề tài này Từ lúc bắt đầu đến khi kết thúc đề tài thầy đã giúp em làm quen vớilĩnh vực vi xử lí, học tập nghiên cứu và sử dụng được các phần mềm liên quan đếnđiều khiển như Proteus,PicC… Thầy cũng giúp đỡ em rất nhiều trong lúc thiết kế
và thi công mạch mô hình thực tế
Em cũng xin cám ơn các thầy, cô trong bộ môn Kỹ thuật máy đã giúp đỡ, tạođiều kiện cho sinh viên chúng em có cơ hội học tập, nghiên cứu trong suốt cácnăm học vừa qua để bọn em được phát triển các kĩ năng cơ bản của 1 sinh viên kĩthuật trước khi tốt nghiệp
Hà Nội, ngày 15 tháng 4 năm 2014
Đàm Hùng Việt
Trang 2
MỤC LỤC
LỜI CÁM ƠN 1
MỤC LỤC 2
DANH MỤC HÌNH ẢNH 5
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ VI XỬ LÍ 7
1.1.Cấu trúc tổng thể của một hệ vi điều khiển 7
1.2.Chức năng của từng bộ phận 8
1.2.1 CPU 8
1.2.2 Bộ nhớ ROM 8
1.2.3 Bộ nhớ RAM 9
1.2.4 Cổng giao tiếp (có thể là cổng nối tiếp hoặc cổng song song) 9
1.2.5.Bộ đếm/Bộ định thời 10
1.2.6.Khối giao tiếp bus 11
1.2.7.Ngăn xếp(stack) 12
1.3.Nguyên lí hoạt động của một vi xử lí 12
1.4.Các dòng vi điều khiển thường gặp 13
1.5.Giới thiệu về Pic16F887 14
1.5.1 PIC nói chung 14
1.5.2 Giới thiệu về PIC16F887 16
Trang 31.5.3.Tổ chức bộ nhớ 20
1.5.4.Bộ tạo dao động 25
1.5.5.Cấp nguồn 26
1.5.6.Reset 28
1.5.7 Các bộ định thời 28
CHƯƠNG 2: Ý TƯỞNG THIẾT KẾ VÀ CÁC LINH KIỆN CÓ THỂ ĐƯỢC SỬ DỤNG 36
2.1 IC thời gian thực DS1307 36
2.1.1 Khái quát chung 36
2.1.2.Cấu tạo của DS1307 37
2.1.3.Tổ chức thanh ghi trong DS1307 39
2.2 IC ghi dịch 74HC595 43
2.3 Led ma trận 8*8 47
2.4 Module thu phát sóng RF PT2272 48
CHƯƠNG 3: THIẾT KẾ, THI CÔNG VÀ CHẠY THỬ NGHIỆM .51 3.1.Sử dụng Proteus để thiết kế mạch và mô phỏng 51
3.2.Sử dụng phần mềm Pic C compiler để lập trình cho VDK 53
CHƯƠNG 4: KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG PHÁT TRIỂN.56 4.1.Kết quả 56
4.2.Hướng phát triển trong tương lai 56
Trang 4Tài liệu tham khảo 57 Phụ lục 58
Trang 5DANH M C HÌNH NH ỤC HÌNH ẢNH ẢNH
Hình 1.1: Kiến trúc cơ bản của môt vi xử lý 7
Hình 1.2: Hai kiểu tổ chức phần cứng trong PIC 15
Hình 1.3.Sơ đồ các chân của PIC16F887 17
Hình 1.4.Chức năng các chân (ảnh chụp từ Data Sheet) 19
Hình 1.6 Bộ nhớ chương trình PIC16F877 22
Hình 1.7.Sơ đồ bộ tạo dao động 25
Hình 1.8.Hình ảnh một con thạch anh 20Mhz 26
Hình 1.9.Mạch ổn áp dùng cầu DIODE và IC ổn áp 3 chân 7805 27
Hình 1.10.Một con IC 7805 27
Hình 1.11.Sơ đồ của 1 mạch reset 28
Hình 1.12 Sơ đồ khối của Timer 0 29
Hình 2.1.Hình ảnh thực tế và sơ đồ các chân của Ds1307 37
Hình 2.2.Hình ảnh kết nối DS1307 với Pic 38
Hình 2.3 Hình ảnh thực tế và sơ đồ chân của IC 74HC595 43
Hình 2.4.Sơ đồ nguyên lý mắc ic74hc595 với Pic và led ma trận 45
Trang 6Hình 2.6 Cách mắc led ma trận đúng cách 48
Hình 2.7.Hình ảnh thực tế của bộ thu phát sóng tín hiệu RF 49
Hình 3.1.Màn hình khởi động của Proteus 51
Hình 3.2.Mạch nguyên lý để mô phỏng 52
Hình 3.3.Mạch in khi đang thiết kế 53
Hình 3.4.Màn hình khởi tạo Project mới trong PicC 53
Trang 7CH ƯƠN NG 1: GI I THI U T NG QUAN V VI X LÍ ỚI THIỆU TỔNG QUAN VỀ VI XỬ LÍ ỆU TỔNG QUAN VỀ VI XỬ LÍ ỔNG QUAN VỀ VI XỬ LÍ Ề VI XỬ LÍ Ử LÍ
1.1.C u trúc t ng th c a m t h vi đi u khi n ấu trúc tổng thể của một hệ vi điều khiển ổng thể của một hệ vi điều khiển ể của một hệ vi điều khiển ủa một hệ vi điều khiển ột hệ vi điều khiển ệ vi điều khiển ều khiển ể của một hệ vi điều khiển
-Trước hết ta cần phân biệt hai khái niệm vi xử lí và vi điều khiển, về cơ bảnchúng không khác nhau nhiều đều là các thuật ngữ dung để đề cập đến kĩ thuật ứngdụng các công nghê vi điện tử, công nghệ tích hợp và khả năng xử lí theo chươngtrình vào các lĩnh vực khác nhau Tuy nhiên có khác biệt là vi xử lí chủ yếu sửdụng vào mục đích tính toán còn vi điều khiển sử dụng cho các mục đích nhỏ cụthể
Hình 1.1: Kiến trúc cơ bản của môt vi xử lý
Trang 8-Ngoài cấu trúc như trên ra với mỗi loại vi điều khiển cụ thể còn có thêm một sốphần cứng khác như bộ dao động trong,bộ biến đổi tần số tương tự DAC, các mạchđiều chế dạng sóng WG, điều chế độ rộng xung PWM…
1.2.Ch c năng c a t ng b ph n ức năng của từng bộ phận ủa một hệ vi điều khiển ừng bộ phận ột hệ vi điều khiển ận.
1.2.1 CPU
-Là bộ não của vi xử lí, các bộ phận khác của vi xử lí đều là cơ quan chấp hànhdưới quyền của CPU Mỗi cơ quan này đều có một cơ chế hoạt động nhất định màCPU phải tuân theo để giao tiếp với chúng CPU dùng 3 loại tín hiệu để giao tiếp
và điều khiển các cơ quan ngoại vi là :
+ tín hiệu địa chỉ
+ tín hiệu dữ liệu
+ tín hiệu điều khiển
Về mặt vật lí thì các tín hiệu này là các đường điện nhỏ dẫn từ CPU đến cácngoai vi khác hoặc là từ các ngoại vi đến với nhau
Chức năng của CPU là tiến hành các thao tác tính toán, xử lí,đưa ra các tín hiệuđịa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lậptrình đưa ra thông qua các lệnh
1.2.2 B nh ROM ột hệ vi điều khiển ớ ROM
- Là loại bộ nhớ chứa chương trình hướng dẫn CPU thực hiện một nhiện vụnào đó, ROM là loại bộ nhớ không bị mất chương trình khi ngừng cung cấp nguồnnuôi
Trang 91.2.3 B nh RAM ột hệ vi điều khiển ớ ROM
- Là loại bộ nhớ dữ liệu dùng để chứa dữ liệu ( là các tham số, các biến tạmthời….)
- RAM là loại bộ nhớ sẽ mất dữ liệu khi cắt nguồn nuôi
1.2.4 C ng giao ti p (có th là c ng n i ti p ho c c ng song song) ổng thể của một hệ vi điều khiển ếp (có thể là cổng nối tiếp hoặc cổng song song) ể của một hệ vi điều khiển ổng thể của một hệ vi điều khiển ối tiếp hoặc cổng song song) ếp (có thể là cổng nối tiếp hoặc cổng song song) ặc cổng song song) ổng thể của một hệ vi điều khiển
Đây là các đường tín hiệu đươc nối với một số chân của IC để giao tiếp với cácthiết bị bên ngoài Giao tiếp ở đây là đưa điên áp ra hoặc đọc vào giá trị điện áp tạichân cổng Các giá trị điện áp đưa ra hoặc đọc vào chỉ có thể được biểu diễn bởimọt trong hai giá trị logic 0 hoặc 1 Trong kĩ thuật vi xử lí, người ta thường dùngquy ước logic dương: giá trị 0 ứng với mức điện áp 0VDC, giá trị 1 ứng với mứcđiện áp +5VDC Tùy từng loại vi xử lí mà khoảng xấp xỉ đó là khác nhau nhưngnhìn chung là tương thích với mức logic TTL
+ Cổng giao tiếp song song thường gồm 8 đường khác nhau gọi là cáccổng 8bit Các đường tín hiệu này độc lập với nhau, điều này cho phép ta đưa rahay đọc vào các giá trị logic khác nhau đối với từng chân Ngoài ra cần chú ý cáccổng giao tiếp này có thể kiêm thêm các chức năng đặc biệt lien quan đến các ngoại
vi khác
+ Cổng giao tiếp nối tiếp khác với cổng song song các bit dữ liệu đượctruyền lần lượt trên cùng một đường tín hiệu thay vì cùng môt lúc như trên cổngsong song Tuy nhiên việc truyền dữ liệu trên cổng nối tiếp phải tuân theo một cơchế, một giao thức hay một nguyên tắc nhất định Có thể kể một số giao thức nhưSPI,I2C,SCI
Cổng nối tiếp có 2 kiểu truyền dữ liệu chính:
Trang 10Truyền đồng bộ: thiết bị truyền và thiết bị nhận đều dùng chung mộtxung nhịp.
Truyền dị bộ: thiết bị truyền và thiết bị nhận sử dụng hai nguồn xungnhịp riêng Tuy nhiên hai nguồn xung nhịp này không được khác nhau quá nhiều.Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp và nó có vai tròxác định giá tri của bit dữ liệu
Cổng nối tiếp có thể có một trong các tính năng sau:
Đơn công: thiết bị chỉ có thể truyền hoặc nhận dữ liệu
Bán song công: thiết bị có thể truyền và nhận dữ liệu nhưng tại mộtthời điểm chỉ có thể nhận hoặc truyền đi
Song công: thiết bị có thể truyền và nhận dữ liệu đồng thời
1.2.5.B đ m/B đ nh th i ột hệ vi điều khiển ếp (có thể là cổng nối tiếp hoặc cổng song song) ột hệ vi điều khiển ịnh thời ời.
Đây là các ngoại vi được thiết kế để thực hiện môt nhiệm vụ đơn giản là đếm cácxung nhịp Mỗi khi có thêm một xung nhip tại đầu vào đếm thì giá trị bộ đếm tănglên 1 đơn vị ( trong bộ đếm tiến) hay giảm đi 1 đơn vị (trong bộ đếm lùi) Xungnhịp đưa vào đếm đưa vào đếm có thể là một trong hai loại:
+ Xung nhịp bên trong IC: Đó là xung nhịp được tạo ra nhờ kết hợp mạchdao động bên trong IC và các linh kiện phụ bên ngoài nối với IC Ta có thể coi đó
là “nhịp tim” để toàn bộ các phần cứng bên trong vi xử lí( kể cả CPU và các ngoạivi) có thể hoạt động được Trường hợp này người ta gọi là các bộ định thời(Timer) Do xung nhịp của loại này thường đều đặn nên ta có thể dùng để đếm thờigian một cách chính xác
Trang 11+ Xung nhịp bên ngoài IC: đó là tín hiệu logic thay đổi liên tục giữa haimức 0-1 và không nhất thiết phải đều đặn Trong trường hợp này, người ta gọi làcác bô đếm (Counter) Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bênngoài như các sản phẩm chạy trên băng truyền, đếm số lượng xe tham gia giaothông trên đường…
- Một khái niệm cần lưu ý đó là “tràn”, nó được hiểu là sự kiện bộ đếm vượtqua giá trị tối đa mà nó có thể biểu diễn và quay trở về 0 Với bộ đếm 8bit giá trị tối
đa của nó là 255 (28=256) và bộ đếm 16bit là 65535 (216=65536)
1.2.6.Kh i giao ti p bus ối tiếp hoặc cổng song song) ếp (có thể là cổng nối tiếp hoặc cổng song song)
Khối này có chức năng ghép nối giữa các bus bên trong chip và các chân đưa rangoài chip Mục đích của việc đưa các tín hiệu địa chỉ, dữ liệu và điều khiển rangoài là mở rộng khả năng phối ghép thêm của vi xử lí với các ngoại vi khác ( chủyếu là các bộ nhớ ngoài) ngoài các ngoại vi được tích hợp trên IC Thông thườngthì số lượng các đường tín hiệu là giữ nguyên khi đưa ra ngoài chip, tuy nhiên trongmột số trường hợp số lượng các đường tín hiệu có thể nhỏ hơn số lượng thực hiệnbên trong
- Khi đưa ra ngoài , các tín hiệu địa chỉ và dữ liệu có thể được ghép vớinhau( cùng sử dụng chung một số chân nào đó) hoặc được tách riêng( tín hiệu địachỉ dùng một số chân, tín hiệu dữ liệu dùng một số chân khác) Người ta thườngdùng “dồn kênh”, tức là ghép chức năng để giảm thiểu số chân cần thiết Khi đó tínhiệu địa chỉ sẽ xuất hiện trước, sau đó là tín hiệu dữ liệu Để tách được hai loại tínhiệu này thì nhà sản xuất cung cấp cho người sử dụng một đường tín hiệu điềukhiển có tên là tín hiệu chốt địa chỉ (thường kí hiệu là ALE) Tín hiệu này sẽ “tíchcực” khi tín hiệu địa chỉ xuất hiện và “không tích cực” khi tín hiệu dữ liệu xuất
Trang 12hiện trên các bus Các IC thích hợp với việc tách tín hiệu địa chỉ và dữ liệu là các
IC thuộc họ 74xx373/374 hoặc 74xx573/574
1.2.7.Ngăn x p(stack) ếp (có thể là cổng nối tiếp hoặc cổng song song)
- Là một đoạn bộ nhớ (thường đặt trong RAM) dùng để chứa địa chỉ trở vềtrong các trường hợp chương trình con hoặc chương trình phục vụ ngắt được gọi.Ngoài ra ngăn xếp còn dùng để lưu các dữ liệu tạm thời Ngăn xếp hoạt động theo
cơ chế “vào sau ra trước”(LIFO-Last in First out)
Ngăn xếp là phần cứng vô cùng quan trọng trong vi xử lí, nó tham gia vào cácthao tác rẽ nhánh( trừ thao tác nhảy) của chương trình Người lập trình phải hết sứccẩn thận khi gán giá trị khởi tạo cho SP(thanh ghi con trỏ ngăn xếp) để tránh sự cốtràn ngăn xếp hoặc ngăn xếp trùng với các vùng nhớ lưu dữ liệu khác Khi xảy ramột trong các sự cố trên sẽ không có cách nào kiểm soát được hoạt động của vi xử
lí và có thể gây thiệt hại lớn đối với hệ thống
1.3.Nguyên lí ho t đ ng c a m t vi x lí ạt động của một vi xử lí ột hệ vi điều khiển ủa một hệ vi điều khiển ột hệ vi điều khiển ử lí.
-Các thao tác tính toán xử lí được CPU thực hiện theo chuỗi các lệnh đặttrong bộ nhớ chương trình
-Việc thực hiện các lệnh sẽ diễn ra tuần tự từ thấp đến cao bắt đầu từ thấpđến cao bắt đầu từ địa chỉ reset Địa chỉ reset là địa chỉ mà tại đó sau khi cấp nguồnnuôi CPU sẽ bắt đầu đọc và thực hiện theo các chỉ dẫn được mã hóa tại đó Mỗiloại vi xử lí sẽ có một địa chỉ reset riêng do nhà sản xuất quy định
-Các lệnh được thực hiện tuần tự là nhờ có thanh ghi “bộ đếm chương trình”.Thanh ghi này chứa địa chỉ của ô nhớ chứa mã của lệnh tiếp theo sẽ được thựchiện Khi CPU tìm nạp được mã của lệnh n, thanh ghi sẽ tự động tăng lên 1 đơn vị
để chỉ vào ô nhớ chứa mã của lệnh (n=1)
Trang 13-CPU sẽ thực hiện các lệnh theo các bước nhỏ Thường thì nó bao gồm:
+Tìm mã lệnh: tức là truy cập chương trình đọc lấy giá trị tại ô nhớ đượcchỉ bởi thanh ghi và lưu vào một thanh ghi chuyên dùng chứa mã lệnh trên CPU +Giải mã lệnh: giải mã giá trị đã lấy được và đang đặt trong thanh ghichứa mã lệnh trong CPU
+Thực hiện lệnh:thực hiện chỉ dẫn được giải mã từ lệnh đọc đươc
1.4.Các dòng vi đi u khi n th ều khiển ể của một hệ vi điều khiển ười ng g p ặc cổng song song)
• Họ vi điều khiển Atmel: AT89, 8051,8052,8951
• Họ vi điều khiển Intel: 8XC42, MCS96, 386ex
• Họ vi điều khiển Fujitsu: F²MC Family (8/16 bit), FR Family (32 bit), FR-VFamily (32 bit RISC)…
• Họ vi diều khiển AMCC: 403 PowerPC CPU, PPC 403GCX,405 PowerPCCPU, PPC 405EP, PPC 405GP/CR, PPC 405GPr, PPC NPe405H/L
• Họ vi điều khiển Microchip: PIC16Fxxx, dsPIC30F
• Và còn nhiều dòng vi điều khiển khác nữa
-Sau khi tham khảo nhiều tài liệu về các loại vi điều khiển và nhận được sự góp
ý, chỉ dẫn của thầy giáo em chọn Pic 16F887 làm vi điều khiển cho mạch điềukhiển của mình Lý do:
+ Pic16F887 là vi điều khiển phổ biến dễ dàng tìm mua được
+ Giá thành không quá đắt với sinh viên
+ Nó đáp ứng được yêu cầu của mạch điều khiển mà em dự định thiết kế
+Tài liệu về ứng dụng khá phổ biến
Trang 14+ Lý do quan trọng nhất là em đã từng sử dụng Pic16F887 để thi công 1 mạchthực tế và nhận được kết quả khả quan.
1.5.Gi i thi u v Pic16F887 ớ ROM ệ vi điều khiển ều khiển
1.5.1 PIC nói chung.
1.5.1.1.Khái ni m PIC ệ vi điều khiển
-PIC là chữ viết tắt của “Programmable Intelligent Computer”(máy tính thôngminh khả trình) là một họ vi điều khiển RISC được sản xuất bởi công ty MicrochipTechnology
- Qua thời gian phát triển lâu dài( từ năm 1975), ngày nay, rất nhiều dòng đượcsản xuất hàng loạt với các module ngoại vi tích hợp sẵn với bộ nhớ chương trình từ512Word đến 32K Word
- Ưu thế của PIC là phổ biến rộng rãi, giá thành không quá đắt, có đầy đủ tínhnăng của vi điều khiền khi hoạt động độc lập, có nhiều tính năng đa dạng và cáctính năng này không ngừng được phát triển
1.5.1.2.C u trúc c a PIC ấu trúc tổng thể của một hệ vi điều khiển ủa một hệ vi điều khiển
- Cấu trúc phần cứng của PIC được thiết kế theo 2 dạng:
+Cấu trúc Von-Neumann, 2 bộ nhớ được bố trí nằm chung nên rất gọn,tuy nhiên điều này chỉ có ý nghĩa khi tốc độ xử lí của CPU là rất cao
+ Đối với cấu trúc Havard bộ nhớ dữ liệu và bộ nhớ chương trình tách rathành các thành phần riêng biệt Như vậy, trong cùng một thời điểm CPU có thểtruy xuất đến cả hai bộ nhớ Điều này giúp cho tốc độ xử lý của vi xử lý tăng lên.Ngoài ra, tập lệnh trong cấu trúc Havard có thể được tối ưu tùy theo yêu cầu cấu
Trang 15trúc của vi điều khiển mà không phụ thuộc cấu trúc dữ liệu Ví dụ, đối với vi điềukhiển PIC dòng 16Fxxx thì độ dài lệnh luôn là 14-bit.
+ ROM (Program)
Hình 1.2: Hai kiểu tổ chức phần cứng trong PIC
Tổ chức phần cứng của các dòng vi điều khiển PIC được thiết kế theo cấu trúcHavard Việc được thiết kế theo cấu trúc Havard giúp cho tập lệnh của vi điềukhiển PIC được tối ưu, cấu trúc lệnh không phụ thuộc cấu trúc dữ liệu và có thểlinh động tùy chỉnh theo khả năng và tốc độ của từng vi điều khiển
1.5.1.3.Ngôn ng l p trình ữ lập trình ận.
- Ngôn ngữ lập trình cho PIC rất đa dạng từ cấp thấp đến cấp cao
- Ngôn ngữ cấp thấp có MPLAB,các ngôn ngữ lập trình cao hơn có C,Baisic , Pascal…
Trang 16- Ngoài ra còn có một số ngôn ngữ lâp trình được phát triển giành riêng choPIC như PICBasic, MikroBasic,…
1.5.1.4.M ch n p PIC ạt động của một vi xử lí ạt động của một vi xử lí.
Ta có thể sử dụng các mạch nạp được cung cấp bởi các nhà sản xuất như:PICkit 2, PICSTART plus, MPLAB ICD 2, PROMATE II tuy nhiên giá thành của
nó khá cao và lại khó tìm gặp
Ngoài ra người dùng có thể tự chế tạo các mạch nạp cho PIC
1.5.2 Gi i thi u v PIC16F887 ớ ROM ệ vi điều khiển ều khiển
-Đặc điểm nổi bật của vi điều khiển PIC là khả năng tính toán tốc độ cao vàcác ứng dụng trong điều khiển công suất và điều khiển động cơ
Trang 17Hình 1.3.Sơ đồ các chân của PIC16F887
-Chức năng các chân:
1.Là chân Reset hoặc chân đặt điện áp Vpp.
2 Các chân 2-10 được sử dụng làm chân IN/OUT tín hiệu số hoặc INPUT tín hiệu tương tự(trừ chân số 6) Ngoài ra các chân 4,5 có thể làm chân chuyển đổi A/ D.
3.Chân 11 và chân 32 dùng để cấp điện áp Vdd=5V cho PIC.
4.Chân 12 và chân 31 để cấp điện áp Vss=0V cho PIC.
Trang 185 Chân 13 và 14 dùng để mắc thạch anh cho mạch tạo xung nhịp cho vi điều khiển.
6.Chân 15 có thể làm chân I/O tín hiệu số hoặc chân T1OSO/T1CK1.
7 Chân 16 có thể làm chân I/O tín hiệu số hoặc chân T1OS1 hoặc chân CCP2.
8 Chân 17 dùng làm chân I/O tín hiệu số hoặc làm chân CCP1/P1A.
9 Chân 18,19,20,21,22,23,27 làm chân I/O tín hiệu số, các chân 18,23 còn có thể dùng làm chân giao tiếp I2C.
10.Các chân 24,25,26 đều có thể dùng làm chân I/O tín hiệu số; chân 25,26 có thể dùng làm chân ghép nối máy tính.
11 Chân 28 làm chân I/O tín hiệu số hoặc chân P1B.
12 Chân 29 làm chân I/O tín hiệu số hoặc chân P1C.
13 Chân 30 làm chân I/O tín hiệu số hoặc chân P1D.
14.Chân 33 đến 38 làm chân I/O tín hiệu số hoặc chân Input tín hiệu tương tự.
20 Chân 39 làm chân I/O hoặc ICSPCLK.
21.Chân 40 làm chân I/O hoặc ICSPDAT.
Trang 19Hình 1.4.Chức năng các chân (ảnh chụp từ Data Sheet)
Trang 20Hình 1.5.Một vi điều khiển PIC16F887.
1.5.3.T ch c b nh ổng thể của một hệ vi điều khiển ức năng của từng bộ phận ột hệ vi điều khiển ớ ROM
- Đâ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 độngtối đa cho phép là 20 MHz với một chu kì lệnh là 200ns Bộ nhớ chương trình8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với dunglượng 256x8 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 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 đếmdự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, CS ở bên ngoài
Trang 21Các đặc tính Analog:
+ 8 kênh chuyển đổi ADC 10 bit
+Hai bộ so sánh
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
+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 SerialProgramming) 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 thạch anh khác nhau
Bộ nhớ chương trình của vi điều khiển PIC16F877 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 đếnpage 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ươngtrình có dung lượng 13 bit (PC<12:0>) Khi vi điều khiển được reset, bộ đếmchương trình sẽ chỉ đến địa chỉ 0000h (Reset vector) Khi có ngắt xảy ra, bộ đếmchương trình sẽ chỉ đến địa chỉ 0004h (Interrupt vector)
Trang 22Bộ nhớ chương trình không bao gồm bộ nhớ Stack và không được địa chỉ hóabởi bộ đếm chương trình
Trang 23ghi 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àmgiảm bớt lệnh của chương trình Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877 nhưsau:
Trang 251.5.4.B t o dao đ ng ột hệ vi điều khiển ạt động của một vi xử lí ột hệ vi điều khiển
- Vi điều khiển PIC16F887 có thể thực hiện với nhiều kiểu bộ tạo dao độngkhác nhau Ta lấy 1 ví dụ đơn giản là dao động thạch anh
Hình 1.7.Sơ đồ bộ tạo dao động.
-Thông số của 2 tụ gốm phụ thuộc vào tần số của bộ dao động thạch anh
Bảng 2.1: Thông số của 2 tụ gốm theo từng loại của bộ dao động thạch anh
Trang 27Hình 1.10.Một con IC 7805
.
+Cấp nguồn cho tất cả các chấn Vss/Vdd của PIC Mỗi cặp chân Vss/Vdd gắnthêm 1 tụ 104pF sát chân đó để chống nhiễu
Trang 28Nguyên tắc là dùng trở kháng 10k – 33k và 4k7 cho mạch reset
Hình 1.11.Sơ đồ của 1 mạch reset 1.5.7 Các b đ nh th i ột hệ vi điều khiển ịnh thời ời.
1.5.7.1 TIMER 0
Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A.Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit Cấu trúccủa Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xungclock Ngắt Timer0 sẽ xuất hiện khi Timer0 bị tràn Bit TMR0IE (INTCON<5>) làbit điều khiển của Timer0
TMR0IE=1 cho phép ngắt Timer0 tác động, TMR0IF= 0 không cho phép ngắtTimer0 tác động
-Sơ đồ khối của Timer0 như sau:
Trang 29Hình 1.12 Sơ đồ khối của Timer 0
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>),khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vàoTimer0 bằng ¼ tần số oscillator) Khi giá trị thanh ghi TMR0 từ FFh trở về 00h,ngắt Timer0 sẽ xuất hiện Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấnđịnh thời điểm ngắt Timer0 xuất hiện một cách linh động
Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>).Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1 Bit TOSE(OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bộ đếm Cạnh tác động
sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1
Trang 30Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set Đây chính
là cờ ngắt của Timer0 Cờ ngắt này phải được xóa bằng chương trình trước khi bộđếm bắt đầu thực hiện lại quá trình đếm Ngắt Timer0 không thể “đánh thức” viđiều khiển từ chế độ sleep
Bộ chia tần số (prescaler) được chia sẻ giữa Timer0 và WDT (Watchdog Timer).Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer0 thì WDT sẽ không cóđược hỗ trợ của prescaler và ngược lại Prescaler được điều khiển bởi thanh ghiOPTION_REG Bit PSA (OPTION_REG<3>) xác định đối tượng tác động củaprescaler Các bit PS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần số củaprescaler Xem lại thanh ghi OPTION_REG để xác định lại một cách chi tiết về cácbit điều khiển trên
Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động củaprescaler Khi đối tượng tác động là Timer0, tác động lên giá trị thanh ghi TMR0 sẽxóa prescaler nhưng không làm thay đổi đối tượng tác động của prescaler Khi đốitượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽngưng tác vụ hỗ trợ cho WDT
Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:
TMR0 (địa chỉ 01h, 101h): chứa giá trị đếm của Timer0
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE
và PEIE)
OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler
Trang 311.5.7.2 TIMER 1
Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanhghi (TMR1H:TMR1L) Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>) Bit điềukhiển của Timer1 sẽ là TMR1IE (PIE<0>)
Tương tự như Timer0, Timer1 cũng có hai chế độ hoạt động: chế độ định thời(timer) với xung kích là xung clock của oscillator (tần số của timer bằng ¼ tần sốcủa oscillator) và chế độ đếm (counter) với xung kích là xung phản ánh các sự kiệncần đếm lấy từ bên ngoài thông qua chân RC0/T1OSO/T1CKI (cạnh tác động làcạnh lên)
Việc lựa chọn xung tác động (tương ứng với việc lựa chọn chế độ hoạt động làtimer hay counter) được điều khiển bởi bit TMR1CS (T1CON<1>)
Ngoài ra, Timer1 còn có chức năng reset input bên trong được điều khiển bởimột trong hai khối CCP (Capture/Compare/PWM)
Khi bit T1OSCEN (T1CON<3>) được set, Timer1 sẽ lấy xung clock từ hai chân:RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm Timer1 sẽ bắt đầuđếm sau cạnh xuống đầu tiên của xung ngõ vào Khi đó PORTC sẽ bỏ qua sự tácđộng của hai bit TRISC<1:0> và PORTC<2:1> được gán giá trị 0 Khi clear bitT1OSCEN Timer1 sẽ lấy xung đếm từ oscillator hoặc từ chân RC0/T1OSO/T1CKI.Timer1 có hai chế độ đếm là đồng bộ (Synchronous) và bất đồng bộ(Asynchronous)
Chế độ đếm được quyết định bởi bit điều khiển T1SYNC (T1CON<2>)
Khi T1SYNC = 1 xung đếm lấy từ bên ngoài sẽ không được đồng bộ hóa vớixung clock bên trong, Timer1 sẽ tiếp tục quá trình đếm khi vi điều khiển đang ở
Trang 32chế độ sleep và ngắt do Timer1 tạo ra khi bị tràn có khả năng “đánh thức” vi điềukhiển Ở chế độ đếm bất đồng bộ, Timer1 không thể được sử dụng để làm nguồnxung clock cho khối CCP (Capture/Compare/Pulse width modulation)
Khi T1SYNC = 0 xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clockbên trong Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế
độ sleep
Các thanh ghi liên quan đến Timer1 bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE vàPEIE)
PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF)
PIE1( địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE)
TMR1L (địa chỉ 0Eh): chứa giá trị 8 bit thấp của bộ đếm Timer1
TMR1H (địa chỉ 0Eh): chứa giá trị 8 bit cao của bộ đếm Timer1
T1CON (địa chỉ 10h): xác lập các thông số cho Timer1
1.5.7.3 TIMER2
Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần số prescaler vàpostscaler Thanh ghi chứa giá trị đếm của Timer2 là TMR2 Bit cho phép ngắtTimer2 tác động là TMR2ON (T2CON<2>) Cờ ngắt của Timer2 là bit TMR2IF(PIR1<1>) Xung ngõ vào (tần số bằng ¼ tần số oscillator) được đưa qua bộ chiatần số prescaler 4 bit (với các tỉ số chia tần số là 1:1, 1:4 hoặc 1:16 và được điềukhiển bởi các bit T2CKPS1:T2CKPS0 (T2CON<1:0>)
Trang 33Timer2 còn được hỗ trợ bởi thanh ghi PR2 Giá trị đếm trong thanh ghi TMR2 sẽtăng từ 00h đến giá trị chứa trong thanh ghi PR2, sau đó được reset về 00h Khireset thanh ghi PR2 được nhận giá trị mặc định FFh
Ngõ ra của Timer2 được đưa qua bộ chia tần số postscaler với các mức chia từ1:1 đến 1:16 Postscaler được điều khiển bởi 4 bit T2OUTPS3:T2OUTPS0 Ngõ racủa postscaler đóng vai trò quyết định trong việc điều khiển cờ ngắt
Ngoài ra ngõ ra của Timer2 còn được kết nối với khối SSP, do đó Timer2 cònđóng vai trò tạo ra xung clock đồng bộ cho khối giao tiếp SSP
Các thanh ghi liên quan đến Timer2 bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép toàn bộ các ngắt (GIE vàPEIE)
PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer2 (TMR2IF)
PIE1 (địa chị 8Ch): chứa bit điều khiển Timer2 (TMR2IE)
TMR2 (địa chỉ 11h): chứa giá trị đếm của Timer2
T2CON (địa chỉ 12h): xác lập các thông số cho Timer2
PR2 (địa chỉ 92h): thanh ghi hỗ trợ cho Timer2
Ta có một vài nhận xét về Timer0, Timer1 và Timer2 như sau:
Timer0 và Timer2 là bộ đếm 8 bit (giá trị đếm tối đa là FFh), trong khi Timer1 là
bộ đếm 16 bit (giá trị đếm tối đa là FFFFh)
Timer0, Timer1 và Timer2 đều có hai chế độ hoạt động là timer và counter.Xung clock có tần số bằng ¼ tần số của oscillator
Trang 34Xung tác động lên Timer0 được hỗ trợ bởi prescaler và có thể được thiết lập ởnhiều chế độ khác nhau (tần số tác động, cạnh tác động) trong khi các thông số củaxung tác động lên Timer1 là cố định Timer2 được hỗ trợ bởi hai bộ chia tần sốprescaler và postcaler độc lập, tuy nhiên cạnh tác động vẫn được cố định là cạnhlên
Timer1 có quan hệ với khối CCP, trong khi Timer2 được kết nối với khối SSP.Một vài so sánh sẽ giúp ta dễ dàng lựa chọn được Timer thích hợp cho ứng dụng
2.8 ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạngtương tự và số PIC16F877 có 14 ngõ vào analog (AN0 : AN13) Hiệu điện thếchuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thế chuẩn được xáclập trên hai chân RA2 và RA3
Kết quả chuyển đổi từ tín tiệu tương tự sang tín hiệu số là 10 bit số tương ứng vàđược lưu trong hai thanh ghi ADRESH:ADRESL Khi không sử dụng bộ chuyểnđổi ADC, các thanh ghi này có thể được sử dụng như các thanh ghi thông thườngkhác Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghiADRESH:ADRESL, bit (ADCON0<2>) được xóa về 0 và cờ ngắt ADIF được set Qui trình chuyển đổi từ tương tự sang số bao gồm các bước sau:
Thiết lập các thông số cho bộ chuyển đổi ADC
Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số của thanh ghi ADCON1)
Chọn kênh chuyển đổi AD (thanh ghi ADCON0)
Chọn xung clock cho kênh chuyển đổi AD (thanh ghi ADCON0)
Cho phép bộ chuyển đổi AD hoạt động (thanh ghi ADCON0)
Trang 35 Thiết lập các cờ ngắt cho bộ AD
Clear bit ADIF
Set bit ADIE
Set bit PEIE
Set bit GIE
Đợi cho tới khi quá trình lấy mẫu hoàn tất
Bắt đầu quá trình chuyển đổi (set bit GO/DONE )
Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách:
Kiểm tra bit GO/DONE Nếu GO/DONE =0, quá trình chuyển đổi đã hoàn tất