|
我用的是Atmega16,始终读不到正确的值!
听说是A寄存器没有启动,但是我将A寄存器设为0x20还是不行啊。
这个是读写时序,I/O口没有弄错
void DS_Write(char addr,char data) //写时序,intel方式
{
DS_DB_OUT;
DS_DS_H;
DS_RW_H;
DS_AS_H;
DS_DB=addr;
DS_AS_L;
DS_RW_L;
DS_DB=data;
DS_RW_H;
DS_AS_H;
DS_CS_H;
}
char DS_Read(char addr) //读时序,intel方式
{
char sz;
DS_DB_OUT;
DS_DS_H;
DS_RW_H;
DS_AS_H;
DS_CS_L;
DS_DB=addr;
DS_AS_L;
DS_DS_L;
_delay_ms(10);
DS_DB_IN;
sz=PINA;
DS_DS_H;
DS_AS_H;
DS_CS_H;
return sz;
}
附上主程序部分代码:
DS_Write(0x0A,0x20);
DS_Write(0,ss); //秒
DS_Write(1,0);
DS_Write(2,mm); //分
DS_Write(3,0);
DS_Write(4,hh); //小时
DS_Write(5,0);
DS_Write(6,0);
DS_Write(0x09,YYYY); //年
DS_Write(0x08,MM); //月
DS_Write(0x07,DD); //日
DS_Write(0x0A,0x20);*/
while(1)
{
ss=DS_Read(0);
mm=DS_Read(2);
hh=DS_Read(4);
//后面省略了.....
读出来的时间结果是: 04:02:00 ,分别对应相应的寄存器地址。是不是时序错了?附上时序图
(原文件名:读.GIF)
(原文件名:写.GIF) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|