0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于DS1616与微控制器实现串行通信接口的设计

电子设计 来源:半导体技术 作者:徐大诚 2021-05-22 10:14 次阅读

1 引言

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成威廉希尔官方网站 ,常常用作各种计算机系统的时钟信号源和设置参数的存储威廉希尔官方网站 。它具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统诸如照相机、洗衣机等智能家电中得到广泛的应用。随着集成威廉希尔官方网站 技术的不断发展,RTC器件的新品也不断推出,美国的Xicor 和Dallas公司推出了X1203、X1228 和DS1302、DS1616等新品。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。这些器件与微控制器之间的接口大都采用连线简单的串行接口,但其通信时序是比较复杂的,怎样利用高效的编程语言设计出通信程序就显得尤为重要。本文以DS1616与微控制器的通信过程为例,在介绍通信组成和原理后,重点讨论了用C51编写其通信程序的过程和方法。

2 串行通信接口构成及工作原理

由于微控制器具有内嵌功能很强的CPU内核特点,因此微控制器用于数据传输独具智能化的优势。利用其智能化的特点就可以构成连线简单的串口通信,诸如I2C、SPI、MICROWIRE和CAN [3]等串行总线接口。这些串口由2~3根线连接,分为同步和异步。

DS1616是一种具有数据采集功能的实时时钟器件,由控制逻辑、实时时钟、通信接口等威廉希尔官方网站 和温度传感器、A/D转换器、存储器等部分构成。片外32.768 kHz石英晶体和内部振荡威廉希尔官方网站 产生的时钟信号经分频后得到相应日历/时间寄存器的计时值;控制逻辑威廉希尔官方网站 根据控制寄存器的设定值实现计时、温度数据采集、A/D转换和通信方式等的控制;DS1616的存储器采用分页结构,每页共有32个字节。第0页和第1页为实时时钟和特殊功能寄存器,特殊功能寄存器有两个控制寄存器和两个状态寄存器;第2页为用户非易失 RAM;第17页到第19页用来存储报警时间标签和持续时间;第64页到71页用来存储直方图数据;第128页到191页2k字节用来存储记录数据;第3到第16页、20到63 页、68到127页及192以上为将来扩展预留。用户只能修改实时时钟RTC、特殊功能寄存器和非易失 RAM的数据,其余存储空间只能读不能写,存储器的每个单元都有一个16位地址。CPU通过给控制寄存器写入相应控制字来确定其工作方式,读取状态寄存器值判断其状态,采集数据在2k字节的存储器中读取。

DS1616有两种通信方式,即同步和异步通信方式。当COMSEL端置高电平后,DS1616与微控制器之间实现三线同步通信,实现对片内存储器的单字节读写和页数据读。图1给出了与AT89C51微控制器的连接关系。输入端接收高电平后就启动所有的数据传送。的输入有两种功能:首先,置高电平后接通控制逻辑,允许命令、地址、数据序列送入/读出片内移位寄存器;其次,置低电平后终止单字节或多字节数据的传送。SCL是移位同步时钟,通过每个SCLK时钟的上升沿把每位数据写入DS1616,下降沿读出DS1616的逐位数据。传送的数据都是从低位到高位逐位写入/读出。每次传送的数据由命令字节、地址和数据三部分构成,时序如图2所示,地址视不同的访问单元而定。DS1616的读写过程是由命令字节控制的,共有5个命令字节,其功能如表1 所示。

基于DS1616与微控制器实现串行通信接口的设计

pIYBAGCoaaOAC9ETAAAVl0Cmidg815.png

3 通信程序设计

C语言是目前公认的最为流行的一种计算机高级程序设计语言。为了使C语言更加贴近硬件,使微控制器的开发者从艰苦的汇编语言设计中解脱出来,缩短开发周期,美国Archimedes和Franklin Software公司在90年代推出了适于以MCS51为内核的微控制器的高级程序开发工具C51。目前C51 主要有Archimedes和Franklin两种版本,两种版本均符合ANSI C的标准[4]。

下面通过C51编译器的编程,说明通信程序的编写方法,其中 WriteB()为写入单字节、ReadB()为读出单字节,Wait()为等待,Delay()延时函数用汇编程序实现。

#include

#define uchar unsigned char

#define SCL P3_5

#define IO P3_6

#define RST P3_7

extern void WriteB( uchar ); //向DS1616写入一个字节函数 extern uchar ReadB(); //从DS1616中读取一个字节函数

extern void Wait();//等待

extern void Delay( uchar ); //延时函数

uchar data Data[32];//存放32字节内容的数组

3.1 向DS1616指定单元中写入一个字节的函数

void WDS1616( uchar Address, uchar Data )

