×
单片机 > 单片机程序设计 > 详情

ds1302的avr C程序

发布时间:2020-06-20 发布时间:
|
下面是DS1302的AVR单片机的C程序,这个程序结构很不错。但是站长没有调试这个AVR单片机的程序。
#define ds1302_rst PC0 
#define ds1302_io PC1 
#define ds1302_sclk PC2 
#define set_ds1302_rst_ddr() DDRC|=1< #define set_ds1302_rst() PORTC|=1< #define clr_ds1302_rst() PORTC&=~(1< #define set_ds1302_io_ddr() DDRC|=1< #define set_ds1302_io() PORTC|=1< #define clr_ds1302_io() PORTC&=~(1< #define clr_ds1302_io_ddr() DDRC&=~(1< #define in_ds1302_io() PINC&(1< #define set_ds1302_sclk_ddr() DDRC|=1< #define set_ds1302_sclk() PORTC|=1< #define clr_ds1302_sclk() PORTC&=~(1<
#define ds1302_sec_reg 0x80 
#define ds1302_min_reg 0x82 
#define ds1302_hr_reg 0x84 
#define ds1302_date_reg 0x86 
#define ds1302_month_reg 0x88 
#define ds1302_day_reg 0x8a 
#define ds1302_year_reg 0x8c 
#define ds1302_control_reg 0x8e 
#define ds1302_charger_reg 0x90 
#define ds1302_clkburst_reg 0xbe 
void ds1302_write(uchar reg,uchar data) 

uchar i=0; 
set_ds1302_io_ddr(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
set_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
for(i=8;i>0;i--) 

if(reg&0x01) set_ds1302_io(); 
else clr_ds1302_io(); 
asm("nop"); 
asm("nop"); 
set_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
reg>>=1; 

for(i=8;i>0;i--) 

if(data&0x01) set_ds1302_io(); 
else clr_ds1302_io(); 
asm("nop"); 
asm("nop"); 
set_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
data>>=1; 

clr_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_io_ddr(); 
asm("nop"); 
asm("nop"); 

uchar ds1302_read(uchar reg) 

uchar data=0; 
uchar i=0; 
reg+=1;//读标志 
set_ds1302_io_ddr(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
set_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
for(i=8;i>0;i--) 


if(reg&0x01) set_ds1302_io(); 
else clr_ds1302_io(); 
asm("nop"); 
asm("nop"); 
set_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
reg>>=1; 

clr_ds1302_io_ddr(); 
asm("nop"); 
asm("nop"); 
for(i=8;i>0;i--) 

data>>=1; 
if(in_ds1302_io()) data|=0x80; 
asm("nop"); 
asm("nop"); 
set_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 
clr_ds1302_sclk(); 
asm("nop"); 
asm("nop"); 

clr_ds1302_rst(); 
asm("nop"); 
asm("nop"); 
return(data); 

uchar check_ds1302(void) 

ds1302_write(ds1302_control_reg,0x80); 
if(ds1302_read(ds1302_control_reg)==0x80) return 1; 
return 0; 

void ds1302_read_time(void) 

year=ds1302_read(ds1302_year_reg); //年 
month=ds1302_read(ds1302_month_reg);//月 
day=ds1302_read(ds1302_date_reg); //日 
week=ds1302_read(ds1302_day_reg); //周 
hour=ds1302_read(ds1302_hr_reg); //时 
minute=ds1302_read(ds1302_min_reg); //分 
second=ds1302_read(ds1302_sec_reg); //秒 

void ds1302_write_time(void) 

ds1302_write(ds1302_control_reg,0x00); //关闭写保护 
ds1302_write(ds1302_sec_reg,0x80); //暂停 
ds1302_write(ds1302_charger_reg,0xa9); //涓流充电 
ds1302_write(ds1302_year_reg,year); //年 
ds1302_write(ds1302_month_reg,month); //月 
ds1302_write(ds1302_date_reg,day); //日 
ds1302_write(ds1302_day_reg,week); //周 
ds1302_write(ds1302_hr_reg,hour); //时 
ds1302_write(ds1302_min_reg,minute); //分 
ds1302_write(ds1302_sec_reg,second); //秒 
ds1302_write(ds1302_control_reg,0x80); //打开写保护 
}
关键字:ds1302  avr  C程序 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项