微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > DS1337 时钟芯片在 C8051F 上的实现

DS1337 时钟芯片在 C8051F 上的实现

时间:11-30 来源: 点击:

1337_MONTH_REG);

  54 bcd_year = Read_DS1337(DS1337_YEAR_REG);

  55

  56 Time.second = bcd2bin(bcd_sec);

  57 Time.minute = bcd2bin(bcd_min);

  58 Time.hour = bcd2bin(bcd_hrs);

  59 Time.day = bcd2bin(bcd_day);

  60 Time.date = bcd2bin(bcd_date);

  61 Time.month = bcd2bin(bcd_mon);

  62 Time.year = bcd2bin(bcd_year);

  63 }

  第1行的函数为初始化DS1337,读取状态寄存器,如果最高位不为0,则初始化时间。第23行的函数为设置时间,包括年月日星期时分秒。第44行的函数为读取时间。

  1 #ifdef eclipse

  2 void SMBUS_ISR(void)

  3 #else

  4 void SMBUS_ISR (void) interrupt ESMB0_VECTOR

  5 #endif

  6 {

  7 switch (SMB0STA)

  8 {

  9 case SMB_START: //起始条件已发送

  10 SMB0DAT = (COMMAND & 0xFE);

  11 STA = 0;

  12 break;

  13 case SMB_RP_START: //重复起始条件已发送

  14 SMB0DAT = COMMAND;

  15 STA = 0;

  16 break;

  17 case SMB_MTADDACK: //地址 + WRITE已发送,收到ACK

  18 SMB0DAT = wr_data[0];

  19 break;

  20 case SMB_MTADDNACK: //地址 + WRITE已发送,收到NACK。

  21 STO = 1; //发送STOP + START重试

  22 STA = 1;

  23 break;

  24 case SMB_MTDBACK: //数据字节已发送,收到ACK。

  25 switch(Mode)

  26 {

  27 case 1:

  28 wrnumber--;

  29 if(wrnumber)

  30 SMB0DAT = wr_data[1];

  31 else

  32 {

  33 STO = 1;

  34 SMB_BUSY=0;

  35 }

  36 break;

  37 case 0:

  38 STA = 1;

  39 break;

  40 default:

  41 STO = 1;

  42 SMB_BUSY = 0;

  43 break;

  44 }

  45 break;

  46 case SMB_MTDBNACK: //数据字节

  46 case SMB_MTDBNACK: //数据字节已发送,收到NACK。

  47 STO = 1;

  48 STA = 1;

  49 break;

  50 case SMB_MTARBLOST: //竞争失败

  51 STO = 1;

  52 STA = 1;

  53 break;

  54 case SMB_MRADDACK: //地址 + READ 已发送。收到ACK

  55 AA = 0;

  56 break;

  57 case SMB_MRADDNACK: //地址 + READ 已发送。收到NACK

  58 STO = 0;

  59 STA = 1;

  60 break;

  61 case SMB_MRDBACK: //收到数据字节。ACK已发送

  62 get_data = SMB0DAT;

  63 SMB_BUSY = 0; //完成

  64 STO = 1;

  65 break;

  66 case SMB_MRDBNACK: //收到数据字节。NACK已发送

  67 get_data = SMB0DAT;

  68 SMB_BUSY = 0;

  69 STO = 1;

  70 break;

  71 default:

  72 STO = 1;

  73 break;

  74 }

  75 SI = 0;

  76 }

  SMBus中断,需要手动清除中断标志。

  3.3 实物

  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top