您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机DS1302的AVR程序(2000年~2099年的星期自动计算功能) 正文
DS1302的AVR程序(2000年~2099年的星期自动计算功能)

DS1302的AVR程序(2000年~2099年的星期自动计算功能)

点击数:7969 次   录入时间:03-04 11:58:09   整理:http://www.55dianzi.com   AVR单片机
虽然是在MEGA128上调的但适用于所有AVR芯片,改下管脚设置就行了。 

程序不是我原创,我只是把我找到的DS1302程序和星期计算程序做了下修改使他们能适应我的系统能一起工作而已,在此向写这些程序的原作者表示敬意。 

struct timechar 

uchar nowyear; 
uchar nowmonth; 
uchar nowday; 
uchar nowhour; 
uchar nowminute; 
uchar nowsecond; 
uchar nowweek; 
}; 
struct timechar nowtime;///这里存时间    


#define ds1302_rst   7                     /*!PORTB7 DS1302实时时钟复位线引脚 */ 
#define ds1302_io   6                      /*!PORTB6 DS1302实时时钟数据线引脚 */    
#define ds1302_sclk  5                      /*!PORTB5 DS1302实时时钟时钟线引脚 */ 

#define set_ds1302_rst_ddr()  DDRB|=1<<ds1302_rst 
#define set_ds1302_rst()        PORTB|=1<<ds1302_rst 
#define clr_ds1302_rst()        PORTB&=~(1<<ds1302_rst) 

#define set_ds1302_io_ddr()   DDRB|=1<<ds1302_io 
#define clr_ds1302_io_ddr()    DDRB&=~(1<<ds1302_io) 
#define set_ds1302_io()          PORTB|=1<<ds1302_io 
#define clr_ds1302_io()          PORTB&=~(1<<ds1302_io) 
#define in_ds1302_io()          PINB&(1<<ds1302_io) 

#define set_ds1302_sclk_ddr() DDRB|=1<<ds1302_sclk 
#define set_ds1302_sclk()        PORTB|=1<<ds1302_sclk 
#define clr_ds1302_sclk()         PORTB&=~(1<<ds1302_sclk) 

#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 

uchar BcdToBin(uchar val) 
  { 
  val = (val >> 4) *10+(val &0x0f); ///将BCD码转换为10进制数 
  return val; ///返回10进制数 
  } 

uchar BinToBcd(uchar val) 
  { 
  return ((val / 10) *16+val % 10); 
  } 

void ds1302_write(uchar reg, uchar data) 
  { 
  uchar i = 0; 
  set_ds1302_io_ddr(); 
  nop(); 
  nop(); 
  clr_ds1302_rst(); 
  nop(); 
  nop(); 
  clr_ds1302_sclk(); 
  nop(); 
  nop(); 
  set_ds1302_rst(); 
  nop(); 
  nop(); 
  for (i = 8; i > 0; i--) 
    { 
    if (reg &0x01) 
    { 
      set_ds1302_io(); 
    } 
    else 
    { 
      clr_ds1302_io(); 
    } 
    nop(); 
    nop(); 
    set_ds1302_sclk(); 
    nop(); 
    nop(); 
    clr_ds1302_sclk(); 
    nop(); 
    nop(); 
    reg >>= 1; 
    } 
  for (i = 8; i > 0; i--) 
    { 
    if (data &0x01) 
    { 
      set_ds1302_io(); 
    } 
    else 
    { 
      clr_ds1302_io(); 
    } 
    nop(); 
    nop(); 
    set_ds1302_sclk(); 
    nop(); 
    nop(); 
    clr_ds1302_sclk(); 
    nop(); 
    nop(); 
    data >>= 1; 
    } 
  clr_ds1302_rst(); 
  nop(); 
  nop(); 
  clr_ds1302_io_ddr(); 
  nop(); 
  nop(); 
  } 
uchar ds1302_read(uchar reg) 
  { 
  uchar data = 0; 
  uchar i = 0; 
  reg += 1; ///读标志 
  set_ds1302_io_ddr(); 
  nop(); 
  nop(); 
  clr_ds1302_rst(); 
  nop(); 
  nop(); 
  clr_ds1302_sclk(); 
  nop(); 
  nop(); 
  set_ds1302_rst(); 
  nop(); 
  nop(); 
  for (i = 8; i > 0; i--) 
    { 
    if (reg &0x01) 
    { 
      set_ds1302_io(); 
    } 
    else 
    { 
      clr_ds1302_io(); 
    } 
    nop(); 
    nop(); 
    set_ds1302_sclk(); 
    nop(); 
    nop(); 
    clr_ds1302_sclk(); 

[1] [2]  下一页


本文关键字:程序  AVR单片机单片机-工控设备 - AVR单片机