打印
[HOLTEK MCU]

接着问!HT46R24驱动合泰时钟芯片HT1381问题

[复制链接]
2919|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sukexi|  楼主 | 2010-5-31 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HT46L仿真器硬件仿真HT46R24驱动合泰时钟芯片HT1381存在的问题是读不出偶数时间。
仿真HT46R24HT1381的写入时间值和读奇数时间值是对的,而且时间是准确的,读出偶数时间要么全为0(无上拉电阻)要么全为0XFF(带上拉电阻)(连续读写和单独读写都是同样的问题)。主程序半分钟读一次时间。
AVR系列的MCU来驱动HT1381就没有这些现象。就因这个问题整个专案被拖了。各位大侠解救一下小弟吧,谢谢。
详细HT46R24驱动HT1381程序如下
#define SCLK_HT1381_OUT

(_15_0 = 0)

#define I0_HT1381_OUT
(_15_2 = 0)

#define I0_HT1381_INPUT


(_15_2 = 1)

#define RST_HT1381_OUT
(_15_4 = 0)

#define SCLK_HT1381_L
(_pb0 = 0)

#define SCLK_HT1381_H
(_pb0 = 1)

#define I0_HT1381_L

(_pb2 = 0)

#define I0_HT1381_H


(_pb2 = 1)

#define RST_HT1381_L
(_pb4 =0 )

#define RST_HT1381_H
(_pb4 =1)

#define READ_I0_HT1380
(_pb2)



void Init_hardware_HT1381(void)
{

SCLK_HT1381_OUT;


I0_HT1381_OUT;



RST_HT1381_OUT;

}

void Write_Singlebyte_HT1381(unsigned char command, unsigned char xmtdat)
{


unsigned char i ;


i = 0;


I0_HT1381_OUT;//IO
口设置为输出


RST_HT1381_L;//
复位引脚为低电平所有数据传送终止



_nop();



_nop();


SCLK_HT1381_L;//
清时钟总线



_nop();



_nop();


RST_HT1381_H;//
复位引脚为高电平逻辑控制有效



_nop();



_nop();




//---------Write command----------------


for (i=8;i>0;i--)


{



if ((command&0x01)==1)



{



I0_HT1381_H;



}



else



{



I0_HT1381_L;



}






_nop();



SCLK_HT1381_H;//
时钟上升沿发送数据有效



_nop();



_nop();



SCLK_HT1381_L;



command>>=1;


}


//--------Write data-------------------


for (i=8;i>0;i--)



{



if ((xmtdat&0x01)==1)



{



I0_HT1381_H;



}



else



{



I0_HT1381_L;



}



_nop();



SCLK_HT1381_H;//
时钟上升沿发送数据有效



_nop();




_nop();



SCLK_HT1381_L;



xmtdat>>=1;



}


_nop();


RST_HT1381_L;//
复位引脚为低电平所有数据传送终止

}

short int Read_Singlebyte_HT1381(unsigned char command)
{

unsigned char i ;


unsigned int data ;




i = 0;


data = 0;


I0_HT1381_OUT;//IO
口为输出状态



_nop();


_nop();


_nop();




RST_HT1381_L;//
复位引脚为低电平所有数据传送终止

_nop();



_nop();


SCLK_HT1381_L;//
清时钟总线

_nop();


RST_HT1381_H;//
复位引脚为高电平逻辑控制有效

_nop();



_nop();


//---------Write command----------------


for (i=8;i>0;i--)


{



if ((command&0x01)==0x01)



{



I0_HT1381_H;



}



else



{



I0_HT1381_L;



}






_nop();



SCLK_HT1381_H;//
时钟上升沿发送数据有效


_nop();



_nop();



SCLK_HT1381_L;



command>>=1;


}


//---------Read Singlebyte----------------


_nop();


I0_HT1381_INPUT;//IO
口为输入状态

for(i=8;i>0;i--)


{


data>>=1;

SCLK_HT1381_H;//时钟总线置高




if(READ_I0_HT1380==0)


{


data = (data&0x7f);


}



else



{



data = (data|0x80);


}



_nop();


_nop();



SCLK_HT1381_L;//
时钟下降沿接收数据有效


_nop();


_nop();


}


RST_HT1381_L;//
复位引脚为低电平所有数据传送终止




_nop();


_nop();


_nop();


return data;


}

void init_ht1381(void)
{

Init_hardware_HT1381();


Write_Singlebyte_HT1381(0x8e,0);



Write_Singlebyte_HT1381(0x80,0);

}

相关帖子

沙发
司徒老鹰| | 2010-6-1 21:38 | 只看该作者
好长的程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

11

帖子

0

粉丝