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

MẠCH ỔN ĐỊNH NHIỆT ĐỘ GIAO TIẾP VỚI MÁY TÍNH

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 (858.86 KB, 59 trang )

ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1. GIỚI THIỆU VỀ ĐỀ TÀI VÀ SƠ ĐỒ KHỐI:
1.1. LÝ DO CHỌN ĐỀ TÀI
1.1.1 Phần Hệ thống đo và cảnh báo nhiệt độ, gồm có 5 chức năng chính:
- Đo và hiển thị thông tin nhiệt độ của thiết bị ra LED7.
- So sánh nhiệt độ đo được với nhiệt độ ngưỡng (ngưỡng trên Tmax và ngưỡng
dưới Tmin, được người dùng cài đặt tại bất kì thời điểm nào, tùy theo yêu cầu
thông qua bàn phím) để đưa ra cảnh báo ra loa và màn hình khi nhiệt độ vượt qua
ngưỡng.
- Hệ thống làm mát hoặc làm nóng được kích hoạt khi nhiệt độ nằm ngoài ngưỡng
nhiệt độ cho phép.
-Liên tục gửi dữ liệu nhiệt độ lên máy tính qua phương thức truyền dữ liệu nối
tiếp.
-Vẽ đồ thị nhiệt độ theo thời gian thực trên máy tính
1.1.2 Phần Đồng hồ thời gian thực, gồm có 3 chức năng chính:
- Hiển thị thời gian và truyền thời gian này lên máy tính
- Cài đặt thời gian: giờ, phút, giây, thứ, ngày, tháng
- Đồng bộ thời gian với máy tính.
1.1.3. Phần Giao tiếp VĐK với máy tính gồm các chức năng chính:
- Truyền dữ liệu từ VĐK lên máy tính:
+ Thời gian trên VĐK
+ Nhiệt độ môi trường, để từ đó vẽ đồ thị nhiệt độ trên máy tính
- Truyền dữ liệu từ máy tính lên VĐK:
+ Đồng bộ thời gian từ máy tính lên VĐK

1.2 HÌNH ẢNH THỰC TẾ:
* Phần mềm giao tiếp nối tiếp viết bằng ngôn ngữ VB:


SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1.3. SƠ ĐỒ KHỐI:

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Khối hiển thị

Khối cảm biến

Khối vi xử lý

Khối ADC

Khối cảnh báo


Truyền dữ liệu nối
tiếp với máy tính

2. CÁC CHỈ TIÊU HỆ THỐNG VÀ KẾT QUẢ ĐẠT ĐƯỢC:
2.1. Chỉ tiêu hệ thống:
- Thực hiện được chức năng đo nhiệt độ, cảnh báo và điều khiển.
- Nhiệt độ ngưỡng không bị mất đi khi mất nguồn.
- Nhiệt độ đo được có sai số trong khoảng cho phép.
- Hiển thị thời gian và cách cài đặt hợp lý
- Truyền thông nối tiếp ổn định, chính xác
2.2. Kết quả đạt được:
- Hệ thống đã thực hiện được nhiệm vụ đo, cảnh báo và điều khiển nhiệt độ.
- Hệ thống hoạt động ổn định.
- Nhiệt độ ngưỡng được lưu trữ trong bộ nhớ ngoài nên không bị mất đi khi mất
-

điện.
gọn thuận tiện cho việc thay đổi nhiệt độ ngưỡng.
Thời gian và nhiệt độ cùng hiển thị trên Led7 hợp lý
Truyền dữ liệu ổn định

3. MÔ TẢ CHI TIẾT HỆ THỐNG:
Hệ thống gốm có 7 khối:
1. Khối vi xử lý
2. Khối cảm biến nhiệt
3. Khối chuyển đổi tương tự số ADC

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

-



N TT NGHIP

GVHD:TNG THNH NHN
4. Khi hin th
5. Khi cnh bỏo v iu khin
6. Khi giao tip mỏy tớnh
7. Khi ngun 5V

A. Giụựi thieọu caực khoỏi

1.1 S lc v Vi iu khin PIC 16F877A:
PIC 16F877A l dũng PIC ph bin nht hin nay ( mnh v tớnh nng, b nh
cho hu ht cỏc ng dng thụng thng).Cu trỳc tng quỏt ca PIC 16F877A nh
sau:
-8 K Flash ROM.
-368 Bytes RAM.
-256 Bytes EEPROM.
-5 ports (A, B, C, D, E) vo ra vi tớn hiu iu khin c lp.
-2 b nh thi 8 bits (Timer 0 v Timer 2).
-Mt b nh thi 16 bits (Timer1) cú th hot ng trong ch tit
kim nng lng (Sleep Mode )vi ngun xung clock ngoi.
-2 b CCP( Capture / Compare/ PWM).
-1 b bin i AD 10 bits 8 ngừ vo.
-2 b so sỏnh tng t (Compartor).
-1 b nh thi giỏm sỏt (WatchDog Timer).
-Mt cng song song 8 bits vi cỏc tớn hiu iu khin.
-Mt cng ni tip.
-15 ngun ngt.

