本帖最后由 老鱼探戈 于 2011-7-27 14:52 编辑
C语言中最好不要用ACC做局部变量用,因为你不知道编译器会怎么做,不要控制。如果是汇编的话是比较好控制的 。
你的时序也不对。。。。
- //========================================
- //函数名称:void singlebyte_write(uchar date)
- //输入参数:uchar date
- //输出参数:无
- //函数功能:8位数据传送
- //========================================
- void singlebyte_write(uchar date)
- {
- uchar i;
- T_RST=1; //启动数据传送
- for(i=0;i<8;i++) //循环8次写入数据
- {
- T_SCLK=0;
- if(date&0x01) //从低位开始写
- T_IO=1;
- else
- T_IO=0;
- T_SCLK=1; //在时钟线的上升沿写入一位数据
- date=date>>1; //将高1位数据移至ACC^0
- // delayns();
- }
- }
- //========================================
- //函数名称:uchar singlebyte_read(void)
- //输入参数:无
- //输出参数:uchar ACC
- //函数功能:从DS1302读取1Byte数据
- //========================================
- uchar singlebyte_read(void) //从DS1302读取1Byte数据
- {
- uchar i,temp; //启动数据传送
- for(i=0; i<8; i++) //读出8位数据
- {
- T_SCLK = 0;
- temp = temp>>1;
- if(T_IO==1)
- temp+=0x80;
- T_IO=1; //P1口输入前置1
- T_SCLK = 1; //时钟线上升沿读出1位数据
- // delayns();
- }
- return(temp);
- }
- //========================================
- //函数名称: void write_ds1302(uchar add,uchar date)
- //输入参数:uchar add,uchar date
- //输出参数:无
- //函数功能:往DS1302写入数据
- //========================================
- void write_ds1302(uchar add,uchar date) //往DS1302写入数据
- {
- // T_RST = 0;
- T_RST = 1;
- // delayns();
- singlebyte_write(add); //地址,命令
- singlebyte_write(date); //写1Byte数据
- T_SCLK = 1;
- T_RST =0;
- }
- //========================================
- //函数名称:uchar read_ds1302(uchar add)
- //输入参数:uchar add
- //输出参数:uchar date
- //函数功能:从DS1302读取数据
- //========================================
- uchar read_ds1302(uchar add) //从DS1302读取数据
- {
- uchar date;
- T_SCLK=0;
- T_RST=1;
- singlebyte_write(add);
- date=singlebyte_read();
- T_SCLK=1;
- T_RST=0;
- return(date);
- }
|