ds1339

来源:互联网 发布:解放军知乎 编辑:程序博客网 时间:2024/06/06 01:47
 

    接口:I2C总线

    数据:seconds,minutes,hours,day,date,month,year

    格式:12 or 24-hour format(AM/PM),时间和日期采用BCD格式

 

    寄存器

地址

B7

B6

B5

B4

B3

B2

B1

B0

功能

范围

00H

0

10秒

0059

 

01H

0

10分

00-59

 

02H

0

12/

/PM

10小时

小时

小时

1-12+AM/PM

00-23

 

10小时

 

03H

0

0

0

0

0

星期

星期

1-7

 

04H

0

0

10天

0-31

 

05H

世纪

0

0

10月

月/世纪

01-12+CENTURY

 

06H

10年

00-99

 

07H

A1M1

10秒

报警1秒

00-59

 

08H

A1M2

10分

报警1分

00-59

 

09H

A1M3

12/

/PM

10小时

小时

报警1小时

1-12+AM/PM00-23

 

10小时

 

0AH

A1M4

DY/DT

10天

星期,天

报警1星期,报警1天

1-7,1-31

 

0BH

A2M2

10分

报警2分

00-59

 

0CH

A2M3

12/

/PM

10小时

小时

报警2小时

1-12+AM/PM00-23

 

10小时

 

0DH

A2M4

DY/

10天

星期,天

报警2星期,报警2天

1-7,1-31

 

0EH

0

BBSQI

RS2

RS1

INTCN

A2IE

A1IE

控制

 

 

0FH

OSF

0

0

0

0

0

A2F

A1F

状态

 

 

10H

TCS3

TCS2

TCS1

TCS0

DS1

DS0

ROUT1

ROUT0

涓流充电器

 

 

 

说明:

☆ 时间寄存器的B6选择12或24小时模式,1=12小时模式,0=24小时模式;

☆ 12小时模式时,AM/PM位=1是PM,0=AM

☆ 24小时模式时,小时寄存器的B5是10小时位(20到23时);

☆ 当12/24模式改变时,所有的小时值(包括报警)都必须重新输入;

☆ 当从99年到00年时,就触发月寄存器的B7(世纪);

☆ 星期寄存器在午夜递增,和星期对应的值是可以自定义的,但必须是顺序的(如1对应星期天,则2就对应星期一,等等);

☆ 控制寄存器的INTCN位使能报警;

☆ 控制寄存器0EH

    EOSC:晶振使能0=启动晶振,1=停止晶振,缺省=0;

    BBSQI:1=当没有VCC使用VBACKUP时输出方波或中断,0=当VCC低于VPF时SQW/INT脚变成高阻态。缺省是0;

    RS2:RS1:控制方波输出频率,如下表所示,缺省是11

 

SQW/INT输出

INTCN

RS2

RS1

SQW/ 输出

A2IE

A1IE

0

0

0

1Hz

X

X

0

0

1

4.096kHz

X

X

0

1

0

8.192kHz

X

X

0

1

1

32.768kHz

X

X

1

X

X

0

1

1

X

X

1

0

1

X

X

+

1

1

 

    INTCN:1=时间寄存器和报警1或报警2之间匹配时激活SQW/INT脚(假设报警使能),0=SQW/INT输出方波。缺省是0;

    A2IE:1=允许报警2标志(A2F)激活SQW/INT,0=A2F不能激活中断,缺省是0;

    A1IE:1=允许报警1标志(A1F)激活SQW/INT,0=A1F不能激活中断,缺省是0;

☆ 状态寄存器

    OSF:晶振停止标志,1=晶振停止了或者是停止过,开机后应软件清零;

    A2F:1=表示时间和报警2寄存器匹配,可以软件清零;

    A1F:1=表示时间和报警1寄存器匹配,可以软件清零;

☆ 涓流充电器寄存器

   

B7

B6

B5

B4

B3

B2

B1

B0

功能

X

X

X

X

0

0

X

X

禁止

X

X

X

X

1

1

X

X

禁止

X

X

X

X

X

X

0

0

禁止

1

0

1

0

0

1

0

1

没有二极管,250Ω电阻

1

0

1

0

1

0

0

1

一个二极管,250Ω电阻

1

0

1

0

0

1

1

0

没有二极管,2kΩ电阻

1

0

1

0

1

0

1

0

一个二极管,2kΩ电阻

1

0

1

0

0

1

1

1

没有二极管,4kΩ电阻

1

0

1

0

1

0

1

1

一个二极管,4kΩ电阻

0

0

0

0

0

0

0

0

上电初始化值

 

二极管和电阻根据电池的最大充电电流决定,如假设VCC=3.3V,假设选择了二极管和R2(2KΩ),则:

IMAX=(3.3V-二极管压降)/R2≈(3.3V-0.7V)/2KΩ≈1.3mA

 

I2C总线:

    SDA和SCL是开漏open-drain输出;

    在传输数据时,当时钟为高时,数据线必须保持稳定,如果发生改变,就认为是控制信号;

    总线状态:

        ☆ 总线不忙:数据和时钟线都是高电平;

        ☆ 开始数据传输:时钟为高电平,数据线有一个下降沿(从高到低);

        ☆ 停止数据传输:时钟为高电平,数据线有一个上升沿(从低到高);

        ☆ 数据有效:在开始条件后,在时钟为高电平期间,数据线一直是稳定的,就表示数据有效,数据线必须在时钟为低电平时改变,每个数据位一个时钟脉冲,每个数据从开始条件开始,由停止条件终止;开始和停止之间所传输的数据字节数不限。传输按字节响应,接收者在第九位返回一个应答。

        ☆ 应答:每个接收设备在接收到每个字节后必须产生一个应答。主设备必须为应答送出一个时钟脉冲;

            在应答时,应答设备在应答时钟脉冲期间拉低SDA线,这样在应答时钟脉冲中,SDA线一直是稳定的低电平;

            主设备通知从设备数据传输结束:最后一个字节后主设备不应答;

        ☆ 数据传输时先送高位;

 

DS1339作为从设备(写模式):

主设备先送地址,地址由1101000(7位)+R/ (方向位,0=写)组成,在确认地址后,DS1339会给出一个应答;然后主设备可以送寄存器地址给DS1339,同样DS1339会给一个应答;然后主设备还可以送出0到几个字节数据,DS1339会对每个字节应答,地址指针每接收到一个字节就递增一次。

DS1339作为从设备(读模式):

    第一个字节和上面一样,但方向位=1;在应答第一个字节后,DS1339就开始送出寄存器指针所指向的寄存器数据,如果在读之前没有写寄存器指针,这寄存器指针就使用用来的值;每送出一个字节,寄存器指针就递增,DS1339用“不应答”结束一次读。

    上面两个过程如下图所示:

 

    数据写

 

从地址

R/W

 

寄存器地址

 

数据

 

 

数据

 

 

S

1101000

0

A

XXXXXXXX

A

XXXXXXXX

A

XXXXXXXX

A

P

S开始,A应答,P停止;

主到从,■从到主;

   

    数据读

 

从地址

R/W

 

数据

 

数据

 

 

数据

 

 

S

1101000

1

A

XXXXXXXX

A

XXXXXXXX

A

XXXXXXXX

 

P

S开始,A应答,P停止;

主到从,■从到主;

 

    数据读(写指针,然后读)

 

 

从地址

R/W

 

寄存器地址

 

 

从地址

 

R/W

 

 

S

1101000

0

A

XXXXXXXX

A

S

1101000

1

A

 

 

 

 

 

 

 

 

 

 

 

 

 

数据

 

数据

 

 

数据

 

 

 

 

 

XXXXXX

A

XXXXXX

A

XXXXXX

 

P

 

 

 

S开始,A应答,P停止;

主到从,■从到主;

 

 

PIC18F2525 I2C

寄存器

SSPSTAT(状态寄存器),SSPCON1和SSPCON2(控制寄存器);

 

SPI模式

寄存器

    SSPCON1/SSPSTAT/SSPBUF/SSPSR(不能直接访问)

    接收时,SSPSR和SSPBUF构成双缓冲,数据先到SSPSR,然后送到SSPBUF

    发送时,数据同时写到SSPBUF和SSPSR

 

    SSPSTAT(SPI模式)

B7

 

 

 

 

 

 

B0

SMP

CKE

D/

P

S

R/

UA

BF

SMP:采样

    SPI主模式:

        1=在数据输出结尾采样输入数据;

        0=在数据输出中间采样输入数据;

    SPI从模式:

        必须=0;

CKE:SPI时钟选择位

    1=当时钟状态从激活变到空闲时传输;

    0=当时钟状态从空闲变到激活时传输;

    时钟状态的极性由CKP位设置。

D/A:地址/数据位

    只用在I2C模式中。

P:停止位

    只用在I2C模式中。