-Cú ch tit kim nng lng.
-Np chng trỡnh bng cng ni tip ICSP.
-35 tp lnh cú di 14 bits.
-Tn s hot ng ti a 20MHz.
1.2 S lc v cỏc chõn ca PIC 16F877A:

SVTH:O VN HOAN-Tễ NGC QUANG

-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Hình 1.1

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Hình 1.2

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG


-


ĐỒ ÁN TỐT NGHIỆP

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

GVHD:TỐNG THÀNH NHÂN

-


ĐỒ ÁN TỐT NGHIỆP

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

GVHD:TỐNG THÀNH NHÂN

-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Hình 1.3
1.3 Một số điểm đặc biệt của CPU:
1.3.1 Dao động:
SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG


-


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:

Trong các chế độ LP,XT và HS chúng ta
sử dụng thạch anh dao động nối vào các
chân OSC1 và OSC2 để tạo dao động.

Hình 1.4
Việc lựa chọn tụ trong dao động thạch anh dựa vào bảng sau:

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 10


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

* Cách tính chu kì máy:
Ví dụ ta sử dụng thạch anh 10Mhz. Khi đó:
Tần số dao động của thạch anh là Fosc = 10Mhz
→ Chu kỳ dao đông của thạch anh là Tosc = 1/Tosc= 1/10*106 (s)
Chu kỳ máy:

T_instruction = 4*Tosc = 4/10*106(s) = 0.4 µs = 400 ns
1.3.2 Reset:
PIC16F877A có thể bị reset bởi nhiều nguyên nhân khác nhau như:

1.3.3 MCLR:
PIC16F877A có một bộ lọc nhiễu ở phần MCLR. Bộ lọc nhiễu này

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 11


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Ngõ vào MCLR trên chân 4 của PIC16F877A .Khi đưa chân này xuống thấp
thì các thanh ghi bên trong VĐK sẽ được tải những giá trị thích hợp để khởi động lại
hệ thống.
(Lưu ý: reset do WDT không làm chân MCLR cuống mức thấp).

-

1.3.4 Interrupts:
PIC16F877A có nhiều nguồn ngắt khác nhau. Đây là một số ngắt tiêu biểu:
Ngắt ngoài xảy ra trên chân INT.
Ngắt do Timer0.
Ngắt do Timer1.
Ngắt do Timer2.
Ngắt do thay đổi trạng thái trên các chân PortB.

Ngắt so sánh điện thế.
Ngắt do Port song song.
Ngắt USART.
Ngắt nhận dữ liệu.
Ngắt truyền dữ liệu .
Ngắt chuyển đổi ADC.
Ngắt màn hình LCD.
Ngắt hoàn tất ghi EEPROM.
Ngắt module CCP.
Ngắt Module SSP.

.
1.3.5 Chế độ nguồn thấp Sleep (Power down Mode) :

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 12


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1.3.6 Bộ định thời giám sát (Watch Dog Timer -WDT):
Giả sử bạn viết một chương trình, bạn mong đợi chương trình này sẽ chạy nếu
không có gì trục trặc xảy ra thì nó sẽ không bao giờ dừng lại, như vậy bạn phải làm một
vòng lặp để khi chương trình chạy đến điểm cuối thì nó lại quay trở về điểm bắt đầu.
Nhưng mà hãy xem một trường hợp: Giả sử chương trình kiểm tra một chân input, nếu nó
lên mức cao thì con Pic sẽ tiếp tục kiểm tra một chân input thứ hai có lên mức cao hay
không, nếu chân input thứ hai không lên mức cao, con Pic sẽ ngồi đó chờ và nó sẽ chỉ

