CC2430對DS1302的控制 |
尚未結案
|
現在想見妳
一般會員 發表:3 回覆:11 積分:2 註冊:2009-08-20 發送簡訊給我 |
好久沒有上來發問題了,最近又遇上了問題,
之前發過8051控制DS1302的文, 後來也順利解決了,現在問題來了, 我要用CC2430來控制這個DS1302, 我用之前在8051上的CODE來修改(確定在0851是可以動作的), 可是現在用在CC2430上卻無法順利動作, 我想DS1302的電路是沒問題的, 附上現在用的DS1302的程式碼: [code cpp] #include #define RST P0_2 #define IO P0_3 #define SCLK P0_4 //************************************************************ void writeRTCdata(unsigned char d) { P0DIR = 0x0E; unsigned char i; for( i = 0; i < 8; i ) { if( d & 0x01 ) { IO = 1; } else { IO = 0; } d = d >> 1; SCLK = 1; SCLK = 0; } } //************************************************************ void writeDS1302(unsigned char wAd,unsigned char dat) { RST = 0; SCLK = 0; IO = 0; RST = 1; writeRTCdata(wAd); writeRTCdata(dat); SCLK = 1; RST = 0; } //************************************************************ void ProtectCode(int b)//0 禁止寫入 1 致能寫入 { if( b ) { writeDS1302(0x8e,0x00); } else { writeDS1302(0x8e,0x80); } } //************************************************************ unsigned char ReadRTCdata(void) { P0DIR = 0x0A; unsigned char i,Ti=0; for( i = 0; i < 8; i ) { if( IO ) { Ti = Ti |0x80; } Ti = Ti >> 1; SCLK = 0; SCLK = 1; } return ( Ti ); } //************************************************************ unsigned char ReadDS1302(unsigned char rAd) { unsigned char T; RST = 0; SCLK = 0; IO = 1; RST = 1; writeRTCdata(rAd); T = ReadRTCdata(); SCLK = 1; RST = 0; return T; } //************************************************************ void SetDS1302(void) { RST = 0; SCLK = 0; ProtectCode(1); writeDS1302(0x80,0x55); writeDS1302(0x82,0x58); writeDS1302(0x84,0x23); writeDS1302(0x86,0x30); writeDS1302(0x88,0x09); writeDS1302(0x8a,0x03); writeDS1302(0x8c,0x09); ProtectCode(0); } [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |