共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
我要赚赏金
