20155327 嵌入式C语言课堂补交

嵌入式C语言

题目要求

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

题目分析

分析一:提取插入时间

根据老师上课讲的例子

1071551-20180107225921003-1040717941.png
1071551-20180107230931268-971920724.png

分析图片可知:
一共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;
}

转载于:https://www.cnblogs.com/l97----/p/8232850.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值