20155229 2017-2018-1 《信息安全系统设计基础》18.1.3课上实践重做

本文介绍了一种在嵌入式系统中通过寄存器来设置和获取时间的方法。详细展示了如何针对小时、分钟和秒分别进行设置与读取,并提供了具体的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式基础

题目

  • 在作业本上完成附图作业,要认真看题目要求。

832288-20180105154908128-1850899593.png

PPT上的知识

  • 提取位

832288-20180105152837034-1718875436.png

  • 插入位

832288-20180105152920878-1159049078.png

分析

  • 定义基地址及时间存放的寄存器地址

#define TIME_Addr  0xFFFFC0000
#define TIME *(volatile int *) (TIME_Addr+2)
  • 寄存器分为16bit,前5bit提供给小时,中间6bit提供给,后5比特提供给

    sethours()

    设置小时时,需要先清空小时占用的位置,然后装入新的小时的数据

与1与保持
与0与得0

所以我们需要将0x1F左移11位再取反得到的旧时间,与旧时间按位于得到新时间。

再将设定的小时左移11位和新的时间进行按位或得到最终时间。


void SetHours(int hours)
{
    int oldtime = TIME;
    int newtime = oldtime & ~ (0x1F << 11);//将小时清零,保留分钟与秒钟
    newtime |= (hours & 0x1F) << 11;//设置小时时间
    TIME = newtime;
}
gethours()

所占的位给清空,所以将时间右移11位,然后与上0x1F。

int getHours() 
{
    int time=TIME;
    return (time>>11)&0x1F;
}

提取设置的道理和小时的差不多,不同的在于占6bit,以及左移右移时,的移位不同。

void SetMinutes(int minutes) 
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x3F<<5);
    newtime|=(minutes&0x3F)<<5;
    TIME=newtime;

}
int getMinutes() 
{
    int time=TIME;
    return (time>>5)&0x3F;
}

void SetSeconds(int seconds)
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~0x1F;
    newtime|=(seconds/2)&0x1F;
    TIME=newtime;

}
int getSeconds() 
{
    int time=TIME;
    return (time&0x1F)*2;

转载于:https://www.cnblogs.com/fyhtvxq/p/8205698.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值