DS1337 时钟芯片在 C8051F 上的实现

发布者:EnchantedHeart最新更新时间:2016-12-30 来源: eefocus关键字:DS1337  时钟芯片  C8051F 手机看文章 扫描二维码
随时随地手机看文章

一、DS1337介绍

  DS1337串行实时时钟芯片是一种低功耗、全部采用BCD码的时钟日历芯片,它带有两个可编程的定时闹钟和一个可编程的方波输出。其地址和数据可通过I2C总线串行传输,能提供秒、分、时、日、星期、月和年等信息。

 1.1 DS1337的引脚说明

  DS1337的引脚排列示意图如图1所示。各引脚的功能如下:

        

        图1 DS1337引脚示意图

  • VCC,GND:直流电源和接地端,VCC的输入范围在1.8~5.5V之间。X1,X2:标准的32.768kHz的石英晶振接入端,内部晶振电路设计要求晶振特定电容负载为6pF。另外,这两个引脚还可以有其它接法,即:X1脚连接外部振荡信号源,而将X2脚悬空。

  • SCL:串行时钟输入,用来在总线上同步数据传输。

  • SDA:串行数据输入输出,SDA是I2C总线接口的数据输入输出引脚,开漏输出,使用时要求接一个上拉电阻。

  • SQW/INTB:方波/中断输出,可通过对DS1337的内部控制寄存器进行编程来控制这个引脚是输出方波还是输出中断信号。该引脚是开漏输出,使用时要接一个外部的上拉电阻。

  • INTA:中断输出端,使能时,如果闹钟寄存器的设定值与当前时间匹配,该脚会输出一个低电平。该引脚也是开漏输出,要接上拉电阻。

1.2 时间寄存器

  常用的时间寄存器地址为00H~06H。设置和初始化时间和日历可通过写相应的寄存器字段来实现,寄存器的数据格式以BCD码表示。DS1337既可以工作在12小时模式下,也可以工作在24小时模式下。小时寄存器的位6被定义为12小时模式或24小时模式选择位,该位为1时,选择12小时模式。在12小时模式时,位5是AM/PM标志位,该位为1时表示PM。当在24小时模式时,位5是第二个十位(表示20到23小时)。月寄存器的第7位是世纪位,当年寄存器从0到99溢出时,该位发生变化。

1.3 控制寄存器和状态寄存器

  DS1337中有一个控制寄存器和一个状态寄存器,可用于控制实时时钟、闹钟和方波的输出。

  控制寄存器地址为0EH。其中:

  • EOSC:振荡器使能位。该位为0,振荡器起振;为1,振荡器停振。刚上电时,该位为0;RS1,RS2:方波输出频率选择位。RS1和RS2共有四种组合,分别对应的方波输出频率为1Hz,4.096kHz,8.192kHz,32.768kHz。在刚加电时,方波输出频率设置是32.768kHz。

  • INTCN:中断控制位。用于控制两个闹钟与中断输出脚之间的关系。为1时,两个闹钟在满足定时条件时,各自有独立的中断输出。为0时,两个闹钟共用一个中断输出脚INTA,而脚SQW/INTB为方波输出端。开始上电时,该位为0。

  • A1IE:闹钟1中断使能位。为1时,允许状态寄存器的A1F位输出到脚INTA。上电时该位为0,此时不能用A1F位初始化INTA信号。

  • A2IE:闹钟2中断使能位,该位的作用与A1IE位相同。

  DS1337的状态寄存器地址为0FH, 各位的作用如下:

  • OSF:振荡器停止标志。该位为1,表示振荡器已停止。有四种情况能产生这样的结果:一是芯片刚上电,二是Vcc引脚电压不足,三是EOSC位为1,四是晶振受到外部影响(如噪声等)。

  • A1F、A2F:闹钟标志位。为1时,表示闹钟设定时间与当前时间匹配,并产生中断输出。

 

图2 DS1337寄存器

 1.4 对DS1337的读与写

图3 DS1337 写寄存器

  从上图中,可以看出,主器件发起开始条件,发送从器件的地址和写命令(0xD0|0x00),等待从器件的应答,然后再发送要写的寄存器地址,等待从器件的应答,然后再发送要写的数据,等待从器件的应答,如果写操作完成,主器件发送结束。完成一次写数据过程。

