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

CHƯƠNG II TỔNG QUAN về VI điều KHIỂN PIC

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 (679.38 KB, 22 trang )

[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

2.1 Vi điều khiển Pic
2.1.1 Sơ lược về Pic

PIC là một họ vi điều khiển RISC được sản xuất bởi công ty Microchip
Technology. Dòng PIC đầu tiên là PIC1650 được phát triển bởi Microelectronics
Division thuộc General_Instrument. PIC bắt nguồn từ chữ viết tắt của
“Programmable Intelligent Computer” (Máy tính khả trình thông minh) là một sản
phẩm của hãng General Instruments đặt cho dòng sản phẩm đầu tiên của họ là
PIC1650. Lúc này, PIC 1650 được dùng để giao tiếp với các thiết bị ngoại vi cho
máy chủ 16 bit CP1600, vì vậy, người ta cũng gọi PIC với tên “Peripheral Interface
Controller” (Bộ điều khiển giao tiếp ngoại vi). CP1600 là một CPU tốt, nhưng lại
kém về các hoạt động xuất nhập, và vì vậy PIC 8-bit được phát triển vào khoảng
năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600. PIC sử dụng microcode đơn
giản đặt trong ROM, và mặc dù, cụm từ RISC chưa được sử dụng thời bấy giờ,
nhưng PIC thực sự là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu
kỳ máy (4 chu kỳ của bộ dao động). Năm 1985 General Instruments bán bộ phận vi
điện tử của họ, và chủ sở hữu mới hủy bỏ hầu hết các dự án – lúc đó quá lỗi thời.
Tuy nhiên, PIC được bổ sung EPROM để tạo thành 1 bộ điều khiển vào ra khả
trình. Ngày nay rất nhiều dòng PIC được xuất xưởng với hàng loạt các module
ngoại vi tích hợp sẵn (như USART, PWM, ADC…), với bộ nhớ chương trình từ
512 Word đến 32K Word.
2.1.2
PIC 16F877A
PIC 16F877A là dòng PIC phổ biến nhất hiện nay (đủ mạnh về tính năng, 40
chân, bộ nhớ đủ cho hầu hết các ứng dụng thông thường). Cấu trúc tổng quát của
PIC 16F877A như sau:
- 8 K Flash ROM.


- 368 Bytes RAM.
- 256 Bytes EEPROM.
- 5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập.
- 2 bộ định thời 8 bits (Timer 0 và Timer 2).
- Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm
năng lượng (SLEEP MODE) với nguồn xung Clock ngoài.
- 2 bô CCP( Capture / Compare/ PWM).
- 1 bộ biến đổi AD 10 bits, 8 ngõ vào.
- 2 bộ so sánh tương tự (Compartor).
- 1 bộ định thời giám sát (WatchDog Timer).
- Một cổng song song 8 bits với các tín hiệu điều khiển.
- Một cổng nối tiếp.
- 15 nguồn ngắt.
- Có chế độ tiết kiệm năng lượng.
- Nạp chương trình bằng cổng nối tiếp ICSP(In-Circuit Serial Programming)
Trường CĐKT Cao Thắng

Trang 1


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

- Được chế tạo bằng công nghệ CMOS
- 35 tập lệnh có độ dài 14 bits.
- Tần số hoạt động tối đa 20MHz.
2.1.2.1

Sơ đồ chân :


Hình 2.1.2.1: Sơ đồ chân của Pic
PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức năng
khác nhau.Trong đó có một số chân đa công dụng: mỗi chân có thể hoạt động như
một đường xuất nhập hoặc là một chân chức năng đặc biệt dùng để giao tiếp với
các thiết bị ngoại vi.(chi tiết xem phần phụ lục)
2.1.2.2 Sơ đồ khối Pic:

Trường CĐKT Cao Thắng

Trang 2


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.1.2.2: Sơ đồ khối của Pic
2.1.3
Một số đặc điểm đặc biệt của P16F877A
2.1.3.1 Dao động
PIC16F877A có thể hoạt động trong bốn chế độ dao động khác nhau:
LP,XT,HS,RC
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.

Trường CĐKT Cao Thắng

Trang 3



[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

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

Bảng 1: Cách chọn giá trị tụ cho thạch anh
Lưu ý: Tụ có giá trị lớn sẽ tăng tính ổn định của dao động nhưng cũng làm
tăng thời gian khởi động.
Chế độ dao động RC được sử dụng như một giải pháp tiết kiệm trong các
ứng dụng không cần sự chính xác về thời gian.

Hình 2.1.3.1:Dao động RC
2.1.3.2Reset
PIC16F877A có một bộ lọc nhiễu ở phần MCLR. Bộ lọc nhiễu này sẽ phát
hiện và bỏ qua các tín hiệu nhiễu.
Trường CĐKT Cao Thắng

Trang 4


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Ngõ vào MCLR trên chân 1 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 xuống mức thấp).

Hình 2.1.3.2: Sơ đồ chân Reset
2.1.3.3 Interupt
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.
Hình 2.1.3.3: Sơ đồ ngắt
2.1.3.4 Sleep
Đây là chế độ hoạt động của VĐK khi
lệnh sleep được thực thi. Khi đó nếu được cho
phép hoạt động, bộ đếm của WDT sẽ bị xóa
nhưng WDT vẫn tiếp tục hoạt động bit PD
(STATUS <3>) được reset về không, bit TO

Trường CĐKT Cao Thắng


Trang 5


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

được set, oscillator ngưng hoạt động và các PORT giữ nguyên trạng thái như trước
khi lệnh sleep được thực thi.
Do khi chế độ sleep dòng cung cấp cho VĐK là rất nhỏ nên ta cần thực hiện
các bước sau trước khi VĐK thực thi lệnh sleep.
• Đưa tất cả các chân về trạng thái VDD hoặc VSS.
• Cần đảm bảo rằng không có mạch ngoại vi nào được điều khiển bởi dòng
điện của VĐK vì dòng điện nhỏ không đủ khả năng cung cấp cho các mạch ngoại
vi hoạt động.
• Tạm ngưng hoạt động của khối A/D và không cho phép các xung clock
bên ngoài tác dụng vào VĐK.
• Để ý chức năng điện trở kéo lên của PORTB.
• Pin MCLR phải ở mức logic cao.
2.1.3.5 Watch dog Timer (WDT)
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.

Trường CĐKT Cao Thắng

Trang 6


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.1.3.5: Sơ đồ WDT
2.1.4
Bộ nhớ của Pic16F877A
Bộ nhớ của Pic 16f877a bao gồm bộ nhớ chương trình và bộ nhớ dữ liệu.
2.1.4.1 Bộ nhớ chương trình
Bộ nhớ chương trình của Pic16F877A là bộ nhớ Flash, dung lượng bộ nhớ
là 8K word và được chia thành 4 trang. Để mã hóa được địa chỉ của 8K word bộ
nhớ chương trình,bộ đếm chương trình có dung lượng 13bit.
Khi Reset bộ đếm chương trình sẽ trở về địa chỉ 00H khi có ngắt bộ đếm
chương trình sẽ chỉ đến địa chỉ 04H.

Hình 2.1.4.1: Bộ nhớ chương trình
của Pic
2.1.4.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của Pic là bộ nhớ EEPROM được chia làm 4 bank
.Mỗi bank có dung lượng 128 byte bao gồm các thanh ghi đặc biệt và các thanh ghi
mục đích chung.

Hình 2.1.4.2: Bộ nhớ dữ liệu của Pic
2.1.4.2.1 Vùng Ram mục đích chung

Trường CĐKT Cao Thắng

Trang 7


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

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 3: 96 Bytes từ địa chỉ 190h đến địa chỉ 1EFh.
2.1.4.2.2 Vùng thanh ghi chức năng
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.
2.1.4.3 Bộ đếm chương trình
Bộ đếm chương trình PC (program counter) có độ dài 13 bit, được dùng để
chứa địa chỉ của lệnh được thực thi kế tiếp. Byte thấp chứa trong thanh ghi PCL có
thể đọc/ghi một cách trực tiếp. Các bit cao (bit 12:8) chứa trong thanh ghi
PCLATH, không thể đọc nhưng có thể ghi gián tiếp bằng cách sử dụng thanh ghi
PCLATH. Khi có bất kỳ sự Reset nào xảy ra, các bit cao của bộ đếm chương trình

PC sẽ bị xóa. Xem thêm hai ví dụ sau đây để hiểu thêm về hoạt động của bộ đếm
chương trình PC.

Hình 2.1.4.3: Sơ đồ bộ đếm chương trình
2.1.4.4 Bộ nhớ 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.
2.2 Các khối chức năng của Pic16F877A
2.2.1
Các cổng xuất nhập của Pic16F877A
Trường CĐKT Cao Thắng

Trang 8


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

2.2.1.1 PORTA và ghi TrisA
PORTA có độ rộng 6 bit , là port vào ra hai chiều .Thanh ghi dữ liệu trực
tiếp tương ứng là TRISA . Cho tất cả các bit của TRISA là 1 thì các chân tương
ứng ở PORTA là ngõ vào. Cho tất cả các bit của TRISA là 0 thì các chân tương ứng
ở PORTA là ngõ ra .Việc đọc các thanh ghi của PORTA sẽ đọc trạng thái của những
chân , ngược lại việc ghi lên nó sẽ ghi qua port chốt . Tất cả những hoạt động ghi là
các hoạt động đọc-điều chỉnh-ghi . Bởi vậy , dữ liệu được ghi đến port có nghĩa là
những chân của port là đọc , giá trị được chỉnh sửa và được ghi vào port chốt dữ
liệu .

Chân RA4 được đa hợp với xung clock ngoài ở ngõ vào của Timer0 thành
chân RA4/T0CKI . Chân RA4/T0CKI là ngõ vào có một Trigger Schmitt và một
ngõ ra có dạng thoát mở . Tất cả những chân khác của PORTA có ngõ vào TTL và
có ngõ ra điều khiển CMOS .
Những chân khác của PORTA được đa hợp với ngõ vào tương tự và ngõ vào
tương tự VREF . Hoạt động của mỗi chân được chọn bằng cách xoá hoặc đặt những
bit điều khiển trong thanh ghi ADCON1 ( A/D Control Register1 ).
Thanh ghi TRISA điều khiển hướng của những chân RA , ngay cả khi chúng
được sử dụng như ngõ vào tương tự . Người sử dụng cần phải chắc rằng những bit
trong thanh ghi TRISA luôn luôn được đặt khi sử dụng chúng như ngõ vào tương
tự .

Hình 2.2.1.1: PortA và thanh ghi TrisA
Các thanh ghi SFR liên quan đến PortA
Trường CĐKT Cao Thắng

Trang 9


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

PortA (05H): chứa giá trị các Pin trong PortA.
TrisA (85H): Điều khiển xuất nhập.
CMCON (9CH): thanh ghi điều khiển bộ so sánh.
CVRCON (9DH): thanh ghi điều khiển bộ so sánh điện áp.
ADCON1 (9FH): thanh ghi điều khiển bộ ADC.
2.2.1.2 PortB và thanh ghi TrisB
PORTB có độ rộng 8 bit , là port vào ra hai chiều . Ba chân của PORTB

được đa hợp với chức năng lập trình mức điện thế thấp (Low Voltage Programming
) : RB3/PGM , RB6/PGC và RB7/PGD . Mỗi chân của PORTB có một điện trở kéo
lên yếu ở bên trong . Một bit điều khiển đơn có thể mở tất cả những điện trở kéo
lên này .Điều này được thực hiện bằng cách xóa bit RBPU (OPTION_REG<7>) .
Những điện trở kéo lên này sẽ tự động tắt khi các chân của port được cấu hình như
ngõ ra . Các
điện trở này bị cấm khi có một Power-on Reset .
Bốn chân của PORTB , RB7:RB4 ,có một ngắt để thay đổi đặc tính . Chỉ
những chân được cấu hình như ngõ vào mới có thể gây ra ngắt này . Những chân
vào ( RB7:RB4 ) được so sánh với giá trị được chốt trước đó trong lần đọc cuối
cùng của PORTB .Các kết quả không phù hợp ở ngõ ra
trên chân RB7: RB4 được OR với nhau để phát ra một ngắt Port Change
RB với cờ ngắt là RBIF ( INTCON<0> ) . Ngắt này có thể đánh thức thiết bị từ
trạng thái nghĩ ( SLEEP ) . Trong thủ tục phục vụ ngắt , người sử dụng có thể xóa
ngắt theo cách sau:
 Đọc hoặc ghi bất kì lên PORTB . Điều này sẽ kết thúc điều kiện không hòa hợp .
 Xóa bit cờ RBIF .

Trường CĐKT Cao Thắng

Trang 10


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.2.1.2: PortB và thanh ghi TrisB
Các thanh ghi SFR liên quan đến PortB:
PortB (06H,106H):chứa giá trị các Pin trong PortB.

TrisB (86H,186H): điều khiển xuất nhập.
Option_reg (81H,181H):điều khiển ngắt ngoại vi.
2.2.1.3 PortC và thanh ghi TrisC
PORTC có độ rộng là 8 bit , là port hai chiều . Thanh ghi dữ liệu trực tiếp
tương ứng là TRISC . Cho tất cả các bit của TRISC là 1 thì các chân tương ứng ở
PORTC là ngõ vào . Cho tất cả các bit của TRISC là 0 thì các chân tương ứng ở
PORTC là ngõ ra . PORTC được đa hợp với vài chức năng ngoại vi , những chân
của PORTC có đệm Trigger Schmitt ở ngõ vào . Khi bộ I2C được cho phép , chân
3 và 4 của PORTC có thể được cấu hình với mức I2C bình thường , hoặc với mức
SMBus bằng cách sử dụng bit CKE (SSPSTAT<6>) . Khi những chức năng ngoại
vi được cho phép , chúng ta cần phải quan tâm đến việc định nghĩa các bit của
TRIS cho mỗi chân của PORTC .
Một vài thiết bị ngoại vi ghi đè lên bit TRIS để tạo nên một chân ở ngõ ra ,
trong khi những thiết bị ngoại vi khác ghi đè lên bit TRIS thì sẽ tạo nên một chân ở
ngõ vào .
Khi những bit TRIS ghi đè bị tác động trong khi thiết bị ngoại vi được cho
phép ,những lệnh đọc-thay thế-ghi ( BSF , BCF , XORWF ) với TRISC là nơi đến
cần phải được tránh . Người sử dụng cần phải chỉ ra vùng ngoại vi tương ứng để
đảm bảo cho việc đặt TRIS bit là đúng .

Trường CĐKT Cao Thắng

Trang 11


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.2.1.3: PortC và thanh ghi TrisC

Các thanh ghi SFR liên quan đến PortC:
PortC (07H): chứa giá trị các Pin trong PortC.
TrisC (87H): điều khiển xuất nhập.
2.2.1.4 PortD và thanh ghi TrisD
PORTD và TRISD không có đối với PIC16F873 hoặc PIC16F876 . PORTD
là port 8 bit với đệm Trigger Schmitt ở ngõ vào . Mỗi chân có thể được cấu hình
riêng lẻ như một ngõ vào hoặc ngõ ra.PORTD có thể được cấu hình như port của
bộ vi xử lý rộng 8 bit ( parallel slave port ) bằng cách đặt bit điều khiển PSPMIDE
( TRISE <4>).

Trường CĐKT Cao Thắng

Trang 12


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.2.1.4: Thanh ghi TrisD
Các thanh ghi SFR liên quan đến PortD
PortD (08H): chứa giá trị các Pin trong PortD.
TrisD (88H): điều khiển xuất nhập.
2.2.1.5 PortE và Thanh Ghi TrisE.
PORTE và TRISE không có đối với PIC16F873 hoặc PIC16F876 . PORTE
có ba chân (RE0/RD/AN5 , RE1/WR/AN6 , và RE2/CS/AN7 ) mỗi chân được cấu
hình riêng lẻ như những ngõ vào hoặc những ngõ ra . Những chân này có đệm
Trigger Schmitt ở ngõ vào . Những chân của PORTE đóng vai trò như những ngõ
vào điều khiển vào ra cho port của vi xử lý khi bit PSPMODE ( TRISE <4> ) được
set . Trong chế độ này ,người sử dụng cần phải chắc rằng những bit TRISE <2:0>

được set , và chắc rằng những chân này được cấu hình như những ngõ vào số .
Cũng bảo đảm rằng ADCON1 được cấu hình cho vào ra số . Trong chế độ này ,
những đệm ở ngõ vào là TTL .
Những chân của PORTE được đa hợp với những ngõ vào tương tự . Khi
được chọn cho ngõ vào tương tự , những chân này sẽ đọc giá trị ‘0’ .
TRISE điều khiển hướng của những chân RE chỉ khi những chân này được
sử dụng như những ngõ vào tương tự . Người sử dụng cần phải giữ những chân
được cấu hình như những ngõ vào khi sử dụng chúng như những ngõ vào tương
tự .

Trường CĐKT Cao Thắng

Trang 13


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

2.2.2

Hình 2.2.1.5: Thanh ghi TrisE
Các thanh ghi SFR liên quan đến PortE:
PortE (09H): chứa giá trị các Pin trong PortE.
TrisE (89H): điều khiển xuất nhập và xác lập các thông số cho chuẩn
giao tiếp PSP.
ADCON1 (9FH): Thanh ghi điều khiển khối ADC.
Bộ định thời Timer0
Module Timer 0 là một bộ định thời/ đếm 8 bit, có khả năng đọc và ghi được
, có một bộ tiền định tỉ lệ (Prescaler) 8 bit lập trình được, có bit lựa chọn nguồn

xung clock trong hoặc ngoài, có ngắt khi Timer tràn, có bit lựa chọn cạnh tác động
của xung clock ngoài.

Trường CĐKT Cao Thắng

Trang 14


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

2.2.3

Hình 2.2.2: Sơ đồ khối của bộ Timer0
Chế độ định thời được chọn bằng cách xóa bit T0CS (OPTION_REG <5>).
Trong chế độ này thanh ghi TMR0 sẽ tăng lên sau mỗi chu kì (prescaler không có
tác dụng hoặc tỉ lệ 1 :1). Nếu thanh ghi TMR0 được ghi một giá trị mới, giá trị
trong thanh ghi này sẽ không tăng trong 2 chu kỳ lệnh kế tiếp.Vì vậy để khắc phục
hiện tượng này chúng ta có thể hiệu chỉnh giá trị nhập vào thanh ghi TMR0.
Chế độ đếm được lựa chọn bằng cách set bit T0CS (OPTION_REG <5>).
Trong chế độ đếm, thanh ghi TMR0 sẽ tăng lên khi có cạnh lên hoặc cạnh xuống
xuất hiện trên chân T0CKL ( cạnh lên hoặc cạnh xuống được lựa chọn bởi bit
T0SE (OPTION_REG <4>, xóa bit T0SE sẽ lựa chọn cạnh lên).
Khi bộ tiền định tỉ lệ không được sử dụng, ngõ vào xung clock ngoại cũng
giống như ngõ ra bộ tiền định tỉ lệ. Nguồn xung clock ngoại sẽ được đồng bộ với
xung clock nội bằng cách: nó sẽ được lấy mẫu tại chu kỳ Q2 và Q4 của xung clock
nội. Do đó, T0CKI phải ở mức cao ít nhất 2 Tosc và ở mức thấp ít nhất cũng là 2
Tosc.
Bộ định thời Timer1

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.

Trường CĐKT Cao Thắng

Trang 15


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.2.3: Sơ đồ khối của bộ Timer1

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ộ.
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>).
Đế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 chên trân T1OSO (nếu bit
T1OSCEN được xóa).
Xung clock ngoại sẽ được đồng bộ với xung clock nội, hoạt động đồng bộ
được thực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler). Trong chế độ ngủ hoạt

