⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1390.txt

📁 基于c51单片机spi总线
💻 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 + -