2017-2018-1 20155306 《信息安全系统设计基础》嵌入式C语言———提取设置时分秒
2024-10-14 02:50:46
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
}
最新文章
- Android实现页面跳转及传递参数的方法
- *HDU3357 判环
- 【原创】高性能网络编程(二):上一个10年,著名的C10K并发连接问题
- iOS - 用 UIBezierPath 实现果冻效果
- jquery设置和获得checkbox选中问题
- kvm虚似机监控
- ajax中的post方法中回调函数不执行的问题
- openssl 第一篇
- Android采用HttpClient下载图片
- 1020. Tree Traversals (25) -BFS
- 解决Maven无法下载fastdfs-client-java依赖,Dependency &#39;org.csource:fastdfs-client-java:1.27-SNAPSHOT&#39; not found.
- 使用getline输入一行字符串
- SkylineGlobe TerraExplorer for Web 7.1.0版本 接口示例
- IDEA远程调试监控端口
- JS学习实践(1) JavaScript 修改图像灯泡
- angular学习一框架结构认识
- SpringBoot Web开发(3) WebMvcConfigurerAdapter过期替代方案
- 【Dalston】【第二章】客户端负载均衡(Ribbon)
- 前端基础之http协议
- docker下centos安装ping命令
热门文章
- web应用服务端cache策略初探
- microsoft azure 映像发布前的检查清单
- npm 删除node_modules
- ASP.NET MVC 使用Remote特性实现远程属性验证
- DES加密(支持ARC与MRC)
- [翻译] JFMinimalNotifications
- memcache知识梳理
- 我遇到的问题:耗时久/效率低 --->; 应对方案: 行动-结果指向
- 在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情
- jenkins+pytest+ allure运行多个py文件测试用例