嵌入式C语言——提取时分秒

题目:

相关知识点

提取位:

插入位

用宏定义定义地址

#define TIME_Addr 0xFFFFC0000
#define TIME *(volatile int *)(TIME_Addr+2)

分析

  • 时分秒分别占5位、6位、5位!
  • 0x3F写成二进制111111六位进行&操作(适用于分)
  • 0x1F写成二进制11111五位进行&操作(适用于时、秒)

提取小时

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
int getHours()
{
int time=TIME;
return (time>>11)&0x1F;
}

插入小时

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
void SetHours(int hours)
{
int oldtime=TIME;
int newtime;
newtime=oldtime&~(0x1F<<11);
newtime|=(hours&0x1F)<<11;
TIME=newtime; }

提取分钟

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
int getMinutes()
{
int time=TIME;
return (time>>5)&0x3F;
}

插入分钟

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
void SetMinutes(int minutes)
{
int oldtime=TIME;
int newtime;
newtime=oldtime&~(0x3F<<5);
newtime|=(minutes&0x3F)<<5;
TIME=newtime; }

提取秒

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
int getSeconds()
{
int time=TIME;
return (time&0x1F)*2; //此处不考虑Seconds除2带来的误差,因此直接乘2
}

插入秒

#define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中
void SetSeconds(int seconds)
{
int oldtime=TIME;
int newtime;
newtime=oldtime&~0x1F;
newtime|=(seconds/2)&0x1F;
TIME=newtime; }

最新文章

  1. 深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域
  2. shell中三种引号的用法
  3. github的注册过程
  4. 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用
  5. css图片切换效果分析+翻译整理
  6. Android setStartOffset方法:设置启动时间
  7. POJ 1458 Common Subsequence 最长公共子序列 LCS
  8. Hadoop学习笔记(2)hadoop框架解析
  9. hdu 4291 A Short problem(矩阵+取模循环节)
  10. 最佳时间买入卖出股票 Best Time to Buy and Sell Stock LeetCode
  11. Golang 的内存管理(上篇)
  12. [洛谷P4234] 最小差值生成树
  13. sass报 error (Line XX: Invalid GBK character &quot;\xE4&quot;) 的解决办法
  14. 小梵同学 GO!
  15. python的dir()和__dict__属性的区别
  16. [转] 理解NLP中的卷积&amp;&amp;Pooling
  17. POJ 3207 Ikki&#39;s Story IV - Panda&#39;s Trick (2-sat)
  18. vmware12安装centos7系统详解
  19. Full postback triggered by LinkButton inside GridView inside UpdatePanel
  20. [转]SSIS中的脚本—脚本任务

热门文章

  1. Foj 2296 Alice and Bob(博弈、搜索)
  2. 通用型正方教务(通杀各版本)存在注入(不需登陆)+获得webshell+提权内网漫游
  3. 4、Python文件操作工具 xlsxwriter 工具
  4. 0-创建scott数据
  5. Eclipse 连接真实机器调试
  6. CString char BSTR 转换
  7. 【[IOI2014]Wall 砖墙】
  8. Dubbo实践(十一)远程调用流程
  9. Windows命令行使用总结(持续更新)
  10. sqoop数据迁移