TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
Báo cáo
Bài tập lớn Kỹ thuật Vi xử lý
ĐỀ TÀI: THIẾT KẾ MẠCH ĐO NHIỆT ĐỘ ĐỘ ẨM
Các thành viên:
NGUYỄN CÔNG HƯNG MSSV: 20142161
PHÙNG VĂN THANH MSSV:20143997
NGUYỄN VĂN TIẾN MSSV:20144481
QUÁCH THÀNH TÍN MSSV:20133987
Giáo viên hướng dẫn (Thầy): NGUYỄN HOÀNG DŨNG
LỜI GIỚI THIỆU
Nhiệt độ là một đại lượng vật lý gắn liền với cuộc sống của chúng ta. Nó tác động đến mọi
mọi mặt của đời sống. trong các lĩnh vực sản xuất cũng vậy, nhiệt độ ảnh hưởng trực
tiếp tới quá trình vận hành, sản xuất.
Trong lĩnh vực sản xuất công nghiệp nhiệt đtác động trực tiếp đến chất ợng
sản phẩn đầu ra như trong quá trình gia công hàn vật liệu nhiệt độ ảnh hưởng tới độ chính
xác, tính giãn nở nhiệt cảu vật liệu. Trong quá trình nung, sấy như nung gạch mem thì nhiệt
dộ ảnh hưởng tới chất lượng về đọ cứng,đọ dẻo,màu sắc cảu sản phẩm đầu ra. Trong y học
nhiệt độ ảnh ởng tới các kết quả nghiên cứu, chữa bệnh. Trong cuộc sống nhiệt độ ảnh
hưởng tới chất lượng và bảo quản lương thực, thực phẩm. Trong nông nghiệp cũng vậy nhiệt
độ ảnh hưởng trục tiếp tới thành quả và năng suất nông nghiệp…. Với các yếu cầu đó nhóm
chúng em xin thiêt kế đề tài Hệ thống đo đạc trong nông nghiệp dùng cảm biến DHT11, sử
dụng bộ vi điều khiển PIC16F877A =, hiển thị LCD, module wifi esp8286.
Ưu điểm: Cảm biến DHT11 một loại cảm biến nhiệt ái thành tương đối rẻ
bán nhiều trên thị trường, khoảng đo nhiệt dộ phù hợp với yêu cầu của đề tài.
PIC16F877A một loại chip vi điều khiển khả trình thể dùng nguồn mở, ưu
điểm về giá thành ơng đối rẻ, điều khiển ổn định khá chính c khá phổ biến trên
thị trường.
Đề tài được thiết kế dựa trên kiến thức đã học, sách tham khảo và một số nguồn tài
liệu khác. Tuy nhiên do thời gian và trình độ có hạn nên chúng em không tránh khỏi
những sai sót. Vì vậy mong thầy giúp đỡ để hoàn thiện hơn đề tài.
Chúng em xin chân thành cảm ơn!
MỤ ỤC L C
LỜI GIỚI THIỆU ........................................................................................................................2
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 ? .....................4
1.3 KIẾN TRÚC CỦA PIC ......................................................................................................4
1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC...................................6
1.5 NGÔN NGỮ LẬP TRÌNH CHO PIC ................................................................................6
1.6 MẠCH NẠP PIC ...............................................................................................................7
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC 16F887 ..............................................................................8
2.1 SƠ ĐỒ CHÂN VÀ HÌNH DẠNG THỰC TẾ ...................................................................8
2.2 MỘT VÀI THÔNG TIN VỀ VI ĐIỀU KHIỂN PIC16F887 .............................................9
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887 .................................................................. 11
2.4 TỔ CHỨC BỘ NHỚ ....................................................................................................... 11
2.4.1 Bộ nhớ chương trình ................................................................................................. 12
2.4.2 bộ nhớ dữ liệu ........................................................................................................... 12
2.4.3 Các cổng ra vào của PIC: .......................................................................................... 15
2.5 TIMER0 ...........................................................................................................................16
CHƯƠNG 3: LCD .....................................................................................................................18
2 LCD là gì?...........................................................................................................................18
CHƯƠNG 4: CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM DHT11 .........................................................24
4.1 GIỚI THIỆU ....................................................................................................................24
CHƯƠNG 5: MODULE WIFI ESP8266 ..................................................................................27
CHƯƠNG 6 : THIẾT KẾ VÀ MÔ PHỎNG .............................................................................32
1. SƠ ĐỒ KHỐI ....................................................................................................................32
2. SƠ ĐỒ NGUYÊN LÝ .......................................................................................................32
3. LƯU ĐỒ GIẢI THUẬT ....................................................................................................32
4. LẬP TRÌNH .......................................................................................................................36
5. MÔ PHỎNG BẰNG PROTEUS.......................................................................................50
TÀI LIỆU THAM KHẢO.........................................................................................................53
CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC
1.1 PIC LÀ GÌ ?
PIC viết tắt của Programable Intellegent Computer”, thtạm dịch Máy tính
thông minh khả 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 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 ng
cụ nầy vì các nguyên nhân sau:
Họ vi điều khiển y 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 nvề 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 ng đa dạng của vi điều khiển PIC, 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.
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ỉ ý nghĩa khi tốc độ xử của CPU phải rất cao, với cấu
trúc đó, trong một thời điểm, CPU chỉ thể tương c với bộ nhớ dữ liệu hoặc bộ nhớ
chương trình. Nvậy có thể nói kiến trúc Von Neuman không thích hợp với cấu trúc của
một vi điều khiển.
Đối với kiến trúc Havard, bộ nhớ dữ liệu bnhớ chương trình tách ra thành hai bộ nhớ
riêng biệt. Do đó trong một thời điểm, CPU có thể tương tác với cả hai bộ nhớ, như vậy tốc
độ của vi điều khiển được cải thiện đáng kể.
Một điểm cần lưu ý nữa là tập lệnh trong kiến trúc Havard có thể được tối ưu tùy theo yêu
cầu của kiến trúc vi điều khiển không phụ thuộc vào cấu trúc dữ liệu. dụ với dòng
điều khiển PIC16F, độ dài lệnh luôn 14 bit (khi dữ liệu được tổ chức thành từng byte),
còn với kiến trúc Von Neuman, độ dài lệnh luôn là bội số của byte (do dữ liệu được tổ chức
thành từng byte).
1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC
Các ký hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit.
PIC16xxxx: độ dài lệnh 14 bit.
PIC18xxxx: độ dài lệnh 16 bit.
C: PIC có bộ nhớ EPROM (chỉ có PIC16C84 bộ nhớ EEPROM) F:
PIC có bộ nhớ flash.
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là ký hiệu cũ
Bên cạnh đó, một số vi điều khiển hiệu xxFxxx EEPROM, còn thêm chữ A
cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash).
Ngoài ra còn có thêm một dòng vi điều khiển mới là dsPIC.
Ở Việt Nam phổ biến nhất là 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 ta cần chú ý số chân của vi điều khiển PIC cần thiết cho ứng dụng. nhiều vi
điều khiển PIC số lượng chân khác nhau, thậm chí có VĐK chỉ 8 chân, ngoài ra còn
có các vi điều khiển PIC 28, 40, 44,… chân.
Nên lựa chọn VĐK 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ú ý 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 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,
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 một dòng sản phẩm rất đa dạng dàng cho VĐK PIC. 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. thể 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 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 rất nhiều mạch nạp
được thiết kế dành cho VĐK PIC. thể ợ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 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 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 ta thể dùng trực
tiếp MPLAB để nạp cho vi điều khiển PIC 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ế 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 mạch nạp chuyên dùng cho PIC như
P16PRO40.
Các mạch nạp kể trên ưu điểm rất lớn đơn giản, rẻ tiền, hoàn toàn thể tự lắp ráp
dễ dàng mọi thông tin về đồ mạch nạp, cách thiết kế, thi công, kiểm tra chương
trình nạp đều dễ ng tìm được 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.
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC 16F887
2.1 SƠ ĐỒ CHÂN VÀ HÌNH DẠNG THỰC TẾ
Hình 3. sơ đồ chân vi điều khiển PIC 16F887
Hình 4. hình dạng thực tế của vi điều khiển PIC 16F887
2.2 MỘT VÀI THÔNG TIN VỀ VI ĐIỀU KHIỂN PIC16F887
Đây vi điều khiển thuộc họ PIC16xxxx với tập lệnh gồm 35 lệnh độ 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
20Mhz với một chu kỳ lệnh 200ns. Bộ nhớ flash chương trình 8192 words bộ nhớ
dữ liệu là 368 bytes SRAM + 256 bytes EEPROM. 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ộ nhớ 8 bit với bộ chia tần số 8 bit.
-Timer1: bộ đếm 16 bit với bộ chia tần số thể thực hiện chức năng đếm dựa 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 (Synchronuos Serial Port), ISP 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.
Các đặc tính Analog
-14 kênh chuyển đổi ADC 10 bit
-2 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 có khả năng ghi xóa được 100 000 lần.
-Bộ nhớ EEPROM có khả năng ghi xóa được 1 000 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 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.
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887
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 bộ nhớ flash, dung lượng 8 Kword
(1 word = 14 bit) đượ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ẽ
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 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 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:
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 tbộ nhớ dữ liệu được chia 4 bank. Bank được chọn phụ thuộc vào
bit RP1 và RP0 (bit thứ 6 và bit thứ 5) của thanh ghi trạng thái status.
RP1: RP0
BANK
00
0
01
1
10
2
11
3
Mỗi bank dung lượng 128 byte, bao gồm các thanh ghi chức năng đặc biệt SFR
(Special Function Register) nằm 32 vị trí đầu tiên của mỗi bank các thanh ghi mục đích
chung GPR (General Purpose Register) nằm 96 vị trí cuối cùng của mỗi bank, đóng vai
trò như Static RAM.
Các thanh ghi SFR thường xuyên được sử dụng (ví dụ nthanh 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 làm
giảm bớt lệnh chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu vi điều khiển PIC 16F887 như
sau:
Hình 7. các bank thanh ghi trong bộ nhớ dữ liệu của vi điều khiển PIC 16F887
2.4.3 Các cổng ra vào của PIC:
Port A: có 6 bit (tương ứng với 6 chân RA0 – RA5) các chân của cổng A có tích hợp một
số chức năng ngoại vi, nếu một thiết bị ngoại vi được enable thì cổng này sẽ không hoạt
động như một cổng vào ra.
Bình thường Port A sẽ là một cổng vào ra 2 chiều. Thanh ghi xác định chiều tương ứng của
các chân Port A là thanh ghi TrisA. Các bit ở thanh ghi TrisA bằng 1 sẽ xác định các chân ở
Port A là đầu vào và ngược lại sẽ là đầu ra.
Port B: rộng 8 bit (tương ứng với chân RB0 - RB7) là một cổng vào ra 2 chiều. Thanh ghi
quy định chiều của Port B thanh ghi TrisB. Thiết lập các thanh ghi TrisB bằng 1 sẽ làm
cho cổng B là cổng vào và ngược lại sẽ là cổng ra.
Port C: rộng 8 bit (tương ứng với các chân RC0 – RC7), bình thường nó là một cổng vào
ra 2 chiều. Thanh ghi quy định chiều của cổng này là thanh ghi TrisC. Các chân RC3, RC4
dùng để kết nối, truyền nhận thông tin với các thiết bị ngoại vi.
Port E: rộng 3 bit (RE0 – RE2), được cấu hình đầu ra hoặc đầu o. Port E có thể là đầu
vào điều 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 đó:
Sơ đồ khối của RD < 4: 0 > Sơ đồ khối của RD < 7: 5 >
2.5 TIMER0
một trong 3 bộ đếm hoặc bộ định thời của vi điều khiển PIC 16F887. Timer0 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 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:
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ẽ ien 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 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ẽ 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.
Bộ chia tần số (prescaler) được chia sẽ giữa Timer0 và WDT (Watchdog Timer), điều đó
nghĩa nếu prescaler được sử dụng cho Timer0 thì WDT sẽ không được sự hỗ trợ
của prescaler ngược lại. Prescaler được điều chỉnh bởi thanh ghi OPTION_REG. Bit
PSA (OPTION_REG < 3 >) xác định đối ợng tác động của prescaler. Các bit PS2:PS0
(OPTION_REG<2:0>) xác định tỷ số chia tần số của prescaler. Xem lại thanh ghi
OPTION_REG để xác định lại một cách chi tiết về các bit đ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ủa prescaler. 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 đối tượng tác động WDT, lệnh
CLR WDT 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 ien 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.
CHƯƠNG 3: LCD.
2 LCD là gì?
Màn hình tinh thể lỏng (liquid crystal display, LCD) là loại thiết bị hiển thị cấu tạo bởi
các tế bào (các điểm ảnh) chứa tinh thể lỏng khả năng thay đổi tính phân cực của ánh
sáng và do đó thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kính lọc phân cực.
Chúng có ưu điểm là phẳng, cho hình ảnh sáng, chân thật và tiết kiệm năng lượng.
LCD là loại chỉ thị thụ động, tiêu thị năng lượng rất nhỏ và có tỉ số tương phản tốt.
Ngoài ra có những tính chất thông dụng sau đây:
Không tự phát ra ánh sáng và phụ thuộc vào ánh sáng xung quanh và ánh sáng nền.
Có ánh sáng khuếch tán.
Hoạt động ở dạng trong suốt hoặc phản chiếu.
Thông dụng nhất loại Neumatic (NLC), loại chất lỏng này trong suốt. Khi được áp
điện trường lớn sẽ xuất hiện những ion di chuyển xuyên qua phá vỡ cấu trúc thông thường
dạng tinh thể.vậy chất lỏng được phân cực trở nên chắn sáng, màu đen sậm n so
với xung quanh. Khi điện trường mất đi, chất lỏng trở về dạng tinh thể cũ trở nên trong
suốt trở lại.
Cấu tạo cụ thể của LCD gồm một vật liệu tinh thể lỏng NLC bdày khoảng 10 mm
được 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.
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 đ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 thiết bị họat động tốc độ chậm, thời gian để dẫn vài mili giây tắt 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 bmà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 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 chữ số. Với loại này 1 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
mỗi hàng 16 tự) sẽ 32 ma trận xếp trên hai hàng. Hiện nay các loại
LCD thông alphanumeric thông dụng là: 14x2, 16x1, 20x2, 20x4.
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)
7
D0
Bit 0 của dữ liệu
8
D1
Bit 1 của dữ liệu
9
D2
Bit 2 của dữ liệu
10
D3
Bit 3 của dữ liệu
11
D4
Bit 4 của dữ liệu
12
D5
Bit 5 của dữ liệu
13
D6
Bit 6 của dữ liệu
14
D7
Bit 7 của dữ liệu
Mặc dù theo sổ tay kỷ thuật LCD thì cấp nguồn cho5V DC (khoảng vài mA) nhưng
cung cấp cho nó 6VDC hay 4.5 VDC thì nó vẫn hoạt động tốt và ngay cả với 3 VDC cũng
đủ cho một số module. Kết quả các module LCD tiêu thị năng lượng ít. Chân 3 chân

