【课堂实践】嵌入式基础

实验内容

实验思路

  1. 用uint16_t型(16位)指针time指向该16位寄存器,作为读取和修改寄存器值的通道;
  2. 定义一个名为timeOp的位域,结构如下,存储从寄存器中读取的值,修改操作在该位域上进行,修改后的值返回至寄存器中。

实验代码

typedef uint16_t u16;  //16位

u16 *time;      
time = OXFFFFC0000 + 2;   //time指针指向该寄存器

struct{                  //定义一个timeOp位域
    unsigned seconds:5,  
    minutes: 6,
    hours: 5;
}timeOp;

timeOp.hours = *time>>11;            //利用time指针将寄存器中的值放至timeOp中
timeOp.minutes = (*time & 0X07E0)>>5;
timeOp.seconds = *time & 0X001F;

/*
 * 函数功能:修改寄存器中的Hours部分的值
 * 实现方法:修改timeOp位域中hours的值,将位域的值利用time指针,传至寄存器中
 */
void SetHours(int hours)
{
    timeOp.hours = hours;
    *time = (u16)timeOp;  //通过强制转换的方式将值传给time指针,指针将值给寄存器
}

/*
 * 函数功能:返回寄存器中hours部分的值
 * 实现方法:将timeOp位域中hours的值直接返回即可
 */
int getHours()
{
    return timeOp.hours;
}

附加

同理,对于寄存器中minutes、seconds的修改和读取,也可用同样的方法进行操作,函数如下:

minutes
/*
 * 函数功能:修改寄存器中的Minutes部分的值
 * 实现方法:修改timeOp位域中Minutes的值,将位域的值利用time指针,传至寄存器中
 */
void SetMinutes(int minutes)
{
    timeOp.mintutes = minutes;
    *time = (u16)timeOp;  //通过强制转换的方式将值传给time指针,指针将值给寄存器
}

/*
 * 函数功能:返回寄存器中Minutes部分的值
 * 实现方法:将timeOp位域中minutes的值直接返回即可
 */
int getMinutes()
{
    return timeOp.minutes;
}

seconds
/*
 * 函数功能:修改寄存器中的Seconds部分的值
 * 实现方法:修改timeOp位域中seconds的值,将位域的值利用time指针,传至寄存器中
 */
void SetSeconds(int seconds)
{
    timeOp.seconds = seconds/2;
    *time = (u16)timeOp;  //通过强制转换的方式将值传给time指针,指针将值给寄存器
}

/*
 * 函数功能:返回寄存器中Seconds部分的值
 * 实现方法:将timeOp位域中seconds的值X2返回即可
 */
int getSeconds()
{
    return timeOp.seconds*2;
}

posted @ 2018-01-03 10:46  protectmonarch  阅读(126)  评论(0编辑  收藏  举报