20155228 2018-01-03 课堂测试:嵌入式基础
题目和要求
- 在作业本上完成附图作业,要认真看题目要求。
- 提交作业截图
- 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)
分析和设计
根据题意设置基地址和存放时间的寄存器的地址
#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;