郝博雅

导航

2017-2018-1 20155205 嵌入式C语言——时钟

2017-2018-1 20155205 嵌入式C语言——时钟

题目要求

基础知识

  • 插入位(以分钟为例)

  • 提取位(以分钟为例)

  • 在提取分钟时,运用到了位运算,位运算有以下规律:
&0 --> 清零
&1 --> 不变
|1 --> 置1
|0 --> 不变
  • 秒占了五位,故将时间右移5位,这时我们要将它提取出来,故要将每位&1,即&0x3F。

问题解答

  • 设置、提取小时:原理和设置、提取分钟一样,只不过这里的0X3F变为0X1F,因为小时只有五位。
#define TIME_Addr  0xFFFFC0000
#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 = newtime;
}

int getHours()
{
    int time = TIME;
    return (time>>11) & 0x1F;
}
  • 设置、提取秒,此时无需右移。
#define TIME_Addr  0xFFFFC0000
#define TIME *(volatile int *) (TIME_Addr+2)//这里需要将地址+2

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

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

posted on 2018-01-03 16:26  郝博雅  阅读(225)  评论(0编辑  收藏  举报