各位能否提供DS12C887时钟芯片的motorola格式的C语言程序参考一下呢?
谁能提供DS12C887时钟芯片的motorola格式的C语言程序?谢谢! 在线等! 下面是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;
} 楼主,
可以把你的程序 贴 完整 吗 ?我也正在 弄 这个 rtc 。 终于调试成功了,下面把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;
} 好人啊, 我刚刚在做这个, 看了半天的 data sheet 都没有搞懂 DS_ALE0;
DS_RD1;
DS_WR1;
DS_CS0;
能不能把这个宏定义 拿来看看 啊,我英文太差 看不懂 手册 啊 // 控制引脚定义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)
贴好了! TO:jackiezeng 剑客曾
谢谢提建议!你用什么型号的芯片? 我用 mega 16 。我只是做实验而已~!
想问问, moto和 intel 有什么区别呢 ? 晕哦, 大哥你可以给我讲讲, 怎么初始化, 怎么使用这个东西啊,
我去读00 单元的 秒信号,出来的全是 0 Intel和Motorola是芯片能正常工作两种时序!
初始化时,首先应禁止芯片内部的更新周期操作,所以先将DS12C887状态寄存器B中的SET位置“1”,然后初始化00H~09H时标参数寄存器和状态寄存器A,此后再通过读状态寄存器C,清除寄存器C中的周期中断标志位PF,报警中断标志位AF,更新周期结束中断标志位UF。通过读寄存器口D中的VRT位,读状态寄存器口后VRT位将自动置“1”,最后将状态寄存器B中的SET位置“0”,芯片开始计时工作。
DS12887实时时钟芯片中文资料:
点击此处打开armok0185646.pdf 楼主, 你的单片机 工作 的 晶振是多少兆 的? 4Mhz o my god ~!
how can i do ~!
我还是没搞定, 郁闷中~! #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编辑过 笼统标题我试了改不了吗? 什么东西嘛,我都看了一个星期了,读出来的都是时间的地址,都不知道什么东西
现在都无奈了,开始以为是时序问题,后来我试了哥便,最后读出来确实数据所在的地址,烦死了! 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 谢谢十八楼啦 请问怎么把它做在数码管上显示,怎么转换那些BCD码?
页:
[1]