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

嵌入式基础

题目

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

PPT上的知识

  • 提取位

  • 插入位

分析

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

#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;

posted @ 2018-01-05 17:13  Fer_佳  阅读(192)  评论(0编辑  收藏  举报