搜索
bottom↓
回复: 20

各位能否提供DS12C887时钟芯片的motorola格式的C语言程序参考一下呢?

[复制链接]

出0入0汤圆

发表于 2005-11-9 11:50:15 | 显示全部楼层 |阅读模式
谁能提供DS12C887时钟芯片的motorola格式的C语言程序?谢谢!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2005-11-9 12:36:01 | 显示全部楼层
在线等!

出0入0汤圆

 楼主| 发表于 2005-11-9 14:21:08 | 显示全部楼层
下面是DS12C887 C程序motorola读写时序,有问题的?芯片感觉不工作?





/***************************************

  函数功能:用来写

***************************************/

void WriteAddrData(uint8_t dsaddress,uint8_t dsdata)

{

    DS_READ;



    PORTA = dsaddress;          //RAM地址

    DS_CS0;                     //选中时钟芯片



    DS_AS1;                     //1 地址有效

    NOP();

    NOP();

    DS_AS0;                     //0 地址失效

   

    DS_WRITE;                   //写

    PORTA = dsdata;             //data

    DS_DS1;

    NOP();

    DS_DS0;

    NOP();

   

    DS_CS1;                     //关闭时钟芯片

    DS_READ;

}



/***************************************

  函数功能:用来读

***************************************/

uint8_t ReadAddrData(uint8_t dsaddress)

{

    uint8_t dsdata;

    DS_READ;                    //读

   

    PORTA = dsaddress;          //RAM地址

    DS_CS0;                     //选中时钟芯片

   

    DS_AS1;                     //1 地址有效

    NOP();

    NOP();

    DS_AS0;                     //0 地址失效

   

    DS_DS1;

    NOP();

    DS_DS0;

    NOP();

    dsdata = PINA;              //data

    NOP();

   

    DS_CS1;                     //关闭时钟芯片

    return dsdata;

}

出0入0汤圆

发表于 2005-11-9 15:15:32 | 显示全部楼层
楼主,

    可以把你的程序 贴 完整 吗 ?  我也正在 弄 这个 rtc 。

出0入0汤圆

 楼主| 发表于 2005-11-10 10:40:42 | 显示全部楼层
终于调试成功了,下面把moto时序和模拟intel时序贴上来了:



//===== DS12C887 moto时序======

/***************************************

  函数功能:用来写

***************************************/

void WriteAddrData(uint8_t dsaddress,uint8_t dsdata)

{

    DS_AS0;

    DS_DS1;

    DS_READ;

    DS_CS0;                     //选中时钟芯片

    //

    DS_DS0;

    DS_AS1;                     //1 地址有效

    PORTA = dsaddress;          //RAM地址

    NOP();

    NOP();

    DS_AS0;                     //0 地址失效

    //

    DS_WRITE;

    DS_DS1;

    PORTA = dsdata;             //data

    NOP();

    NOP();

    DS_DS0;

    //

    DS_CS1;                     //关闭时钟芯片

    DS_READ;

}



/***************************************

  函数功能:用来读

***************************************/

uint8_t ReadAddrData(uint8_t dsaddress)

{

    uint8_t dsdata;

    DS_AS0;

    DS_DS1;

    DS_READ;

    DS_CS0;                     //选中时钟芯片

    //

    DS_DS0;

    DS_AS1;                     //1 地址有效

    PORTA = dsaddress;          //RAM地址

    NOP();

    NOP();

    DS_AS0;                     //0 地址失效

    //

    DDRA=0x00;  // PORTA in

    DS_DS1;

    NOP();

    NOP();

    DS_DS0;

    dsdata = PINA;              //data

    //

    DS_CS1;                     //关闭时钟芯片

    DDRA=0xff;  // PORTA out

    return dsdata;

}







//===== DS12C887 intel时序 ======

/***************************************

  函数功能:用来写

***************************************/

void WriteAddrData(uint8_t dsaddress,uint8_t dsdata)

