Chế độ Sleep cú 2 tỏc dụng :

Một phần của tài liệu Vi điều khiển PSoc docx (Trang 43 - 44)

+ Làm RTC (khỏ chớnh xỏc nếu dựng thạch anh chuẩn 32,768 KHz),do đú cú thể thay cho những con RealTime chuyờn dụng như KHz),do đú cú thể thay cho những con RealTime chuyờn dụng như DS1307

+Tạo 1 xung kớch (ngắt) cho macro M8C Sleep làm việc giỳp tiết kiệm năng lượng cho PsoC. kiệm năng lượng cho PsoC.

Chỳng ta cú thể kớch hoạt cho chế độ Sleep của PSoc bằng cỏch thiết lập cỏc thụng số ngay trong Global với cỏc thiết lập :

32K_Select chon internal nếu dựng clock nội hoặc external (nếu dựng clock ngoài).

Sleep_timer : 1Hz tương ứng với 1s tạo ngắt một lần-chỳng ta ỏp dụng điều này để làm RTC.

code:

#pragma interrupt_handler SleepISR BYTE sleepTimer=81;

void main() {

M8C_EnableIntMask(INT_MSK0,INT_MSK0_SLEEP); M8C_ClearWDTAndSleep;

//Clear sleep timer mask M8C_EnableGInt; //Enable global interrupts while(1)

{

M8C_Sleep;

//CPU goes to sleep

//Wakes up on sleep timer interrupt }

}

void SleepISR(void){

}

…..//Lam gi trong day cung duoc }

}

Cỏch khỏc là cú thể dựng IC chuyờn dụng RealTimer. Đõy là cỏch sử dụng I2C để giao tiếp với RTC DS1307, cỏc bạn cú thể dựng cả sử dụng I2C để giao tiếp với RTC DS1307, cỏc bạn cú thể dựng cả I2Cm(firmware) hoặc I2CHW(Hardware) để giao tiếp. Về phần cứng khụng cú gỡ, chỉ cần thờm điện trở Pullup vào đường SDA và SCL. Thời gian đặt trong tx, bắt đầu bằng 00, sau đú là giõy, phỳt, giờ, ngày

trong tuần, ngày trong thỏng, thỏng, năm,byte cuối cựng 0x93 là byte ghi vào thanh ghi điều khiển của RTC. vào thanh ghi điều khiển của RTC.

#include <m8c.h> // part specific constants and macros

#include "PSoCAPI.h" // PSoC API definitions for all User Modules #include "stdlib.h"

BYTE tx[]={0x00,0x00,0x22,0x23,0x07,0x19,0x11,0x05,0x93}; BYTE rx[8];

BYTE status; unsigned char i=0; void delay() { int i=0; for(i=0;i<100;i++); } void main() {

// Insert your main routine code here. M8C_EnableGInt; LCD_1_Start(); I2CHW_1_Start(); I2CHW_1_EnableMstr(); I2CHW_1_EnableInt(); I2CHW_1_InitRamRead(rx,8); I2CHW_1_InitWrite(tx,9); I2CHW_1_bWriteBytes(0x68,tx,9,I2CHW_1_CompleteXfer );

while(!I2CHW_1_bReadI2CStatus() &I2CHW_WR_COMPLETE);//wait for complete delay();

I2CHW_1_ClrWrStatus();

I2CHW_1_bWriteBytes(0x68,tx,1,I2CHW_1_NoStop);

while(!I2CHW_1_bReadI2CStatus() &I2CHW_WR_COMPLETE);//wait for complete I2CHW_1_ClrWrStatus();

while(1) {

//read the time

I2CHW_1_bWriteBytes(0x68,tx,1,I2CHW_1_NoStop); delay(); I2CHW_1_ClrWrStatus(); I2CHW_1_fReadBytes(0x68,rx,7,I2CHW_1_RepStart); delay(); I2CHW_1_ClrRdStatus(); LCD_1_Position(0,0); LCD_1_PrCString("T.gian"); LCD_1_Position(0,10); LCD_1_PrHexByte(rx[2]); LCD_1_PrCString(":"); LCD_1_PrHexByte(rx[1]); LCD_1_PrCString(":"); LCD_1_PrHexByte(rx[0]); } } Chỳ ý

DS1307 giao tiếp theo chuẩn I2C

Sơ đồ nối rất đơn giản như mó lệnh quy định cỏc chõn SDA, SCL, lưu ý cần cú trở kộo lờn ở cỏc chõn SDA và SCL!

Một số lưu ý về thạch anh:

Một phần của tài liệu Vi điều khiển PSoc docx (Trang 43 - 44)

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

(62 trang)
w