Chế độ Sleep

Một phần của tài liệu Nghiên cứu ứng dụng điều khiển pic (Trang 72 - 75)

2. MOVWF PORTB

2.12.5 Chế độ Sleep

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 (STATUS<3>) được reset về 0, bit được set, oscillator ngưng tác độ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 vi điều khiển là rất nhỏ nên ta cần thực hiện các bước sau trước khi vi điều khiển thực thi lệnh SLEEP:

- Đưa tất cả các pin về trạng thái VDD hoặc VSS

- Cần bảo đảm 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 vi điều khiển 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 từ bên ngồi tác động vào vi điều khiển.

- Để ý đến chức năng kéo lên điện trở ở PORTB.

- Pin phải ở mức logic cao.

“ Đánh thức" vi điều khiển

Vi điều khiển cĩ thể được “đánh thức” dưới tác động của một trong số các hiện tượng sau:

- Tác động của reset ngoại vi thơng qua pin - Tác động của WDT khi bị tràn.

- Tác động từ các ngắt ngoại vi từ PORTB (PORTB Interrupt on change hoặc pin INT).

Các bit và được dùng để thể hiện trạng thái của vi điều khiển và để phát hiện nguồn tác động làm reset vi điều khiển. Bit được set khi vi điều khiển được cấp nguồn và được reset về 0 khi vi điều khiển ở chế độ sleep. Bit được reset về 0

khi WDT tác động do bộ đếm bị tràn.

Ngồi ra cịn cĩ một số nguồn tác động khác từ các chức năng ngoại vi bao gồm: 1) Đọc hay ghi dữ liệu thơng qua PSP (Parallel Slave Port).

2) Ngắt Timer1 khi hoạt động ở chế độ đếm bất đồng bộ. 3) Ngắt CCP khi hoạt động ở chế độ Capture.

4) Các hiện tượng đặc biệt làm reset Timer1 khi hoạt động ở chế độ đếm bất đồng

5) bộ dùng nguồn xung clock ở bên ngồi). 6) Ngắt SSP khi bit Start/Stop được phát hiện.

7) SSP hoạt động ở chế độ Slave mode khi truyền hoặc nhận dữ liệu.

8) Tác động của USART từ các pin RX hay TX khi hoạt động ở chế độ Slave mode đồng bộ.

9) Khối chuyển đổi A/D khi nguồn xung clock hoạt động ở dạng RC. Hồn tất quá trình ghi vào EEPROM.

10)Ngõ ra bộ so sánh thay đổi trạng thái.

Các tác động ngoại vi khác khơng cĩ tác dụng đánh thức vi điều khiển vì khi ở chế độ sleep các xung clock cung cấp cho vi điều khiển ngưng hoạt động. Bên cạnh đĩ cần cho phép các ngắt hoạt động trước khi lệnh SLEEP được thực thi để bảo đảm tác động của các ngắt.

Việc đánh thức vi điều khiển từ các ngắt vẫn được thực thi bất chấp trạng thái của bit GIE. Nếu bit GIE mang giá trị 0, vi điều khiển sẽ thực thi lệnh tiếp theo sau lệnh SLEEP của chương trình (vì chương trình ngắt khơng được cho phép thực thi). Nếu bit GIE được set trước khi lệnh SLEEP được thực thi, vi điều khiển sẽ thực thi lệnh tiếp theo của chương trình và sau đĩ nhảy tới địa chỉ chứa chương trình ngắt (0004h). Trong trường hợp lệnh tiếp theo khơng đĩng vai trị quan trọng trong chương trình, ta cần đặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác động của

lệnh này, đồng thời giúp ta dễ dàng hơn trong việc kiểm sốt hoạt động của chương trình ngắt. Tuy nhiên cũng cĩ một số điểm cần lưu ý như sau:

- Nếu ngắt xảy ra trước khi lệnh SLEEP được thực thi, lệnh SLEEP sẽ khơng được thực thi và thay vào đĩ là lệnh NOP, đồng thời các tác động của lệnh SLEEP cũng sẽ được bỏ qua.

- Nếu ngắt xảy ra trong khi hay sau khi lệnh SLEEP được thực thi, vi điều khiển lập tức được đánh thức từ chế độ sleep, và lệnh SLEEP sẽ được thực thi ngay sau khi vi điều khiển được đánh thức.

Để kiểm tra xem lệnh SLEEP đã được thực thi hay chưa, ta kiểm tra bit

Nếu bit vẫn mang giá trị 1 tức là lệnh SLEEP đã khơng được thực thi và thay vào đĩ là lệnh NOP.

Bên cạnh đĩ ta cần xĩa WDT để chắc chắn rằng WDT đã được xĩa trước khi thực thi lệnh SLEEP, qua đĩ cho phép ta xác định được thời điểm vi điều khiển được đánh thức do tác động của WDT.

Một phần của tài liệu Nghiên cứu ứng dụng điều khiển pic (Trang 72 - 75)

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

(125 trang)
w