S:开始位

    只用在I2C模式中。

R/W:读/写信息位

    只用在I2C模式中。

UA:更新地址位

    只用在I2C模式中。

BF:缓冲区满状态位(接收模式)

    1=接收完成,SSPBUF满;

    0=接收没有完成,SSPBUF空;

 

SSPCON1:

B7

 

 

 

 

 

 

B0

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

WCOL:写冲突检测位(发送模式)

    1=写SSPBUF时仍在发送前一个数据(必须软件清除);

    0=没有冲突;

SSPOV:接收溢出

    SPI从模式:

    1=接收到一个新数据,但SSPBUF仍保存了前一个数据,这时,SSPSR中的数据就会丢失;

    0=没有溢出;

SSPEN:同步串行端口使能

    1=使能串行端口,把SCK,SDO,SDI和SS配置为串行端口脚;

    0=禁止串行端口;

    使能时,这些脚必须正确配置输入或输出。

CKP:时钟极性选择

    1=时钟的空闲状态是高电平;

    0=时钟的空闲状态时低电平;

SSPM3:SSPM0:同步串行端口模式选择

    0101=SPI从模式,时钟=SCK脚,SS脚控制禁止,SS可以用作I/O脚;

    0100=SPI从模式,时钟=SCK,SS脚控制允许;

    0011=SPI主模式,时钟=TMR2输出/2;

    0010=SPI主模式,时钟=FOSC/64

    0001=SPI主模式,时钟=FOSC/16

    0000=SPI主模式,时钟=FOSC/4

 

操作

    初始化操作:

        4 主(SCK是时钟输出)或从(SCK是时钟输入)模式

        4 时钟极性

        4 数据输入采样时间

        4 时钟边沿(在SCK的上升或下降沿输出数据)

        4 时钟速率(只对主模式)

        4 从选择模式(只对从模式)

       

注意:送出数据时高位在先。

   

I2C模式

寄存器

    SSPSTAT(I2C模式)

B7

 

 

 

 

 

 

B0

SMP

CKE

D/

P

S

R/

UA

BF

SMP:转换速率控制

    1=标准速度模式,转换速率控制禁止(100kHz和1MHz);

    0=高速模式,允许转换速率控制(400kHz);

CKE:SMBus选择

    1=使能SMBus特定输入;

    0=禁止SMBus特定输入;

D/A:数据/地址

    主模式:保留

    从模式:

    1=表示最后一个发送或接收的字节是数据;

    0=表示最后发送或接收到的字节是地址;

P:停止位

    1=表示最后检测到一个停止位;

    0=最后没有检测到停止位;

    注:本位在复位和SSPEN=0时清零;

S:开始

    1=表示最后检测到了一个开始位;

    0=最后没有检测到开始位;

    注:本位在复位和SSPEN=0时清零;

R/W:读/写信息位

    在从模式:

    1=读;

    0=写;

    注:本位保存了最后一次地址匹配时的R/W信息,本位只在地址匹配到下一个开始位、停止位或无应答位之间有效。

    在主模式:

    1=正在发送;

    0=没在发送;

    注:本位和SEN、RSEN、PEN、RCEN或ACKEN相或可以指示MSSP是否激活;

UA:更新递增(只用在10位从模式)

    1=表示用户需要更新SSPADD寄存器中的地址;

    0=地址不需要更新;

BF:缓冲区满状态位

    在发送模式:

    1=SSPBUF满;

    0=SSPBUF空;

    在接收模式:

    1=SSPBUF满(不包括ACK和停止位);

    0=SSPBUF空(不包括ACK和停止位);

 

SSPCON1:(I2C模式)

B7

 

 

 

 

 

 

B0

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

WCOL:写冲突检测位(发送模式)

    在主发送模式:

    1=当I2C不具备开始发送条件时写SSPBUF寄存器(必须软件清零);

    0=没有冲突;

    在从发送模式:

    1=还在发送前一个数据时写SSPBUF寄存器(必须软件清零);

    0=没有冲突;

    接收模式:无关位;

SSPOV:接收溢出指示

    在接收模式:

    1=SSPBUF寄存器前一个数据没有读走,又接收到新数据(必须软件清零);

    0=没有溢出;

    在发送模式:无关位;

SSPEN:同步串口使能

    1=使能串口,SDA和SCL配置为串口脚;

    0=禁止串口,这些脚配置为I/O脚;

    注:当使能时,必须正确配置SDA和SCL的方向;