thoát ra khỏi chỗ ngồi của nó nếu chân input thứ hai lên mức cao.
Bây giờ hãy xem một trường hợp khác, giả sử như bạn viết một chương trình, bạn
compiled nó thành công, và ngay cả bạn đã cho chạy mô phỏng từng bước, từng bước
một trên máy tính, bằng MPLAB chẳng hạn, có vẽ như mọi chuyện đều tốt, bạn đem nạp
vào con Pic. Sau một thời gian chạy thử, con Pic thình lình bị kẹt vào nơi nào đó trong
chương trình mà không thể thoát ra được trạng thái hiện tại. Điều gì là cần thiết để giải
quyết hai trường hợp trên, reset lại hay vẫn để cho nó bị kẹt không thoát ra được ?, đó là
mụch đích của mạch watchdog.
Mạch watchdog thì không phải là mới mẽ gì, có rất nhiều microprocessors và
microcontrollers đã có mạch watchdog, nhưng mà nó làm việc ra sao?.
Bên trong con Pic có một mạch RC, mạch này cung cấp 1 xung Clock độc lập với
bất kỳ xung Clock nào cung cấp cho Pic. Khi Watchdog Timer (viết tắt là WDT) được
cho phép (enabLed), nó sẽ đếm bắt đầu từ 00 và tăng lên 1 cho đến FFh, khi nó tăng từ
FFh đến 00 ( FFh+1) thì con Pic sẽ bị Reset bất kể đang làm gì, chỉ có 1 cách là ngăn
không cho WDT đếm tới 00.
Khi con Pic bị kẹt không thể thoát ra khỏi tình trạng hiện tại thì WDT vẫn tiếp tục
đếm mà không bị bất kỳ điều gì ngăn cấm nó đếm tới FF và đến FF+1, vì vậy nó sẽ reset
con Pic làm cho chương trình phải khởi động lại từ đầu.
Để sử dụng WDT chúng ta cần làm 3 việc.
Thứ nhất, cần thời gian bao lâu để reset WDT?.
Thứ hai, làm sao xoá WDT?.
Cuối cùng, chúng ta phải nói cho con Pic biết chương trình cho phép WDT hoạt động.
1.4 . Tổ chức bộ nhớ:
PIC16F877A có tất cả 3 khối bộ nhớ riêng biệt bao gồm: Bộ nhớ chương trình,
Bộ nhớ dữ liệu và Bộ nhớ EEPROM

1.4.1 Bộ nhớ chương trình
PIC16F877A có bộ đếm chương trình dài 13 bits có thể định địa chỉ cho khoảng không
gian nhớ 8K x 14bits. Không gian bộ nhớ này được chia làm 4 trang, có địa chỉ từ 0005h
đến 1FFFh.

Mọi sự truy cập ngoài vùng không gian nhớ này sẽ không có tác dụng.
Ngoài ra, bộ nhớ chương trình còn bao gồm một ngăn xếp (Stack) 8 mức.
Vector Reset được đặt tại địa chỉ 0000h và vector ngắt được đặt tại địa chỉ 0004h.
1.4.2 Bộ nhớ dữ liệu

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 13


ĐỒ ÁN TỐT NGHIỆP

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

GVHD:TỐNG THÀNH NHÂN

- 14


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Bộ nhớ dữ liệu bao gồm 4 Bank: Bank 0, Bank1, Bank2 và Bank3. Mỗi bank có
dung lượng 128 Bytes, bao gồm vùng Ram đa mục đích (GPR) và vùng thanh ghi chức
năng đặc biệt (SFR).
Các Bank này được lựa chọn bằng 2 bit ở thanh ghi STATUS là RP0(Status<5>)
và RP1(Status<6>).
BẢNG 1.5


1.4.2.1 Vùng Ram đa mục đích
Vùng RAM đa mục đích có chiều rộng 8 bit và có thể được truy nhập trực tiếp hoặc gián
tiếp thông qua thanh ghi FSR. Vùng RAM đa mục đích đựơc phân phối ở các Bank như
sau:
- Bank 0: 96 Bytes từ địa chì 20h đến địa chỉ 7Fh.
- Bank 1: 80 Bytes từ địa chì A0h đến địa chỉ EFh.
- Bank 2: 96 Bytes từ địa chì 110h đến địa chỉ 16Fh.
- Bank 1: 96 Bytes từ địa chì 190h đến địa chỉ 1EFh.
1.4.2.2 Vùng Ram thanh ghi chức năng đặc biệt
Các thanh ghi chức năng đặc biệt được sử dụng bởi bộ xử lí trung tâm CPU hoặc
các module ngoại vi để điều khiển hoạt động của VĐK. Các thanh ghi chức năng đặc biệt
này được chia làm 2 loại: loại thứ nhất dùng cho các chức năng của CPU, loại thứ 2 dùng
cho các chức năng ngoại vi.

1.4.2.3 Các thanh ghi chức năng đặc biệt
1.4.2.3.1 Thanh gi trạng thái (status register)
Thanh ghi trạng thái chứa các trạng thái số học của bộ ALU, trạng thái Reset và các bit
chọn Bank của bộ nhớ dữ liệu.

Bit 6 – 5

RP1 – RP0: bit lựa chọn bank thanh ghi (Dùng trong định điạ chỉ trực tiếp)

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 15


ĐỒ ÁN TỐT NGHIỆP