图4 DS1337 读寄存器

  从上图中,可以看出,主器件发起开始条件,发送从器件的地址和写命令(0xD0|0x00),等待从器件的应答,然后再发送要读的寄存器地址,等待从器件的应答,然后主器件再重新发送开始条件,发送从器件的地址和读命令(0xD0|0x01),等待从器件的应答,接收从器件发来的数据,主器件应答。当收到最后一个数据后,主器件发送非应答和结束。完成一次读数据过程。


 二、SMBus总线介绍

  SMBus串行I/O接口是一个双线的双向串行总线,与I2C串行总线兼容。图 5给出了一个典型的SMBus 配置。SMBus 接口的工作电压可以在3.0V和5.0V 之间,总线上不同器件的工作电压可以不同。SCL(串行时钟)和 SDA(串行数据)线是双向的。 必须通过上拉电阻或类似电路将它们连到电源电压。当总线空闲时,这两条线都被拉到高电平。连接在总线上的每个器件的 SCL 和 SDA 都必须是漏极开路或集电极开路的。

图5 SMBus 配置

  2.1握手

  SMBus采用多种线路条件作为器件间的握手信号。在一次数据传输中,SDA只能在SCL为低时改变电平。在SCL为高电平时SDA发生改变则是代表如下的开始和停止信号:

 

  • 开始:该条件启动一次传输过程。当SCL为高电平时SDA上出现一个下降沿。

  • 结束:该条件结束一次传输过程。当SCL为高电平时SDA上出现一个上升沿。

  • 应答:也称为ACK,接收器件发送该信号表示确认。例如,在器件X收到一个字节后,它将发送一个ACK确认传输成功。ACK条件是在SCL为高时采样到SDA为低电平。

  • 非应答:也称为NACK,这是在SCL为高电平时采样到SDA为高电平。当接收器件不能产生ACK时,发送器件看到的是NACK。在典型的数据传输中,收到NACK信号表示所寻址的从器件没有准备好或不在总线上。一个处于接收状态的主器件发送NACK表示这是传输的最后一个字节。图2给出了握手信号时序。

图6 SMBus 时序

  2.2 传输方式

  有两种可能的传输方式:写(从主器件到从器件)和读(从从器件到主器件)。在一次传输中,任何一个器件都可以是四种角色之一。这四种角色将在下面说明。注意,从地址+R/W’是指一个8位传输(7位地址,1位R/W)。

  1)主发送器:在该方式下,器件在SDA上发送串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,发送从地址+W,然后等待从器件的ACK。收到ACK后,器件发送一个或多个字节数据,每个字节都要由从器件确认。在发送完最后一个字节后,器件发送一个停止条件。

  2)主接收器:在该方式下,器件在SDA上接收串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,之后发送从地址+R。在收到从器件对地址的ACK后,在SCL上输出时钟并在SDA上接收数据。在接收完最后一个字节后,器件将发送一个NACK和一个停止条件。

  3)从发送器:在该方式下,器件在SDA上输出串行数据,在SCL上接受时钟。器件接收一个起始条件和它自己的从地址+R,然后发出ACK并进入从发送方式。器件在SDA上发送数据,在发送完每个字节后都要收到一个ACK。在传输完最后一个字节后,主器件发送一个NACK和一个停止条件。

  4)从接收器:在该方式下,器件收到来自主器件的起始条件和和它自己的从地址+W。然后发出ACK并进入从接收方式。现在器件在SDA上接收串行数据,在SCL上接收时钟。在接收完每个字节后都要发送一个ACK,在接收到主器件的停止条件后退出从接收方式。

  图7为典型的写操作情况。图8为典型的读操作情况。

图7 写操作

  (1)为一个成功的传送过程。在(3)中,主器件在收到一个ACK后重新发出起始条件。这一过程允许主器件在不放弃总线的情况下启动一个新的传输过程(例如,从写操作切换到读操作)。重复起始条件通常在访问EEPROM时使用,因为一个读操作前面必须有一个写存储器地址的操作。

