嵌入式基础

整体思路

time指针指向该寄存器,所以定义一个timeOp位域,利用time指针将寄存器中的值放至timeOp中,存储后面寄存器读取到的结果再经过修改返回到寄存器里

用16位指针time指向这里使用的16位寄存器,用来读取和改变寄存器值

借助强制转换的方式将值传给time指针,指针将值给寄存器,将timeOp位域中hours的值直接返回即可

getHours()

提取时:提取只要将现在的时间值给一个中间值,再将中间值右移11位再将当前的低5位与上1,其他位与上1,即与上0x1F就可以提取出来了。

开始先提取时间地址:hour是放在基址加上2的16位寄存器中,定义一个时间宏存放地址;

根据结构图,Hours占5位,其地址与时间地址的偏移量为11,因此提取数值的时候将原数值右移11位;

右移后将数值与0x1F(00011111),将数值的低五位提取出来,也就是Hours。

SetHours (int hours)

原Hours置0,左移11位,其他位为0,用左移后的Hours或上一步的时间后,再把Hours设置到新的时间中,就得到了。

 

 

#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 |= (hours & 0x1F) << 11;

int getHours() { int time = TIME;

return (time>>11) & 0x1F; }

time=DATA;
time=time&0x07FF;
time=time|(hours<<11);
DATA=time;
}

 

 

posted @ 2021-12-13 10:50  zzy188  阅读(41)  评论(0编辑  收藏  举报