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

đồ án tốt nghiệp ứng dụng vi điều khiển pic trong đếm sản phẩm

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.09 MB, 94 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN
***
ĐỀ TÀI:
ỨNG DỤNG VI ĐIỀU KHIỂN PIC
TRONG ĐẾM SẢN PHẨM

Giáo viên hướng dẫn: TS. Trần Đình Khôi Quốc
Học viên : Nguyễn Hữu Tiến
Lớp : 01ĐTĐ
Đà Nẵng, 05/ 2006
ĐỒ ÁN TỐT NGHIỆP
Em xin bày tỏ lòng biết ơn chân thành đến thầy Trần Đình Khôi Quốc đã
tận tình hướng dẫn và tạo mọi điều kiện thuận lợi cho em trong thời gian thực
hiện luận văn tốt nghiệp này.
Em xin chân thành cảm ơn quý thầy cô ở bộ môn tự động hóa đã tạo điều
kiện và hổ trợ em trong suốt quá trình học tập
Em xin chân thành cảm ơn gia đình đã tạo những điều kiện thuận lợi nhất
để em học tập cũng như hoàn thành luận văn tốt nghiệp này.
Cuối cùng em xin chân thành cảm ơn sự giúp đỡ động viên của bạn bè đã
giúp em hoàn thành luận văn tốt nghiệp này.
Sinh viên thực hiện
NGUYỄN HỮU TIẾN
ĐỒ ÁN TỐT NGHIỆP

Trong những năm gần đây, khoa học kỹ thuật đã có những bước tiến rất
nhanh chóng ở các quốc gia trên toàn thế giới nói chung và Việt Nam nói riêng.
Ngành tự động hóa đã, đang và sẽ tiếp tục có những đóng góp to lớn cho tình
hình phát triển chung đó. Một trong những thành tựu của ngành tự động hóa là
việc cho ra đời các hệ thống sản xuất tự động thay thế con người. Điều này đã


giúp tăng hiệu suất lao động và tăng năng suất sản xuất cho các nhà máy, xí
nghiệp Các hệ thống tự động được xây dựng nhằm mục đích phục vụ cho lĩnh
vực sản xuất đặc biệt là sản xuất với số lượng lớn và ngay khi vừa mới đưa vào
thử nghiệm thì nó đã chứng tỏ được ưu thế của mình thông qua các con số thống
kê về số lượng thành phẩm mà dây chuyền tự động thực hiện được so với số
thành phẩm do nhân công tạo ra.
Trên cơ sở đó, nhằm để có thể phát huy những kiến thức đã học cũng như
tích luỹ thêm kinh nghiệm trong thiết kế mạch, đồng thời tìm hiểu một họ vi điều
khiển mới, em đã chọn đề tài “ỨNG DỤNG VI ĐIỀU KHIỂN PIC TRONG
ĐẾM SẢN PHẨM” . Mục đích chính của đồ án là thiết kế một hệ thống tự động
có thể cho biết năng suất của dây chuyền sản xuất trong một nhà máy. Đồ án
được thực hiện dựa trên 3 yêu cầu là mạch phải đơn giản, rẻ tiền và có tính khả
thi. Từng công đoạn thực hiện cũng như giới thiệu về cơ sở lý thuyết để thiết kế
nên hệ thống sẽ lần lượt được giới thiệu cụ thể trong những phần sau của đồ án.
Việc làm luận văn đã giúp cho em có thêm được nhiều kiến thức bổ ích về
thực tế, bổ sung những kiến thức đã được học ở nhà trường.
Tuy nhiên, do còn hạn chế về kinh nghiệm thực tế, tài liệu tham khảo, thời
gian thực hiện, nên tập luận văn không thể tránh khỏi những thiếu sót, kính mong
thầy hướng dẫn, cùng các thầy cô bộ môn góp ý xây dựng để luận văn được hoàn
thiện hơn.
ĐỒ ÁN TỐT NGHIỆP
Sinh viên thực hiện
ĐỒ ÁN TỐT NGHIỆP
MỤC LỤC
Chương 1:
GIỚI THIỆU VI ĐIỀU KHIỂN PIC 16F84A
1.1 Mở đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 PIC là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Tóm tắt phần cứng PIC16F84A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1Cấu trúc bên trong và các đặc trưng cơ bản . . . . . . . . . . . . . . . 2

