Một số điểm đặc biệt của CPU

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 20 - 24)

CHƯƠNG I CẤU TRÚC PHẦN CỨNG CỦA 16F877A

1.3. Một số điểm đặc biệt của CPU

1.3.1 Dao động:

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.

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

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.

* 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 sẽ phát hiện và bỏ qua các tín hiệu nhiễu.

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 xuố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.

* Các thanh ghi chức năng ngắt: INTCON, PIE1, PIR1, PIE2, PIR2 (các thanh ghi này sẽ được nghiên cứu ở các phần sau).

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

Đâ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 đượ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.

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ục đí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.

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 20 - 24)

Tải bản đầy đủ (PDF)

(180 trang)