📄 1390.txt
字号:
#define wbyte_spi SpiSend
#define rbyte_spi SpiSend
unsigned char msec=0, min=0x0, sec=0x00, hr=0x12, dow=0x04, date=0x01, mon=0x01, yr=0x09; //全局变量!
void bcd2ascii(unsigned char); //51调用时间用,转换为asc2值
unsigned char SpiSend_1390(unsigned char val); //spi一体化读写函数
void ds_1390reset (void); //读写前调用
void ds_1390read (unsigned char write);//1390读写主函数
void ds_1390reset (void)
{
CS = 1; // disable RTC - CS high
CS = 0; // enable RTC - CS low
wbyte_spi(0x8d); // control register write address
rbyte_spi(); // dummy read
wbyte_spi(0x18); // enable osc, 32kHz sqw
rbyte_spi();
CS = 1; // disable RTC - CS high
}
void ds_1390read (unsigned char write) //传入1写入时间,传入0读取时间
{
if(write)
{
CS = 0; // enable RTC - CS low
wbyte_spi(0x80); // select seconds register write address
rbyte_spi(); // dummy read
wbyte_spi(msec); // milliseconds register data
rbyte_spi();
wbyte_spi(sec); // seconds register data
rbyte_spi();
wbyte_spi(min); // minutes register
rbyte_spi();
wbyte_spi(hr); // hours register
rbyte_spi();
wbyte_spi(dow); // day of week register
rbyte_spi();
wbyte_spi(date); // date register
rbyte_spi();
wbyte_spi(mon); // month register
rbyte_spi();
wbyte_spi(yr); // year register
rbyte_spi();
CS = 1; // disable RTC - CS high
}
else
{
CS = 0; // enable RTC - CS low
wbyte_spi(0); // seconds register read address
rbyte_spi(); // dummy read
wbyte_spi(0);
msec = rbyte_spi(); // read milliseconds register
wbyte_spi(0);
sec = rbyte_spi(); // read seconds register
wbyte_spi(0);
min = rbyte_spi(); // ditto minutes
wbyte_spi(0);
hr = rbyte_spi(); // and so on
wbyte_spi(0);
dow = rbyte_spi();
wbyte_spi(0);
date = rbyte_spi();
wbyte_spi(0);
mon = rbyte_spi();
wbyte_spi(0);
yr = rbyte_spi();
CS = 1; // disable RTC - CS high
}
}
void bcd2ascii(unsigned char dat) // ----- convert bcd to ascii and send to sci ----
{
tx_sci0( (dat >> 4) + 0x30);
tx_sci0( (dat & 0x0f) + 0x30);
}
unsigned char SpiSend_1390(unsigned char val)
{
unsigned char i;
WDTRST = 0x1e;//89s52内狗
WDTRST = 0xe1;//89s52内狗
ACC = val;
for (i = 8; i > 0; i --)
{
CY = MSO;//取数据SO
_rlca_();//存数据ACC.0读数据ACC.7同时进行
SI = CY;//送数据SI
SCK = 1;//上升沿打入数据
_nop_();
SCK = 0;//下降沿读入数据(首次为假动作)
}
return ACC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -