嵌入式实验:实时时钟实验

合集下载

嵌入式课程设计-- 基于LCD的电子时钟实验

嵌入式课程设计-- 基于LCD的电子时钟实验

课程设计报告题目嵌入式系统项目设计课程设计(报告)任务书(理工科类)Ⅰ、课程设计(报告)题目:基于LCD的电子时钟实验Ⅱ、课程设计(论文)工作内容学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:1、编写程序实现电子时钟功能,通过实验系统的LCD将时间显示出来;2、仿照给定图形在LCD上显示类似的时钟界面;3、动态显示当前的时间,包括:年、月、日、时、分、秒,时针,分针、秒针必须为动态实时指示当前的时间。

一、课程设计目标1、培养综合运用知识和独立开展实践创新的能力;2、培养学生的编程能力、用计算机解决实际问题的能力。

3、培养学生遇到问题,解决问题的能力。

二、研究方法及手段应用1、将任务分成若干模块,查阅相关论文资料,分模块调试和完成任务;2、实验设备有L-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆;3、PC操作系统WIN98或WIN2000或WINXP,ARM SDT2.5或ADS1.2集成开发环境,仿真器驱动程序;4、本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。

三、课程设计预期效果1、完成实验环境搭建;2、分模块调试和编译;3、组合并完善程序;4、联合仿真软件运行程序;5、液晶显示器显示时钟图样,时,分,秒能指向正确的时间。

学生姓名:严维锋专业年级:自动化2008级目录前言 (3)第一章系统设计 (4)第一节课题目标及总体方案 (4)第二节原理框图 (5)第三节程序和芯片的初始化 (5)第四节构建功能模块 (7)第五节 MAIN函数的局部原理分析 (8)第二章实验(测试)结果及讨论 (13)第一节 ADS1.2软件的编译,连接和运行 (13)第二节程序调试 (14)第三章结论 (14)心得体会 (15)参考文献 (16)附录 (17)源程序 (17)前言近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。

嵌入式实时时间显示

嵌入式实时时间显示

任务
OSStart();//启动系统
6
} //开始任务 void start_task(void *pdata) { OS_CPU_SR cpu_sr=0;
pdata = pdata; OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);// 创 建 LED 任务 OSTaskCreate(time_task,(void *)0,(OS_STK*)&TIME_TASK_STK[TIME_STK_SIZE-1],TIME_TASK_PRIO);// 创建时间任务 OSTaskSuspend(START_TASK_PRIO); //挂起开始任务. OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) } //指示灯任务 void led_task(void *pdata) { pdata = pdat初始化 系统初始化 创建开始任务
启动系统
开始任务 创建指示灯任务 创建显示任务 挂起开始任务
指示灯任务
显示任务 获取时间、温度
LED 取反 延时进行任务切换
得到日期 显示数据 延时进行任务切换
2、主要程序
//开始任务
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
RTC 由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连。此 单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口 由 APB1 总线时钟驱动,用来与 APB1 总线连接。另一部分(RTC 核心)由一组可编 程计数器组成,分成两个主要模块。第一个模块是 RTC 的预分频模块,它可编程 产生 1 秒的 RTC 时间基准 TR_CLK。RTC 的预分频模块包含了一个 20 位的可编程 分频器(RTC 预分频器)。如果在 RTC_CR 寄存器中设置了相应的允许位,则在每 个 TR_CLK 周期中 RTC 产生一个中断(秒中断)。第二个模块是一个 32 位的可编程 计数器,可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算, 可以记录 4294967296 秒,约合 136 年左右,作为一般应用,这已经是足够了的。

实时时钟实验总结

实时时钟实验总结

实时时钟实验总结一、实验目的本实验的主要目的是了解实时时钟的原理及其应用,掌握实时时钟的使用方法,以及通过实验学习如何编写驱动程序。

二、实验原理1. 实时时钟是一种能够提供时间和日期信息的芯片,它通常由一个晶体振荡器和一组计数器组成。

2. 实时时钟可以通过I2C总线与处理器进行通信,读取或设置时间和日期信息。

3. 实现实时时钟需要编写相应的驱动程序,并将其与操作系统进行集成。

三、实验设备与材料1. 实验板:STM32F407ZET6开发板;2. 模块:DS1307实时时钟模块;3. 软件:Keil uVision5开发环境。

四、实验内容1. 硬件连接:将DS1307模块与STM32F407ZET6开发板连接,包括SDA、SCL、VCC和GND等引脚。

2. 编写驱动程序:根据DS1307模块手册编写相应的驱动程序,并将其集成到操作系统中。

3. 测试程序:编写测试程序,通过读取DS1307模块返回的时间和日期信息来验证驱动程序是否正常工作。

五、实验步骤1. 连接硬件:将DS1307模块与STM32F407ZET6开发板连接。

2. 编写驱动程序:根据DS1307模块手册编写相应的驱动程序,并将其集成到操作系统中。

3. 编写测试程序:编写测试程序,通过读取DS1307模块返回的时间和日期信息来验证驱动程序是否正常工作。

4. 下载程序:使用Keil uVision5开发环境将编写好的程序下载到STM32F407ZET6开发板上。

5. 运行测试:启动STM32F407ZET6开发板,通过串口助手等工具查看DS1307模块返回的时间和日期信息,验证驱动程序是否正常工作。

六、实验结果经过测试,实时时钟模块能够正确返回当前时间和日期信息,并且能够根据需要进行设置和调整。

七、实验总结本次实验通过对实时时钟原理的学习以及编写驱动程序和测试程序的练习,加深了对嵌入式系统中硬件与软件协同工作的理解。

同时也掌握了一些基本的嵌入式系统开发技能,如硬件连接、驱动编写、调试等。

嵌入式系统原理实时时钟

嵌入式系统原理实时时钟
嵌入式系统原理实时时钟
四实实验验设设备备
JXARM9-2410教学实验箱 ADT1000仿真器和ADT IDE集成开发环境
五 基础知识
实时时钟在嵌入式系统中的作用
在一个嵌入式系统中,实时时钟单元可以其提供可靠的 时钟,包括时分秒和年月日;即使在系统处于关机状态 下它也能够正常工作(通常采用后备电池供电),它的 外围也不需要太多的辅助电路,典型的就是只需要一个 高精度的晶振。
2410option.inc Configuration options for .S files
2410memcfg.inc Memory bank configuration file
2410lib.c
S3C2410 PLL,Uart, LED, Port Init
2410addr.h S3C2410 Define Address Register
五 基础知识
S3C2410的实时时钟
时钟数据采用BCD编码 能够对闰年的年月日进行自动处理 具有告警功能,当系统处于关机状态时,能产生告警中断; 具有独立的电源输入 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟
五 基础知识
S3C2410的实时时钟寄存器
实时时钟控制寄存器 告警控制寄存器 实时时钟计数器
Interrupt.c
串口接口函数说明(2410lib.c)
配置系统时钟 void ChangeMPllValue(0xa1,0x3,0x1); //FCLK=202.8MHz void ChangeClockDivider(1,1)// 修改实时时钟当前时间、日期 void rtc_set_date(st_date* p_date) 获取实时时钟当前时间、日期 void rtc_get_date(st_date* p_date) 初始化S3C2410的TICK定时器 void rtc_tick_init( char tick ) 设置S3C2410的告警时间以及方式 void rtc_alarm_set(st_date* p_date, unsigned char mode)

嵌入式实验报告_电子钟实验报告

嵌入式实验报告_电子钟实验报告

嵌⼊式实验报告_电⼦钟实验报告电⼦钟实验报告班级电⼦班学号******* 姓名**实验名称电⼦钟⼀、设计⽬标和要求:1、理解rtc模块的结构,并掌握rtc的配置和读写操作。

2、学习使⽤UC GUI。

3、对⽆操作系统的应⽤,设计任务的切换和协调运⾏。

4、完成考核要求:①驱动RTC模块,设置和读取RTC时间(在液晶上⽤⽂字显⽰当前时间,年⽉⽇、星期⼏、时分秒)。

②添加液晶绘图函数,在液晶上绘制电⼦表表盘。

③设计任务,添加ucos2操作系统。

添加任务1(时间设置、报警闹钟设置和绘图参数)和任务2(绘制表盘),并协调2个任务。

④通过UC GUI丰富图形界⾯(添加GUI任务,添加对应任务的图像窗⼝)。

⼆、实验环境:硬件:嵌⼊式开发平台、JTAG仿真器、PC机、嵌⼊式系统实验箱,串⼝线。

软件: WinXP、RVDS集成开发环境、仿真器驱动程序、超级终端通讯程序。

三、设计思路和实现步骤、内容:1、设计思路:(1)⽤函数画出⼀个时钟表盘,写出实时的时间。

⾸先,定义边⾓点坐标,确定屏幕范围;接着,⽤清屏函数清屏;然后,⽤ILI93××程序画图,定义⼀点作为中⼼坐标,画⼀个确定半径的为R的圆;最后画三条直线,分别为秒针、分针、时针(都是使⽤坐标来确定的)。

(2)实现对时间的更改功能,并可以将更改过的时间赋值给现实的时间。

STM32中RTC模块计数器,秒针每次+1,每次+1后,秒针指向下⼀个刻度的时候,上⼀个刻度的位置⽤清屏函数清掉,然后重新画好指针;(3)⽤时钟来控制⼀个闹钟时间,中断后让液晶做出相应的反应。

在源程序中加⼊UCOS2操作系统,在系统中进⾏时间设置,报警和闹钟等等功能。

2、程序流程图:3、具体实现程序:1、主程序int main(void){KEY_Init();Stm32_Clock_Init(9);//系统时钟设置delay_init(72); //延时初始化uart_init(72,9600); //串⼝1初始化LED_Init();LCD_Init();RTC_Init();EXTIX_Init();DrawClock();while(1){if(alarmflag==1)//闹钟标志Alarm(); //闹钟显⽰elseTimeshow(); //时间显⽰if(set==1) //设置时间标志{LCD_Clear(WHITE);Set_timeshow(); //设置时间}}}时钟、led、lcd、rtc初始化后,进⼊⼀个死循环,如果没有进⼊闹钟中断,就开始时钟显⽰,按下第⼀个使能按键后,进⼊第⼆个界⾯,开始时间更改,然后再返回更改值。

嵌入式实时时钟

嵌入式实时时钟

实时时钟一、实验目的1.掌握RTC (Real Time Clock) 工作原理。

2.学习掌握其编程实验方法及应用。

二、实验内容阅读芯片手册,掌握RTC工作原理、编程方法及应用。

三、预备知识1.用ARM ADS1.2集成开发环境,编写和调试程序的基本过程。

2.ARM应用程序的框架结构。

3.RTC工作原理四、实验设备及工具硬件:ARM嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC机Pentumn100以上、串口线软件:PC机操作系统win98、Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、RTC实验原理及说明五、实验原理1.RTC原理实时时钟(RTC---- Real Time Clock)的基本功能是保持跟踪时间和日期等信息,但许多RTC还提供有多种附加功能,如:看门狗定时器、系统复位、非易失存储器(NV RAM)、序列号、方波输出、涓流充电等。

接口方式RTC芯片提供有多种接口方式,其中并行接口可实现存储器的快速访问或有较大的存储容量,适合于那些对价格、尺寸要求不是很荷刻的系统,许多采用并行接口的实时时钟芯片还与晶振和电池封装在一起构成一个完整的时钟模块,从而简化了硬件设计。

并行接口包括复用总线(数据与地址总线复用)和独立的地址、数据总线。

一般用于时间保持的NV RAM都采用与SRAM相同的控制信号,并可以方便地与常用的微处理器容量。

另外,有些Phantom实时时钟还将时钟数据隐含在备用电池支持的RAM内,以便利用64位软件协议来访问时钟数据。

一般情况下,串行接口时钟芯片都具有外形尺寸较小、成本低廉等优势,但这类芯片的通信速率一般较低,因而比较适合便携式产品。

这类芯片通常包括1-Wire 接口、2线、3线、4线或SPI接口,而许多处理器也包括2线或SPI接口,当然,也有些处理器(如8051及其派生产品)则支持复用的地址和数据总线。

备用电池在有些应用中(如VCR),时钟和日期信息在系统掉电时将会丢失,而在大多数应用中要求系统主电池断电时仍保持时钟和日期有效。

ucosII嵌入式实时操作系统实验

ucosII嵌入式实时操作系统实验

嵌入式实时操作系统实验报告多任务的创建及运行系别计算机与电子系专业班级电子0901班学生姓名高傲指导教师黄向宇提交日期 2012 年 4 月 1 日一、实验目的1.熟悉并掌握基于uC/OS-II的开发工具、工程管理工具2.了解uC/OS-II的文件结构、文件之间的依赖关系。

3.掌握创建多任务的方法及对任务进行相关操作的技巧。

二、实验内容1.建立并熟悉Borland C 编译及调试环境2.使用课本配套光盘中的例程运行并修改,观察多任务的运行状态,尝试对其中的任务进行挂起并恢复、删除及查询等操作,观察运行结果.3.完成课后练习题,P92页13-17题,至少完成其中任意两题。

三、实验原理1.编译环境Turbo C是Borland公司开发的DOS下16位C语言集成开发工具。

有2.0和3.0版本,2.0只支持C语言编译不支持鼠标操作,而3.0版本可以支持C/C++两种语言编译,而且还支持鼠标和//注释方式;TC2.0是80年代开发的,使用了很多年一直到现在WINDOWS系统才逐渐退出舞台。

Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。

使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。

因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux 下GNU的make。

实时时钟设计试验报告

实时时钟设计试验报告

实时时钟设计试验报告一、实验目的本实验的目的是设计一个实时时钟系统,具有实时显示时间、日期和闹钟功能。

通过该实验,我们可以了解实时时钟的设计原理、硬件电路连接及软件程序编写方法。

二、实验原理实时时钟系统由时钟芯片、显示模块、按键模块和控制模块组成。

时钟芯片负责计时和日期的记录,显示模块用于显示时间和日期,按键模块用于设置时间和日期,控制模块用于控制各模块之间的协作。

三、实验器材1.STM32开发板2.DS3231时钟模块3.数码管显示模块4.按键模块5.连接线四、实验步骤1.连接硬件电路。

将STM32开发板与DS3231时钟模块、数码管显示模块和按键模块进行连接,确保电路连接正确无误。

2.编写程序。

使用C语言编写程序,通过读取DS3231时钟模块的寄存器获取时间和日期数据,并将其显示在数码管模块上。

同时,设置按键模块的功能,使其可以进行时间和日期的设置。

3.烧录程序。

使用烧录器将编写好的程序烧录到STM32开发板上,并进行调试。

4.运行实验。

接通电源,启动实时时钟系统,观察数码管是否正确显示时间和日期,按下按键模块进行时间和日期的设置,并观察设置是否生效。

五、实验结果经过实验,我们成功设计出了一个实时时钟系统。

系统能够实时地显示当前的时间和日期,并且可以通过按键进行时间和日期的设置。

在设置新的时间和日期后,系统能够正确地更新并显示。

六、实验总结通过本次实验,我们深入地了解了实时时钟系统的设计原理和实现方法。

我们熟悉了DS3231时钟模块的使用方法,并学会了通过C语言编写程序来实现实时时钟系统的功能。

同时,我们也发现了实时时钟系统的一些问题,并加以解决。

我们对实时时钟系统的稳定性和精确性进行了测试,发现系统的计时精度较高,能够达到亚秒级的准确度。

然而,在用户进行时间和日期的设置时,可能由于误操作导致时间和日期出错。

需要在后续的工作中进一步优化系统的操作界面,提高用户设置的便捷性和准确性。

总而言之,实时时钟系统是一种非常有实用价值的设计,可以广泛应用于各种计时需求的场合,如办公室、实验室、车载设备等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
Irq_Request(IRQ_RTC, rtc_int_isr);
rRTCCON = 0x01;
rALMYEAR = p_date->year;
rALMMON = p_date->mon;
rALMDATE = p_date->day;
rALMHOUR = p_date->hour;
rALMMIN = p_date->min;
// Argument : p_date,待设置的日期
*****************************************************************************/
void rtc_set_date(st_date* p_date)
{
rRTCCON = 0x01;
Irq_Enable(IRQ_TICK);
}
/*****************************************************************************
// Function name: rtc_alarm_set
// Description:设置S3C2410的告警时间以及方式
rRTCCON = 0x00;
}
/*****************************************************************************
// Function name: rtc_get_date
// Description:获取实时时钟当前时间、日期
/*表示日期、时间的数据结构*/
typedef struct ST_DATE
{
shortyear; //年
charmon; //月
charday; //日
charweek_day; //星期
charhour; //时
charmin; //分
charsec; //秒
} st_date;
/*全局变量*/
/*****************************************************************************
// Function name: rtc_set_date
// Description:修改实时时钟当前时间、日期
// Return type: void
{
rRTCCON = 0x01;
p_date->year=rBCDYEAR ;
p_date->mon=rBCDMON ;
p_date->day=rBCDDAY ;
p_date->week_day=rBCDDATE ;
p_date->hour=rBCDHOUR ;
p_date->min=rBCDMIN ;
m_date.year=0x2000+0x04 ;
m_date.mon=0x03 ;
m_date.day=0x02 ;
m_date.week_day=0x02 ;
m_date.hour=0x15 ;
m_date.min=0x40 ;
m_date.sec=0x00 ;
/*修改当前日期和时间*/
rtc_set_date(&m_date);
Uart_Select(0);
/*打印提示信息*/
PRINTF("\n---实时时钟测试程序---\n");
PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\n");
PRINTF("\n实时时钟测试开始\n");
/*采用BCD编码,如2004年需要设置的值为0x2004 */
ext0_count++;
PRINTF("\r\nAlarm\r\n ");
}
四实验结果及分析
五实验体会
本次实验是了解实时时钟在嵌入式系统中的作用,并熟练掌握实时时钟的使用。在实验过程中我们学会了S3C2410的实时时钟单元的工作原理,并理解了S3C2410X的实时时钟寄存器的工作过程,以及RTCOON代码的使用方法。对于主函数的代码虽然大致上是理解了,但对于一些代码的具体含义还是会有或多或少的不解,不过这些都在同学和老师的帮助下得到了解决。特别是报警的时间间隔如何修改,以及系统默认的时间如何在代码中修改,都一一的理解和运用了!
// Return type: int
// Argument : void
*****************************************************************************/
void rtc_tick_isr(void)
{
Irq_Clear(IRQ_TICK); /*清除TICK中断*/
// Argument : void
*****************************************************************************/
voidMain(void)
{
int old_index ;
st_date m_date;
/*配置系统时钟*/
4.编写程序实现时间告警功能。
5.编译rtc,下载程序并运行,通过超级终端看输出结果。
三实验代码
/*包含文件*/
#include "def.h"
#include "2410lib.h"
#include "option.h"
#include "2410addr.h"
#include "interrupt.h"
rBCDYEAR = p_date->year;
rBCDMON = p_date->mon;
rBCDDAY = p_date->day;
rBCDDATE = p_date->week_day;
rBCDHOUR = p_date->hour;
rBCDMIN = p_date->min;
rBCDSEC = p_date->sec;
}
};
}
/*****************************************************************************
// Function name: rtc_tick_isr
// Description: TICK中断处理程序,程序中设置每秒钟引发一次中断
//*((unsigned char*) 0x02000006) = 0x00;
//*(unsigned char*)0x02000004 = seg7table[led_index%10];
led_index++;
}
/*****************************************************************************
// Return type: void
// Argument : tick,设置的TICK频率(时钟滴答的周期为(1+tick)/128秒)
*****************************************************************************/
void rtc_tick_init( char tick )
int led_index = 0;
int ext0_count = 0;
/* functions */
void rtc_tick_isr(void) __attribute__ ((interrupt("IRQ")));;
void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;
{
Irq_Request(IRQ_TICK, rtc_tick_isr);
rRTCCON = 0x0; //No reset[3], Merge BCD counters[2], BCD clock select XTAL[1], RTC Control disable[0]
rTICNT = (tick&0x7f)|0x80;/*TICK中断使能,周期为(1+tick)/128秒*/
// Return type: void
// Argument : p_date,返回日期的指针
*****************************************************************************/
void rtc_get_date(st_date* p_date)
{
if(old_index != led_index)/*每隔一秒更新一次数据*/
{
rtc_get_date(&m_date);
old_index = led_index;
PRINTF(/*时钟数据为BCD码格式,以16进制显示*/
"\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);
// Function name: rtc_int_isr
// Description: rtc中断处理程序,程序中设置每分钟的第5秒引发该中断
// Return type: int
相关文档
最新文档