共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