động đồng bộ sẽ bị tắt cho dù có xung clock ngoài thì Timer 1 cũng không tăng.
Điều này có nghĩa là chế độ đếm đồng bộ sẽ không hoạt động được trong chế độ
ngủ (SLEEP).
Khi chế độ sử dụng xung clock ngoài được lựa chọn cho Timer 1 ở chế độ
đếm đồng bộ, chúng ta phải đảm bảo xung clock ngoài đã được đồng bộ với xung
clock nội.
Đế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
Trường CĐKT Cao Thắng

Trang 16


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

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ư ta mong muốn.
2.2.4


Bộ định thời Timer2

Timer 2 là một bộ định thời 8 bit bao gồm một bộ tiền định tỉ lệ và một bộ
hậu định tỉ lệ, 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>).
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.

Hình 2.2.4: Sơ đồ khối của bộ Timer2
2.2.5 Khối CCP

Module CCP được xây dựng để hỗ trợ cho việc đo lường và điều khiển thời
gian hoạt động của các tín hiệu, đo chu kỳ hoạt động của tín hiệu, tạo ra các tín
hiệu có tần số khác nhau, điều khiển tốc độ động cơ DC…
Mỗi module CCP có môt thanh ghi 16 bit có thể hoạt động như:
- Một thanh ghi Capture 16 bit
- Một thanh ghi Compare 16 bit
- Một thanh ghi điểu khiển chu kỳ nhiệm vụ của bộ PWM.
PIC16F877A có 2 module CCP là CCP1 và CCP2:

Trường CĐKT Cao Thắng

Trang 17


[Type text]


CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Bảng 2: Các Timer tương ứng với từng loại CCP

Module CCP1:
Thanh ghi CCPR1 bao gồm 2 thanh ghi 8 bit: CCPR1L và CCPR1H. Thanh
ghi CCP1CON điều khiển hoạt động cùa module CCP1. Các xung đặc biệt xảy ra
bằng các thuật toán so sánh và sẽ reset Timer 1.
Module CCP2:
Thanh ghi CCPR2 bao gồm 2 thanh ghi 8 bit: CCPR2L và CCPR2H. Thanh
ghi CCP2CON điều khiển hoạt động cùa module CCP2. Các xung đặc biệt xảy ra
bằng các thuật toán so sánh sẽ reset Timer 1 và bắt đầu chuyển đổi ADC (nếu
chuyển đổi ADC được cho phép).
Để module CCP hoạt động trong chế độ Capture thì Timer 1 phải thiết lập ở
chế độ định thời hoặc chế độ đếm đồng bộ, nếu không chế độ Capture sẽ không
làm việc. Khi chế độ Capture được sử dụng, chân CCP phải được mặc định là ngõ
vào.
Trong chế độ Capture, hai thanh ghi CCPRxH và CCPRxL sẽ ghi lại giá trị
16 bit của Timer 1 khi có môt sự kiện xuất hiện trên chân CCPx (giá trị trong
Timer 1 không bị reset). Một sự kiện được định nghĩa bởi:
- Bất cứ một xung cạnh xuống
- Bất cứ một xung cạnh lên
- Bất cứ 4 xung cạnh lên
- Bất cứ 16 xung cạnh lên
Sự kiện được lựa chọn bởi các bit điều khiển CCPxM3:CCPxM0
(CCPxCON<3:0>). Khi một sự kiện xuất hiện giá trị trong Timer 1 được ghi lại và
cờ CCPxIF được bật lên, cờ này phải được xóa bằng phần mềm trước khi một sự
kiện khác xảy ra nếu không giá trị lưu trước đó sẽ bị xóa.
Khi thay đổi hoạt động chế độ Capture sẽ tạo ra một ngắt nên khi muốn thay