Bit 4
Bit 3
Bit 2
Bit 1
Bit 0

GVHD:TỐNG THÀNH NHÂN

TO: time out bit
1: Lệnh xóa WDT hoặc Sleep xảy ra.
0: WDT hoạt động.
PD: Power down bit
1: Sau khi nguồn tăng hoặc có lệnh xóa WDT
0: Thực thi lệnh Sleep
Z: bit Zero
1: Khi kết quả của một phép toán bằng 0.
0: Khi kết quả của một phép toán khác 0.
DC: Digit Carry
1: Có một số nhớ được sinh ra bởi phép cộng hoặc phép trừ 4 bit thấp.
0: không có số nhớ sinh ra.
C: cờ nhớ (Carry Flag)
1: Có một số nhớ sinh ra bởi phép cộng hoặc phép trừ.
0: Không có số nhớ sinh ra.

1.4.2.3.2 Thanh ghi tùy chọn (Option _Reg Register)

Bit 7
Bit 6
Bit 5
Bit 4

Bit 3

RBPU: bit cho phép PORTB được kéo lên nguồn
1: Không cho phép PORTB kéo lên nguồn.
0: Cho phép PORTB kéo lên nguồn.
INTEDG: bit lựa chọn cạnh tác động ngắt
1: Ngắt sẽ được tác động bởi cạnh lên của chân RB0/INT
0: Ngắt sẽ được tác động bởi cạnh xuống của chân RB0/INT
T0CS: bit lựa chọn nguồn xung Clock cho Timer 0
1: Xung Clock cung cấp bởi nguồn ngoài qua chân RA4/T0CKI
0: Xung Clock cung cấp bởi nguồn dao động nội.
T0SE: bit lựa chọn cạnh nào của xung clock tác động lên timer 0
1: cạnh xuống
0: cạnh lên
PSA: bit quyết định tốc độ đếm PS2:PS0 sẽ tác động lên Timer 0 hay
WDT
1: tốc độ đếm PS2:PS0 sẽ tác động lên WDT

1.4.2.3.3 Thanh ghi điều khiển ngắt INTCON (Interrupt Control Register):

Bit 7

GIE: bit cho phép ngắt toàn cục

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 16


ĐỒ ÁN TỐT NGHIỆP


Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0

GVHD:TỐNG THÀNH NHÂN

1: Cho phép ngắt toàn cục
0: không cho phép ngắt
PEIE: bit cho phép ngắt ngọai vi
1: cho phép ngắt ngoại vi
0: không cho phép
TMR0IE: bit cho phép ngắt khi timer 0 tràn
1: cho phép
0: không cho phép
INTE:bit cho phép ngắt ngoài RB0/INT
1: cho phép
0: không cho phép
RBIE: cho phép ngắt khi trạng thái PORTB thay đổi
1: cho phép
0: không cho phép
TMR0IF: cờ báo ngắt Timer 0
1: Timer0 tràn
0: timer 0 chưa tràn
INTF: cờ báo ngắt ngoài RB0/INT
1: có ngắt

0: không xảy ra ngắt.
RBIF: cờ báo ngắt khi có thay đổi trạng thái PORTB
1: có thay đồi
0: không có thay đổi xảy ra trên PORTB

1.4.2.3.4 Thanh ghi cho phép ngắt ngoại vi 1:

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngọai vi nào
xảy ra.
Bit 7
PSPIE: bit cho phép ngắt đọc/ ghi Port song song
1: cho phép
0: không cho phép
Bit 6
ADIE: bit cho phép ngắt chuyển đổi A/D
1: cho phép
0: không cho phép
Bit 5
RCIE: bit cho phép ngắt nhận USART
1: cho phép
0: không cho phép
Bit 4
TXIE: bit cho phép ngắt truyền USART
1: cho phép
0: không cho phép
Bit 3
SSPIE: bit cho phép ngắt Port nối tiếp đồng bộ
1: cho phép
0: không cho phép
SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG


- 17


ĐỒ ÁN TỐT NGHIỆP
Bit 2
Bit 1
Bit 0

GVHD:TỐNG THÀNH NHÂN

CCP1IE: bit cho phép ngắt module CCP1
1: cho phép ngắt
0: không cho phép
TMR2IE: bit cho phép ngắt khi thanh ghi TMR2 bẳng thanh ghi PR2
1: cho phép
0: không cho phép
TMR1IE: bit cho phép ngắt tràn TMR1
1: cho phép
0: không cho phép

1.4.2.3.4 Thanh ghi cờ của các ngắt ngoại vi 1:

Bit 6
Bit 5
Bit 4
Bit 3

Bit 2


Bit 1

Bit 0