1.4 Sơ đồ chân của PIC16F84A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Tổ chức bộ nhớ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Các thanh ghi chức năng đặc biệt (SFR) quan trọng và hoạt động của
chúng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 PORT I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.1 Port A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.2 Port B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Hoạt động định thời . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.9 Hoạt động ngắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.10 Tập lệnh của họ PIC16FXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.11 SƠ ĐỒ CHÂN PIC 16F877A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.12 SƠ ĐỒ KHỐI PIC 16F877A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.13 TỔ CHỨC BỘ NHỚ CỦA PIC 16F877A . . . . . . . . . . . . . . . . . . . 26
1.14 Kết luận chương . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Chương 2:
TỔNG QUAN VỀ HỆ THỐNG BĂNG CHUYỀN ĐẾM SẢN PHẨM
2.1. Đặt vấn đề . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2. Chọn phương án thiết kế: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.1. Với mạch đếm sản phẩm dùng IC rời có: . . . . . . . . . . . . . . . . 33
2.2.2. Với mạch đếm sản phẩm dùng kỹ thuật vi xử lí: . . . . . . . . . . 33
2.2.3. Phương pháp đếm sản phẩm dùng vi điều khiển: . . . . . . . . . . 34
2.3. Mô tả: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3.1. Yêu cầu: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3.2 Các bộ phận chính của hệ thống băng chuyền. . . . . . . . . . . . . . 35
ĐỒ ÁN TỐT NGHIỆP
2.4. Mục đích yêu cầu của đề tài: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5. Giới gạn của đề tài: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6. Các khối trong sơ đồ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6.1.Vi điều khiển: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6.2. MAX 232:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.6.3. Máy tính: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.6.4. Led hiển thị:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.6.5. Cảm biến: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.6.6. Bàn phím:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.7. Nguyên tắc điều khiển:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7.1. Các port vào ra: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.7.2. Nguyên lý hoạt động: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Chương 3:
TRUYỀN SỐ LIỆU, GIAO TIẾP MÁY TÍNH QUA CỔNG COM VÀ
DÙNG REMOTE ĐỂ ĐIỀU KHIỂN TỪ XA . . . . . . . . . . . . . . . . . . . . . 42
A.TRUYỀN SỐ LIỆU VÀ GIAO TIẾP MÁY TÍNH QUA CỔNG COM
3.1 Mở đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2 Chuẩn giao tiếp RS232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3 Truyền dữ liệu qua chuẩn RS232 . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4 Các chuẩn giao tiếp khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.1 Chuẩn giao tiếp RS-422 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.2 Chuẩn giao tiếp RS-485 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
B. ỨNG DỤNG REMOTE ĐỂ ĐIỀU KHIỂN TỪ XA . . . . . . . . . . . . . . 52
3.5 Giới thiệu về Remote(điều khiển từ xa) . . . . . . . . . . . . . . . . . . . . . 52
3.6 Sơ lược về các linh kiện thu phát hồng ngoại . . . . . . . . . . . . . . . . . 52
3.6.1 Ánh sáng hồng ngoại . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.6.2 LED hồng ngoại: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.6.3 Đầu thu hồng ngoại : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.7 Các cách mã hóa tín hiệu hồng ngoại thường được sử dụng : . . . 55
3.7.1 Tín hiệu được mã hóa bằng độ rộng xung(Pulse-Width-Coded
Signal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
ĐỒ ÁN TỐT NGHIỆP
3.7.2 Tín hiệu được mã hóa bằng độ rộng khoảng không ( Space-Coded
Signal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.7.3 Tín hiệu được mã hóa bằng phép dịch ( Shift-Coded Signal) . 56

3.8 Cách mã hóa của các loại REMOTE thông dụng . . . . . . . . . . . . . . 57
3.8.1. Mã RC5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.8.2. Mã Sony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.8.3. Mã Daewoo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.8.4. Mã của JVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.8.5. Mã Panasonic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.9. Kết luận chương: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Chương 4:
THIẾT KẾ VÀ THI CÔNG PHẦN CỨNG . . . . . . . . . . . . . . . . . . . . . . 64
4.1 Giới thiệu chương . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2 Sơ đồ khối chức năng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3 Sơ đồ mạch nguồn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.4 Thiết kế Kit vi điều khiển . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.5 Thiết kế mạch hiển thị . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.6 Thiết kế mạch đóng cắt động cơ . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.7 Thiết kế mạch thu phát hồng ngoại . . . . . . . . . . . . . . . . . . . . . . . 72
4.8 Kết luận chương . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Chương 5:
THIẾT KẾ VÀ THI CÔNG PHẦN MỀM . . . . . . . . . . . . . . . . . . . . . . . 75
5.1.Thuật toán chương trình chính: . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2. Thuật toán chương trình EnterProduct:. . . . . . . . . . . . . . . . . . . . 76
5.3. Thuật toán chương trình EnterNumber: . . . . . . . . . . . . . . . . . . . 77
5.4.Thuật toán chương trình task: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.5. Thuật toán chương trình remote: . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.6.Thuật toán chương trình keyboard:. . . . . . . . . . . . . . . . . . . . . . . . 80
5.7.Thuật toán chương trình CountProduct: . . . . . . . . . . . . . . . . . . . . 82
5.8. Thuật toán chương trình Interrupt: . . . . . . . . . . . . . . . . . . . . . . . 84
5.9 Thuật toán chương trình Rs232:. . . . . . . . . . . . . . . . . . . . . . . . . . . 85
ĐỒ ÁN TỐT NGHIỆP
Chương 1:

GIỚI THIỆU VI ĐIỀU KHIỂN
PIC16F84A
1.1 Mở đầu
- Cùng với sự phát triển của khoa học và công nghệ, các họ vi điều khiển ngày
càng phát triển với các tính năng mới .Nhằm đáp ứng các yêu cầu ngày càng cao
trong các ứng dụng, đặc biệt là trong các hệ thống điều khiển tự động. Hiện nay
trên thị trường có rất nhiều các loại vi điều khiển mạnh để bạn lựa chọn như
Motorola 68HC , PIC, Atmel AVR, ARM, , SHARC. Tuy vậy em nêu ra đây
những tiêu chí mà dựa vào đó em chọn họ vi điều khiển PIC :
♦ Có bán trên thị trường
♦ Giá thành
♦ Dễ sử dụng (bao gồm thiết kế mạch nạp, mạch chạy, bộ nhớ flash, tập
lệnh, các chương trình hỗ trợ của nhà sản xuất)
♦ Số lượng và giá cả của các công cụ lập trình, các mạch thiết kế mở, số
lượng nhà phân phối…
♦ Số lượng người dùng, mà từ đó có thể có các tài liệu chú dẫn, các ghi chú
bổ ích, có sự trao đổi dễ dàng
♦ Tính năng của một vi điều khiển riêng lẻ
- Quay trở lại vấn đề so sánh. Motorola thường được dùng cho những thiết kế
phức tạp nhưng lại rất khó mua và giá cao. AVR cũng giống như PIC, nhưng nó
còn mới và nhiều người cũng so sánh nó với PIC. Nhưng nếu xét về các ứng
ĐỒ ÁN TỐT NGHIỆP
dụng được thiết kế trên AVR còn rất hạn chế. Số lượng các dòng vi điều khiển
AVR cũng không nhiều, không có những vi điều khiển cho những ứng dụng cụ
thể. 8051 thì là sở trường của sinh viên, nhưng hạn chế về tính năng.
- Trong đồ án này em sẽ trình bày về PIC16F84A, đây là con vi điều khiển mà
những người mới học PIC thường lựa chọn.
1.2 PIC là gì?
- PIC là tên viết tắt của “bộ điều khiển thiết bị ngoại vi” (Peripheral Interface
Controller), do hãng General Instrument đặt tên con con vi điều khiển đầu tiên

của họ: PIC1650. Đây là con vi điều khiển đầu tiên, là mẹ đẻ của tất cả các vi
điều khiển họ PIC sau này. Đến ngày nay, PIC1650 được phát triển và được biết
dưới tên gọi PIC16C54. Nó được thiết kế để dùng cho các thiết bị ngoại vi của vi
xử lý CP1600
Tóm lược dòng PIC:
-Mã số bắt đầu là 12xxxx có nghĩa là opcode của nó 12 bit, bắt đầu với
16xxxx là các con PIC 14 bit và 18xxxx là PIC 16 bit
- Mã số C là các PIC có bộ nhớ EPROM, duy chỉ có con 16C84 là EEPROM,
F là Flash, LF là PIC Flash hoạt động ở điện áp thấp, con cũ là LV. Ngoài ra, một
số con xxFxxx là EEPROM, để phân biệt với con Flash thì các bạn sẽ thấy chữ A
ở tận cùng. Vd: 16F877 và 16F877A,16F84 và 16F84A,v.v.
- Các SX PIC được dùng nhiều hơn vì nó cung cấp nhiều công cụ tính toán
hơn Microchip PIC, tuy vậy, ở VN vẫn phổ biến với các con PIC của Microchip.
Ngôn ngữ lập trình:
-Ngôn ngữ lập trình rất đa dạng MPASM, C, Basic, Pascal…. Mọi người sẽ
thích dùng các ngôn ngữ cấp cao vì nó đơn giản hơn, ở đây em sử dụng trình
biên dịch mikropascal. Ngoài ra còn có các trình biên dịch khác như: MPLAB,
CCS C, BASCOM, C17, C18, C30… C18
1.3 Tóm tắt phần cứng PIC16F84A
1.3.1Cấu trúc bên trong và các đặc trưng cơ bản
♦Kiến trúc của PIC
ĐỒ ÁN TỐT NGHIỆP
-PIC được tổ chức phần cứng theo kiến trúc Harvard, và tập lệnh RISC. Sự
khác biệt giữa kiến trúc Harvard và kiến trúc Von Neumann ở chỗ bộ nhớ dữ liệu
và bộ nhớ chương trình nằm riêng biệt, hay nằm chung.
-Chúng ta sẽ thấy rằng, với kiến trúc von-Neumann, bộ nhớ dữ liệu và bộ nhớ
chương trình nằm chung, do vậy khi CPU tương tác với bộ nhớ, nó chỉ có thể
làm việc với hoặc bộ nhớ dữ liệu, hoặc bộ nhớ chương trình nên tốc độ xử lý
chậm đi. Trong khi đó, kiến trúc Harvard cho phép CPU tương tác với cả hai bộ
nhớ dữ liệu và bộ nhớ chương trình cùng một lúc, giúp tốc độ xử lý nhanh hơn.

Kiến trúc von-Neumann ngược lại, cho phép ta cân đối giữa bộ nhớ dữ liệu và bộ
nhớ chương trình một cách linh động. Tuy nhiên, điều này chỉ thực sự hữu ích
cho những CPU xử lý tốc độ cực cao, và dung lượng bộ nhớ cực lớn. Còn với các
CPU tốc độ chậm như vi điều khiển, và bộ nhớ hạn chế, kiến trúc von-Neumann
dường như không đem lại hiệu quả về tốc độ xử lý cũng như dung lượng quản lý
bộ nhớ như kiến trúc Harvard.

-Một điểm chú ý nữa, đó là với kiến trúc Harvard, bộ nhớ chương trình và bộ
nhớ dữ liệu được tách riêng, do đó, tập lệnh trong kiến trúc Harvard có thể được
tối ưu tùy theo yêu cầu kiến trúc của vi điều khiển. Bằng chứng, độ dài lệnh của
dòng PIC16 luôn luôn là 14 bit. Trong khi đó, độ dài lệnh của các vi điều khiển
kiến trúc von-Neumann là bội số của 1 byte (8 bit).
-Điều này dẫn đến hệ quả, nếu bộ nhớ chương trình của PIC là 4Kword, thì
mọi vị trí của bộ nhớ đều có thể sử dụng triệt để, và chúng ta viết được 4x1024
dòng lệnh trong chương trình. Trong khi đó, kiến trúc von-Neumann với bộ nhớ
Hình 1.1: Kiến trúc Harvard và kiến trúc Von-Neumann
ĐỒ ÁN TỐT NGHIỆP
4KB trung bình chỉ cho ta viết 2x1024 dòng lệnh, tức tương đương với 2K dòng
lệnh. Tỉ lệ này tùy thuộc vào mỗi ứng dụng, tuy nhiên, con số trung bình này
phản ánh rằng, kiến trúc Harvard phần nào thể hiện lợi điểm so với kiến trúc von-
Neumann trong các vi điều khiển.
♦Sơ đồ khối của PIC16F84A
Hình 1.2: Sơ đồ khối của PIC16F84A
ĐỒ ÁN TỐT NGHIỆP
1.4 Sơ đồ chân của PIC16F84A

OSC1/CLKIN : Chân nối với dao động thạch anh (Oscillator crystal input)
OSC2/CLKOUT :Chân nối với dao động thạch anh (Oscillator crystal input)
MCLR(inv) : Chân reset mức thấp (Master clear input)
Ngõ vào điện áp lập trình trong chế độ lập trình (Programming voltage input)

RA0 – RA3 : Cổng giao tiếp hai chiều (Bi-directional I/O port)
RA4/T0CKI : Cổng giao tiếp hai chiều (Bi-directional I/O port). Giữ vai trò như
một bộ định thời dựa vào xung ngoài ( Clock input to the TMR0 timer/counter)
RB0/INT : Cổng giao tiếp hai chiều (Bi-directional I/O port)
Chân ngắt ngoài (External interrupt pin)
RB1 – RB7 :Cổng giao tiếp hai chiều (Bi-directional I/O port)
VSS : Chân mass
VDD :Chân nguồn (+2.0V to +5.5V)
Hình 1.3: Sơ đồ chân của PIC16F84A
ĐỒ ÁN TỐT NGHIỆP
1.5 Tổ chức bộ nhớ
ĐỒ ÁN TỐT NGHIỆP
ĐỒ ÁN TỐT NGHIỆP
Hinh 1.4: Tổ chức bộ nhớ của PIC16F84A
♦ Bộ nhớ chương trình(Flash Program Memory)
Bộ nhớ chương trình là loại bộ nhớ kiểu FLASH dùng để chứa chương trình
.Kích thước bộ nhớ chương trình là 1024 vị trí nhớ, mỗi vị trí nhớ có độ lớn là 14
bit (word).Mỗi khi nguồn mất thì nội dung của bộ nhớ sẽ không bị mất. Có khả
năng lập trình được nhiều lần,số lần ghi được giới hạn là 1000 lần .Vị trí 0000h
và vị trí 0004h được dành cho reset và vector ngắt.
♦ Reset Vector ( 0000h )
Khi xảy ra reset, hoặc bằng cách bật nguồn hoặc do các nguyên nhân khác thì
chương trình sẽ bắt đầu ở vị trí này .PIC16F84A có các cách reset sau :
-Reset khi bật nguồn, POR (Power-On Reset)
-Reset khi có mức logic 0 trên chân MCRL
-Reset khi ở chế độ ngủ (Sleep)
-Reset khi bộ watchdog bị tràn (WDT)
Trong đó cách reset do bật nguồn (POR) và do có mức logic 0 trên chân MCRL
là thường được sử dụng nhất
♦ Peripheral Interrupt Vector ( 0004h )

Khi cho phép ngắt, chương trình ngắt sẽ bắt đầu ở vị trí này
♦ Bộ nhớ dữ liệu(Data memory)
Bộ nhớ dữ liệu bao gồm bộ nhớ EEPROM và RAM. Bộ nhớ EEPROM gồm 64
vị trí 8 bit và nội dung của chúng không bị mất đi khi mất nguồn. Bộ nhớ
EEPROM không thể truy cập trực tiếp, chỉ có thể truy cập gián tiếp thông qua 2
thanh ghi là EEADR và EEDATA
♦ RAM(Random Access Memory) File Registers
Bộ nhớ RAM của dòng PIC được chia làm nhiều bank,để truy cập đến vùng
nhớ này ta phải làm công việc chọn bank. PIC16F84A bộ nhớ RAM được chia
làm 2 bank, mỗi bank có độ lớn là 80 byte chiếm vị trí từ 0x00h tới 0x4Fh, 12 vị
trí đầu tiên của mỗi bank là các thanh ghi chức năng đặc biệt SFR (Special
Function Registers). Các vị trí từ 0x0Ch tới 0x4Fh là vùng RAM đa mục đích,
ĐỒ ÁN TỐT NGHIỆP
các vị trí trong vùng RAM đa mục đích có thể truy cập bất chấp bank nào được
chọn.
♦ Bộ đếm chương trình (Program Counter)
Bộ đếm chương trình (PC) là một thanh ghi có độ dài 13 bit chứa địa chỉ của
lệnh được kích hoạt tiếp theo. Về mặt vật lí, nó là sự kết hợp 5 bit của thanh ghi
PCLATH và 8 bit của thanh ghi PCL
♦ Stack
Stack chứa địa chỉ trở về khi một lệnh nhảy được kích hoạt
PIC16F84 có một ngăn chứa 13 bit với 8 mức, nói cách khác đó là một nhóm 8 vị
trí nhớ, có độ rộng 13 bít.Vai trò cơ bản của nó là lưu giữ giá trị của bộ đếm
chương trình sau khi thực hiện một lệnh nhảy từ chương trình chính tới địa chỉ
của chương trình con, nhằm mục đích để cho chương trình chính biết chính xác
điểm trở về sau khi thực hiên chương trình con
Lệnh RETURN đánh dấu điểm kết thúc của chương trình con .Lệnh CALL là
lệnh nhảy tới chương trình con. Khi gặp một lệnh CALL, thì địa chỉ trở về (địa
chỉ của câu lệnh theo sau lệnh con) sẽ được chứa vào đỉnh của stack, khi lệnh
RETURN được bắt gặp thì địa chỉ ở đỉnh stack sẽ được đặt vào PC và chương

trình tiếp tục bình thường. Do PIC16F84 có 8 thanh ghi stack nên các chương
trình con có thể gọi lồng nhau liên tiếp 8 lần ,vì sau lần gọi thứ 8 thì một lệnh gọi
sẽ làm mất nội dung của ngăn stack thứ tám .Do đó khi gặp lệnh return thì PC sẽ
gửi tới chương trình địa chỉ trở về sai, điều đó làm cho chương trình hoạt động
sai.
ĐỒ ÁN TỐT NGHIỆP
Hình 1.5: Hoạt động của stack
1.6 Các thanh ghi chức năng đặc biệt (SFR) và hoạt động của chúng
12 vị trí nhớ đầu tiên của mỗi bank được dành cho các thanh ghi chức năng đặc
biệt (FSR), các thanh ghi này rất quan trọng trong hoạt động của họ vi điều khiển
PIC.
♦ Thanh ghi STATUS (địa chỉ bộ nhớ 03h và 83h)

Hình 1.6: Thanh ghi STATUS
-Bit IRP, RP1, RP0: bit dung để chon bank ,ở PIC16F84A bit IRP không được sử
dụng,việc chọn bank phụ thuộc vào hai bit RP1 và RP0
00: chọn bank 0;
01: chọn bank1
-Bit
TO
( time out bit) :cờ báo tràn bộ WDT
1: không xảy ra tràn
0: tràn xảy ra
-Bit PD (Power-down)
1: sau khi bật nguồn
0: khi kích hoạt lệnh SLEEP
ĐỒ ÁN TỐT NGHIỆP
-Bit Z : cờ zero
1: kết quả bằng 0
0: kết quả bằng 1

-Bit DC (Digit Carry):
-Bit C(Carry)
♦ Thanh ghi OPTION_REG (địa chỉ bộ nhớ 81h)

Hình 1.7: Thanh ghi OPTION_REG
-Bit RBPU (Portb pull-up Enable bit)
1 : cho phép điện trở kéo lên ở portb;
0: không cho phép điện trở kéo lên
-Bit INTEDG (Interrupt Edge Select Bit): Nếu ngắt ngoài được cho phép, thì bit
này xác định ngắt sẽ xảy ra khi tín hiệu ở chân RB0/INT là ở sườn lên hay sườn
xuống
1 : sườn lên
0 : sườn xuống
-Bit TOCS (TMR0 Clock Source Select bit ) : bit này cho cho phép bộ định thời
tăng giá trị hoặc là từ dao động nội, hoặc là từ dao động ngoài trên chân
RA4/TOCKI
1: dao động ngoài
0: dao động nội
-Bit TOSE (TMR0 Source Edge Select bit) : bít này cho phép tín hiệu trên chân
RA4/TOCKI tác động vào bộ định thời ở sườn lên hay sườn xuống
1: sườn xuống
0: sườn lên
-Bit PSA (Prescaler Assigment bit): bit này qui định bộ chia tần được gán cho bộ
định thời(TMR0) hay bộ watch dog (WDT)
1: gán cho bộ WDT
0: gán cho bộ TMR0
ĐỒ ÁN TỐT NGHIỆP
-Bit PS0, PS1, PS2 (Prescaler Rate Select bit)
ba bit này xác định hệ số của bộ chia tần,các tỉ số này như sau:


Bảng 1.8: Tỉ lệ thời gian (µs) cho TMR0 và WDT
♦ Thanh ghi INDF(địa chỉ bộ nhớ 00h)
Thanh ghi này được sử dụng trong định địa chỉ gián tiếp
♦ Thanh ghi EECON1 (địa chỉ bộ nhớ 88h)

Hình 1.9: Thanh ghi EECON1

-Bit EEIF (EEPROM Write Operation Interrupt Flag bit) : Bit này được sử dụng
để báo việc ghi vào EEPROM đã kết thúc
1: quá trình ghi đã kết thúc
0: quá trình ghi chưa kết thúc, hoặc chưa được thực hiện
-Bit WRERR (Write EEPROM Error Flag bit) : cờ báo lỗi trong quá trình ghi
EEPROM
1: có lỗi xảy ra
0: không có lỗi xảy ra
-Bit WREN (EEPROM Write Enable bit): bit cho phép ghi vào EEPROM
1: cho phép ghi
0: không cho phép
-Bit WR (Write Control bit) : thiết lập bit này để bắt đầu ghi dữ liệu trong thanh
ghi EEDATA tới địa chỉ được chỉ định trong thanh ghi EEADR
-Bit RD (Read control bit) : thiết lập bít này để bắt đầu truyền dữ liệu ở địa chỉ
trong thanh ghi EEADR tới thanh ghi EEDATA
ĐỒ ÁN TỐT NGHIỆP
1.7 PORT I/O
-Port I/O được sử dụng để PIC giao tiếp với các thiết bị ngoài. PIC16F84A có 13
chân vào ra. Chúng được phân thành hai port, PORTA và PORTB. PORTA có 5
chân và PORTB có 8 chân, PORTA tương ứng với thanh ghi PORTA và PORTB
tương ứng với thanh ghi PORTB. Mỗi thanh ghi gồm 8 bit và mỗi chân của port
tương ứng với mỗi bit, mỗi chân có thể được quy định là ngõ vào hay ngõ ra.
Việc qui định chân là ngõ vào hay ngõ ra phụ thuộc vào việc thiết lập bit tương

ứng trong thanh ghi TRIS tương ứng là 0 hay 1. Nếu ghi vào thanh ghi TRIS
mức logic ”0” thì port tương ứng là ngõ ra, ngược lại là ngõ vào. Cấu trúc bên
trong của mỗi port.
1.7.1 PortA
Nó gồm có 5 chân :từ RA0 đến RA4
Hình 1.10: PortA
♦ Cấu trúc bên trong của portA (RA0-RA3):
Hình 1.11: Cấu trúc bên trong của PortA
Hình trên là sơ đồ mạch bên trong của porta từ RA0 tới RA3. Nó bao gồm bộ
chốt dữ liệu ngõ ra và mạch điều khiển CMOS. Mỗi chân xem như ngõ vào hay
ra phụ thuộc vào việc thiết lập thanh ghi TRISA. Giá trị thiết lập ở thanh ghi
TRISA được ghi vào bộ chốt TRIS Latch.
ĐỒ ÁN TỐT NGHIỆP
♦ Quá trình hoạt động của portA ở chế độ là ngõ ra
Hình 1.12: Hoạt động của portA ở chế độ là ngõ ra

Để thiết lập chân của portA là ngõ ra thì ta ghi vào thanh ghi TRISA ở bit
tương ứng giá trị là ‘0’ .Do bộ chốt của thanh ghi TRISA là một DFF nên ngõ ra
Q là ở mức thấp, và ngõ ra Q bù ở mức cao. Trường hợp dữ liệu ra là mức 1 thì
do bộ chốt dữ liệu cũng là một DFF nên ngõ ra Q bù sẽ có mức 0, khi đó cổng
OR sẽ mở và PFET dẫn, cổng AND sẽ đóng dẫn tới N-FET ngắt, lúc đó dữ liệu
ra chân sẽ có mức 1, ngược lại khi dữ liệu cần xuất là mức 0.
♦ Quá trình hoạt động của portA ở chế độ là ngõ vào
Để thiết lập chân của portA ở chế độ ngõ vào thì ta ghi vào thanh ghi TRISA ở
bit tương ứng giá trị là “1”. Như hình vẽ ta thấy PFET và NFET sẽ không thông,
lúc đó dữ liệu vào sẽ được ghi vào bộ chốt ngõ vào và được đọc ra theo giản đồ
xung như sau:
ĐỒ ÁN TỐT NGHIỆP
Hình 1.13: Hoạt động của portA ở chế độ là ngõ vào
♦ Cấu trúc bên trong của portA(RA4)

Ở portA chân RA4 ngoài chức năng vào ra cơ bản, nó còn có một chức năng
đặc biệt khác là ngõ vào của xung ngoài. Nó khác với các chân còn lại của porta
là FET cho điều khiển ngõ ra chỉ có NFET và một mạch Schmittch Trigger được
dùng làm bộ đệm ngõ vào . Như hình vẽ sau:
ĐỒ ÁN TỐT NGHIỆP
Hình 1.14: Cấu trúc bên trong của RA4
Chân này còn được sử dụng làm ngõ vào của xung ngoài định thời cho bộ định
thời TMR0, bởi vì nó sử dụng bộ đệm ngõ vào là một mạch Schmittch Trigger,
do đó nó nó rất nhạy với nhiễu, đồng thời do ở ngõ ra không có P-FET đóng vai
trò như là một điện trở kéo lên, vì vậy cần phải mắc điện trở kéo lên bên ngoài.
1.7.2 Port B
Nó gồm có 8 chân :từ RB0 đến RB7
♦ Cấu trúc bên trong của portB(RB0-RB3)
Hình 1.15: Cấu trúc bên trong của portB
Cấu tạo của portB khác với portA. Ở portB không sử dụng FET trong mạch
ngõ ra mà sử dụng một cổng logic(NAND) để qui định chế độ vào ra. Đặc trưng
của portB là có điện trở kéo lên khi ở chế độ là ngõ vào. Chức năng điện trở kéo
lên này có thể lập trình bằng phần mềm.
ĐỒ ÁN TỐT NGHIỆP
Khi ghi vào bộ đệm thanh ghi TRIS giá trị “0” , ngõ ra Q của DFF(TRIS Latch)
có giá trị 0 ,lúc đó cổng điều khiển ngõ ra được mở, đồng thời ngõ ra cổng
NAND luôn ở mức 1, lúc đó P-MOS tắt dẫn tới chức năng điện trở kéo lên bị vô
hiệu hóa
Khi ghi vào bộ đệm thanh ghi TRIS giá trị “1” , ngõ ra Q của DFF(TRIS
Latch) có giá trị là “1”. PORT ở chế độ ngõ vào lúc đó cổng điều khiển ngõ ra bị
cấm, đồng thời ngõ ra của cổng NAND ở mức “1” hay mức “0” tùy thuộc vào
chân RBPU ,tức là cho phép hay không cho phép chức năng điện trở kéo lên.
RBPU là bit 7 của thanh ghi OPTION. Nếu bít RPBU bằng “0” cho phép có điện
trở kéo lên, nếu bằng “1” thì ngược lại.
♦ Cấu trúc bên trong của portB (RB4-RB7)

Hình 1.16: Cấu trúc bên trong của portB
Các chân của portB từ (RB4-RB7) ngoài chức năng I/O, còn có thêm chức
năng dò tìm sự thay đổi trạng thái trên các chân. Chức năng này chỉ hoạt động
khi port ở chế độ là ngõ vào. Một ngắt sẽ xảy ra khi có sự thay đổi trạng thái trên
các chân này. Hoạt động của việc dò tìm sự thay đổi trạng thái trên các chân như
sau :
ĐỒ ÁN TỐT NGHIỆP
Hình 1.17: Đọc dữ liệu vào ở portB
Như hình trên ta thấy, dữ liệu ngõ vào được đọc vào bộ chốt dữ liệu thông qua
một cổng đảo, khi tín hiệu RD chuyển từ mức thấp lên mức cao. Ở thời điểm
đó,việc đọc dữ liệu cũ trong OLD data latch không thực hiện được. Việc đọc dữ
liệu từ OLD data latch chỉ được thực hiện khi tín hiệu RD chuyển từ mức cao
xuống mức thấp. Do đó khi có sự thay đổi ở ngõ vào thì ngõ ra của cổng XOR sẽ
ở mức “1” và bit RBIF(bit cho phép ngắt do sự thay đổi trạng thái ở portb ) sẽ
được set lên “1”, ngược lại ngõ ra của cổng XOR sẽ ở mức “0” và bit RBIF sẽ
được xóa.
1.8 Hoạt động định thời

Hình 1.18: Hoạt động định thời

×