{

SCL = 0;

RST = 1;//开始通讯

WriteB( 0x22 ); Wait();//发送写字节命令22H

WriteB( Address ); Wait(); //发送地址

WriteB( Data ); Wait();//发送数据

RST = 0;//结束通讯

}

3.2 读取页数据的函数

void RPageDS1616( uchar AddressH, uchar AddressL )

{

uchar i;

RST = 1;//开始通讯

Wait();

WriteB( 0x33 );Wait();//发送读页节命令33H

WriteB( AddressH ); Wait(); //发送高位地址

WriteB( AddressL ); Wait(); //发送低位地址

for( i = 0; i 《 32; i++ )

{

Data = ReadB();//获取一页数据

Wait();

}

IO = 0;

RST = 0; //结束通讯

SCL = 0;

}

3.3 启动DS1616立即进行A/D转换或温度检测, 并将数据存入相应寄存器的函数

void RDS1616( )

{

RST = 1;//开始通讯

WriteB( 0x55 );//发送命令

IO = 0;

RST = 0;//结束通讯

SCL = 0; }

3.4 初始化DS1616并读取数据的主程序

void main()

{//COMSEL为高电平,DS1616采用同步通讯 RST = 0;//通讯复位

WDS1616( 0x0e, 0x40 ); Wait();//允许执行内存清0命令

WriteB( 0xA5 ); Wait();//清除寄存器和RAM

WDS1616( 0x0d, 0x01 ); Wait();//设置采样速率为每分钟一次

WDS1616( 0x29, 0x41 ); Wait();//启动温度传感器

WDS1616( 0x00, 0x32 ); Wait();//设置秒寄存器为32s

WDS1616( 0x01, 0x59 ); Wait();//分寄存器为59min

WDS1616( 0x02, 0x20 ); Wait();//20h

WDS1616( 0x03, 0x05 ); Wait();//星期五

WDS1616( 0x04, 0x05 ); Wait();//5号

WDS1616( 0x05, 0x84 ); Wait();//4月份,并且是20世纪(Y2K = 1)

WDS1616( 0x06, 0x02 ); Wait();//02年

while(1)

{ //以下是从地址0000H开始读取一页数据,其中包含有RTC,当前温度状态寄存器1等

RPageDS1616( 0x00, 0x00 );Wait();

RDS1616( ); //立即进行A/D转换或温度检测,并将数据存入相应寄存器

Delay( 100 );

Delay( 100 );

RPageDS1616( 0x00, 0x20 ); //从地址0020开始读取一页数据

Wait(); //其中包含有3路ADC数据和状态寄存器2等

}

}

4 结束语

使用C51编写MCS51与RTC器件的通信程序使编译变得简捷有序,并且调试和移植方便。以上程序稍加修改就可用于I 2C、SPI、MICROWIRE和CAN等总线接口的通信中。在单镜头反光相机的嵌入式系统的测光信号处理、日历/时钟模块与MCS51微控制器的通信中就应用了以上程序。C51 编程可大大提高MCS51微控制器应用软件的编写速度,缩短系统的开发周期。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7551

    浏览量

    151402
  • 传感器
    +关注

    关注

    2551

    文章

    51084

    浏览量

    753427
  • 接口
    +关注

    关注

    33

    文章

    8593

    浏览量

    151123