{

    DS_ALE0;

    DS_RD1;

    DS_WR1;

    DS_CS0;                     //选中时钟芯片

    NOP();

    //

    DS_ALE1;

    PORTA = dsaddress;          //RAM地址

    NOP();

    NOP();

    DS_ALE0;

    NOP();

    NOP();

    //

    PORTA = dsdata;             //data

    NOP();

    DS_WR0;

    NOP();

    NOP();

    NOP();

    DS_ALE1;

    DS_WR1;

    DS_CS1;                     //关闭时钟芯片

}



/***************************************

  函数功能:用来读

***************************************/

uint8_t ReadAddrData(uint8_t dsaddress)

{

    uint8_t dsdata;

    DS_ALE0;

    DS_RD1;

    DS_WR1;

    DS_CS0;                     //选中时钟芯片

    NOP();

    //

    DS_ALE1;

    PORTA = dsaddress;          //RAM地址

    NOP();

    NOP();

    DS_ALE0;

    NOP();

    NOP();

    //

    DDRA=0x00;  // PORTA in

    DS_RD0;

    NOP();

    dsdata = PINA;             //data

    DS_ALE1;

    DS_RD1;

    DS_CS1;                     //关闭时钟芯片

    DDRA=0xff;  // PORTA out

    return dsdata;

}

出0入0汤圆

发表于 2005-11-10 15:03:57 | 显示全部楼层
好人啊, 我刚刚在做这个, 看了半天的 data sheet   都没有搞懂

出0入0汤圆

发表于 2005-11-10 15:19:26 | 显示全部楼层
DS_ALE0;

    DS_RD1;

    DS_WR1;

    DS_CS0;



能不能把这个宏定义 拿来看看 啊,  我英文太差 看不懂 手册 啊

出0入0汤圆

 楼主| 发表于 2005-11-10 16:26:34 | 显示全部楼层
// 控制引脚定义moto

DS_CS             -----  /CS

DS_AS             -----  AS

DS_READ(DS_WRITE) -----  R//W

DS_DS             -----  DS



#define DS_CS0      cbi(PORTC,PC0)

#define DS_CS1      sbi(PORTC,PC0)

#define DS_AS0      cbi(PORTC,PC1)

#define DS_AS1      sbi(PORTC,PC1)

#define DS_READ     sbi(PORTC,PC2)

#define DS_WRITE    cbi(PORTC,PC2)

#define DS_DS0      cbi(PORTC,PC3)

#define DS_DS1      sbi(PORTC,PC3)



// 控制引脚定义intel

DS_CS             -----  /CS

DS_ALE            -----  AS

DS_WR             -----  R//W

DS_RD             -----  DS



#define DS_CS0      cbi(PORTC,PC0)

#define DS_CS1      sbi(PORTC,PC0)

#define DS_ALE0     cbi(PORTC,PC1)

#define DS_ALE1     sbi(PORTC,PC1)

#define DS_WR1      sbi(PORTC,PC2)

#define DS_WR0      cbi(PORTC,PC2)

#define DS_RD0      cbi(PORTC,PC3)

#define DS_RD1      sbi(PORTC,PC3)





贴好了!

出0入0汤圆

 楼主| 发表于 2005-11-10 16:30:56 | 显示全部楼层
TO:jackiezeng 剑客曾



      谢谢提建议!你用什么型号的芯片?

出0入0汤圆

发表于 2005-11-10 16:58:18 | 显示全部楼层
我用 mega 16   。  我只是做实验而已~!



想问问, moto  和 intel    有什么区别呢 ?

出0入0汤圆

发表于 2005-11-11 08:06:10 | 显示全部楼层
晕哦, 大哥你可以给我讲讲, 怎么初始化, 怎么使用这个东西啊,



我去读00 单元的 秒信号,出来的全是 0

出0入0汤圆

 楼主| 发表于 2005-11-11 08:25:35 | 显示全部楼层
Intel和Motorola是芯片能正常工作两种时序!



初始化时,首先应禁止芯片内部的更新周期操作,所以先将DS12C887状态寄存器B中的SET位置“1”,然后初始化00H~09H时标参数寄存器和状态寄存器A,此后再通过读状态寄存器C,清除寄存器C中的周期中断标志位PF,报警中断标志位AF,更新周期结束中断标志位UF。通过读寄存器口D中的VRT位,读状态寄存器口后VRT位将自动置“1”,最后将状态寄存器B中的SET位置“0”,芯片开始计时工作。



DS12887实时时钟芯片中文资料:

点击此处打开armok0185646.pdf

出0入0汤圆

发表于 2005-11-11 14:59:31 | 显示全部楼层
楼主, 你的单片机 工作 的 晶振  是多少兆 的?

出0入0汤圆

 楼主| 发表于 2005-11-11 16:53:29 | 显示全部楼层
4Mhz

出0入0汤圆

发表于 2005-11-11 21:31:37 | 显示全部楼层
o my god ~!



how can i do ~!



我还是没搞定, 郁闷中~!

出0入0汤圆

发表于 2006-1-7 18:39:38 | 显示全部楼层
#define M818_PORT          PORTB

#define M818_DDR           DDRB

#define M818_PIN           PINB

#define M818_CONTROL_PORT        PORTD

#define AS                       PD5

#define WD                       PD6

#define RD                       PD7



#define AS_ON()   ( M818_CONTROL_PORT |=  (1<<AS) )

#define AS_OFF()  ( M818_CONTROL_PORT &= ~(1<<AS) )

#define WD_ON()   ( M818_CONTROL_PORT &= ~(1<<WD) )

#define WD_OFF()  ( M818_CONTROL_PORT |=  (1<<WD) )

#define RD_ON()   ( M818_CONTROL_PORT &= ~(1<<RD) )

#define RD_OFF()  ( M818_CONTROL_PORT |=  (1<<RD) )



unsigned char get_clock_data(unsigned char address)

{

        unsigned char data=0;



        M818_DDR = 0xFF;

        M818_PORT = 0x00;

        RD_OFF();

        WD_OFF();

        AS_OFF();

        M818_PORT = address;

        _delay_us(5);

        AS_ON();

        _delay_us(5);

        AS_OFF();

        _delay_us(5);

        M818_DDR = 0x00;

        M818_PORT = 0x00;

        M818_PIN = 0x00;

        _delay_us(5);

        RD_ON();

        _delay_us(5);

        data = M818_PIN;

        _delay_us(5);

        RD_OFF();

        return data;

}



void set_clock_data(unsigned char address, unsigned char data)

{

        M818_DDR = 0xFF;

        M818_PORT = 0x00;

        RD_OFF();

        WD_OFF();

        AS_OFF();

        M818_PORT = address;

        _delay_us(5);

        AS_ON();

        _delay_us(5);

        AS_OFF();

        _delay_us(5);

        M818_PORT = data;

        _delay_us(5);

        WD_ON();

        _delay_us(5);

        WD_OFF();

}



我寫的Intel總線的, 已經在使用了
-----此内容被avrboy于2006-01-07,18:42:41编辑过

出0入0汤圆

 楼主| 发表于 2006-1-9 08:32:25 | 显示全部楼层
笼统标题我试了改不了吗?

出0入0汤圆

发表于 2009-10-30 22:41:07 | 显示全部楼层
什么东西嘛,我都看了一个星期了,读出来的都是时间的地址,都不知道什么东西

现在都无奈了,开始以为是时序问题,后来我试了哥便,最后读出来确实数据所在的地址,烦死了!

出0入0汤圆

发表于 2009-10-31 00:35:43 | 显示全部楼层
TO:【17楼】 kangkang
可以参考
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1667149&bbs_page_no=1&search_mode=3&search_text=lzf713&bbs_id=1006

出0入0汤圆

发表于 2009-11-3 21:50:27 | 显示全部楼层
谢谢十八楼啦

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 11:17

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

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