• 20155229 2017-2018-1 《信息安全系统设计基础》18.1.3课上实践重做


    嵌入式基础

    题目

    • 在作业本上完成附图作业,要认真看题目要求。

    PPT上的知识

    • 提取位

    • 插入位

    分析

    • 定义基地址及时间存放的寄存器地址
    
    #define TIME_Addr  0xFFFFC0000
    #define TIME *(volatile int *) (TIME_Addr+2)
    
    
    • 寄存器分为16bit,前5bit提供给小时,中间6bit提供给,后5比特提供给

    sethours()

    设置小时时,需要先清空小时占用的位置,然后装入新的小时的数据

    与1与保持
    与0与得0

    所以我们需要将0x1F左移11位再取反得到的旧时间,与旧时间按位于得到新时间。

    再将设定的小时左移11位和新的时间进行按位或得到最终时间。

    
    void SetHours(int hours)
    {
        int oldtime = TIME;
        int newtime = oldtime & ~ (0x1F << 11);//将小时清零,保留分钟与秒钟
        newtime |= (hours & 0x1F) << 11;//设置小时时间
        TIME = newtime;
    }
    
    

    gethours()

    所占的位给清空,所以将时间右移11位,然后与上0x1F。

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

    提取设置的道理和小时的差不多,不同的在于占6bit,以及左移右移时,的移位不同。

    void SetMinutes(int minutes) 
    {
        int oldtime=TIME;
        int newtime;
        newtime=oldtime&~(0x3F<<5);
        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;
    
    
  • 相关阅读:
    安装python软件出错,解决办法
    vt100
    Navicat 字符集 排序规则设置
    linux 查看进程 ps aux | grep init
    一、网络编程-UDP传输协议及socket套接字使用
    二、飞机大战终极版-巩固面向对象设计项目的思想
    一、利用Python编写飞机大战游戏-面向对象设计思想
    八、递归编程技巧
    七、面向对象之单例设计模式
    六、面向对象之单继承、多继承、重写
  • 原文地址:https://www.cnblogs.com/fyhtvxq/p/8205698.html
Copyright © 2020-2023  润新知