Bit 7
PSPIF: cờ ngắt đọc ghi của Port song song
1: một hoạt động đọc/ghi đã diễn ra (phải xóa bằng phần mềm)
0: không có hoạt động đọc/ghi.
ADIF: cờ báo ngắt chuyển đổi A/D
1: một quá trình chuyển đổi A/D đã hoàn thành
0: chuyển đổi A/D chưa hoàn tất
RCIF: cờ báo ngắt nhận USART
1: Buffer nhận USARt đầy
0: Buffer nhận USART trống.
TXIF: cờ báo ngắt phát USART
1: buffer truyền USART trống
0: buffer truyền USART đầy
SSPIF: cờ báo ngắt port nối tiếp đồng bộ (ngắt SSP)
1: ngắt SSP xảy ra và phải được xóa bằng phần mềm trước khi trở lại
chương trình chính từ chương trình phục vụ ngắt.
0: không có nắgt xảy ra
CCP1IF: cờ báo ngắt CCP1
Chế độ Capture (Bắt giữ):
1: một capture thanh ghi TMR1 xảy ra( phải được xóa bằng phần mềm)
0: không xảy ra capture thanh ghi TMR1
Chế độ Compare ( So sánh):
1: một thuật toán so sánh thanh ghi TMR1 xảy ra ( phải được xóa bằng
phần mềm)
0: không xảy ra thuật toán so sánh
Chế độ PWM: không sử dụng trog chế độ này

TMR2IF: cờ báo ngắt xảy ra khi giá trị trong thanh ghi TMR2 bằng trong
thanh ghi PR2
1: giá trị trong thanh ghi TMR2 bằng thanh ghi PR2 (phải được xóa bằng
phần mềm)
0: giá trị trong thanh ghi TMR2 chưa bằng thanh ghi PR2
TMR1IF: cờ báo tràn thanh ghi TMR1

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 18


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1: thanh ghi TMR1 tràn (phải được xóa bắng phần mềm)
0: thanh ghi TMR1 chưa tràn
1.4.2.3.5 Thanh ghi cho phép ngắt ngoại vi 2:

Chú ý: Bit PEIE (INTCON<6>) phải được set để cho phép bất kì ngắt ngoại vi nào
xảy ra.
Bit 7,5,2,1
Bit 6

Unimplemented : read as ‘0’
CMIE: bi cho phép ngắt do bộ so sánh điện thế
1: cho phép
0: không cho phép
Bit 4

EEIE: bi cho phép ngắt do ghi EEPROM
1: cho phép
0: không cho phép
Bit 3
BCLIE: bit cho phép ngắt do xung đột bus
1: cho phép
0: không cho phép
Bit 0
CCP2IE: cho phép ngắt d0 module CCP2
1: cho phép
0: không cho phép
1.4.2.3.6 Thanh ghi cờ của các ngắt ngọai vi 2:

Bit 7,5,2,1
Bit 6

Unimplemented : read as ‘0’
CMIF: cờ báo ngắt do bộ so sánh
1: ngõ vào bộ so sánh đã thay đổi (phải được xóa bằng phần mềm)
0: ngõ vào bộ so sánh không thay đổi.
Bit 4
EEIF: cờ báo ngắt ghi EEPROM
1: ghi EEPROM hoàn tất (phải được xóa bằng phần mềm)
0: ghi EEPROM chưa hoàn tất.
Bit 3
BCLIF: cờ báo ngắt do xung đột bus
1: xung đột bus đã xuất hiện
0: không có xung đột bus xảy ra
Bit 0
CCP2IF: cờ báo ngắt CPP2

Chế độ Capture (bắt giữ):

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 19


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1: một sự bắt giữ thanh ghi TMR1 đã xảy ra (phải được xóa bằng phần
mềm)
0: không xảy ra capture thnh ghi TMR1
1.4.2.3.7 Thanh ghi điều khiển nguồn (Power control register):

Bit 7-2
Unimplemented : read as ‘0’
Bit 1
POR:
Bit 0
BOR:
1.4.2.5 Ngăn xếp Stack:
Stack cho phép 8 lệnh gọi chương trình con và ngắt hoạt động. Stack chứa địa chỉ mà
chương trình chính sẽ quay về thực hiện từ sau chương trình con hay ngắt. Đối với
PIC16F877A Stack có độ sâu 8 lớp.Stack không nằm trong cả bộ nhớ chương trình lẫn bộ
nhớ dữ liệu.

1.4.2.6 Địa chỉ trực tiếp và địa chỉ gián tiếp, thanh ghi INF và thanh ghi
FSR:

Thanh ghi INF không phải là một thanh ghi vật lí. Nó chứa giá trị của thanh ghi có địa
chỉ nằm ở thanh ghi FSR.
Ví dụ:
Thanh ghi tại địa chỉ 10h có giá trị 5Ah
Nếu ta đưa 10h vào thanh ghi FSR thì khi đọc thanh ghi INF ta sẽ có giá trị 5Ah.

1.5Data EEPROM và Flash Program Memory:
EEPROM là bộ nhớ có khả năng đọc và ghi trong điều kiện làm việc bình thường
(khi nguồn Vdd không đổi). Bộ nhớ này không được định địa chỉ trực tiếp trong bản
đồ bộ nhớ mà được định địa chỉ gián tiếp thông qua các thanh ghi chức năng đặc biệt:
- EECON1
- EECON2
- EEDATA
- EEDATH
- EEADR
- EEADRH
1.6 I/O ports:
1.6.1 Port A và thanh ghi TRISA:
Port A gồm 6 chân từ RA0 đến RA5(I/O pin).Chức năng I/O này được điều khiển
bởi thanh ghi TRIS A.Nếu là 1 thì là input, nếu 0 thì là output ). Việc đọc thanh ghi Port
A sẽ đọc trạng thái của các chân ở Port A. Việc ghi giá trị vào thanh ghi Port A sẽ thay
đổi trạng thái của các chân Port A.
Riêng chân RA4 được tích hợp chức năng là chân cung cấp xung clock
ngoài cho Timer 0 (RA4/T0CKI). Những chân khác của Port A được đa hợp với
SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 20


ĐỒ ÁN TỐT NGHIỆP


GVHD:TỐNG THÀNH NHÂN