CKP:SCK释放控制

    在从模式:

    1=释放时钟;

    0=保持时钟为低电平(时钟扩展),以保证数据建立时间;

    在主模式:未用;

SSPM3:SSPM0:同步串口模式选择

    1111=I2C从模式,10位地址,开始和停止位中断使能;

    1110=I2C从模式,7位递增,开始和停止位中断使能;

    1011=I2C软件控制主模式(从空闲);

    1000=I2C主模式,时钟=FOSC/(4*(SSPADD+1))

    0111=I2C从模式,10位地址;

    0110=I2C从模式,7位地址;

   

SSPCON2:(I2C模式)

B7

 

 

 

 

 

 

B0

GCEN

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

GCEN:通呼使能(只对从模式)

    1=当SSPSR接收到一个通呼地址(0000H)时中断使能;

    0=禁止通呼地址;

ACKSTAT:应答状态(只对主发送模式)

    1=没有从从设备接收到应答;

    0=从从设备接收到了应答;

ACKDT:应答数据(只对主接收模式)

    1=没有应答;

    0=应答;

ACKEN:应答序列使能(只对主接收模式)

    1=初始化SDA和SCL脚的应答序列,并发送ACKDT数据位,硬件自动清零;

    0=应答序列无效;

RCEN:接收使能(只对主模式)

    1=使能I2C的接收模式;

    0=接收无效;

PEN:停止条件使能(只对主模式)

    1=初始化SDA和SCL脚的停止条件,硬件自动清零;

    0=停止条件无效;

RSEN:重复开始条件使能(只对主模式)

    1=初始化SDA和SCL脚的重复开始条件,硬件自动清零;

    0=重复开始条件无效;

SEN:开始条件使能/扩展使能

    在主模式:

    1=初始化SDA和SCL脚的开始条件,硬件自动清零;

    0=开始条件无效;

    在从模式:

    1=从发送和接收都使能时钟扩展(扩展使能);

    0=禁止时钟扩展;

 

操作

    I2C可以选择如下模式:

    4 I2C主模式时钟

    4 I2C从模式(7位地址)

    4 I2C从模式(10位地址)

    4 I2C从模式(7位地址),开始和停止位中断使能

    4 I2C从模式(10位地址),开始和停止位中断使能

    4 I2C软件控制主模式,从模式无效

 

主模式

    一个典型的主模式发送过程可以如下:

    1.用户设置SEN=1,产生一个开始条件;

    2.硬件SSPIF=1(需要软件清零),MSSP在开始其他操作前需要等待所需的启动时间;

    3.从地址加载到SSPBUF

    4.地址从SDA脚送出;

    5.MSSP模块从从设备读入ACK位,使SSPCON2寄存器的ACKSTAT=0

    6.MSSP模块在第九个时钟周期产生一个中断,使SSPIF=1(需要软件清零);

    7.8位数据加载到SSPBUF

    8.数据从SDA送出;

    9.MSSP模块从从设备接收ACK信号并写到SSPCON2寄存器的ACKSTAT位;

    10.MSSP模块在第九个时钟周期产生一个中断,使SSPIF=1

    11.用户设置PEN=1,产生一个停止条件;

    12.一旦停止条件完成就会产生一个中断。

 

    一个典型的主模式接收过程可以如下:

    1.用户设置SEN=1,产生一个开始条件;

    2.硬件SSPIF=1(需要软件清零),MSSP在开始其他操作前需要等待所需的启动时间;

    3.从地址加载到SSPBUF

    4.地址从SDA脚送出;

    5.MSSP模块从从设备读入ACK位,使SSPCON2寄存器的ACKSTAT=0

    6.MSSP模块在第九个时钟周期产生一个中断,使SSPIF=1(需要软件清零);

    7.用户使RCEN1=1,开始一次接收;

    8.MSSP模块在接收到8位数据后使SSPIF=1(需要软件清零);

    9.用户设置ACKDT=0(应答)或1(不应答),并使ACKEN=1(需要软件清零),使ACKDT从SDA送出;

    10.MSSP模块在第九个时钟周期产生一个中断,使SSPIF=1(需要软件清零);

    11.用户设置PEN=1,产生一个停止条件;

    12.一旦停止条件完成就会产生一个中断。

 

波特率

    波特率发生器自动加载SSPADD中的值;

 

I2C主模式发送

    4 ACKSTAT状态标志

        当从设备应答时,ACKSTAT=0,没有应答时,ACKSTAT=1

 

原创粉丝点击