- Kết nối với máy tính để giám sát và hoạt động của mô hình thang máy.
11. Chế độ SLEEP
Đây là chếđộ hoạt động của vi điều khiển 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 đượ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 ngoà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.
Ngoà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 ngoà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. 10)Hoàn tất quá trình ghi vào EEPROM.
11)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
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 soá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 sả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 sả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.