các chân ngõ vào Analog của ADC và chân ngõ vào điện thế so sánh của bộ so
sánh Comparator.Hoạt động của những chân này được quy định bằng những bit
tương ứng trong các thanh ghi ADCCON1 và CMCON1. Khi các chân của Port A
được sử dụng làm ngõ vào Analog thì các bit trong thanh ghi TRISA phải được
set bằng 1.
1.6.2 Port B và thanh ghi TRISB:
PORT B gồm 8 pin I/O.Thanh ghi điều khiển xuất nhập tương ứng là TRIS B.
Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger và Low Voltage
Programming function: RB3/PGM, RB6/PGC, RB7/PGD.
Mỗi chân Port B có một transistor kéo lên Vdd. Chức năng này hoạt động khi bit
RBPU (Option <7>) được xóa.Chức năng này sẽ tự động được xóa khi Port B được
quy định là input.
Bốn chân của Port B từ RB7 đến RB4 có chức năng ngắt khi trạng thái chân Port B
thay đổi (Khi Port B được quy định là output thì chức năng này không hoạt động. Giá
trị chân của Port được so sánh với giá trị đã được lưu trước đó, khi có sự sai lệch
giữa 2 giá trị này ngắt sẽ xảy ra với cờ ngắt RBIF (INTCON<0) sẽ bật lên. Ngắt có
thể làm cho VĐK thoát khỏi trạng thái SLEEP.
Bất cứ sự truy xuất nào trên Port B sẽ xóa trạng thái sai lệch, kết thúc ngắt và
cho phép xóa cờ ngắt RBIF.
1.6.3 Port C và thanh ghi TRISC:
Port C gồm 8 chân từ chân RC0-RC7. Thanh ghi điều khiển xuất nhập tương ứng
là TRIS C.Bên cạnh đó Port C còn chứa chức năng của bộ so sánh,bộ Timer1,bộ
PWM,và các chuẩn giao tiếp I2C,SPI,SSP,USART.
Các thanh ghi điều khiển liên quan đến PORT C:
PORTC(địa chỉ 07h) :chứa giá trị các pin trong PORTC
TRISC(địa chỉ 87h) :điều khiển xuất nhập
1.6.4 Port D và thanh ghi TRISD:

Port D gồm 8 chân từ chân RD0-RD7,thanh ghi điều khiển xuất nhập tương ứng là
TRISD. Bên cạnh chức năng là port xuất nhập, Port D còn có thể hoạt động như một
cổng song song bằng cách set bit PSPMODE (TRISE<4>), trong chế độ này buffer ngõ
vào là TTL
1.6.5 Port E và thanh ghi TRISE
Port E có 3 chân RE0/RD/AN5, RE1/WR/AN6, RE2/CS/AN7 có thể được cấu
hình như các chân xuất nhập thông thường.
Các chân của Port E có thể trở thành cc1 chân điều khiển cho cổng song song của
VĐK khi bit PSPMODE (TRISE<4>) được set bằng 1. Trong chế độ này, người sử
dụng phải đảm bảo các chân của Port E là ngõ vào.
Ngoài ra các chân Port E còn có thể được cấu hình như các ngõ vào Analog, tại chế
độ này, khi đọc giá trị của các chân này sẽ cho ta giá trị là 0.
Thanh ghi TRISE quy định chức năng xuất nhập của Port E ngay cả khi nó được sử
dụng như các ngõ vào Analog. Phải đảm bảo các chân này được quy định là ngõ vào
trong chế độ này.

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 21


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

1.7 Timers:
1.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.Timer 0 là bộ đếm 8 bit được kết hợp với bộ chia tần số(prescaler) 8
bit.Cấu trúc của Timer 0 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 Timer 0 sẽ xuất hiện khi Timer 0 bị tràn.Bit TMR0IE là bit

điều khiển của Timer 0. TMR0IE=1 cho phép ngắt Timer 0 tác động, TMR0IE=0
không cho phép ngắt Timer 0 tác động.
Muốn Timer 0 hoạt động ở chế độ Timer ta clear bit TOSC
(OPTION_REG<5),khi đó giá trị TMR0 sẽ tăng theo chu kỳ xung đồng hồ (tần số
Timer 0 bằng ¼ tần số oscillator).
Ngắt Timer 0 xuất hiện khi TMR0 từ FFh trở về 00h.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 clock tác động lên bộ đếm được lấy từ chân RA4/TOCK1.Bit TOSE
(OPTION_REG<4) cho phép ta lựa chọn cạnh tác đông vào port đế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.
Khi thanh ghi TMR0 bị tràn ,bit TMR0IF(INTCON<2) sẽ được set.Đay chính
là cờ ngắt của Timer 0.Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm
thực hiện lại quá trình đếm.
Ngắt Timer 0 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ó ngĩa là nếu prescaler được sử dụng cho Timer0 thì
WDT sẽ không có sự hộ trợ của prescaler và ngược lại.Prescaler được điều khiển bởi
thanh ghi OPTION_REG

1.7.1 Timer 1 :
1.7.1.1 Giới thiệu :
Timer 1 là một bộ định thời/ đếm 16 bit bao gồm hai thanh ghi 8 bit (TMR1H và
TMR1L), có khả năng đọc được và ghi được. Cặp thanh ghi TMR1H và TMR1L sẽ tăng
từ 0000h lên FFFFh rồi sau đó tràn về 0000h. Nếu được cho phép (bit TMR1IE được set),
ngắt sẽ xảy ra khi giá trị TMR1 tràn từ FFFFh về 0000h, lúc đó cờ ngắt TMR1IF sẽ bật
lên.
Thanh ghi điều khiển Timer 1:


Bit 7,6
Bit 5,4

Bit 3

Không sử dụng, đọc là 0.
T1CKPS1 : T1CKPS0 :các bit chọn tỉ lệ xung ngõ vào cho Timer1.
11
1 : 8 giá trị tỉ lệ
10
1 : 4 giá trị tỉ lệ
01
1 : 2 giá trị tỉ lệ
00
1 : 1 giá trị tỉ lệ
T10SCEN : bit cho phép bộ dao động Timer 1 Oscillator
1 : cho phép dao động

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 22


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

0 : không cho phép dao động
Bit 2


T1SYNC: bit lựa chọn đồng bộ hóa xung clock ngoài của Timer
1(Chú ý: bit này chỉ có tác dụng khi bit TMR1CS = 1)
1: không đồng bộ hóa xung clock ngoại
0: đồng bộ hóa xung clock ngoại.
Bit 1
TMR1CS: bit chọn nguồn xung clock cho Timer 1
1: chọn xung clock ngoài qua chân T1OSC/T1CKI ( tác động cạnh
lên)
0: chọn xung clock nội (Fosc/4)
Bit 0
TMR1ON: bit cho phép ngoặc ngưng Timer 1
1: cho phép
0: không cho phép
1.7.1.1 Chế độ định thời trong hoạt động của Timer 1 :
Chế độ định thời được lựa chọn bằng cách xóa bit TMR1CS (T1CON<1>). Trong
chế độ này, xung clock cung cấp cho Timer 1 là Fosc/4, bit đồng bộ T1SYNC
(T1CON<2>) không có tác dụng vì xung clock nội đã luôn luôn được đồng bộ.
1.7.1.2 Chế độ đếm
Timer 1 có thể hoạt động ở cả chế độ đồng bộ hoặc bất đồng bộ tùy thuộc vào việc cài
đặt bit TMR1CS (T1CON<1>).
1.7.1.2.1 Đếm đồng bộ :
Chế độ này được lựa chọn bằng cách set bit TMR1CS và xóa bit T1SYNC. Trong chế
độ này giá trị của Timer 1 sẽ tăng khi có xung cạnh lên trên chân T1OSI/RC1 ( nếu bit
T1OSCEN được set) hoặc trên chân T1OSO (nếu bit T1OSCEN được xóa).
1.7.1.2.2 Đếm bất đồng bộ :
Nếu bit T1SYNC được set, xung clock ngoài sẽ không được đồng bộ hóa. Bộ định thời
sẽ tiếp tục đếm trong suốt quá trình Sleep của VĐK và có khả năng tạo ra một ngắt khi bộ
định thời tràn và làm VĐK thoát khỏi trạng thái ngủ.
* Một số đặc điềm lưu ý khi đọc ghi vào Timer :
- Việc đọc thanh ghi TMR1H hoặc TMR1L trong khi bộ định thời đang chạy từ

một nguồn xung clock ngoài không đồng bộ sẽ cho giá trị tức thời (không phải ngưng
Timer lại). Tuy nhiên, phải chú ý rằng việc đọc Timer 1 sẽ phải bao gồm 2 lần đọc giá trị
8 bit, do đó có thể phát sinh vấn đề là Timer có thể bị tràn giữa 2 lần đọc.
- Để ghi vào Timer tốt nhất chúng ta nên dừng Timer lại và ghi giá trị chúng ta
mong muốn . Chúng ta có thể ghi giá trị váo khi Timer đang chạy nhưng việc đó có thể
tạo ra một giá trị không như mong muốn.
1.7.1.3 Dao động của Timer 1 :

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 23


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Chúng ta có thể tạo một bộ dao động độc lập cho Timer 1 bằng cách sử dụng
thạch anh có tần số tối đa 20Khz.Với bộ dao động này Timer có thể đếm ngay cả khi
VĐK rơi vào trạng thái ngủ.
1.7.1.4 Ngắt Timer 1 :
Khi ngắt được cho phép, nó sẽ xảy ra khi Timer tràn từ giá trị FFFFh xuống
0000h. Khi xảy ra tràn, cờ báo ngắt TMR1IF sẽ bật lên, cờ này phải được xóa bằng phần
mềm trước khi thóat khỏi chương trình phục vụ ngắt trở về chương trình chính.
Lưu ý : ngắt của Timer 1 ở chế độ định thời và chế độ đếm đồng bộ không làm
cho VĐK thoát khỏi trạng thái ngủ, chỉ có ngắt ở chế độ đếm bất đồng bộ mới làm cho
VĐK thoát khỏi trạng thái ngủ.
Các thanh ghi liên quan đến Timer 1 :

1.7.2Timer 2 :

1.7.2.1Giới thiệu :
Timer 2 là một bộ định thời 8 bit bao gồm hai bộ chia tần số prescaler và
postcale.Timer 2 cung cấp thời gian hoạt động cho chế độ PWM nếu module CCP được
chọn. Thanh ghi TMR2 là môt thanh ghi có thê đọc và ghi được, nó bị xóa bởi bất cứ tác
đông reset nào.
Xung clock ngõ vào (Fosc/4) có các tùy chọn tỉ lệ là 1 :1, 1 :4, 1 :16, được lựa
chọn bằng các bit điều khiển T2CKPS1 : T2CKPS0 (T2CON<1 :0>).

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 24


ĐỒ ÁN TỐT NGHIỆP

GVHD:TỐNG THÀNH NHÂN

Timer 2 có một thanh ghI khoảng thời gian 8 bit PR2, đây là một thanh ghi có
khả năng đọc được và ghi được. Timer 2 sẽ tăng từ 00h đến khi bằng giá trị ở thanh ghi
PR2 nó sẽ reset về 00h ở chu kỳ tăng tiếp theo.
Thanh ghi điều khiển T2CON

Bit 7
Bit 6:3

Bit 2
Bit 1:0

không sử dụng
TOUTPS3:TOUTPS0: bit chọn tỉ lệ ngõ ra của Timer 2

0000: 1:1
0001: 1:2
.
.
.
1111: 1:16F877A
TMR2ON: bit cho phép hoạt động của Timer 2
1: cho phép
0: không cho phép.
T2CKPS1:T2CKPS0: bit chọn tỉ lệ xung clock của Timer 2
00 : prescaler 1
01 : prescaler 4
1x : prescaler 16

1.7.2.2 Bộ prescaler va postcaler :
Hai bộ đếm prescaler và postcaler sẽ bị xóa bởi một trong các nguyên nhân sau đây :
- Ghi một giá trị vào thanh ghi TMR2
- Ghi môt giá trị váo thanh ghi TCON2
- Bất cứ một reset thiết bị nào.
Thanh ghi TMR2 không bị xóa khi thanh ghi TCON2 được ghi.

SVTH:ĐÀO VĂN HOAN-TÔ NGỌC QUANG

- 25


×