RTC实验

news2025/1/19 8:12:52

一、RTC简介

RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电

在这里插入图片描述
在这里插入图片描述

BCD码,四位二进制表示一位十进制数

例如:

十进制数:12,二进制位:1100, BCD码:0001 0010

在这里插入图片描述
寄存器详解
BCDSEC-BCDYEAR重点掌握,存储实际时间

ALMSEC-ALMYEAR设置预期时间
在这里插入图片描述
RTCCON寄存器[0]位打开RTC控制,以便校准时间
在这里插入图片描述
修改年,月,日,星期,时,分,秒
BCDDAY(日)寄存器和BCDWEEK(星期)寄存器手册里面的地址写反了,所以用的时候两个对调使用,星期6就设置BCDDAY寄存器,15日就设置BCDWEEK寄存器

BCD码的信息不可以直接使用%d打印,因为打印出来的值是十进制的数值,比如:0x023打印出来的值是35

interface.c

#include "exynos_4412.h"

int main()
{
	unsigned int Oldsec = 0, Newsec = 0;

	/*使能RTC控制*/
	RTCCON = RTCCON | 1;
	/*校准时间信息*/
	RTC.BCDYEAR = 0x023;
	RTC.BCDMON = 0x8;
	RTC.BCDDAY = 0x1;
	RTC.BCDWEEK = 0x15;
	RTC.BCDHOUR = 0x16;
	RTC.BCDMIN = 0x46;
	RTC.BCDSEC = 0x50;
	/*禁止RTC控制*/
	RTCCON = RTCCON & (~(1));

	while(1) {
		Newsec = RTC.BCDSEC;
		if(Oldsec != Newsec) {
			printf("20%x-%x-%x %x %x:%x:%x\n", RTC.BCDYEAR, RTC.BCDMON, RTC.BCDWEEK, RTC.BCDDAY, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC);
			Oldsec = Newsec;
		}
	}
	return 0;
}

实验小例子

1.编程实现通过LED状态显示当前电压范围,并打印产生低压警报时的时间

注: 电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮
电压在1001mv~1500mv时,LED2、LED3、LED4点亮 电压在501mv~1000mv时,LED2、LED3点亮
电压在0mv~500mv时,LED2闪烁,且每隔一秒钟向终端打印一次当前的电压值及当前的时间

interface.c

#include "exynos_4412.h"

					/* 点亮LED2 */
#define LED2_ON (GPX2.DAT = GPX2.DAT | (1 << 7))
					/* 熄灭LED2 */
#define LED2_OFF (GPX2.DAT = GPX2.DAT & (~(1 << 7)))
					/* 点亮LED3 */
#define LED3_ON (GPX1.DAT = GPX1.DAT | 1)
					/* 熄灭LED3  */
#define LED3_OFF (GPX1.DAT = GPX1.DAT & (~ 1))
					/* 点亮LED4 */
#define LED4_ON (GPF3.DAT = GPF3.DAT | (1 << 4))
					/* 熄灭LED4 */
#define LED4_OFF (GPF3.DAT= GPF3.DAT & (~(1 << 4)))
					/* 点亮LED5 */
#define LED5_ON (GPF3.DAT = GPF3.DAT | (1 << 5))
					/* 熄灭LED5 */
#define LED5_OFF (GPF3.DAT = GPF3.DAT & (~ (1 << 5)))

/*循环延时*/
void Delay(unsigned int Time) {
	while(Time--);
}

/*初始化呢ADCCON寄存器*/
void ADC_CON(void) {

	/*将ADC的精度设置成 12bit*/
	ADCCON = ADCCON | (1 << 16);
	/*使能ADC的分频器*/
	ADCCON = ADCCON | (1 << 14);
	/*设置ADC的分频值, ADC的时钟频率 = PLCK/(19+1) = 5MHZ 
	 * ADC的转换频率 = 5MHZ / 5 = 1MHZ*/
	ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);
	/*关闭待机模式,使能正常模式*/
	ADCCON = ADCCON & (~(1 << 2));
	/*关闭读使能通过转换AD*/
	ADCCON = ADCCON & (~(1 << 1));
	/*选择转换通道 3通道*/
	ADCMUX = 3;
}