图8 读操作

  2.3  SMBus特殊功能寄存器

  对 SMBus 串行接口的访问和控制是通过 5 个特殊功能寄存器来实现的:控制寄存器 SMB0CN、时钟速率寄存器 SMB0CR、地址寄存器 SMB0ADR、数据寄存器 SMB0DAT 和状态寄存器 SMB0STA。系统器件可以有一个或多个 SMBus 串行接口。

  2.3.1 控制寄存器SMB0CN

  SMBus 控制寄存器 SMB0CN 用于配置和控制 SMBus 接口。该寄存器中的所有位都可以 用软件读写。有两个控制位还受 SMBus 硬件的影响。当发生一个有效的串行中断条件时,串 行中断标志(SI,SMB0CN.3)被硬件设置为逻辑 1,该标志只能用软件清 0。当总线上出现 一个停止条件时,停止标志(STO,SMB0CN.4)被硬件清 0。

 

  2.3.2 时钟速率寄存器SMB0CR

  在器件工作于主方式时SMBus时钟寄存器用于控制SCL时钟速率。SMB0CR中的8位数决定了时钟速率,公式如下:

                  

  其中,SMB0CR是一个负数的补码。因此,对于100kHz的SCL频率和16MHz的SYSCLK,应向SMB0CL装入-80,即0xB0。

  2.3.3 地址寄存器 SMB0ADR

  SMBus地址寄存器保存器件在从方式时将要应答的从地址。位(7:1)保存从地址;位0是通用呼叫允许。如果位0被置位,器件将应答通用呼叫地址(0x00)。

  2.3.4 数据寄存器 SMB0DAT

  SMBus数据寄存器用于保存将要发送或刚刚接收的数据。只有在SI=1时,从该寄存器读出的数据才是有效的。当SI不为1时,SMBus可能处在向SMB0DAT移入数据或从SMB0DAT移出数据的过程中。注意:在传输过程中,从SMB0DAT移出的最高位又移回到最低位,因此在一次传输完成后SMB0DAT中仍然保存着原始数据。

  1.3.5 状态寄存器 SMB0STA

  共有28个可能的SMBus状态,每个状态对应一个唯一的状态码。状态码的高5位是可变的,而一个有效状态码的低3位固定为0(当SI=1时)。因此所有有效的状态码都是8的整数倍。


 三、在C8051F 上的实现

3.1 硬件

3.2 软件

 1 typedef struct

 2 { 

 3     u8 second;        // 0 to 59 

 4     u8 minute;        // 0 to 59 

 5   u8 hour;          // 0 to 23  (24-hour time) 

 6   u8 day;            // 0 = Sunday, 1 = Monday, etc. 

 7     u8 date;           // 1 to 31 

 8   u8 month;          // 1 to 12 

 9   u8 year;           // 00 to 99 

10 } DS1337_time; 

11 

12 xdata DS1337_time Time; 

13  

14 bit SMB_BUSY;

15 u8 COMMAND;

16 u8 Mode;

17 u8 wr_data[2];  

18 u8 wrnumber;   

19 u8 get_data;

20  

21 

22 void DS1337_Set_time(DS1337_time dt);

23 

24 

25 char bcd2bin(char bcd_value)

26 { 

27   char temp; 

28   temp = bcd_value; 

29   temp >>= 1; 

30   temp &= 0x78; 

31   return(temp + (temp >> 2) + (bcd_value & 0x0f)); 

32 } 

33 

34 

35 unsigned char bin2bcd(unsigned char value) 