đổi hoạt động chế độ Capture trước hết phải vô hiệu hóa các ngắt và xóa các cờ
ngắt.

Trường CĐKT Cao Thắng

Trang 18


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Hình 2.2.5 (a): Sơ đồ khối của bộ Capture

Để module CCP hoạt động trong chế độ Compare thì Timer 1 phải thiết lập
ở chế độ định thời hoặc chế độ đếm đồng bộ, nếu không chế độ Compare sẽ không
làm việc. Khi chế độ Compare được sử dụng, chân CCP phải được mặc định là ngõ
vào.
Trong chế độ Compare giá trị trong thanh ghi TMR1 sẽ được so sánh với
một giá trị đã được lưu sẵn trong thanh ghi 16 bit CCPRx, khi hai giá trị này bằng
nhau, một ngắt sẽ xảy ra nếu được cho phép.Chân CCPx sẽ:
- Lên mức cao
- Xuống mức thấp
- Hay giữ nguyên trạng thái
Trạng thái của chân CCP sẽ phụ thộc vào các bit CCPxM3:CCPxM0.
Việc xóa thanh ghi CCPxCON sẽ đẩy trạng thái của chân CCP xuống
mức thấp.
Đặc biệt trong chế độ này, khi giá trị trong 2 thanh ghi TMR1 và CCPRx
bằng nhau thì một xung tín hiệu sẽ được tạo ra. Xung này sẽ reset cặp thanh ghi
TMR1H và TMR1L. Điều này cho phép .


Hình 2.2.5 (b): Sơ đồ khối của bộ Compare

Trường CĐKT Cao Thắng

Trang 19


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Chế độ điều chế độ rộng xung PWM, chân CCP tạo ra một tín hiệu có độ
phân giải 10 bit. Chân CCP phải được mặc định là ngõ ra.
Việc xóa thanh ghi CCPxCON sẽ đẩy chân ngõ ra CCPx xuống mức
mặc định thấp.

Hình 2.2.5 (c): Sơ đồ khối của bộ PWM

Chu kỳ PWM được chỉ định trong thanh ghi PR2. Chu kỳ có thể được tính
bằng công thức:
Chu kỳ PWM = [(PR2 + 1)*4*Tosc*giá trị tỉ lệ TMR2)
Tần số PWM = 1/ chu kỳ PWM.
Lưu ý: Bộ postcaler của Timer 2 không có tác dụng trong việc quyết
định tần số PWM. Bộ prescaler được kết hợp với thanh ghi TMR2 để tạo ra
bộ đếm 10 bit tương ứng.
Giá trị chu kỳ nhiệm vụ của PWM được quy định bằng 10 bit : 8 bit trong
thanh ghi CCPRxL và 2 bit trong thanh ghi CCPxCON (DCxB1, DCxB0). Chu kỳ
nhiệm vụ PWM có thể được tính theo công thức sau:
Ton PWM = ( Giá trị của DCxB9:DcxB0) * Tosc * giá trị tỉ lệ tiền định

