狂人呓语

DS12C877A 实时时钟RTC芯片驱动-Atmega16

环境:

GCC Freq:12Mhz

#define DS_CS_H PORTC |= BIT(0) //CS=1 禁止访问 #define DS_CS_L PORTC &= ~BIT(0) //CS=0 片选 #define DS_AS_H PORTC |= BIT(1) //AS=1 清除地址 #define DS_AS_L PORTC &= ~BIT(1) //AS=0 锁存地址 #define DS_RW_H PORTC |= BIT(2) //RW=1 读 #define DS_RW_L PORTC &= ~BIT(2) //RW=0 写 #define DS_DS_H PORTC |= BIT(3) //DS=1 禁止 #define DS_DS_L PORTC &= ~BIT(3) //DS=0 使能 #define DS_DB_IN DDRA = 0x00 //输入模式 #define DS_DB_OUT DDRA = 0xFF //输出模式 #define DS_DB PORTA void init_DS12C887() { DDRC=0xFF; //输出 DDRA=0xFF; //输出 PORTA=0xFF; DS_DB_OUT; SFIOR=0x00; } void DS_Write(char addr,char data) { DS_DB_OUT;_delay_us(1); DS_CS_H;_delay_us(1); DS_DS_H; DS_RW_H;_delay_us(1); DS_AS_H;_delay_us(1); DS_DB=addr;_delay_us(1); DS_CS_L;_delay_us(1); DS_AS_L;_delay_us(1); DS_RW_L;_delay_us(1); DS_DB=data;_delay_us(1); _delay_ms(1);_delay_us(1); DS_CS_H;_delay_us(1); DS_AS_H;_delay_us(1); } char DS_Read(char addr) { char sz; DS_DB_OUT;_delay_us(1); DS_CS_H;_delay_us(1); DS_DS_H; DS_RW_H;_delay_us(1); DS_AS_H;_delay_us(1); DS_DB=addr; _delay_us(1); DS_CS_L;_delay_us(1); DS_AS_L;_delay_us(1); DS_DS_L;_delay_us(1); DS_DB_IN;_delay_us(1); DS_DB=0xFF;_delay_us(1); sz=PINA;_delay_us(1); DS_DS_H;_delay_us(1); DS_CS_H;_delay_us(1); DS_AS_H;_delay_us(1); return sz; }

未经允许不得转载:狂人呓语 » DS12C877A 实时时钟RTC芯片驱动-Atmega16

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址