36 { 

37   char retval; 

38   retval = 0; 

39 

40   while(1) 

41     { 

42         if(value >= 10) 

43         { 

44          value -= 10; 

45          retval += 0x10; 

46         } 

47         else 

48         { 

49          retval += value; 

50          break; 

51         } 

52     } 

53   return(retval); 


  第25行的函数是将BCD码转化为二进制数。第35行的函数是将二进制数转化为BCD码。

 1 void init_iic(void) 

 2 {

 3     SMB0CN = 0x44;            // Enable SMBus with acknowledge low (AA = 1)

 4     SMB0CR = 146;             // SMBus clock rate = 100 kHz   146

 5     EIE1 |= 2;                // SMBus interrupt enable

 6     SI = 0;                           

 7     SMB_BUSY = 1;

 8 }

 9 

10 

11 void Write_DS1337(u8 adrress, u8 data1) 

12 { 

13     Mode = 1;

14   wrnumber = 2 ;

15     wr_data[0] = adrress;

16     wr_data[1] = data1;

17     SMB0CN = 0x44;

18     COMMAND = DS1337_ADDR;

19     STO = 0;

20     STA = 1;

21     SMB_BUSY = 1;

22     while(SMB_BUSY);

23 }

24 

25 

26 int Read_DS1337(u8 adrress) 

27 {

28   Mode=0;    

29     SMB0CN = 0x44;

30     COMMAND = (DS1337_ADDR | 0x01);

31     wr_data[0] = adrress;

32     STO = 0;

33     STA = 1;

34     SMB_BUSY = 1;

35     while(SMB_BUSY);

36     return get_data;

37 }


   第1行的函数初始化SMBus总线。第11行的函数为DS1337写操作。第26行的函数为DS1337读操作。

 1 void DS1337_init()

 2 {

 3     u8 status;

 4     DS1337_time DT;

 5     

 6     DT.second = 30;

 7      DT.minute = 50;

 8     DT.hour =     21;

 9     DT.day =     2;

10     DT.date =     12;

11     DT.month =     8;

12     DT.year =     14;

13     

14     status = Read_DS1337(DS1337_STATUS_REG);

15     if((status & 0x80) != 0)

16     {

17         DS1337_Set_time(DT);

18         Write_DS1337(DS1337_CONTROL_REG,DS1337_CTRL_REG_INIT_VAL);

19         Write_DS1337(DS1337_STATUS_REG,DS1337_CLEAR_STATUS_VAL);

20     }

21 }

22 

23 void DS1337_Set_time(DS1337_time dt)

24 {

25     u8 bcd_sec,bcd_min,bcd_hrs,bcd_day,bcd_date,bcd_mon,bcd_year; 

26 

27     bcd_sec  = bin2bcd(dt.second); 

28   bcd_min  = bin2bcd(dt.minute); 

29   bcd_hrs  = bin2bcd(dt.hour);   

30   bcd_day  = bin2bcd(dt.day); 

31   bcd_date = bin2bcd(dt.date); 

32   bcd_mon  = bin2bcd(dt.month);    

33   bcd_year = bin2bcd(dt.year); 

34         

35     Write_DS1337(DS1337_SECONDS_REG,bcd_sec);

36     Write_DS1337(DS1337_MINUTES_REG,bcd_min);

37     Write_DS1337(DS1337_HOURS_REG,bcd_hrs);

38     Write_DS1337(DS1337_DAY_OF_WEEK_REG,bcd_day);

39     Write_DS1337(DS1337_DATE_REG,bcd_date);

40     Write_DS1337(DS1337_MONTH_REG,bcd_mon);

41     Write_DS1337(DS1337_YEAR_REG,bcd_year);

42 }

43 

44 void DS1337_Get_time() 

45 {

46     u8 bcd_sec,bcd_min,bcd_hrs,bcd_day,bcd_date,bcd_mon,bcd_year; 

47     

48     bcd_sec = Read_DS1337(DS1337_SECONDS_REG);

49     bcd_min = Read_DS1337(DS1337_MINUTES_REG);

50     bcd_hrs = Read_DS1337(DS1337_HOURS_REG);

51     bcd_day = Read_DS1337(DS1337_DAY_OF_WEEK_REG);

52     bcd_date = Read_DS1337(DS1337_DATE_REG);

53     bcd_mon = Read_DS1337(DS1337_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:                //数据字节已发送,收到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 实物


关键字:DS1337  时钟芯片  C8051F 引用地址:DS1337 时钟芯片在 C8051F 上的实现

上一篇:C8051 PCA实现红外遥控接收
下一篇:单片机结构和原理

推荐阅读最新更新时间:2024-03-16 15:28

单片机C8051F020简介及其在仪器和仪表中的应用
   1引言   当前,随着科学技术及工农业生产水平的不断提高,对相应的仪器仪表也提出越来越高的要求,因此,仪器仪表需扩展大量的外围功能部件来满足仪器仪表复杂性、高性能及智能化的要求。   这种方法虽然满足了仪器的复杂性要求,但随之而来的问题是由于系统扩展的过于复杂而造成系统可靠性降低,故障率增加,查找故障困难,从而失去了智能化仪器仪表的优势,如果能够将功能复杂的众多外围功能部件全部或大部分集成到系统所使用的单片机内部,则可大大提高仪器仪表系统的可靠性,同时又使系统的成本得以降低,还可利用单片机片内资源在不增加硬件成本的情况下增强仪器的性能,因而该方案是提高仪器仪表可靠性及性能的行之有效的方法,而美国Cygnal公司的
[单片机]
基于C8051F020单片机的实时测控装置设计
0 引言 C8051Fxxx单片机是美国Silabs公司推出的完全集成的混合信号系统级芯片,具有与8051指令集完全兼容的CIP-51内核。在项目研制中采用C8051F020单片机,对于熟悉掌握51单片机的技术人员来说,在硬件设计及软件编程上大大提高了研制效率和装备可维护性。测控装置是某型电子装备的实时控制装置,是整个系统最重要的组成部分之一,是系统运行过程中的指挥控制中心。该装置通过构建多单片机系统,实现了复杂时序的实时控制以及多路数据采集,可以提供系统正常工作所需的多路输出控制信号;通过硬件设计和软件编程实现了单片机与单片机、单片机与上位机之间的实时通信,各子系统之间的效据交换和复杂逻辑关系的处理,系统在规定时间可靠输出多
[单片机]
基于<font color='red'>C8051F</font>020单片机的实时测控装置设计
时钟芯片SD2200ELP与AVR单片机的接口设计
  在提升机制动闸瓦间隙实时在线检测的设计中,需要保存故障时间和故障数据。大部分仪器仪表中都要使用时钟芯片,但是很多的实时时钟芯片(如PCF8563)没有掉电保护,须外接晶振和电池,比较麻烦。而深圳兴威帆电子技术有限公司生产的SD2200ELP是内置32 KBE2PROM的串行实时时钟芯片,不需要外接器件支持,连线简单、可靠,提供的数据精确,断电后也能继续工作。微控制器采用Atmel公司的ATmegal6单片机,利用AT-megai6的硬件TWI接口可直接对SD2200ELP进行操作,无需软件模拟I2C方式,使用方便、可靠。   1 SD2200L简介   SD2200L系列(包括SD2200B/C/D/E/FLP)是一种
[嵌入式]
C8051Fxxx程序丢失问题及预防措施分析
1 C8051Fxxx单片机简单介绍和Flash结构 C8051Fxxx系列器件是Silicon Labs推出的一个高速单片机系列。这款单片机是完全集成的混合信号片上系统型MCU 芯片,具有高速、流水线结构的8051 兼容的CIP51内核;70%的指令的执行时间为1个或2个系统时钟周期;片上有丰富的片内外设,根据型号的不同,包括ADC、DAC、UART、捕捉/比较模块的可编程计数器/定时器阵列、SPI、SMBus等。 C8051Fxxx单片机有大容量的Flash存储器,用于程序代码和非易失性数据存储,可在系统编程。Flash的结构是以扇区为单位组织的(128 KB系列以1 024字节为1个扇区,64 KB系列以512字节为1个
[单片机]
C8051F USART程序
摘要: /********************************************************************************************************** File : ws_usart_port.h* Hardware Environment:* Build Environment : Silicon LABs 3.42.00 / uV ... /******************************************************************************************************** * *
[单片机]
PCF8563 时钟芯片驱动程序 (STM8S/STM8L)
模拟I2C读取时钟芯片PCF8563中的日期时间 #define SCLK_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_1)//SDA IIC接口的时钟信号 #define SCLK_Set() GPIO_SetBits(GPIOD, GPIO_PIN_1) #define SDIN_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_2)//SCL IIC接口的数据信号 #define SDIN_Set() GPIO_SetBits(GPIOD, GPIO_PIN_2) u8 buf ; void SDA_IN(u8 in) { if(in) GPIO_I
[单片机]
C8051F仿真调试快速入门(Silicon IDE)
注:下载程序必须首先安装Silicon IDE以及Keil软件 ·Keil的安装   请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm 下载安装。 ·Silicon IDE的安装   请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/SoftwareDownloads.aspx?cm_sp= WebParts -_- MCUSupport -_- SWDownloads 下载安装。 1、在Silicon IDE中集成Keil软件( 点击查看 ) 2、如下图所示,点击“Options - Conne
[单片机]
<font color='red'>C8051F</font>仿真调试快速入门(Silicon IDE)
基于C8051F023的软件注入技术(1)
单片机的出现是现代 计算机 技术发展的里程碑,它的诞生标志着计算机正式形成了通用计算机系统和 嵌入式 计算机系统两大分支。近年来,计算机理论研究、半导体工艺和超大规模集成电路技术取得了长足的进步,以此为支撑的嵌入式计算机也逐渐成为各种嵌入式系统的核心部件。   嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适用于系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统,是一种软硬件高度结合的产物,其系统功能实现的关键在于经过高效率设计的各类应用软件。和通用计算机软件不同,嵌入式系统中的软件一般都固化在只读存储器中,而不是以磁盘为载体可以随意更换,所以嵌入式系统的应用软件和嵌入式产品一样都具有较长的生命周期。另
[单片机]
基于<font color='red'>C8051F</font>023的软件注入技术(1)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved