Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ
ĐỒ ÁN
MÔN HỌC 2
ĐỀ TÀI: THIẾT KẾ ĐỒNG HỒ VÀ LỊCH SỐ
SỬ DỤNG VI ĐIỀU KHIỂN PIC 16F887
GVHD : Hồ Trung Mỹ
SVTH : Võ Minh Hải MSSV: 40600628
: Trần Bá Khanh MSSV: 40601056
Tp.Hồ Chí Minh, Tháng 7/2010
1
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
PHỤ LỤC
PHỤ LỤC………………………………………………………………………………………………… 1
LỜI GIỚI THIỆU……………………………………………………………………………………… 2
PHẦN 1: LÝ THUYẾT………………………………………………………………… ………………3
CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC…………………………………………… …3
1.1 PIC LÀ GÌ? …………………………………………………………………………………………….3
1.2 TẠI SAO LÀ PIC MÀ KHÔNG LÀ CÁC HỌ VI ĐIỀU KHIỂN KHÁC…………………………….3
1.3 KIẾN TRÚC CỦA PIC……………………………………………………………………………… 3
1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC……………………………… … 4
1.5 NGÔN NGỮ LẬP TRÌNH CHO PIC……… ……………………………………………………… 5
1.6 MẠCH NẠP PIC……….………………………………………………………………………………5
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC 16F887…………………………………………………………….6
2.1 SƠ ĐỒ CHÂN VÀ HÌNH DẠNG THỰC TẾ………………………………………………………….6
2.2 MỘT VÀI THÔNG TIN VỀ VI ĐIỀU KHIỂN PIC16F887………………………………………… 7
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887………………………………………………………… 8
2.4 TỔ CHỨC BỘ NHỚ……………………………………………………………………………… ….9
trình” do hãng Genenral Intrusment đặt tên cho vi điều khiển đầu tiên của họ: PIC 1650 được thiết kế
dùng làm thiết bị ngoại vi cho vi điều khiển CP1600. Vi điều khiển (VĐK) này sau đó được nghiên cứu
và phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC như ngày nay.
1.2 TẠI SAO LÀ PIC MÀ KHÔNG LÀ CÁC HỌ VI ĐIỀU KHIỂN KHÁC ???
Hiện nay trên thị trường có rất nhiều họ vi điều khiển 8051, Motorola 68HC, AVR, ARM,…Ngoài họ
8051 được hướng dẫn căn bản ở môi trường đại học, bản thân người viết đã lựa chọn họ vi điều khiển PIC
để mở rộng kiến thức và phát triển các ứng dụng trên công cụ nầy vì các nguyên nhân sau:
- Họ vi điều khiển này có thể tìm mua dễ dàng ở thị trường Việt Nam.
- Giá thành không quá đắt.
- Có đầy đủ 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 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 ngày càng
tăng. Đ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 ứ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.
1.3 KIẾN TRÚC CỦA PIC
Cấu trúc phần cứng của một vi điều khiển được thiết kế theo hai dạng kiến trúc: kiến trúc Von Neuman
và kiến trúc Havard.
4
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình 1. cấu trúc Von Neuman
Hình 2. cấu trúc Havard
Tổ chức phần cứng của PIC được thiết kế theo kiến trúc Havard. Điểm khác nhau giữa hai kiến trúc trên
là cấu trúc bộ nhớ dữ liệu và bộ nhớ chương trình.
Đối với kiến trúc Von Neuman, bộ nhớ dữ liệu và bộ nhớ chương trình nằm chung một bộ nhớ, do đó ta
có thể tổ chức, cân đối một cách linh hoạt bộ nhớ chương trình và bộ nhớ dữ liệu. Tuy nhiên điều này chỉ
- Tiếp theo cần chú ý các khối chức năng được tích hợp sẵn trong VĐK, các chuẩn giao tiếp bên trong.
- Sau cùng chú ý đến bộ nhớ chương trình mà VĐK cho phép.
- Ngoài ra, mọi thông tin về lựa chọn VĐK PIC có thể được tìm thấy trong cuốn sách “ Select PIC
guide” do nhà sản xuất Microchip cung cấp.
1.5 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 có C, VB, Pascal,… ngoài ra còn có
một số ngôn ngữ lập trình được phát triển dành cho PIC như PICBasic, MikroBasic,…
1.6 MẠCH NẠP PIC
Đây cũng là một dòng sản phẩm rất đa dạng dàng cho VĐK PIC. Có thể sử dụng các mạch nạp được nhà
sản xuất Microchip cung cấp 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 VĐK thông qua chương trình MPLAB. Dòng sản phẩm chính
thống này có ưu điểm là nạp được cho tất cả các VĐK PIC, tuy nhiên giá thành cao và gặp nhiều khó
khăn trong quá trình mua sản phẩm.
Ngoài ra do tính năng cho phép nhiều chế độ nạp khác nhau, còn có rất nhiều mạch nạp được thiết kế
dành cho VĐK PIC. Có thể sơ lược một số mạch nạp PIC sau:
JDM Programmer: mạch nạp này dùng chương trình nạp ICprog cho phép nạp các vi điều khiển PIC có
hỗ trợ tính năng nạp chương trình điện áp thấp ICSP (In circuit Serial Programming). Hầu hết mạch nạp
đều hỗ trợ tính năng nạp chương trình này.
WARP-13A và MCB-USB: hai mạch nạp này giống với PICSTART plus do nhà sản xuất Microchip
cung cấp, tương thích với trình biên dịch MPLAB, nghĩa là ta có thể dùng trực tiếp MPLAB để nạp cho vi
điều khiển PIC mà không cần sử dụng một chương trình nạp khác, chẳng hạn như Icprog.
P16PRO40: mạch nạp này do Nigel thiết kế và cũng khá nổi tiếng. Ông còn thiết kế cả chương trình nạp,
tuy nhiên ta có thể sử dụng chương trình nạp Icprog.
Mạch nạp Universal của Williem: đây không phải là mạch nạp chuyên dùng cho PIC như P16PRO40.
Các mạch nạp kể trên có ưu điểm rất lớn là đơn giản, rẻ tiền, hoàn toàn có thể tự lắp ráp dễ dàng và mọi
thông tin về sơ đồ mạch nạp, cách thiết kế, thi công, kiểm tra và chương trình nạp đều dễ dàng tìm được
và download miễn phí từ mạng Internet. Tuy nhiên các mạch nạp trên có nhược điểm là hạn chế về số vi
điều khiển PIC được hỗ trợ. Bên cạnh đó, mỗi mạch nạp cần được sử dụng một chương trình nạp thích
hợp.
-Nạp được chương trình ngay trên mạch điện ICSP (In circuit Serial Programming) thông qua chân 2.
-Watchdog Timer với bộ dao động trong.
-Chức năng bảo mật mã chương trình.
-Chế độ sleep.
-Có thể hoạt động với nhiều dạng Oscillator khác nhau.
8
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887
9
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình 5. sơ đồ khối của vi điều khiển PIC16F887
2.4 TỔ CHỨC BỘ NHỚ
Cấu trúc bộ nhớ của vi điều khiển PIC 16F887 bao gồm bộ nhớ chương trình (Program memory) và bộ
nhớ dữ liệu (data memory).
2.4.1 Bộ nhớ chương trình
Bộ nhớ chương trình của vi điều khiển PIC 16F887 là bộ nhớ flash, dung lượng là 8 Kword (1 word = 14
bit) và được phân thành nhiều trang (từ page0 đến page3).
Như vậy bộ nhớ chương trình có khả năng chứa được 8x1024 = 8192 lệnh (vì mỗi lệnh sau khi mã hóa sẽ
có dung lượng 14 bit = 1 word).
Để mã hóa được địa chỉ của 8 Kword chương trình, bộ đếm chương trình có dung lượng 13 bit. Khi vi
điều khiển được reset bộ đếm chương trình sẽ chỉ đến địa chỉ 0000H (Reset vector). Khi có ngắt xảy ra,
bộ đếm chương trình sẽ chỉ đến địa chỉ 0004H (Interrupt vector).
Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóa bởi bộ đếm chương trình.
Bộ nhớ stack sẽ được đề cập cụ thể trong phần sau:
10
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình 6. bộ nhớ chương trình của vi điều khiển PIC 16F887
2.4.2 bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC và bộ nhớ EEPROM được chia ra làm nhiều bank. Đối với vi điều khiển PIC
16F887 thì bộ nhớ dữ liệu được chia là 4 bank. Bank được chọn phụ thuộc vào bit RP1 và RP0 (bit thứ 6
khiển I/O khi bit PSPSTATUS (TrisE.4) được xác lập.
Port D: rộng 8 bit ( RD0 – RD7), nó có thể là cổng vào hoặc ra.
Thanh ghi điều khiển xuất nhập là TRISD
Thanh ghi PORTD: chứa giá trị các pin trong Port D
Trong đó:
13
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình. Sơ đồ khối của RD < 4: 0 > Hình. Sơ đồ khối của RD < 7: 5 >
2.5 TIMER0
Là một trong 3 bộ đếm hoặc bộ định thời của vi điều khiển PIC 16F887. Timer0 là bộ đếm 8 bit được kết
nối với bộ chia tần số (prescaler) 8 bit. Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và
cạnh tích cực của xung clock. 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, TMR0IE = 0 không cho phép
ngắt Timer0 tác động. Sơ đồ khối của Timer0 như sau:
14
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình 8. Sơ đồ khối Timer0
OPTION_RES
Muốn cho Timer0 hoạt động ở chế độ Timer ta CLEAR bit T0SC (OPTION_RES < 5 >), khi đó giá trị
thanh ghi TMR0 sẽ tăng theo từng chu kỳ xung đồng hồ (tần số vào Timer0 = ¼ tấn số oscillator). Khi giá
trị Timer0 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 T0SC (OPTION_RES < 5 >). Khi đó xung tác động
lên bộ đếm được lấy từ chân RA4/TOCK1. Bit T0SE (OPTION_RES < 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 T0SE = 0 và sẽ là cạnh xuống nếu T0SE = 1.
Khi 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.
15
kẹp giữa hai miếng thủy tinh. Mặt thủy tinh được phủ một lớp mỏng kim loại (oxide thiếc) cho
ánh sáng xuyên qua, được dùng làm bản cực mặt trước, bản cực mặt sau cũng thực hiện như vậy.
Còn loại LCD phản chiếu thì bản cực mặt sau cho phản chiếu sáng.
• Lớp vỏ bọc LCD được cách điện và hàn kín lại.
16
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Hình 9. LCD
LCD có những đặc điểm sau:
Điện trường cần thiết cho LCD hoạt động thông thường 104 V/cm. Do đó điện áp 10v cho LCD
có bề dày 10 mm
Vật liệu NLC có điện trở rất lớn (1010 ohm) cho nên dòng để cho LCD hoạt động rất nhỏ khoảng
10 mA/cm2 và công suất hoạt động 10 mW/cm2
LCD là thiết bị họat động ở tốc độ chậm, thời gian để dẫn vài mili giây và tắt vài chục mili giây.
Hiện nay LCD (loại thông dụng có thể giao tiếp được với PIC) được chia thành 2 loại:
• LCD graphic: đặc điểm loại này là toàn bộ màn hình được chia thành các điểm ảnh, giá thành tùy
thuộc vào độ phân giải và hãng sản xuất. Các độ phân giải thông thường là: 240x64, 240x128,
160x64, 128x128, 128x64 v.v
• LCD alphanumeric: Chỉ dùng để hiển thị chữ cái và chữ số. Với loại này 1 ký tự hiển thị trên
một ma trận 5x7 hoặc 5x10, như vậy với loại LCD 16x2 (có hai hàng và mỗi hàng có 16 ký tự) sẽ
có 32 ma trận xếp trên hai hàng. Hiện nay có các loại LCD thông alphanumeric thông dụng là:
14x2, 16x1, 20x2, 20x4.
17
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Chân số Tên Chức năng
1 Vss Đất
2 VDD Cực + của nguồn điện
3 VEE Tương phản (constrast)
4 RS Register Select (chọn thanh ghi)
5 R/W Read/Write
6 E Enable (cho phép)
Để hiển thị các chữ cái và các con số chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến z và
các số từ 0 – 9 đến các chân này khi bật RS=1.
Bảng mã ký tự chuẩn của LCD
18
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Cũng có các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về đầu dòng hoặc
nhấp nháy con trỏ.
Chú ý: chúng ta cũng có thể sử dụng RS = 0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông
tin. Cờ bận là bit D7 và có thể được đọc khi R/W và RS = 0 như sau:
Nếu R/W=1, RS=0 khi D7= 1 (cờ bận) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ
thông tin mới nào. Khi D7=0 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận
trước khi ghi bất kỳ dữ liệu nào lên LCD
Sau đây là bảng mã lệnh của LCD:
19
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
Mã (Hex) Lệnh đến thanh ghi của LCD
1 Xóa màn hình hiển thị
2 Trở về đầu dòng
4 Giảm con trỏ (dịch con trỏ sang trái)
6 Tăng con trỏ (dịch con trỏ sang phải)
5 Dịch hiển thị sang phải
7 Dịch hiển thị sang trái
8 Tắt hiển thị, tắt con trỏ
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt hiển thị, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
PHẦN 2: THIẾT KẾ
A. SƠ ĐỒ KHỐI
22
KHỐI NÚT
NHẤN
VI ĐIỂU
KHIỂN
PIC16F887
KHỐI HIỂN THỊ
LCD
KHỐI NGUỒN
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
B. SƠ ĐỒ NGUYÊN LÝ
B2 B3
B0
B1
B2
B3
B4 B5 B6
B4
B5
B6
B7
B7
RE3/MCLR/VPP
1
RA1/AN1/C12IN1-
3
RA2/AN2/VREF-/CVREF/C2IN+
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
RD0
19
RC7/RX/DT
26
RC6/TX/CK
25
RE2/AN7
10
RE1/AN6
9
RE0/AN5
8
RA3/AN3/VREF+/C1IN+
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
R5
4k7
R6
4k7
R9
4k7
R10
4k7
R11
4k7
R3
4k7
X1
4M
C1
30pF
C2
30pF
23
Đồ án môn học 2: Thiết kế đồng hồ và lịch điện tử sử dụng vi điều khiển 16F887
KHỐI VI ĐIỀU KHIỂN
RD6/P1C
29
RD7/P1D
30
RC4/SDI/SDA
23
RC5/SDO
24
RC3/SCK/SCL
18
RC2/P1A/CCP1
17
RC1/T1OSI/CCP2
16
RC0/T1OSO/T1CKI
15
RB7/ICSPDAT
40
RB6/ICSPCLK
39
RB5/AN13/T1G
38
RB4/AN11
37
RD3
22
RD2
21
RD1
20
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
24