int main()
{
	unsigned int AdcValue = 0;
	unsigned int Oldsec = 0, Newsec = 0;
	ADC_CON();
	GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);
	GPX1.CON = GPX1.CON & (~(0xF)) | (0x1);
	GPF3.CON = GPF3.CON & (~(0xFF << 16)) | (0x11 << 16);

	/*使能RTC控制*/
	RTCCON = RTCCON | 1;
	/*校准时间信息*/
	RTC.BCDYEAR = 0x023;
	RTC.BCDMON = 0x8;
	RTC.BCDDAY = 0x1;
	RTC.BCDWEEK = 0x15;
	RTC.BCDHOUR = 0x16;
	RTC.BCDMIN = 0x46;
	RTC.BCDSEC = 0x50;
	/*禁止RTC控制*/
	RTCCON = RTCCON & (~(1));

	while(1) {
		/*开始转换*/
		ADCCON = ADCCON | 1;
		/*等待转换完成,因为转换需要时间*/
		while(!(ADCCON & (1 << 15)));
		/*读取转换结果*/
		AdcValue = ADCDAT & 0xFFF;
		/*将结果转换成实际的电压值 mv   1800(mv) / (2^12-1) = 0.44*/
		AdcValue = AdcValue * 0.44;

		if(AdcValue >= 1501 && AdcValue <= 1800) {
			/*LED2 LED3 LED4 LED5 点亮*/
			LED2_ON;
			LED3_ON;
			LED4_ON;
			LED5_ON;

		} else if (AdcValue >= 1001 && AdcValue <= 1500) {
			/*LED2 LED3 LED4 点亮*/
			LED5_OFF;
			LED2_ON;
			LED3_ON;
			LED4_ON;
			
		} else if (AdcValue >= 501 && AdcValue <= 1000) {
			/*LED2 LED3 点亮*/
			LED4_OFF;
			LED5_OFF;
			LED2_ON;
			LED3_ON;

		} else if (AdcValue >= 0 && AdcValue <= 500) {

			Newsec = RTC.BCDSEC;
			if(Oldsec != Newsec) {
				/*打印电压值及当前时间*/
				printf("AdcValue = %dmv, 20%x-%x-%x %x %x:%x:%x\n", AdcValue, RTC.BCDYEAR, RTC.BCDMON, RTC.BCDWEEK, RTC.BCDDAY, RTC.BCDHOUR, RTC.BCDMIN, RTC.BCDSEC);
				Oldsec = Newsec;
			}

			/*LED2 闪烁*/
			LED3_OFF;
			LED4_OFF;
			LED5_OFF;
			LED2_ON;
			Delay(1000000);
			LED2_OFF;
			Delay(1000000);
		}  


	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

从零开始,外贸邮件营销如何做?

邮件营销是外贸企业开发新用户和维系老客户非常有效的方法之一&#xff0c;因其操作方便快捷、成本低廉且精准投放的特性&#xff0c;已成为外贸行业的必备营销手段。但如何才能利用好邮件营销&#xff0c;让邮件营销的作用发挥到最大呢&#xff1f;今天U-Mail李工就跟大家分享…

Neo4j的使用场景_以及Windows版Neo4j Community Server安装_欺诈检测_推荐_知识图谱---Neo4j图数据库工作笔记0003

可以看到使用场景,比如欺诈检测, 要建立图谱,才能进行,欺诈人员检测 可以看到图谱的各种应用场景 然后推荐引擎也需要,可以看到 在金融,旅行,求职招聘,保健,服务,媒体娱乐,都可以进行推荐 然后还有知识图谱 身份访问管理,这里,可以进行安全管理,可以挖掘出潜在关系,分析, 某…

【Nacos2.24持久化到Postgres数据库适配——详细版】

Nacos2.24持久化到Postgres数据库适配 前言步骤拉取源码添加依赖修改源码编译打包修改配置测试运行 参考 前言 公司基于springboot实现了一套单体框架&#xff0c;目前我负责搭建SpringCloud微服务框架&#xff0c;需要用到nacos&#xff0c;但是由于公司特殊性&#xff0c;na…

IntelliJ IDEA 2023.1 windows找不到文件‘chrome’

异常效果图 1、【打开设置】 2、 搜索【web brow】 3、 在桌面上找到常用的浏览器 例如我的edge-【右击】-【打开文件位置】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】 4、修改正确的路径如下&#xff1a; 5、再次尝试打开【main.jsp】 浏览器正常显示&#xff01;…

十、接口(1)

本章概要 抽象类和方法接口创建 默认方法多继承接口中的静态方法Instrument 作为接口 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。 这种机制在编程语言中不常见&#xff0c;例如 C 只对这种概念有间接的支持。而在 Java 中存在这些关键字&#xff0c;说明…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型&#xff08;勘定Category&#xff09;栏目。 ・账号分配类型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原价Center&#xff08;成本中心。用于消耗物料采购 的过账&#xff09; 2&#xff0c;E 得意先…

任我行CRM系统存在 SQL注入漏洞[2023-HW]

任我行CRM系统存在 SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC又是一通哈拉少 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及…

嵌入式编译x264源码

x264下载地址:直接下载下来就行 1.解压缩到你的服务器上 2.准备编译 3.使用编译命令: ./configure --prefix../x264build --disable-asm --enable-shared --enable-static --hostarm-linux-gnueabihf --cross-prefixarm-linux-gnueabihf- --disable-opencl --enable-pic --di…

生成式AI颠覆传统数据库的十种方式

对于生成式AI的所有闪光点&#xff0c;这个新时代最大的转变可能深埋在软件堆栈中。AI算法正在不易觉察地改变一个又一个数据库。他们正在用复杂、自适应且看似更直观的AI新功能颠覆传统数据库。 目录 1、向量和嵌入 2、查询模型 3、建议 4、索引范例 5、数据分类 6、更…

开源数据库Mysql_DBA运维实战 (备份与还原)

Mysql数据库的备份与还原&#x1f343; 备份对于数据库而言是至关重要的。当数据文件发生损坏、MySQL服务出现错误、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时&#xff0c;使用一种有效的数据备份方案&#xff0c;就可以快速解决以上所有的问题。MySQL提供了多种备…

Android平台内网RTSP网关和轻量级RTSP服务的区别和联系

技术背景 我们在对接轻量级RTSP服务的时候&#xff0c;遇到客户这样的使用场景&#xff1a;客户是用于车载自组网环境&#xff0c;确保多辆车之间可以相互看到对方的实时视频&#xff0c;以期可以了解到前方路况等关注的信息。 除了安卓自带摄像头的数据&#xff0c;还有车载…

Nacos权限认证

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

ssm家政服务网站源码和论文

ssm家政服务网站源码和论文024 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必…

MYSQL 作业三

创建一个student表格&#xff1a; create table student( id int(10) not null unique primary key, name varchar(20) not null, sex varchar(4), birth year, department varchar(20), address varchar(50) ); 创建一个score表格 create table score( id int(10) n…

视频监控有哪些存储方式?安防监控应该如何选择存储模式?

视频监控系统涉及到大量的视频数据&#xff0c;需要对这些数据进行存储&#xff0c;以备日后查看或备份。视频监控的存储需求需要根据场所的实际情况进行选择&#xff0c;以保证监控数据的有效存储和日后的调阅、回溯。 当前视频监控的存储方式&#xff0c;通常有以下几种&…

手持两把锟斤拷,口中疾呼烫烫烫

大家好&#xff0c;我是可乐。 你是否有过在网页上看到一堆乱码&#xff0c;完全不知所云的经历&#xff1f;或者你试图打开一个文档&#xff0c;结果看到的都是奇怪的字符&#xff1f;这背后的元凶&#xff0c;很可能是字符编码。 这听起来像是一个高深的计算机名词&#xff…

介绍一些编程语言— Visual Basic 语言

介绍一些编程语言— Visual Basic 语言 Visual Basic 语言 简介 Visual Basic&#xff08;简称 VB&#xff09;是美国 Microsoft 公司于 1991 1991 1991 年研制的一种基于图形用户接口的 Windows 环境下的开发工具&#xff0c;是一种面向对象、可视化的新型开发工具&#x…

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

STM32 CubeMX Freertos STM32 CubeMX &#xff08;Freertos任务&#xff1a;创建、删除、挂起、恢复&#xff09; STM32 CubeMX Freertos前言一、STM32 CubeMX 配置时钟树配置使能串口&#xff0c;用于用于检查实验现象使用STM32 CubeMX 库&#xff0c;配置Freertos创建任务 二…

antd中Switch组件的使用

<Switch> 是 Ant Design 中的一个组件&#xff0c;用于在开关之间切换。checkedChildren 是 <Switch> 组件的一个属性&#xff0c;用于指定在开关打开时显示的文本或 React 元素。 以下是 <Switch> 组件的基本语法&#xff1a; import { Switch } from ant…