码迷,mamicode.com
首页 > 其他好文 > 详细

补做课上实践题目

时间:2018-01-06 14:22:57      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:minutes   异或   定义   amp   嵌入式   new   设置   .com   down   

补做课上实践题目:嵌入式基础

题目

技术分享图片

  • 以课上的小时为例:
  • 需要设置小时,首先需要将原来的小时清除,原来的小时有5位,故需要将前五位异或上零。
newtime=oldtime&~(0x1F<<11);
  • 还需要放置新的小时时间,将新的小时时间变为5位,然后放置到之前清空的五位上。
newtime |= (hours & 0x1F) << 11;
  • 获取小时时间时,直接取小时的五位然后输出即可。
Hours=time>>11)&0x1F;
return Hours;
  • 整体代码如下
void SetHours(int hours)
{
    int oldtime = TIME;
    int newtime = oldtime & ~ (0x1F << 11);
    newtime |= (hours & 0x1F) << 11;
    TIME = newtime;
}

int getHours()
{
    int time = TIME;
    return (time>>11) & 0x1F;
}
  • 还需要定义基地址和需要的寄存器地址。定义如下
#define Time_Addr 0xFFFFC0000 //定义基地址
#define Time *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中

加做分钟和秒的实现

  • 分钟位共六位,处于5——10位。
  • 秒位共5位,处于0——4位。
  • 实现过程同理与小时。

    设置分钟和获取分钟

void SetMinutes(int minutes) 
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x3F<<5); 1111是因为分钟是6位:第5-10位
    newtime|=(minutes&0x3F)<<5;
    TIME=newtime;

}
#define Time_Addr 0xFFFFC0000 
#define Time *(volatile int *)(Time_Addr+2) 
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;

}
#define Time_Addr 0xFFFFC0000 
#define Time *(volatile int *)(Time_Addr+2) 
int getSeconds() 
{
    int time=TIME;
    return (time&0x1F)*2;

补做课上实践题目

标签:minutes   异或   定义   amp   嵌入式   new   设置   .com   down   

原文地址:https://www.cnblogs.com/lhyhahaha/p/8213510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!