收藏 人收藏

    评论

    相关推荐

    DS1318与8051微控制器接口

    输出数据都将传递到μC,通过PC终端仿真的RS-232接口进行通信。有关本应用笔记中DS80C323微控制器的详细信息可从公司网站下载。程
    发表于 12-18 10:14

    应用串行外围接口实现微控制器通信

    应用串行外围接口实现微控制器通信:
    发表于 06-23 10:54 24次下载
    应用<b class='flag-5'>串行</b>外围<b class='flag-5'>接口实现</b>多<b class='flag-5'>微控制器</b>间<b class='flag-5'>通信</b>

    DS1302 RTC与8051微控制器接口

    摘要:本应用笔记说明了DS1302 RTC通过3线接口与8051微控制器的连接方式,设计实例包括威廉希尔官方网站 原理图和C语言接口程序。 DS1302引
    发表于 04-21 11:14 2318次阅读
    <b class='flag-5'>DS</b>1302 RTC与8051<b class='flag-5'>微控制器</b>的<b class='flag-5'>接口</b>

    DS1388实时时钟与8051微控制器接口

    摘要:本应用笔记介绍了DS1388与8051微控制器的连接,所提供的软件用C语言编写。本文提供了基本接口程序的代码,所采用的微控制器DS2
    发表于 04-21 11:15 1280次阅读
    <b class='flag-5'>DS</b>1388实时时钟与8051<b class='flag-5'>微控制器</b>的<b class='flag-5'>接口</b>

    DS3231与8051微控制器接口

    摘要:本应用笔记提供了一个DS3231与8051微控制器接口的硬件威廉希尔官方网站 和软件例程。 图1. DS3231引
    发表于 04-21 11:16 2051次阅读
    <b class='flag-5'>DS</b>3231与8051<b class='flag-5'>微控制器</b>的<b class='flag-5'>接口</b>

    DS1305 RTC与8051微控制器接口

    摘要:本文介绍DS1305实时时钟与8051微控制器DS2250的连接,所提供的基本接口程序用C语言编写。 DS1305引脚配置 概述
    发表于 04-21 11:16 1640次阅读
    <b class='flag-5'>DS</b>1305 RTC与8051<b class='flag-5'>微控制器</b>的<b class='flag-5'>接口</b>

    基于微控制器串行端口接口(SPI)启动威廉希尔官方网站

    本应用笔记描述基于微控制器的通用串行端口接口(SPI)启动威廉希尔官方网站 的工作原理。对于需要在上电时修改某些器件参数的用户而言,这是一种低成本解决方案。本威廉希尔官方网站 实现了一种用于对转换
    发表于 09-15 11:17 39次下载
    基于<b class='flag-5'>微控制器</b>的<b class='flag-5'>串行</b>端口<b class='flag-5'>接口</b>(SPI)启动威廉希尔官方网站

    基于DMA控制器的UART串行通信设计

    针对大数据量的串口间通信,在常规的UART串行数据通信的基础上,结合Cortex-M3微控制器中DMA控制器的作用,实现DMA
    发表于 04-20 10:54 46次下载
    基于DMA<b class='flag-5'>控制器</b>的UART<b class='flag-5'>串行</b><b class='flag-5'>通信</b>设计

    AN-812: 基于微控制器串行端口接口(SPI®)启动威廉希尔官方网站

    AN-812: 基于微控制器串行端口接口(SPI®)启动威廉希尔官方网站
    发表于 03-21 08:35 14次下载
    AN-812: 基于<b class='flag-5'>微控制器</b>的<b class='flag-5'>串行</b>端口<b class='flag-5'>接口</b>(SPI®)启动威廉希尔官方网站

    DS1616 时钟/定时 - 实时时钟

    电子发烧友网为你提供Maxim(Maxim)DS1616相关产品参数、数据手册,更有DS1616的引脚图、接线图、封装手册、中文资料、英文资料,DS1616真值表,DS1616管脚等资
    发表于 11-18 21:59
    <b class='flag-5'>DS1616</b> 时钟/定时 - 实时时钟

    DS1302与8051型微控制器接口

    本应用介绍如何使用3线接口DS1302 RTC连接至8051型微控制器。该示例包括用 C 语言编写的原理图和示例软件。
    的头像 发表于 01-09 17:01 850次阅读
    <b class='flag-5'>DS</b>1302与8051型<b class='flag-5'>微控制器</b><b class='flag-5'>接口</b>

    如何在MAXQ3180微控制器上使用串行外设接口

    MAXQ3180微控制器为电表的多相模拟前端。它集成了现代多功能电能计量所需的所有功能。MAXQ3180通过串行外设接口(SPI™)总线将其读数传送给主机微控制器。本应用笔记描述了该
    的头像 发表于 01-16 09:30 1574次阅读
    如何在MAXQ3180<b class='flag-5'>微控制器</b>上使用<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>

    怎样使用MAXQ3180微控制器串行外设接口

    MAXQ3180微控制器是电表多相模拟前端。它具备现代多功能电表的所有功能。MAXQ3180通过串行外设互联(SPI™)总线将其读数传送给主机微控制器。本应用笔记介绍怎样实现这一
    的头像 发表于 02-14 18:21 918次阅读
    怎样使用MAXQ3180<b class='flag-5'>微控制器</b>的<b class='flag-5'>串行</b>外设<b class='flag-5'>接口</b>

    DS1307与兼容8051的微控制器接口

    DS1307串行实时时钟集成了2线串行接口,可使用兼容8051的微控制器进行控制。本例中的
    的头像 发表于 03-01 13:52 1430次阅读
    <b class='flag-5'>DS</b>1307与兼容8051的<b class='flag-5'>微控制器</b><b class='flag-5'>接口</b>

    DS1620与DS5000/8051微控制器接口

    本应用笔记向用户介绍DS5000(兼容8051)微控制器DS1620数字温度传感接口软件。DS
    的头像 发表于 03-01 15:29 678次阅读
    <b class='flag-5'>DS</b>1620与<b class='flag-5'>DS</b>5000/8051<b class='flag-5'>微控制器</b><b class='flag-5'>接口</b>