位置:51电子网 » 技术资料 » 其它综合

基于C51实时时钟器件串口通信程序设计技术

发布时间:2008/5/28 0:00:00 访问次数:523

1 引言

实时时钟(rtc)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常常用作各种计算机系统的时钟信号源和设置参数的存储电路。它具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统诸如照相机、洗衣机等智能家电中得到广泛的应用。随着集成电路技术的不断发展,rtc器件的新品也不断推出,美国的xicor 和dallas公司推出了x1203、x1228 [1]和ds1302、ds1616[2]等新品。这些新品不仅具有准确的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 所示。

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 );

1 引言

实时时钟(rtc)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常常用作各种计算机系统的时钟信号源和设置参数的存储电路。它具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统诸如照相机、洗衣机等智能家电中得到广泛的应用。随着集成电路技术的不断发展,rtc器件的新品也不断推出,美国的xicor 和dallas公司推出了x1203、x1228 [1]和ds1302、ds1616[2]等新品。这些新品不仅具有准确的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 所示。

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 );

相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!