嵌入式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;
}