共2条
1/1 1 跳转至页
DS1302 DS1302读写,困扰了一天
问
PORTB0对应1302的I/O口.感觉对照时序写的,确老是得不到正确结果.与网上别人的C51程序比较也没什么差别.做过的帮忙看看给点意见.
void WriteOneByte(unsigned char Data)
{
unsigned char i;
for(i = 8;i > 0;i--)
{
T_CLK_L;
asm("nop");
if(Data & 0x01)
{T_IO_H;}
else
{T_IO_L;}
asm("nop");
T_CLK_H;
asm("nop");
Data >>= 1;
}
}
unsigned char GetOneByte(void)
{
unsigned char i;
unsigned char Retval = 0x00;
unsigned char tmpPORTB = PORTB;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_L;
asm("nop");
if (PINB&0x01)
{Retval |= 0x80;}
asm("nop");
T_CLK_H;
asm("nop");
Retval >>= 1;
}
PORTB = tmpPORTB;
DDRB |= 0x01;
return Retval;
}
void Set1302Reg(unsigned char CtrlByte, unsigned char Data)
{
T_RST_L;
T_CLK_L;
asm("nop");
asm("nop");
asm("nop");
T_RST_H;
WriteOneByte(CtrlByte);
WriteOneByte(Data);
T_RST_L;
asm("nop");
asm("nop");
asm("nop");
T_CLK_L;
}
unsigned char Get1302Reg(unsigned char CtrlByte)
{
unsigned char Retval;
T_RST_L;
T_CLK_L;
asm("nop");
asm("nop");
asm("nop");
T_RST_H; //*****//
WriteOneByte(CtrlByte);
Retval = GetOneByte();
T_RST_L;
asm("nop");
asm("nop");
asm("nop");
T_CLK_L;
return Retval;
} 答 1: 告诉我你的EMAIL,我发一份给你。 答 2: 谢谢先啊.S_Anitya@163.com 答 3: 测试时,写入(0x8E,0x00),(0x80,0x00)后通过示波器可以看到晶振起振了,但是执行Get函数时,晶振又不起振.检测发现,Get函数中的T_RST_H(置/RST脚高电平)语句的执行与否直接影响到晶振的起振?!!!想不出所以然:( 答 4: 搞定.根据GF网上面的例子改成了...找到自己程序和测试通过程序的不同在于函数GetOneByte();
原为:
unsigned char GetOneByte(void)
{
unsigned char i;
unsigned char Retval = 0x00;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_L;
if (PINB&0x01)
{Retval |= 0x80;}
T_CLK_H;
Retval >>= 1;
}
DDRB |= 0x01;
return Retval;
}
修改后:
unsigned char GetOneByte(void)
{
unsigned char i,j;
unsigned char Retval = 0x00;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_H;
asm("nop");
T_CLK_L;
Retval >>= 1;
if (PINB&0x01)
{Retval |= 0x80;}
}
DDRB |= 0x01;
return Retval;
}
看起来象是Retval >>= 1的语句的位置不一样造成的,Retval定义时已经赋值了.先移位或后移位对于最高位都是为0啊(编译后 >>= 为 LSR).过是过了.不知道怎么回事,还是郁闷........... 答 5: 网上程序的主要问题就是这个吗??我现在也在用1302,他的初始化,主要做什么??
谢谢! 答 6: 我以前是用1307电路板还没出来,所以先写程序,程序的延时准不准啊??
如果能发一份给我,就非常感激
cjb9705037@163.com
谢谢先!!!!!1
void WriteOneByte(unsigned char Data)
{
unsigned char i;
for(i = 8;i > 0;i--)
{
T_CLK_L;
asm("nop");
if(Data & 0x01)
{T_IO_H;}
else
{T_IO_L;}
asm("nop");
T_CLK_H;
asm("nop");
Data >>= 1;
}
}
unsigned char GetOneByte(void)
{
unsigned char i;
unsigned char Retval = 0x00;
unsigned char tmpPORTB = PORTB;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_L;
asm("nop");
if (PINB&0x01)
{Retval |= 0x80;}
asm("nop");
T_CLK_H;
asm("nop");
Retval >>= 1;
}
PORTB = tmpPORTB;
DDRB |= 0x01;
return Retval;
}
void Set1302Reg(unsigned char CtrlByte, unsigned char Data)
{
T_RST_L;
T_CLK_L;
asm("nop");
asm("nop");
asm("nop");
T_RST_H;
WriteOneByte(CtrlByte);
WriteOneByte(Data);
T_RST_L;
asm("nop");
asm("nop");
asm("nop");
T_CLK_L;
}
unsigned char Get1302Reg(unsigned char CtrlByte)
{
unsigned char Retval;
T_RST_L;
T_CLK_L;
asm("nop");
asm("nop");
asm("nop");
T_RST_H; //*****//
WriteOneByte(CtrlByte);
Retval = GetOneByte();
T_RST_L;
asm("nop");
asm("nop");
asm("nop");
T_CLK_L;
return Retval;
} 答 1: 告诉我你的EMAIL,我发一份给你。 答 2: 谢谢先啊.S_Anitya@163.com 答 3: 测试时,写入(0x8E,0x00),(0x80,0x00)后通过示波器可以看到晶振起振了,但是执行Get函数时,晶振又不起振.检测发现,Get函数中的T_RST_H(置/RST脚高电平)语句的执行与否直接影响到晶振的起振?!!!想不出所以然:( 答 4: 搞定.根据GF网上面的例子改成了...找到自己程序和测试通过程序的不同在于函数GetOneByte();
原为:
unsigned char GetOneByte(void)
{
unsigned char i;
unsigned char Retval = 0x00;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_L;
if (PINB&0x01)
{Retval |= 0x80;}
T_CLK_H;
Retval >>= 1;
}
DDRB |= 0x01;
return Retval;
}
修改后:
unsigned char GetOneByte(void)
{
unsigned char i,j;
unsigned char Retval = 0x00;
DDRB &= 0xFE;
PORTB |= 0x01;
for(i = 8;i > 0;i--)
{
T_CLK_H;
asm("nop");
T_CLK_L;
Retval >>= 1;
if (PINB&0x01)
{Retval |= 0x80;}
}
DDRB |= 0x01;
return Retval;
}
看起来象是Retval >>= 1的语句的位置不一样造成的,Retval定义时已经赋值了.先移位或后移位对于最高位都是为0啊(编译后 >>= 为 LSR).过是过了.不知道怎么回事,还是郁闷........... 答 5: 网上程序的主要问题就是这个吗??我现在也在用1302,他的初始化,主要做什么??
谢谢! 答 6: 我以前是用1307电路板还没出来,所以先写程序,程序的延时准不准啊??
如果能发一份给我,就非常感激
cjb9705037@163.com
谢谢先!!!!!1
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |