嵌入式C语言

题目要求

在作业本上完成附图作业,要认真看题目要求。
提交作业截图
作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

题目分析

分析一:提取插入时间

根据老师上课讲的例子


分析图片可知:
一共16bits,时有5位,分有6位,秒有5位

先提取分钟:

time>>5:将时间右移五位去掉秒
(time>>5)&0x3F:此时只需要最后五位,因此&上0x3F,即&0000000000111111,将除后五位置零
最后即可提取出后五位的分钟

插入新分钟

newtime=oldtime&~(0x3F<<5):将分钟位置置零
newtime|=(hours&0x3F)<<5:将之前提取出来的分钟左移五位放置到新时间的分钟,再与新时间&

分析二:寄存器

题目要求:时间存放在(基址+2)的16位寄存器中:
定义时间宏存放地址:

#define Time_Addr 0xFFFFC0000
#define TIME *(volatile int *) (Time_Addr+2)

题目解答:

  • 提取时:由于所在高五位,需要右移11位
#define Time_Addr 0xFFFFC0000
#define TIME (volatile int ) (Time_Addr+2)
int gethours()
{
int time = TIME;
return (time>>11)&0x1F;
}

void sethours(int hours)
{
int oldtime = TIME;
int newtime = oldtime & ~(0x1F<<11);
newtime =newtime | ((hours&0x1F)<<11);
TIME=newtime;
}
  • 提取秒:低五位不需要移
#define Time_Addr 0xFFFFC0000
#define TIME (volatile int ) (Time_Addr+2)
int getseconds()
{
int time = TIME;
return time&0x1F;
}

void setseconds(int hours)
{
int oldtime = TIME;
int newtime = oldtime & ~0x1F;
newtime =newtime | (seconds&0x1F);
TIME=newtime;
}
 posted on 2018-01-07 23:23  20155327李百乾-  阅读(204)  评论(0编辑  收藏  举报