实时时钟

实时时钟
实时时钟

学号:

嵌入式系统及应用

实验报告

基于ARM7LPC2138的实时时钟

学生姓名

班级

成绩

计算机与信息工程学院

2013年7月1日

前言

近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。32位嵌入式系统发展很快,32位单片机已逐渐占领8位机的市场,并以很高的性价比赢得了越来越多的用户的青睐。随着科技和工艺的进步,32位单片机的优势会更加突显出来,将会成为嵌入式系统的主流。在32位嵌入式系统中,基于ARM的应用占据了大部分份额。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

本次设计是采用LPC2138的32位芯片设计的可调万年历,具有调时、调分、调月、调日和准点报时的功能。当整点时,蜂鸣器响的次数为当时小时的值以及LED会闪烁相应的次数。

关键词:ARM LPC2138 LED RTC

目录

一、功能说明 (1)

二、系统硬件设计 (1)

2.1 系统结构 (1)

2.2元器件的选择 (2)

三、系统软件设计 (3)

3.1程序和芯片的初始化 (3)

3.2构建功能模块 (4)

四、实验测试 (7)

4.1IAR软件的编译,连接和运行 (7)

4.2protues仿真软件的联合调试 (8)

五、实验结果 (9)

5.1仿真结果 (9)

5.2实验板结果 (10)

六、心得体会 (11)

七、程序清单 (11)

一、功能说明

利用内部RTC的实时时钟,制作一个时钟,通过液晶显示模块显示年、月、日和时间。K1键、K2键、K3键和K4键分别可用于调整月份、日、小时和分钟数。在调整过程中,日期和时钟以新的时间为起点继续刷新显示。同时,该设计具有整点报时的功能,当整点时,蜂鸣器响的次数为当时小时的值以及LED 会闪烁相应的次数。

本设计采用的是OCM128128液晶显示模块是128×128点阵型液晶显示模块,可显示各种字符及图形,可与CPU直接接口,具有8位标准数据总线、6

条控制线及电源线。采用T6963C驱动IC进行控制。本实验板中采用的是3.3V 的液晶模块,可以直接连接到LPC2138的GPIO上,而不需要进行电平转换。

二、系统硬件设计

2.1 系统结构

本实验是基于LPC2138ARM处理器而设计的实时时钟,综合性较强,涉及到RTC外部中断,引脚的GPIO功能,C语言编程等知识。

首先要定义P0口为基本I\O功能,然后通过引脚功能选择寄存器PINSEL0及PINSEL1定义输入输出外部中断口所在的位,另外还要对外部中断进行初始化,其中有规定他们的优先级,中断触发方式,中断地址分配,

本实验采用液晶模块OCM128128同时显示实时时间,同样要对他们进行初始化,包括检查总线忙与闲,传送地址,传送数据及显示函数的编程、LPC2138微控制器自带有一个实时时钟RTC带日历和时钟功能,要使用它也要进行一下的基本操作:

设置RTC基准时钟分频器

初始化RTC的时钟值如,YEAR,MONTH,HOUR等

启动RTC即CCR的CLKEN位职位

读取完整时间寄存器值或等待中断。

陈述完以上的模块初始化后,下面简要说明一下程序的流程。先调用以上各个模块的初始化函数lcd_int(),RTCint()。然后开启RTC时钟,并调用LCD显示函数SendTimetRtc(),如果没用中断发生就判断实时时间是否与以设定的报警时间相同,如果相同就马上接通蜂鸣器报警并且点亮LED灯。假如有中断发生,在无效状态下,马上给中断标志寄存器EXTINT对应位,然后写1清零,然后转到中断服务程序。

根据项目要求,确定该系统的设计方案,图2-1为该系统设计方案的结构框图。硬件电路由6个部分组成,即ARMLPC2138处理器、时钟电路、复位电路、

液晶显示模块、时间调整模块、整点报时模块。

图2-1 系统结构框图

2.2元器件的选择

选用嵌入式arm 7系列的LPC2138芯片和LCDPG128128a显示器:

三、系统软件设计

3.1程序和芯片的初始化

程序中包括:Lcd的初始化:

void init_lcd (void)

{

IO0CLR=rst;

IO0SET=rst;

delay1(50);

IO0CLR=ce;

IO0SET=wr;

IO0SET=rd;

wr_xd(addr_w,0x40); //文本显示区首地址

wr_xd(addr_t,0x42); //图形显示区首地址

wr_td(width,0x00,0x41); //文本显示区宽度

wr_td(width,0x00,0x43); //图形显示区宽度

wr_comm(0x81); //逻辑"异或"

wr_td(0x56,0x00,0x22); //CGRAM偏置地址设置

wr_comm(0x9c); //启用文本显示,启用图形显示}

中断向量的初始化:

VICIntSelect = 0x00000000;

VICVectCntl0 = 0x20|13;

VICVectAddr0 = (uint32)RTC_int;

ILR=0x03;

VICIntEnable = (1<<13);

__enable_irq();

RTC的初始化:

void RTC_int(void)

{

uint32 i,h;

uint8 hh[2];

h=HOUR;

hh[0] = HOUR /10+0x30;

hh[1] = HOUR% 10+0x30;

clrram(); //清屏

disp_img(0,16,64,nBitmapDot); //显示图画

disp_zf(0,12,"Current Time:");

for(i=0;i<2;i++)

{

disp_zfyg(13+i,12,hh[i]);

}

for(i=0;i

{

IO0CLR=LED;

IO0SET=BEAK;

DelayNS(30);

IO0SET=LED;

IO0CLR=BEAK;

DelayNS(30);

}

ILR = 0x03;

VICVectAddr = 0x00;

clrram(); //清屏

}

3.2构建功能模块

调整时间和日期的函数

void key()

{

if((IO0PIN&ATH)==0)

{

CIIR=0x00;

HOUR++;

if(HOUR>23) HOUR=0;

CIIR=0x04;

while((IO0PIN&ATH)==0);

}

if((IO0PIN&ATM)==0)

{

CIIR=0x00;

MIN++;

if(MIN>59) MIN=0;

CIIR=0x04;

while((IO0PIN&ATM)==0);

}

if((IO0PIN&ATS)==0)

{

CIIR=0x00;

MONTH++;

if(MONTH>12) MONTH=0;

CIIR=0x04;

while((IO0PIN&ATS)==0);

}

if((IO0PIN&ATD)==0)

{

CIIR=0x00;

DOM++;

CIIR=0x04;

while((IO0PIN&ATD)==0);

}

}

延时函数

void DelayNS(uint32 dly)

{ uint32 i;

for(; dly>0; dly--)

for(i=0; i<50000; i++);

}

整点报时函数

void RTC_int(void)

{

uint32 i,h;

uint8 hh[2];

h=HOUR;

hh[0] = HOUR /10+0x30;

hh[1] = HOUR% 10+0x30;

clrram(); //清屏

disp_img(0,16,64,nBitmapDot); //显示图画disp_zf(0,12,"Current Time:");

for(i=0;i<2;i++)

{

disp_zfyg(13+i,12,hh[i]);

}

for(i=0;i

{

IO0CLR=LED;

IO0SET=BEAK;

DelayNS(30);

IO0SET=LED;

IO0CLR=BEAK;

DelayNS(30);

}

ILR = 0x03;

VICVectAddr = 0x00;

clrram(); //清屏

}

输出字符串函数

void disp_zf(uint32 x,uint32 y,uint8 *str) {

char c;

wr_xd((addr_w+16*y+x),0x24);

wr_comm(0xb0);

while(*str!='\0')

{

c = (*str);

wr_auto(c-32);

str++;

}

wr_comm(0xb2);

}

输出一个字符的函数

void disp_zfyg(uint32 x,uint32 y,uint8 str) {

char c;

wr_xd((addr_w+16*y+x),0x24);

wr_comm(0xb0);

c = str;

wr_auto(c-32);

wr_comm(0xb2);

}

四、实验测试

4.1IAR软件的编译,连接和运行

构建完整的程序:

添加头文件,中断处理汇编程序段,初始化函数和主函数:

为LPC2138芯片选择Hex文件路径:

五、实验结果

5.1仿真结果

5.2实验板结果

六、心得体会

众所周知,ARM微处理器功能特别的强大,与MC51单片机相比,它更适合做中高端数字系统的微处理器,ARM已经成了现代主流微处理器内核,目前,绝大多数码产品,如,手机,MP3,MP4,数码相机,他们的系统都嵌入了ARM 系列内核,ARM微处理器更新换代很快,现在的诺基亚N系列智能手机如N78,N79已经采用了ARM11了,使得运行于塞班操作系统S60第三版的应用程序流畅自如。

回顾起此次课程设计,至今我仍感慨颇多,从理论到实践,在整整半个月的日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的内容。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。

七、程序清单

/******************************************************************** ********

* 文件名:LCDTEST.C

* 功能:显示图像,显示汉字,显示字符。显示点阵

********************************************************************* *******/

#include "Config.h"

#include "Target.h"

#include "T6963C.h"

#include

#define uint32 unsigned int

#define uint8 unsigned char

#define BEAK (1<<20)

#define LED (1<<16)

#define ATM (1<<17) //调整分钟

#define ATH (1<<18) //调整小时

#define ATS (1<<22) // 调整月份

#define ATD (1<<23) //调整日期

//************************************* //调整时间和日期的函数

//************************************* void key()

{

if((IO0PIN&ATH)==0)

{

CIIR=0x00;

HOUR++;

if(HOUR>23) HOUR=0;

CIIR=0x04;

while((IO0PIN&ATH)==0);

}

if((IO0PIN&ATM)==0)

{

CIIR=0x00;

MIN++;

if(MIN>59) MIN=0;

CIIR=0x04;

while((IO0PIN&ATM)==0);

}

if((IO0PIN&ATS)==0)

{

CIIR=0x00;

MONTH++;

if(MONTH>12) MONTH=0;

CIIR=0x04;

while((IO0PIN&ATS)==0);

}

if((IO0PIN&ATD)==0)

{

CIIR=0x00;

DOM++;

CIIR=0x04;

while((IO0PIN&ATD)==0);

}

}

//************************************* //输出字符串函数

//************************************* void disp_zf(uint32 x,uint32 y,uint8 *str)

{

char c;

wr_xd((addr_w+16*y+x),0x24);

wr_comm(0xb0);

while(*str!='\0')

{

c = (*str);

wr_auto(c-32);

str++;

}

wr_comm(0xb2);

}

//*************************************

//输出一个字符的函数

//*************************************

void disp_zfyg(uint32 x,uint32 y,uint8 str)

{

char c;

wr_xd((addr_w+16*y+x),0x24);

wr_comm(0xb0);

c = str;

wr_auto(c-32);

wr_comm(0xb2);

}

/******************************************************************** ********

* 名称:DelayNS()

* 功能:长软件延时

* 入口参数:dly 延时参数,值越大,延时越久

* 出口参数:无

********************************************************************* *******/

void DelayNS(uint32 dly)

{ uint32 i;

for(; dly>0; dly--)

for(i=0; i<50000; i++);

}

//*************************************

//液晶初始化函数

//*************************************

void init_lcd (void)

{

IO0CLR=rst;

IO0SET=rst;

delay1(50);

IO0CLR=ce;

IO0SET=wr;

IO0SET=rd;

wr_xd(addr_w,0x40); //文本显示区首地址

wr_xd(addr_t,0x42); //图形显示区首地址

wr_td(width,0x00,0x41); //文本显示区宽度

wr_td(width,0x00,0x43); //图形显示区宽度

wr_comm(0x81); //逻辑"异或"

wr_td(0x56,0x00,0x22); //CGRAM偏置地址设置

wr_comm(0x9c); //启用文本显示,启用图形显示}

/**********************************************************

整点报时函数

***********************************************************/

void RTC_int(void)

{

uint32 i,h;

uint8 hh[2];

h=HOUR;

hh[0] = HOUR /10+0x30;

hh[1] = HOUR% 10+0x30;

clrram(); //清屏

disp_img(0,16,64,nBitmapDot); //显示图画

disp_zf(0,12,"Current Time:");

for(i=0;i<2;i++)

{

disp_zfyg(13+i,12,hh[i]);

}

for(i=0;i

{

IO0CLR=LED;

IO0SET=BEAK;

DelayNS(30);

IO0SET=LED;

IO0CLR=BEAK;

DelayNS(30);

}

ILR = 0x03;

VICVectAddr = 0x00;

clrram(); //清屏

}

/*

********************************************************************* *****

** 函数名称:RTCInit()

** 函数功能:初始化实时时钟

** 入口参数:无

** 出口参数:无

********************************************************************* *****

*/

void RTCInit (void)

{

PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器

PREFRAC = Fpclk - (Fpclk / 32768) * 32768;

CCR = 0x00; // 禁止时间计数器

YEAR = 2013;

MONTH = 07;

DOM = 01;

DOW = 1;

HOUR = 2;

MIN = 59;

SEC = 55;

CIIR = 0x04; // 设置HOUR值的增量产生1次中断

ILR = 0x03; // 清除RTC增量和报警中断标志CCR = 0x01; // 启动RTC

}

/*------------------主程序--------------------*/

void main ()

{

uint32 i;

uint8 k[18];

TargetResetInit();

RTCInit ();

VICIntSelect = 0x00000000;

VICVectCntl0 = 0x20|13;

VICVectAddr0 = (uint32)RTC_int;

ILR=0x03;

实时时钟设计实验报告

实验报告

源代码: #pragma sfr //使用特殊功能寄存器 #pragma EI //开中断 #pragma DI //关中断 #pragma access //使用绝对地址指令 #pragma interrupt INTTM000 Time //定义时间中断函数为Time #pragma interrupt INTKR OnKeyPress //定义按键中断为OnKeyPress #pragma interrupt INTP5 OnKeyOver //定义INT中断为OnKeyOver void Init_Led(); void InitKey_INTKR(); void Init_Lcd(); void Init_Inter(); void LightOneLed(unsigned char ucNum); void LightOff(); int Count_Day(int month); char i=0; //定义变量i,是切换时间的标志 int key=0; //定义key=0 int temp=1; //用于存放当前月的天数 int temp1=1; int second=0; //默认的秒second=0 int minute=0; //默认的分minute=0 int hour=12; //默认的时hour=12 int day=1; //默认的天day=1 int month=5; //默认的月month=5 int year=2014; //默认的年year=2014 int c_hour=1; //默认的闹钟时=1 int c_minute=1; //默认的闹钟分=1 int buffs[2]; //秒的数码显示缓存区 int buffm[2]; //分的数码显示缓存区 int buffh[2]; //时的数码显示缓存区 int buffday[2]; //天的数码显示缓存区 int buffmonth[2]; //月的数码显示缓存区 int buffyear[4]; //年的数码显示缓存区 int buffmd[4]; //月,天的数码显示缓存区 int buffhm[4]; //时,分的数码显示缓存区 int buffms[4]; //分,秒的数码显示缓存区 int buffch[2]; //闹钟时的数码显示缓存区 int buffcm[2]; //闹钟分的数码显示缓存区 unsigned char Que = 0; //INT中断中间变量 int LCD_num[10]={0X070d,0x0600,0x030e,0x070a,0x0603,0x050b,0x050f,0x0700,0x070f,0x070b};// 数字0~~9的显示码 unsigned char Scond; //…………………………延时函数1……………………// void Delay(int k){ i nt i,j; f or(i=0;i

高精度时钟芯片的测试方法介绍

高精度时钟芯片的测试方法介绍 中国电子科技集团公司第五十八研究所武新郑解维坤 摘要: 高精度时钟芯片是一种能够提供精确计时的芯片,相对于普通的时钟芯片,它的晶体和温度补偿集成在芯片中,为提高计时精度提供了保障,它同时还具备日历闹钟功能、可编程方波输出功能等。本文以DS3231芯片为例,以J750Ex测试机和相关仪表为测试环境,重点介绍以I2C总线协议为基础的内部寄存器功能和芯片各模块功能的测试。通过测试机测试保存在寄存器中秒、分、时、星期、日期、月、年和闹钟设置等信息,以及电源控制功能,通过测试机对示波器和频率计的程控实现对老化修正和输出频率的测试,同时还会重点介绍该芯片时钟精度的测试方法和测试环境。 关键词: 高精度时钟芯片;DS3231芯片;J750Ex测试机;I2C总线协议 Introduction of testing method of the extremely accurate RTC Wu Xin-zheng (China Electronic Technology Group Corporation, No.58 Research Institute , Jiangsu Wuxi 214035, China) Abstract: The extremely accurate real time clock is a piece of chip which can maintain accurate timekeeping, compared with the ordinary RTC chip, its integrated temperature compensated crystal oscillator and crystal are located in the center of the chip, which provides an assurance for promoting the exacticy, it also has two programmable time-of-day alarms and a programmable square-wave output. This paper takes DS3231 for instance, the environment with J750Ex and related instruments, introduces inner register with I2C and the testing method of every module. The ATE tests seconds, minutes, hours, day, date, month, and year information, the function of power. By means of OSC and frequency meter, it can test the output wave and register for aging trim, at the same time, also introduced the testing method and environment of accuracy. Key words:

51定时器和lcd12864做的实时时钟显示(附图)

#include #include"intrins.h" #define uchar unsigned char #define uint unsigned int sbit rs=P1^0; sbit rw=P1^1; sbit e=P2^5; sbit psb=P1^2; sbit rst=P1^4; uchar hour,fen,miao,num; uchar code table[]="时间:"; uchar sbuf[]={0,0,0,0,0,0}; void delay(uint x) { uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void Timer0Init(void) //50??@11.0592MHz { TMOD |= 0x01; //??????? TL0 = 0x00; //??????

TH0 = 0x4C; //?????? EA=1; ET0=1; TR0=1; //???0???? } void Delay2ms() //@11.0592MHz { unsigned char i, j; _nop_(); i = 4; j = 146; do { while (--j); } while (--i); } void Delay100us() //@11.0592MHz { unsigned char i, j; i = 2; j = 109; do { while (--j); } while (--i);

void Delay50ms() //@11.0592MHz { unsigned char i, j, k; i = 3; j = 207; k = 28; do { do { while (--k); } while (--j); } while (--i); } void write_12864com(uchar com) { rs=0; rw=0; Delay100us(); P0=com; e=1; Delay100us(); e=0; Delay100us(); }

PCF8563实时时钟高精度调整方法

广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 https://www.360docs.net/doc/b95787154.html, PCF8563实时时钟高精度调整方法 一、概述 PCF8563是PHILIPS公司设计生产的经典工业级实时时钟芯片(RTC),I2C总线接口,具有功耗低、精度高等特点,广泛应用于电表、水表、气表、电话等产品。本文将介绍如何调整PCF8563时钟精度的方法。 二、电路原理 图1 PCF8563高精度调整 三、相关说明 如图1所示,R3、R4为I2C总线上拉电阻,若总线速度高于100KHz,电阻阻值要更小。由于PCF8563的中断输出及时钟输出均为开漏输出,所以要外接上拉电阻(如图1的R1、R2),若不使用这两个信号,对应的上拉电阻可以不用。 对于PCF8563芯片,需外接时钟晶振32768Hz(如图1的X1),推荐使用5ppm或更稳定的晶振。PCF8563典型应用电路推荐使用15pF的晶振匹配电容,实际应用时可以作相应的调整,以使RTC获得更高精度的时钟源。一般晶振匹配电容在15pF~21pF之间调整(相对于5ppm精度的32768Hz晶振),15pF电容时时钟频率略偏高,21pF电容时时钟频率略偏低。 四、操作方法 1. 设置PCF8563时钟输出有效(CLKOUT),输出频率为32.768KHz。 使用高精度频率计测量CLKOUT输出的频率。 2. 根据测出的频率,对JC1、JC2、JC3作短接或断开调整。频率比32768Hz偏高时, 3. 加大电容值;频率比32768Hz偏低时,减小电容值。 说明:图1中的C1、C2、C3的值在1pF~5pF之间,根据实际情况确定组合方式,以便于快速调整。推荐使用(3pF、3pF、3pF)、(1pF、2pF、3pF)、(2pF、3pF、4pF)。 - 1 -

实时时钟实验报告

嵌入式系统开发实验报告 实验四:实时时钟实验 班级:应电112 姓名:张志可 学号: 110415151 指导教师:李静 实验日期: 2013年9月25日

实验四:实时时钟实验 一、实验目的 1. 了解实时时钟的硬件控制原理及设计方法。 2. 掌握 S3C2410X 处理器的 RTC 模块程序设计方法。 二、实验设备 硬件:Embest ARM 教学实验系统,ULINK USB-JTAG 仿真器套件,PC 机。 软件:MDK 集成开发环境,Windows 98/2000/NT/XP。 三、实验原理 1. 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的 RTC,还有大容量的存储器、温度传感器和 A/D 数据采集通道等,已成为集 RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。 RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如 I2C、SPI、MICROWIRE 和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。 2. S3C2410X 实时时钟(RTC)单元 S3C2410X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。 四、实验内容 学习和掌握 Embest ARM 教学实验平台中 RTC 模块的使用,编写应用程序,修改时钟日期及时间的设置,以及使用 EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。

实时时钟芯片DS1302

实时时钟芯片DS1302的结构,工作原理及应用(含源程序) 1.ds1302实时时钟简介 现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。 2 DS1302的结构及工作原理 DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 2.1 引脚功能及结构 图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST 为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST 置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。 2.2 DS1302的控制字节

卫星共视高精度时间比对与传递

卫星共视法高精度时间频率比对与传递系统

目录 1.概述 (3) 2.卫星共视时间比对与传递系统组成及工作原理 (4) 2.1 卫星共视时间比对与传递工作原理 (4) 2.2 时间比对和传递系统设备配置及连接 (7) 3.经费预算................................................. 错误!未定义书签。

1.概述 时间是物理学的基本参量之一。随着科学技术的发展,高精度的时间和频率在国民经济发展中的地位日趋重要,诸如通信、电力、交通、高速数字网同步等高新技术领域有着广泛的应用,特别是我国国防建设和空间技术领域,如空间目标探测与拦截(类似于美国爱国者导弹防御系统)、我国第二代战略武器试验、载人航天工程和拟建中的二代卫星导航系统对时间和频率的精度提出了更高的要求。 二十世纪末,随着空间技术的发展,GPS和北斗卫星导航系统相继问世,授时具有了全方位性(陆地、海洋、航空和航天)、全球性、全天候、连续性和实时性,并提供了高精度的授时覆盖和服务。“时间统一系统”为精密时间产生、传递、恢复和保持、科学研究、科学实验和工程技术及一切动力学系统和时序过程的测量和定量研究提供了必不可少的时间基准和依据。 就高精度时间传递与比对系统而言,可以应用于工程项目的主要包括以下几种: 1.RNSS卫星共视时间比对与传递; 2.RNSS卫星载波相位时间同步; 3.卫星双向时间比对与传递; 4.搬运钟时间比对与传递。 在以上几种方法中,卫星共视时间比对与传递是一种较为优秀的高精度时间比对与传递系统。

2.卫星共视时间比对与传递系统组成及工作原理 2.1 卫星共视时间比对与传递工作原理 所谓“共视”(Common View)就是位于两个不同位置的观测者,在同一时刻对同一颗卫星进行观测,其原理如下图所示。 图1 GPS 共视法高精度时间同步原理图 图1给出了一个单收系统示意图,在每个比对点,本地钟均按自己的速率运行。根据比对需求,利用卫星所发射的1PPS 秒信号、或其它固定速率发射的时钟脉冲信号。 在每个测站,利用本地钟的1PPS 信号打开时间间隔计数器闸门,再用从共视接收机所输出的1PPS 秒信号关闭时间间隔计数器的闸门。这样,我们可以得到以下的时间关系(图2): 在钟1处: 接收时间 1τ+=卫接收T t 计数器读数 1d T =)(11τ+-卫T T (1) GPS 卫星

FPGA实时时钟实验

简介 这一节,我将给大家讲解实时时钟部分的内容,我在黑金板上用的实时时钟芯片是DS1302,这块芯片很常见,性价比也很高。我们主要来讲如何在NIOS中实现其功能,所以DS1302功能介绍我简单概括一下,有问题的百度一下就都知道了。 DS1302是DALLAS公司推出的涓流充电实时时钟芯片,内含一个实时时钟/日历和31字节静态RAM,仅需要三根线:RES(复位),I/O(数据线),SCLK(串行时钟)。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信DS1302 工作时功耗很低,保持数据和时钟信息时功率小于1mW。下面看一下电路图吧,下图所示,很简单,三根线就可以搞定了。 硬件开发 首先,我们需要在软核中构建三个PIO模块,方法跟以前讲的一样。需要注意的是 RTC_DATA这个PIO,在构建的过程中,我们将其选择为双向的IO口,因为它是数据线,既要输入也需要输出,如下图所示,红圈处就是我们需要注意的地方,其他两个IO口设置为仅输出。

看看构建好以后的样子吧,如下图是所示 接下来就是自动分配地址,中断,然后开始编译,等待…… 回到Quartus后,分配引脚,还是需要注意数据线,也是双向的,分配引脚的时候,要构建双向引脚(bidir),如下图所示。 都设置好以后,我们运行TCL脚本文件,然后开始编译,又是等待……

软件开发 编译好后,我们打开NIOS II IDE,首先,还是需要编译一下,CTRL+b,编译之后,我们看看system.h有什么变化。观察后可以看出,里面对了,RTC部分的代码,如下表所示,#define RTC_DATA_NAME "/dev/RTC_DATA" #define RTC_DATA_TYPE "altera_avalon_pio" #define RTC_DATA_BASE 0x00201030 …… /* * RTC_SCLK configuration * */ #define RTC_SCLK_NAME "/dev/RTC_SCLK" #define RTC_SCLK_TYPE "altera_avalon_pio" #define RTC_SCLK_BASE 0x00201040 …… /* * RTC_nRST configuration * */ #define RTC_NRST_NAME "/dev/RTC_nRST" #define RTC_NRST_TYPE "altera_avalon_pio" #define RTC_NRST_BASE 0x00201050 …… /* 在这些代码中,我们需要用到的是以下部分 #define RTC_DATA_BASE 0x00201030 #define RTC_SCLK_BASE 0x00201040 #define RTC_NRST_BASE 0x00201050 好的,接下来,我们就开始写程序吧 第一步,修改sopc.h文件,加入以下代码到sopc.h中

基于ds1302的51单片机简易实时时钟-1602显示-源程序

。 ==================主程序================= #include

。#include "ds1302.h" #include "LCD1602.h" void change(); uchar times[9]; uchar date[9]; main() {LCD_init();//LCD初始化 init_1302(time_1302); gotoxy(1,1); LCD_display("Time:"); gotoxy(1,2); LCD_display("Date:"); times[8]='\0';// date[8]='\0'; while(1) {get_1302(time_1302); change(); gotoxy(7,1); LCD_display(times); gotoxy(7,2); LCD_display(date);

} } /*=========================== 转换子程序 ===========================*/ void change() { // 时间的转换 times[0]=time_1302[2]/10+'0'; times[1]=time_1302[2]%10+'0'; times[2]=':'; times[3]=time_1302[1]/10+'0'; times[4]=time_1302[1]%10+'0'; times[5]=':'; times[6]=time_1302[0]/10+'0'; times[7]=time_1302[0]%10+'0'; // 日期的转换 date[0]=time_1302[6]/10+'0'; date[1]=time_1302[6]%10+'0'; date[2]='-';

实时日历时钟显示系统的设计

微机原理及应用课程设计任务书 20 xx -20 xx 学年第 x 学期第 xx 周- xx 周 题目实时日历时钟显示系统的设计 内容及要求 内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 进度安排 课程设计内容时间分配 方案论证1天 分析、设计、调试、运行3天 检查、整理、写设计报告、小结1天 合计5天 学生姓名: xx 指导时间: xxxx 指导地点: xxxx 任务下达任务完成 考核方式 1.评阅√ 2.答辩√ 3.实际操作□ 4.其它□指导教师系(部)主任 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。 2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

此次微机原理课程设计要求设计一个实时日历时钟显示系统。 本程序利用DOS中断2AH号功能调用取系统年月日,再逐个显示各数据,利用2CH号功能调用取系统时间,逐个显示各数据。用“时:分:秒”(都是两位)的形式连续显示系统时间,并利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。 任务安排: 主程序: xx:主体程序和流程设计 xx:日历调用显示系统 xx:时间调用显示系统 子程序: xx:显示两位数字的子程序

一、课程名称 (2) 二、课程内容及要求 (2) 三、小组组成 (2) 四、设计思路 (3) 五、程序流程图及介绍 (4) 六、调试 (5) 七、总结 (7) 八、参考资料 (9) 附录 (9)

一、课程名称:实时日历时钟显示系统的设计 二、课程内容及要求 课程内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 三、小组组成: 成员: xx, xx, xx, xx 任务安排: 主程序: xx:主体程序和流程设计 xx:日历系统 xx:时间系统 子程序: xx:显示两位数字的子程序

PCF8563 实时时钟日历芯片详细资料(中文版——权威)

PCF8563 实时时钟日历芯片选型指南 1. 概述 PCF8563是低功耗的CMOS实时时钟日历芯片。它提供一个可编程时钟输出一个中断输出和掉电检测器所有的地址和数据,通过I2C总线接口串行传递最大总线速度为400Kbits/s,每次读写数据后内嵌的字地址寄存器会自动产生增量。 2. 特性 低工作电流典型值:0.25 A,VDD=3.0V Tamb=25 时; 世纪标志; 大工作电压范围:1.0V--5.5V; 低休眠电流典型值为:0.25 A(VDD=3.0V,Tamb=25 ); 400KHz 的I2C 总线接口:VDD=1.8 5.5V 时; 可编程时钟输出频率为:32.768KHz、1024Hz、32Hz、1Hz; 报警和定时器; 内部集成的振荡器电容片内电源复位功能掉电检测器; I2C 总线从地址:读0A3H 写0A2H; 开漏中断引脚。 3. 应用 复费率电度表IC、卡水表IC、卡煤气表 便携仪器 传真机移动电话 电池电源产品 4.简明参考数据

8.功能描述 PCF8563内有16个8位的地址递增寄存器,一个32.768 kHz片上集成电容振荡器,一个实时时钟源(RTC)的分频器,可编程的时钟输出,一个定时器,报警器,一个低压检测器和400KHz的I2C接口。 所有16个寄存器被设计成可寻址的8位并行寄存器,虽然不是所有的位都有效。前两个寄存器(内存地址00H和01H),用于控制与/或状态寄存器。内存地址02H至08H是时钟功能的计数器,用于(秒、分、时、日、月、年计数器)。内存地址09H至0CH包含定义报警的条件的报警寄存器。内存地址0DH控制CLKOUT的输出频率。0EH和0FH分别是定时控制器和定时器。 秒、分钟、小时、天、月、年、以及每分钟报警、小时报警、日报警寄存器都以BCD 格式编码。平日和星期报警寄存器不以BCD格式编码。 当一个RTC寄存器被读取,所有的寄存器的内容被冻结。因此可以避免在读指令跳转期间,读取时钟/日历时发生错误。 8.1 报警功能模式 通过清除一个或多个报警寄存器最高有效位(位AE=报警启用),相应的报警条件将被激活。这种方式可以产生从每分钟至每周一次的报警。报警条件设置报警标志,AF(控制/状态寄存器2的第3位),AF可用于产生一个中断(INT),AF只能通过软件清零。 8.2 定时器模式 8位减数计时器(地址0FH)由定时控制寄存器(地址0EH,参见表25)控制。定时控制寄存器可以选择定时器的时钟源频率(4096,64,1,或1/60Hz)和启用/禁用计时器。从软件加载的8位二进制值的倒计时,在每个倒计时结束时,定时器设置的定时器标志TF(见表7)。定时器标志位TF只能由软件清零。根据定时器标志位TF可以产生一个中断(INT)。每个倒计时阶段都可能会产生中断脉冲信号,作为一个永久的积极信号,如TF条件下。TI/ TP(见表7)用于控制这种模式的选择。当读取定时器,当前的倒计时数值作为返回值。 8.3 CLKOUT输出 CLKOUT引脚有可编程方波。由CLKOUT频率寄存器(地址0DH;见表23)控制操作。时钟频率32.768KHz(默认),1024,32和1Hz的频率可以作为系统时钟,单片机的时钟,输入到电荷泵,或校准振荡器。CLKOUT开漏输出,上电时启用。如果禁用它变为高阻抗。8.4 复位低电压检测器和时钟监视器 PCF8563的包括内部复位电路,振荡器停止时,复位电路激活。在复位状态下,I2C总线初始化,所有寄存器和地址指针被清零,VL、TD1、TD0、TESTC和AE被设置为逻辑1。8.5 低电压检测器和时钟监视器 PCF8563芯片的低电压探测器。当VDD低于Vlow,VL位(秒寄存器第7位)设置表明可靠的时钟/日历信息将不再保证。VL标志只能由软件清零。 位VL用于检测在电池供电情况下,VDD慢慢降低到Vlow的情况。在VDD低于Vlow之前应该把VDD从新拉高。这种情况下,时间可能被损坏。 8.6 寄存器结构

智能电表实时时钟技术综述

智能电表实时时钟技术综述 智能电表实时时钟技术综述 摘要:高精度实时时钟芯片/模块作为智能电表中重要的功能模块,近年成为智 能电表领域中的研究热门。其具有低功耗、高计时精度的特点,是智能电表中伴随整个电表寿命的模块。围绕智能电表领域近年来对实时时钟性能和技术的研究,对实时时钟技术进行分析,主要包含晶体封装在芯片内部、晶体作为芯片外部分立元器件、无晶体实时时钟等方面。 关键词:智能电表;实时时钟;晶体;ADC;全温区 0引言 实时时钟(Real-Time Clock,RTC)在智能电表中具有重要的作用,其为电能表 计费、计时,以及在此基础上的智能化功能提供了精准的时间保障。通常的实时时钟芯片需要在电表的市电环境和电池环境下都可以正常可靠地工作,所以其功耗的高低、工作电压范围对电表寿命有较大影响;同时在实现智能电表的功能例如远程抄表、分时电价等方面,需要时钟有极高的精准度;由于电表的应用环境分布于我国的大江南北,气候带跨度较大,在这种环境中需要芯片具有全温区工作的能力。国网智能电表对于实时时钟芯片、模块的需求每年在六千万以上,产值约为两亿元人民币。所以对实时时钟技术的研究具有很高的价值及意义。 1实时时钟技术发展现状 实时时钟(Real-Time Clock,RTC)技术最早由32.768kHz晶体振荡器[1]模块衍生而来,很多研究致力于对BT-Cut晶体进行温度补偿,以达到高精度的实时时钟,由于BT-Cut32.768kHz晶体具有类抛物线型的温度曲线,所以很多研究围绕对晶体温度曲线的补偿展开;由于通常的RC振荡器以及其他形式的模拟自激发振荡器在频率的精度方面都有较大差异,难以将低频振荡电路调整到ppm(Point per Million)数量级的频率精度,因受半导体工艺影响较大,振荡器本身的工业生产会存在较多问题,同时需要较高的封装测试成本维持量产良品率,所以CMOS工艺RC振荡器在高精度RTC设计中一直未被广泛采用。MEMS振荡器在近些年开始发展,逐步针对RTC进行设计,但产品的成熟性还有待验证[2-3]。 智能电表中RTC主要负责提供高精准度的时钟以及基本的日历功能,目前RTC时

实时时钟电路知识汇总

实时时钟电路知识汇总 一、实时时钟用备用电池的选择 通常,实时时钟电池的选择要符合以下几个条件,一是设备的设计空间和位置,二是设备的功率损耗,三是充电电路的考量。根据这样三个条件,在所有的适宜用作实时时钟备用的电池中,大致有以下几种, 1、可充电纽扣式锂锰电池,型号包括614,621,414等,可选择品牌有德国瓦尔塔的MC系列、日本精工的MS系列和日本松下的ML系列。这类电池的特点是电池体积十分小,适用于 线板空间非常有限的电路中,比方说GSM手机,数字MP3,数码相机等微型产品; 2、可充电纽扣式镍氢电池,型号根据电池容量不同而分为15mA时~80mA时不 等。目前这类电池品质最好,运用最广泛的是德国瓦尔塔品牌,国内也有相当公司在 做此类产品,但在电池寿命和安全性能方面还有待提高。产品主要用于多种单片机, 比方说加油机、检测仪器类、PDA设备、复印机或传真机设备等。 3、一次性纽扣式锂电池,型号主要有CR2032、CR1220等,由于是一次性电池, 这类产品适用于那些寿命更新比较快,又不需要充电电路的设备。 实时时钟电池目前市场比较混乱,价格也很混乱。尤其以第一种电池运用最为广 泛,但电池的价格却高低相差很大,其实对于工业类客户,通常614的价格不会超过美圆0.45~0.40之间,如果用量大,比如手机客户,他们可以拿到更好的价格。而对于第二、三两种电池,根据设备需要的电压不同而有差异。但应该说电池不应该很贵。 二、实时时钟电池的选择和认识 我们经常有很多在设计时钟电源或者备用电源时候由于选择电源管理方案的问题而出现电池时钟归零问题,不能充电问题,备用时间不足够等多方面的问题。 在选择电源方案时候,首先必须考虑你使用电池的目的和使用环境问题。对于设计工程师来说,使用目的是很明确的,但对于电池的使用环境却往往不是很清楚,经常性没有主见地向各电池经营者请教对方的电池是否适合自己的功用。从电池经营者的角度,每一个电池经营者都会围绕着客户的需求而去专向设计一款或者几款电池方案给客户并解释如何如何,而实际在此过程中存在行而上的成分。 电池由于体系的不同其功用也不尽相同,尽管很多人都会说此电池可以作为彼电池来用,实际不是这么一回事。以下就先介绍以下各种类型电池的最佳适用概念: 1、可充电微型锂离子电池,这类电池目前主要包括MC、ML、MS等系列,工作电压为0~3.3V,由于尺寸微小,可用于比如手机、MP3、SMART NOTEBOOK、录音笔、笔记本电脑、PDA、PDA手机等需要保持时钟,或者保持RAM数据等功用的设备。一般来说,这类型电池的直径为4~6mm,厚度为 1.2~2.1mm,容量为0.4~5mA时。这类电池的特点除了体积小之外,在浅充浅放的运用过程中,这类型电池普遍具有非常长的使用寿命。基本上ML、MS的容量较MC的要高,但是MC的稳定性更好,而且被短路后可以通过充电而恢复寿命。 2、可充电扣式镍氢电池。这类电池不同于传统的圆柱式电池和方型电池,其极片一般采用直接压成式,然后正负极电极外面裹上导电材料而组成。由于结构的关系,这类电池的内阻相比于传统镍氢电池要大4~6倍,同时不能承受大电流充电放电;优点是自放电性能和耐过充电性能要比传统电池好很多。这类电池容量从20mA时到600mA时,在规定的电流充电时间可以不收限制,同时充电过程不需要任何保护和电压限制,在充电线路方面简单的多。由此可以看出,这类电池适用于单片机线路板,比方说加油机控制板,纺织设备的线路板,环保设备线路板、汽车报警器、无绳电话设备、税控机、手持POS、蓝牙耳机等需要电池小电流供电,同时作为备用电池功用可以保证外电路停电时候的设备正常运转。这时候尽管很多公司也选用传统电池来用,表面上是可以使用,但实际上电池在充电和自放电以及寿命和空间结构、重量等方面是不适合的。传统电池由于采用卷绕结构,电池内阻小,自放电大,因此满足较大电流的充电放电。如果小电流充电放电,电池在一年甚至两年的时间内是可以满足使用,但由于长时间电流较小,极片内部活性物质活化不够容易导致电池钝化,最终导致电池容量损失甚至失效。 3、一次性锂锰电池。这类电池用户用的最多的是比如CR2032等。在性能上面,国产的锂锰电池和国外的有比较大差别,主要表现在稳定性和漏液、寿命等方面。当然如果您使用单体锂锰电池而不需要任何管脚,国产的在价格方面会有很大的优势,如果需要用到管脚,那么请选择国外品牌,尤其是德国瓦尔塔的电池,尽管在价格方面没有优势,但在质量保证方面您一定会得到更高的回报。主要原因是这类电池在焊接管脚时需要的设

嵌入式软件开发基础实验报告 实时时钟

上海电力学院 嵌入式软件开发基础实验报告 题目:【ARM】实时时钟实验 专业:电子科学与技术 年级: 姓名: 学号:

一、实验目的 1、了解实时时钟的硬件控制原理及设计方法。 2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。 二、实验设备 1、硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。 2、软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP。 三、实验内容 学习和掌握 Embest EduKit-III 实验平台中RTC 模块的使用,进行以下操作: 1、编写应用程序,修改时钟日期及时间的设置。 2、使用EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。 四、实验原理 1. 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。 RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIRE和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。 2. S3C44B0X 实时时钟(RTC)单元 S3C44B0X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。 S3C44B0X 实时时钟(RTC)单元特性: BCD 数据:秒、分、小时、星期、日期、月份和年份 1、闹钟(报警)功能:产生定时中断或激活系统 2、自动计算闰年 3、无2000 年问题 4、独立的电源输入 5、支持毫秒级时间片中断,为RTOS 提供时间基准 读/写寄存器 访问 RTC 模块的寄存器,首先要设RTCCON 的bit0 为1。CPU 通过读取RTC 模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和 BCDYEAR 的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒(59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间和日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值(参考程序设计)。

Proteus电子钟仿真实验高清版

Proteus 仿真大赛 电 子 时 钟 仿 真

第一章电子时钟总体设计 电子时钟简介 电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。 很多单片机产品具有实时时钟的功能,例如智能化仪器仪表、工业过程系统及家用电器等。这里要求实现一个具有实时时钟显示和闹钟控制功能的数字钟。通过数字钟的设计与制作,将前面所学的单片机内部定时资源、I/O端口、键盘和显示接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软硬件调试方法等,并掌握单片机应用系统的开发过程。 电子钟设计要求 设计并制作具有如下功能的数字钟: (1)自动计时,由6位LED先四起显示时、分、秒。 (2)具备校准功能,可以设置当前时间。 (3)具备定时启动功能,可以设置闹钟时间,启闹10s后自动关闭闹铃。 电子钟计时方案 (1)采用实时时钟芯片。针对应用系统对实时功能的普遍需求,各大芯片生产厂家陆续推出了一系列实时时钟集成电路,如DS1287、DS12887、DS1302、PCF8563、S35190等。这些实时时钟芯片具备年、月、日、时、分、秒、计时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。单片机可通过中断或查询方式读取计时数据。实时时钟芯片的计时功能无须占用CPU时间,功能完善,精度高,软件程序设计相对简单,在实时工业测控系统中多采用这一类专用芯片来实现。 (2)软件控制。利用AT89S51内部定时/计数器进行中断定时,配合软件延时、分、秒的计时。该方案节省硬件成本,且能够使读者对前面所学知识进行综合运用,因此,本系统设计采用这一方案。 电子钟显示方案 (1)利用串行口扩展LED,实现LED静态显示。 该方案占用单片机资源少,且静态显示亮度高,但硬件开销大,电路复杂,信息刷新速度慢,比适用于单片机并行口资源较少的场合。 (2)利用单片机并行I/O端口,实现LED动态显示。

利用开发板编程完成显示实时时钟功能

实验三显示实时时钟 一.实验目的 1.了解实时时钟的硬件控制原理及设计方法; 2.掌握OK210开发板处理器中RTC模块程序的设计方法。 二.实验设备 硬件:OK210开发板(配有RTC模块),串口线,PC机 软件:Android开发环境,超级终端 三.实验内容 学习和掌握OK210开发板中处理器中RTC模块的使用,编写应用程序,修改时钟日期及时间的设置,以及使用开发板的串口,在超级终端显示当前系统时间。 四.实验原理 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程,电力自动化、工业控制等自动化程度高的领域的无人值守环境。RTC器件与微控制器之间的接口大都采用连线简单的串行接口,有同步串口和异步串口。 OK210开发板中实时时钟RTC单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC发送8位BCD码数据到CPU,传送的数据包括秒,分,小时,星期,月份和年份,CPU通过访问RTC模块的寄存器,首先要设RTCCON 的bit为1。CPU通过读取RTC模块中寄存器的值,得到当前的相应的时间值。RTC单元时钟源由外部晶振提供,可以实现闹钟功能。 五.实验步骤 1.准备实验环境 将开发板与电脑通过串口连接好,笔记本没有串口设备,通过USB串口适配器,并且连接开发主板上的电源接口。

2.串口接收设置 在PC机上运行超级终端串口通信程序,设置超级终端:波特率115200、1位停止位、无校验位、无硬件流控制。 3.将编写好的程序导入到开发板进行运行 通过超级终端输入相应的信息,开发板将显示对应的信息,最终将显示时间信息。 六.实验程序 时间设置控制程序 void rtc_set(void) { uart_printf(“\n please input 0x and two digit then press Enter,such as 0x66.\n”); uart_printf(“year (0x7DF):”); g_nyear=uart_getintnum(); uart_printf(“month (0x01):”); g_nmonth=uart_getintnum(); uart_printf(“date (0x06):”); g_ndate=uart_getintnum(); uart_printf(“\n1:Sunday 2:Moday 3:Thesday 4:Wednesday 5:Thursday 6:Friday 7:Saturday\n ”); uart_printf(“\n hour (0x09):”); g_nhour=uart_getintnum(); uart_printf(“\n minute (0x1E):”); g_nmin=uart_getintnum(); uart_printf(“\n second (0x00):”); g_nsec=uart_getintnum(); rRTCCON= rRTCCON &~(0xf)丨0x1; rBCDYEAR= rBCDYEAR &~(0xff)丨g_nyear; rBCDMON= rBCDMON &~(0x1f)丨g_nmonth; rBCDDAY= rBCDDAY &~(0x7) 丨g_nweekday; rBCDDATE= rBCDDATE &~(0x3f) 丨g_ndate; rBCDHOUR= rBCDHOUR &~(0x3f) 丨g_nhour; rBCDMIN= rBCDMIN &~(0x7f) 丨g_nmin; rBCDSEC= rBCDSEC &~(0x7f) 丨g_nsec; rRTCCON=0x0; RTC Control disable; }

相关文档
最新文档