搜索
bottom↓
回复: 2

Mega128模拟方式读写DS12C887出问题了。老是读到地址

[复制链接]

出0入0汤圆

发表于 2012-9-1 06:56:27 | 显示全部楼层 |阅读模式

    #include "AVR/IO.h"  
    #include "cpu.h"
        #include "key.h"
        #include "lcd.h"
        #include "rtc.h"
        #include "sd.h"
    #include "timer.h"
   

void init_887();
uchar READ_DATA_887(uchar addr);
void WRITE_DATA_887(uchar addr ,uchar data);
unsigned char size_month(unsigned char year,unsigned char month);
uchar week(uchar g,uchar k,uchar m);
void RESET_887();
void delay(uint ms);
void delay_us(uint us);

const uchar  table_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
const uchar  table_wei[]={0x01,0X02,0X04,0X08};
uchar ge=0,shi=0,bai=0,qian=0;

void init_887()
{   AS_L;
    DS_L;
    RW_L;
        WRITE_DATA_887(0x0A,0x20);
        WRITE_DATA_887(0x0B,0x76); //DS12887初始化设置
        delay(1);
}
/********************************************************************
* 名称 : READ_DATA_887()
* 功能 : 初始化DS12C887
* 输入 : 无
* 输出 : 无
***********************************************************************/
void RESET_887()
{
        WRITE_DATA_887(4,23);//设定时
        WRITE_DATA_887(2,59);//设定分
        WRITE_DATA_887(0,55);//设定秒
        WRITE_DATA_887(9,0x0a);//设定年
        WRITE_DATA_887(8,0x0c);//设定月
        WRITE_DATA_887(7,0x1f);//设定日
        WRITE_DATA_887(6,5);//设定星期
}
/********************************************************************
* 名称 : READ_DATA_887()
* 功能 : 从DS12C887中读取数据
* 输入 :
* 输出 : 无
***********************************************************************/
uchar READ_DATA_887(uchar add)
{
   uchar ds_date;                                                                        //设置临时变量
        AS_H;                                                                                        //置地址选通信号有效
        DS_H;                                                                                        //置数据信号有效
        RW_H;                                                                                        //置写地址信号有效
        CS_L;                                                                                        //置片选信号为有效
        PORTA=add;                                                                                        //写入要取数据的地址
        AS_L;                                                                                        //置数据选通信号有效
        DS_L;                                                                                        //置数据信号有效
        PORTA=0xff;                                                                                //送0xff准备取数标识给DS12C887
        ds_date=PINA;                                                                                //取对应地址的有效数据
        DS_H;                                                                                        //置地址/数据为高
        AS_H;                                                                                        //置地址选通为高
        CS_H;                                                                                           //置片选为高
        return ds_date;                                                                        //返回所取到的时钟数据
}
/********************************************************************
* 名称 : WRITE_DATA_887()
* 功能 : 往DS12C887中写入数据
* 输入 :
* 输出 : 无
***********************************************************************/
void WRITE_DATA_887(uchar add,uchar data)
{
        CS_L;                                                                                        //置片选信号为有效
        AS_H;                                                                                        //置地址选通信号有效
        DS_H;                                                                                        //置地址信号有效
        RW_H;                                                                                        //置写地址信号有效
        PORTA=add;                                                                                        //写入要写数据的地址
        AS_L;                                                                                        //置数据选通信号有效
        RW_L;                                                                                        //置写数据信号有效
        PORTA=data;                                                                                        //写入数据
        RW_H;                                                                                           //置读/写为高
        AS_H;                                                                                        //置地址选通为高
        CS_H;                                                                                        //置片选为高
}
/*-----阳历月份最大天数计算-----*/
unsigned char size_month(unsigned char year,unsigned char month)
{
      return(30+(((month&1)^(month&8)>>3)!=0)-(month==2)*2+(!(year%4)&&(year%100)&&(month==2)||!(year

%400)));
}
/*-----时间调整后星期的计算-----*/
uchar week(uchar g,uchar k,uchar m)//g=nian k=yue m=ri
{
        uint y1,l1;
        uchar zhou,z1;
        if(g%4==0)
                z1=g/4;
        else
                z1=g/4+1;
        if(g%4!=0)
        {
                switch(k)
                {
                        case 1:y1=0;break;
                        case 2:y1=31;break;
                        case 3:y1=59;break;
                        case 4:y1=90;break;
                        case 5:y1=120;break;
                        case 6:y1=151;break;
                        case 7:y1=181;break;
                        case 8:y1=212;break;
                        case 9:y1=243;break;
                        case 10:y1=273;break;
                        case 11:y1=304;break;
                        case 12:y1=334;break;
                }
        }
        else
        {
                switch(k)
                {
                        case 1:y1=0;break;
                        case 2:y1=31;break;
                        case 3:y1=60;break;
                        case 4:y1=91;break;
                        case 5:y1=121;break;
                        case 6:y1=152;break;
                        case 7:y1=182;break;
                        case 8:y1=213;break;
                        case 9:y1=244;break;
                        case 10:y1=274;break;
                        case 11:y1=305;break;
                        case 12:y1=335;break;
                }       
        }
        y1=y1+m-36;//从12887中读出的时间距2000.02.05几天  即为值l的大小
        l1=g*365+z1+y1;       

        l1=l1%7;
        switch(l1)
        {
                case 0:y1=6;break;
                case 1:y1=7;break;
                case 2:y1=1;break;
                case 3:y1=2;break;
                case 4:y1=3;break;
                case 5:y1=4;break;
                case 6:y1=5;break;
        }
        zhou=y1;
        return zhou;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-9-1 06:57:00 | 显示全部楼层
求大神啊

出0入0汤圆

发表于 2012-9-2 05:18:45 | 显示全部楼层
uchar READ_DATA_887(uchar add)
{
   uchar ds_date;                     
        AS_L;
        DS_H;
        RW_H;
        AS_H;
        DDRA = 0xFF;     
        PORTA = add;
        CS_L;
        AS_L;
        DDRA = 0x00;   
        PORTA =0x00;
        DS_L;
        asm("nop");
        ds_date = PINA;
        DS_H;
        AS=H;
        CS=H;
        return ( ds_date );
}
/********************************************************************
* 名称 : WRITE_DATA_887()
* 功能 : 往DS12C887中写入数据
* 输入 :
* 输出 : 无
***********************************************************************/
void WRITE_DATA_887(uchar add,uchar data)
{
        AS_L;
        DS_H;
        RW_H;
        AS_H;
        DDRA = 0xFF;
        PORTA = add;
        CS_L;
        AS_L;
        RW_L;
        DDRA = 0xFF;
        PORTA = data;
        asm("nop");
        RW_H;
        asm("nop");
        CS_H;
        AS_H;
}

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 08:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表