Preview text:

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG Báo cáo
Bài tập lớn Kỹ thuật Vi xử lý
ĐỀ TÀI: THIẾT KẾ MẠCH ĐO NHIỆT ĐỘ ĐỘ ẨM Các thành viên:
NGUYỄN CÔNG HƯNG MSSV: 20142161
PHÙNG VĂN THANH MSSV:20143997
NGUYỄN VĂN TIẾN MSSV:20144481
QUÁCH THÀNH TÍN MSSV:20133987
Giáo viên hướng dẫn (Thầy): NGUYỄN HOÀNG DŨNG LỜI GIỚI THIỆU
Nhiệt độ là một đại lượng vật lý gắn liền với cuộc sống của chúng ta. Nó tác động đến mọi
mọi mặt của đời sống. Và trong các lĩnh vực sản xuất cũng vậy, nhiệt độ ảnh hưởng trực
tiếp tới quá trình vận hành, sản xuất.
Trong lĩnh vực sản xuất công nghiệp nhiệt độ có tác động trực tiếp đến chất lượng
sản phẩn đầu ra như trong quá trình gia công hàn vật liệu nhiệt độ ảnh hưởng tới độ chính
xác, tính giãn nở nhiệt cảu vật liệu. Trong quá trình nung, sấy như nung gạch mem thì nhiệt
dộ ảnh hưởng tới chất lượng về đọ cứng,đọ dẻo,màu sắc cảu sản phẩm đầu ra. Trong y học
nhiệt độ ảnh hưởng tới các kết quả nghiên cứu, chữa bệnh. Trong cuộc sống nhiệt độ ảnh
hưởng tới chất lượng và bảo quản lương thực, thực phẩm. Trong nông nghiệp cũng vậy nhiệt
độ ảnh hưởng trục tiếp tới thành quả và năng suất nông nghiệp…. Với các yếu cầu đó nhóm
chúng em xin thiêt kế đề tài Hệ thống đo đạc trong nông nghiệp dùng cảm biến DHT11, sử
dụng bộ vi điều khiển PIC16F877A =, hiển thị LCD, module wifi esp8286.
Ưu điểm: Cảm biến DHT11 là một loại cảm biến nhiệt có ái thành tương đối rẻ và
bán nhiều trên thị trường, có khoảng đo nhiệt dộ phù hợp với yêu cầu của đề tài.
PIC16F877A là một loại chip vi điều khiển khả trình có thể dùng mã nguồn mở, nó có ưu
điểm về giá thành tương đối rẻ, điều khiển ổn định và khá chính xác và khá phổ biến trên thị trường.
Đề tài được thiết kế dựa trên kiến thức đã học, sách tham khảo và một số nguồn tài
liệu khác. Tuy nhiên do thời gian và trình độ có hạn nên chúng em không tránh khỏi
những sai sót. Vì vậy mong thầy giúp đỡ để hoàn thiện hơn đề tài.
Chúng em xin chân thành cảm ơn! MỤ ỤC L C
LỜI GIỚI THIỆU ........................................................................................................................2
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 ? .....................4
1.3 KIẾN TRÚC CỦA PIC ......................................................................................................4
1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC...................................6
1.5 NGÔN NGỮ LẬP TRÌNH CHO PIC ................................................................................6
1.6 MẠCH NẠP PIC ...............................................................................................................7
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC 16F887 ..............................................................................8
2.1 SƠ ĐỒ CHÂN VÀ HÌNH DẠNG THỰC TẾ ...................................................................8
2.2 MỘT VÀI THÔNG TIN VỀ VI ĐIỀU KHIỂN PIC16F887 .............................................9
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887 .................................................................. 11
2.4 TỔ CHỨC BỘ NHỚ ....................................................................................................... 11
2.4.1 Bộ nhớ chương trình ................................................................................................. 12
2.4.2 bộ nhớ dữ liệu ........................................................................................................... 12
2.4.3 Các cổng ra vào của PIC: .......................................................................................... 15
2.5 TIMER0 ...........................................................................................................................16
CHƯƠNG 3: LCD .....................................................................................................................18
2 LCD là gì?...........................................................................................................................18
CHƯƠNG 4: CẢM BIẾN NHIỆT ĐỘ, ĐỘ ẨM DHT11 .........................................................24
4.1 GIỚI THIỆU ....................................................................................................................24
CHƯƠNG 5: MODULE WIFI ESP8266 ..................................................................................27
CHƯƠNG 6 : THIẾT KẾ VÀ MÔ PHỎNG .............................................................................32
1. SƠ ĐỒ KHỐI ....................................................................................................................32
2. SƠ ĐỒ NGUYÊN LÝ .......................................................................................................32
3. LƯU ĐỒ GIẢI THUẬT ....................................................................................................32
4. LẬP TRÌNH .......................................................................................................................36
5. MÔ PHỎNG BẰNG PROTEUS.......................................................................................50
TÀI LIỆU THAM KHẢO.........................................................................................................53
CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC 1.1 PIC LÀ GÌ ?
PIC là viết tắt của “ Programable Intellegent Computer”, có thể tạm dịch là “ Máy tính
thông minh khả 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.
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ỉ có ý nghĩa khi tốc độ xử lý của CPU phải rất cao, vì với cấu
trúc đó, trong một thời điểm, CPU chỉ có thể tương tác với bộ nhớ dữ liệu hoặc bộ nhớ
chương trình. Như vậy có thể nói kiến trúc Von Neuman không thích hợp với cấu trúc của một vi điều khiển.
Đối với kiến trúc Havard, bộ nhớ dữ liệu và bộ nhớ chương trình tách ra thành hai bộ nhớ
riêng biệt. Do đó trong một thời điểm, CPU có thể tương tác với cả hai bộ nhớ, như vậy tốc
độ của vi điều khiển được cải thiện đáng kể.
Một điểm cần lưu ý nữa là tập lệnh trong kiến trúc Havard có thể được tối ưu tùy theo yêu
cầu của kiến trúc vi điều khiển mà không phụ thuộc vào cấu trúc dữ liệu. Ví dụ với dòng
điều khiển PIC16F, độ dài lệnh luôn là 14 bit (khi dữ liệu được tổ chức thành từng byte),
còn với kiến trúc Von Neuman, độ dài lệnh luôn là bội số của byte (do dữ liệu được tổ chức thành từng byte).
1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC
Các ký hiệu của vi điều khiển PIC:
PIC12xxxx: độ dài lệnh 12 bit.
PIC16xxxx: độ dài lệnh 14 bit.
PIC18xxxx: độ dài lệnh 16 bit.
C: PIC có bộ nhớ EPROM (chỉ có PIC16C84 là có bộ nhớ EEPROM) F: PIC có bộ nhớ flash.
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là ký hiệu cũ
Bên cạnh đó, một số vi điều khiển có ký hiệu xxFxxx là EEPROM, còn có thêm chữ A ở
cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash).
Ngoài ra còn có thêm một dòng vi điều khiển mới là dsPIC.
Ở Việt Nam phổ biến nhất là 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 ta cần chú ý số chân của vi điều khiển PIC cần thiết cho ứng dụng. Có nhiều vi
điều khiển PIC có số lượng chân khác nhau, thậm chí có VĐK chỉ có 8 chân, ngoài ra còn
có các vi điều khiển PIC 28, 40, 44,… chân.
Nên lựa chọn VĐK 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ú ý 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.
CHƯƠNG 2: VI ĐIỀU KHIỂN PIC 16F887
2.1 SƠ ĐỒ CHÂN VÀ HÌNH DẠNG THỰC TẾ
Hình 3. sơ đồ chân vi điều khiển PIC 16F887
Hình 4. hình dạng thực tế của vi điều khiển PIC 16F887
2.2 MỘT VÀI THÔNG TIN VỀ VI ĐIỀU KHIỂN PIC16F887
Đây là vi điều khiển thuộc họ PIC16xxxx 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à
20Mhz với một chu kỳ lệnh là 200ns. Bộ nhớ flash chương trình là 8192 words và bộ nhớ
dữ liệu là 368 bytes SRAM + 256 bytes EEPROM. 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ộ nhớ 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 đếm dự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 (Synchronuos Serial Port), ISP 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. Các đặc tính Analog
-14 kênh chuyển đổi ADC 10 bit -2 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 có khả năng ghi xóa được 100 000 lần.
-Bộ nhớ EEPROM có khả năng ghi xóa được 1 000 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 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.
2.3 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F887
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:
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 và bit thứ 5) của thanh ghi trạng thái status. RP1: RP0 BANK 00 0 01 1 10 2 11 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 ở 32 vị trí đầu tiên của mỗi bank và các thanh ghi mục đích
chung GPR (General Purpose Register) nằm ở 96 vị trí cuối cùng của mỗi bank, đóng vai trò như Static RAM.
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 chương trình. Sơ đồ cụ thể của bộ nhớ dữ liệu vi điều khiển PIC 16F887 như sau:
Hình 7. các bank thanh ghi trong bộ nhớ dữ liệu của vi điều khiển PIC 16F887
2.4.3 Các cổng ra vào của PIC:
Port A: có 6 bit (tương ứng với 6 chân RA0 – RA5) các chân của cổng A có tích hợp một
số chức năng ngoại vi, nếu một thiết bị ngoại vi được enable thì cổng này sẽ không hoạt
động như một cổng vào ra.
Bình thường Port A sẽ là một cổng vào ra 2 chiều. Thanh ghi xác định chiều tương ứng của
các chân Port A là thanh ghi TrisA. Các bit ở thanh ghi TrisA bằng 1 sẽ xác định các chân ở
Port A là đầu vào và ngược lại sẽ là đầu ra.
Port B: rộng 8 bit (tương ứng với chân RB0 - RB7) là một cổng vào ra 2 chiều. Thanh ghi
quy định chiều của Port B là thanh ghi TrisB. Thiết lập các thanh ghi TrisB bằng 1 sẽ làm
cho cổng B là cổng vào và ngược lại sẽ là cổng ra.
Port C: rộng 8 bit (tương ứng với các chân RC0 – RC7), bình thường nó là một cổng vào
ra 2 chiều. Thanh ghi quy định chiều của cổng này là thanh ghi TrisC. Các chân RC3, RC4
dùng để kết nối, truyền nhận thông tin với các thiết bị ngoại vi.
Port E: rộng 3 bit (RE0 – RE2), được cấu hình là đầu ra hoặc đầu vào. Port E có thể là đầu
vào điều 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 đó:
Sơ đồ khối của RD < 4: 0 >
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:
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ẽ ien 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.
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 sự hỗ trợ
của prescaler và ngược lại. Prescaler được điều chỉnh bởi thanh ghi OPTION_REG. Bit
PSA (OPTION_REG < 3 >) xác định đối tượng tác động của prescaler. Các bit PS2:PS0
(OPTION_REG<2:0>) xác định tỷ số chia tần số của prescaler. Xem lại thanh ghi
OPTION_REG để xác định lại một cách chi tiết về các bit đ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ủa prescaler. 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 đối tượng tác động là WDT, lệnh
CLR WDT 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 ien 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. CHƯƠNG 3: LCD. 2 LCD là gì?
Màn hình tinh thể lỏng (liquid crystal display, LCD) là loại thiết bị hiển thị cấu tạo bởi
các tế bào (các điểm ảnh) chứa tinh thể lỏng có khả năng thay đổi tính phân cực của ánh
sáng và do đó thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kính lọc phân cực.
Chúng có ưu điểm là phẳng, cho hình ảnh sáng, chân thật và tiết kiệm năng lượng.
LCD là loại chỉ thị thụ động, tiêu thị năng lượng rất nhỏ và có tỉ số tương phản tốt.
Ngoài ra có những tính chất thông dụng sau đây:
Không tự phát ra ánh sáng và phụ thuộc vào ánh sáng xung quanh và ánh sáng nền. Có ánh sáng khuếch tán.
Hoạt động ở dạng trong suốt hoặc phản chiếu.
Thông dụng nhất là loại Neumatic (NLC), loại chất lỏng này trong suốt. Khi nó được áp
điện trường lớn sẽ xuất hiện những ion di chuyển xuyên qua phá vỡ cấu trúc thông thường
dạng tinh thể. Vì vậy chất lỏng được phân cực trở nên chắn sáng, có màu đen sậm hơn so
với xung quanh. Khi điện trường mất đi, chất lỏng trở về dạng tinh thể cũ và trở nên trong suốt trở lại.
Cấu tạo cụ thể của LCD gồm có một vật liệu tinh thể lỏng NLC có bề dày khoảng 10 mm
được 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. 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. 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) 7 D0 Bit 0 của dữ liệu 8 D1 Bit 1 của dữ liệu 9 D2 Bit 2 của dữ liệu 10 D3 Bit 3 của dữ liệu 11 D4 Bit 4 của dữ liệu 12 D5 Bit 5 của dữ liệu 13 D6 Bit 6 của dữ liệu 14 D7 Bit 7 của dữ liệu
Mặc dù theo sổ tay kỷ thuật LCD thì cấp nguồn cho nó là 5V DC (khoảng vài mA) nhưng
cung cấp cho nó 6VDC hay 4.5 VDC thì nó vẫn hoạt động tốt và ngay cả với 3 VDC cũng
đủ cho một số module. Kết quả là các module LCD tiêu thị năng lượng ít. Chân 3 là chân