TMR2

Trường CĐKT Cao Thắng

Trang 20


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC

Giá trị DCxB9:DcxB0 có thể thay đổi tùy ý nhưng giá trị này sẽ không
được tải vào trong thanh ghi CCPRxH cho đến khi trạng thái cân bằng xảy ra giữa
2 thanh ghi PR2 và TMR2. Trong chế độ PWM thanh ghi CCPRxH là thanh ghi
chỉ đọc.
2.2.6
Bộ ADC
Trên VĐK có một bộ biến đổi ADC 10bit, 8 ngõ vào Analog, 8 ngõ vào này
được nối với ngõ vào của bộ chuyển đổi. Sau đó bộ chuyển đổi sẽ tạo ra một kết
quả 10 bit tương ứng với giá trị Ananlog đầu vào. Điện thế tham chiếu đầu vào sẽ
được lựa chọn bằng phần mềm (từ Vdd, Vss hoặc 2 chân AN2, AN3. Module ADC
là module duy nhất có khả năng hoạt động trong chế độ ngủ. Để hoạt động trong
chế độ ngủ Sleep, xung clock cung cấp cho ADC phải được nhận từ dao động nội
RC của ADC.
Module ADC bao gồm 4 thanh ghi:
- Thanh ghi chứa byte cao của kết quả ADRESH
- Thanh ghi chứa byte thấp của kết quả ADRESL
- Thanh ghi chứa các bit điều khiển ADCON0
- Thanh ghi chứa các bit điều khiển ADCON1
Hai thanh ghi ADRESH và ADRESL chứa giá trị 10 bit của kết quả ADC.

Khi quá trình chuyển đổi hoàn tất, kết quả ADC sẽ được lưu lại trong cặp thanh ghi
này. Bit GO/DONE bị xóa và cờ ngắt ADIF được bật lên.
Sau khi module ADC đã được cấu hình như mong muốn, chúng ta phải lựa
chọn kênh chuyển đổi A/D trước khi chuyển đổi ADC xảy ra. Các chân Analog
phải được chọn là ngõ vào bằng cách set các bit trong thanh ghi TRIS tương ứng.
Để tiến hành chuyển đổi ADC, tiến hành theo các bước sau:
Bước 1: Cấu hình cho module ADC:
- Cấu hình cho các chân ngõ vào/ điện thế chuẩn và I/O số (ADCON1)
- Lựa chọn kênh ngõ vào A/D (ADCON0)
- Lựa chọn tần số chuyển đổi (ADCON0)
- Cấp nguồn cho module ADC (ADCON0)
Bước 2: Cấu hình các ngắt ADC (nếu cần):
- Xóa cờ ngắt ADIF
- Set bit GIE (Cho phép ngắt toàn cục)
- Set bit ADIE (Cho phép ngắt chuyển đổi ADC)
Bước 3: Đợi thời gian Acquisition (lấy mẫu) cần thiết
Bước 4: Bắt đầu quá trình chuyển đổi ADC:
Set bit GO/ DONE (ADCON0)
Bước 5: Đợi quá trình ADC hoàn tất:
Chạy vòng lập đợi bit GO/DONE bị xóa hoặc cờ ngắt ADIF bật lên
Bước 6 : Đọc kết quả trong 2 thanh ghi ADRESH và ADRESL, xóa bit
ADIF ( nếu cần thiết)
Trường CĐKT Cao Thắng

Trang 21


[Type text]

CHƯƠNG II: TỔNG QUAN VỀ VI ĐIỀU KHIỂN PIC


Bước 7: Nếu muốn tiếp tục thực hiện chuyển đổi ADC trong chu kỳ kế tiếp
thì quay lại bước 1 hoặc bước 2.
Sơ đồ khối của bộ biến đổi ADC 10 bit:

Hình 2.2.6: Sơ đồ khối của bộ ADC

Trường CĐKT Cao Thắng

Trang 22



×