20155228 2018-01-03 课堂测试:嵌入式基础

Posted 苍穹之下,铁幕之后

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20155228 2018-01-03 课堂测试:嵌入式基础相关的知识,希望对你有一定的参考价值。

20155228 2018-01-03 课堂测试:嵌入式基础

题目和要求

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

分析和设计

根据题意设置基地址和存放时间的寄存器的地址

#define Time_Addr 0xFFFFC0000 //定义基地址
#define Time *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中

设置小时

寄存器中时间小时的数据放在第11-15位中,需要先清空小时的数据位第11-15位的数据,然后把新的数据放进去

0x1F是0000 0000 0001 1111左移11位得到1111 1000 0000 0000取反得到0000 01111 1111 1111
旧的时间xxxx xxxx xxxx xxxx和0000 01111 1111 1111进行按位与运算得到新的时间0000 0xxx xxxx xxxx
再将需要设定的小时数据左移11位和新的时间进行按位或运算得到新的时间

void SetHours(int hours)
{
    int oldtime=Time;
    int newtime=oldtime&~(0x1F<<11);
    newtime|=(hours&0x1F)<<11;
    Time=newtime;

}

获取小时

寄存器中时间小时的数据放在第11-15位中,需要将小时的数据位第11-15位保留,然后把其他位的数据清空

时间是xxxx xxxx xxxx xxxx右移11位得到0000 000x xxxx


int getHours() 
{
    int time=TIME;
    return (time>>11)&0x1F;
}

设置分钟和获取分钟


void SetMinutes(int minutes) 
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x3F<<5);//使用0x3F:0000 0011 1111是因为分钟是6位:第5-10位
    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;

以上是关于20155228 2018-01-03 课堂测试:嵌入式基础的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-2 20155228 《网络对抗技术》 实验八:Web基础

2017-2018-2 20155228 《网络对抗技术》 实验七:网络欺诈防范

2017-2018-2 20155228 《网络对抗技术》 实验四:MSF基础应用

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155228 《信息安全系统设计基础》第十一周学习总结

2017-2018-2 20155228 《网络对抗技术》 实验六:信息搜集与漏洞扫描