|
先寫(xiě)一下我自己讀一個(gè)字節(jié)的函數(shù)
sbit rtc_io = P3 ^ 4;
sbit rtc_ce = P3 ^ 5;
sbit rtc_sclk = P3 ^ 6;
static unsigned char rtc_read_byte(unsigned char cw)
{
unsigned char cnt = 0;
unsigned char byte = 0x00;
unsigned char tmp;
rtc_ce = 1;
for (cnt = 0; cnt < 8; ++cnt) {
rtc_io = !!(cw & 0x01 << cnt);
rtc_sclk = 1;
_nop_();
rtc_sclk = 0;
}
cnt ^= cnt;
do {
byte |= (tmp = rtc_io) ? tmp << cnt : 0;
rtc_sclk = 1;
_nop_();
rtc_sclk = 0;
} while (++cnt < 8);
rtc_ce = 0;
rtc_io = 0; //這里不懂
return byte;
}
如上代碼,當(dāng)我把函數(shù)返回前的那句rtc_io = 0注釋掉之后,讀取的時(shí)間就是亂的,但是加上了就正常了。
這里實(shí)在不明白為什么最后一定要把io口電平拉低,查看ds1302的手冊(cè)和時(shí)序圖,并沒(méi)有看到相關(guān)的講解,實(shí)在是弄不清原因了,還希望大佬能幫我解答一下,多謝啦
|
|