查看: 3041|回复: 4

我写的时钟8563程序不能写时钟!用的是proteus仿真

[复制链接]
  • TA的每日心情
    奋斗
    2012-10-15 15:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-9-11 14:47:00 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 xinxincaijq 于 2012-9-12 18:32 编辑

    #include<avr/io.h>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
    #include<stdio.h>
    //#define  sbi(x,y)  (x|=(1<<y))      //set bit y in byte x
    //#define  cbi(x,y)  (x&=(~(1<<y)))   //clear bit y in byte x
    #define uint8_t unsigned int
    #define uchar unsigned char
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    ///////////////////////////////////////////


    //////////////////////////////////////////////////////
    void delay_nms(uint8_t a)
    {
    while(a--);
    }
    ////////////////////////////////////////////////////////////////////
    void TWI_WRITE_8563(uint8_t address_package,uint8_t data_package)
    {
      TWBR=0x20;
    sbi(TWSR,TWPS0) ;
    cbi(TWSR,TWPS1) ;
    begin:
       TWCR&=(1<<TWINT);
       TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

    while(!(TWCR&(1<<TWINT)));
    if(((TWSR&0XF8)!=0x08)&((TWSR&0XF8)!=0x10))
    goto begin;
    TWDR=0xa2;
    TWCR=(1<<TWINT)|(1<<TWEN);

    while(!(TWCR&(1<<TWINT)))
    {
    ;
    }
    if((TWSR&0XF8)!=0x18)
    goto begin;
    TWDR=address_package;
    TWCR=TWCR=(1<<TWINT)|(1<<TWEN);

    while(!(TWCR&(1<<TWINT)))
    if((TWSR&0XF8)!=0x28)
    goto begin;
    TWDR=data_package;
    TWCR=(1<<TWINT)|(1<<TWEN);

    while(!(TWCR&(1<<TWINT)))
    {
    ;
    }
    if((TWSR&0XF8)!=0x28)
    goto begin;
    TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
    }
    ////////////////////////////////////////////////////
    uint8_t TWI_READ_8563(uint8_t address_package)
    {
    uint8_t result=0;
    TWBR=0X20;
    sbi(TWSR,TWPS0) ;
    cbi(TWSR,TWPS1) ;
    begin:
    delay_nms(2);
    TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if(((TWSR&0XF8)!=0x08)&((TWSR&0XF8)!=0x10))
    goto begin;
    TWDR=0xa2;
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if((TWSR&0XF8)!=0x18)
    goto begin;
    TWDR=address_package;
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if((TWSR&0XF8)!=0x28)
    goto begin;
    TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if(((TWSR&0XF8)!=0x08)&((TWSR&0XF8)!=0x10))
    goto begin;
    TWDR=0xa3;
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if((TWSR&0XF8)!=0x40)
    goto begin;
    TWCR=(1<<TWINT)|(1<<TWEN);
    while(!(TWCR&(1<<TWINT)));
    if((TWSR&0XF8)!=0x58)
    goto begin;
    TWCR=(1<<TWSTO)|(1<<TWEN);
    result=TWDR;
    return result;
    }
    ////////////////////////////////////////////////////////

    uchar _BCD(uchar x)
       
    {
    return (x/10)*16+(x%10);

    }


    void CALENDAR_WRITE(uint8_t second,uint8_t minute,uint8_t hour,uint8_t data,uint8_t month,uint8_t year)
    {
    uint8_t temp=0;
    TWI_WRITE_8563(0x00,0x20);
    temp=_BCD(second)&0x07;
    TWI_WRITE_8563(0x02,temp);
    TWI_WRITE_8563(0x03,_BCD(minute));
    TWI_WRITE_8563(0x04,_BCD(hour));
    TWI_WRITE_8563(0x05,_BCD(data));
    temp=_BCD(month)&0x07;
    TWI_WRITE_8563(0x07,temp);
    TWI_WRITE_8563(0x03,_BCD(year));
    TWI_WRITE_8563(0x00,0x00);
    }
    /////////////////////////////////////////////////////////////////
    uint8_t* CALENDAR_READ(void)
    {
    uint8_t result[6];
    uint8_t  temp;
    TWI_WRITE_8563(0x00,0x20);
    temp=TWI_READ_8563(0X08);
    result[0]=temp;
    temp=TWI_READ_8563(0X07);
    temp&=0X1F;
    result[1]=temp;

    temp=TWI_READ_8563(0X05);
    temp&=0X3F;
    result[2]=temp;

    temp=TWI_READ_8563(0X04);
    temp&=0X3F;
    result[3]=temp;

    temp=TWI_READ_8563(0X03);
    temp&=0X7F;
    result[4]=temp;

    temp=TWI_READ_8563(0X02);
    temp&=0X7F;
    result[5]=temp;

    TWI_WRITE_8563(0x00,0x20);
    return result;
    }









    int main()
    {
    while(1)
    {
    CALENDAR_WRITE(0x02,0x02,0x02,0x02,0x02,0x02);
    }
    }
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2012-10-15 15:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-9-11 14:48:41 | 显示全部楼层
    那位大侠做过mega128的8563的程序!帮帮忙给小弟指导一下

    编译环境winavr+avr studio
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-9-11 15:53:04 | 显示全部楼层
    lzm8624 发表于 2012-9-11 14:48
    那位大侠做过mega128的8563的程序!帮帮忙给小弟指导一下

    编译环境winavr+avr studio

    很多程序还需要自己单步的运行一下,是哪里出错,这个还需要自己多琢磨。这里给楼主一个提供一个8563的测试程序,仅供参考:
    pcf8563基本测试程序.rar (38.78 KB, 下载次数: 8)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2012-10-15 15:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2012-9-11 17:40:08 | 显示全部楼层
    谢谢!提示我再看看我的为什么不行!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-9-12 09:11:10 | 显示全部楼层
    lzm8624 发表于 2012-9-11 17:40
    谢谢!提示我再看看我的为什么不行!

    嗯,要是还有什么问题,可以再来沟通探讨 大家互相学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-6-3 10:22 , Processed in 0.148783 second(s), 24 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.