2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒

要求:根据下图,完成对时分秒的设置和提取。

示例及思路分析:



思路分析:以分钟为例,根据位运算的规则,设置分钟,只需要将寄存器中分钟对应的5-10bit清零,再进行赋值即可。即按位与上0x3F左移5位的取反结果,再按位或上所赋分钟值按位与上0x3F并左移5位的结果,最后赋值给寄存器即可。

提取分钟,只需要将寄存器中分钟对应的5-10bit右移5位至0-5bit,再将0-5bit的值提取出来即可。即将右移5位,再与上0x3F的结果返回即可。

同样地,提取时钟、秒钟的思路也是如此。其中,需要注意两个问题:1.时钟和秒钟所占位均为5bit,需要灵活调整0x3F为0x1F;2.0-4bit是秒钟除以2的结果,再设置提取的编程实现时需要注意。

代码实现:

设置时

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 void SetHours(int hours)
{
int oldtime = TIME;
int newtime = oldtime & ~ (0x1F << 11);//将时钟清零,保留分钟与秒钟
newtime | = (hours & 0x1F) << 11;//设置时钟时间
TIME = time;//改变时间寄存器的值
}

提取时

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 int getHours()
{
int time = TIME;
return (time >> 11) & 0x1F;
}

设置分

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 void SetMinutes(int minutes)
{
int oldtime = TIME;
int newtime = oldtime & ~ (0x3F << 5);//将分钟清零,保留时钟与秒钟
newtime | = (minutes & 0x3F) << 5;//设置分钟时间
TIME = newtime;//改变时间寄存器的值
}

提取分

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 int getMinutes()
{
int time = TIME;
return (time >> 5) & 0x3F;
}

设置秒

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 void SetSeconds(int seconds)
{
int oldtime = TIME;
int newtime = oldtime & ~ 0x1F;//将秒钟清零,保留时钟与分钟
newtime | = (seconds / 2) & 0x1F;//设置秒钟时间
TIME = newtime;//改变时间寄存器的值
}

提取秒

#define TIME_Addr 0xFFFFC000
#define TIME *(volatile int *)(TIME_Addr+2)//这里需要将地址+2 int getSeconds()
{
int time = TIME;
return (time & 0x1F) * 2; //此处不考虑Seconds除2带来的误差,因此直接乘2
}

最新文章

  1. Android实现页面跳转及传递参数的方法
  2. *HDU3357 判环
  3. 【原创】高性能网络编程(二):上一个10年,著名的C10K并发连接问题
  4. iOS - 用 UIBezierPath 实现果冻效果
  5. jquery设置和获得checkbox选中问题
  6. kvm虚似机监控
  7. ajax中的post方法中回调函数不执行的问题
  8. openssl 第一篇
  9. Android采用HttpClient下载图片
  10. 1020. Tree Traversals (25) -BFS
  11. 解决Maven无法下载fastdfs-client-java依赖,Dependency &#39;org.csource:fastdfs-client-java:1.27-SNAPSHOT&#39; not found.
  12. 使用getline输入一行字符串
  13. SkylineGlobe TerraExplorer for Web 7.1.0版本 接口示例
  14. IDEA远程调试监控端口
  15. JS学习实践(1) JavaScript 修改图像灯泡
  16. angular学习一框架结构认识
  17. SpringBoot Web开发(3) WebMvcConfigurerAdapter过期替代方案
  18. 【Dalston】【第二章】客户端负载均衡(Ribbon)
  19. 前端基础之http协议
  20. docker下centos安装ping命令

热门文章

  1. web应用服务端cache策略初探
  2. microsoft azure 映像发布前的检查清单
  3. npm 删除node_modules
  4. ASP.NET MVC 使用Remote特性实现远程属性验证
  5. DES加密(支持ARC与MRC)
  6. [翻译] JFMinimalNotifications
  7. memcache知识梳理
  8. 我遇到的问题:耗时久/效率低 ---&gt; 应对方案: 行动-结果指向
  9. 在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情
  10. jenkins+pytest+ allure运行多个py文件测试用例