zoukankan      html  css  js  c++  java
  • 20155228 2018-01-03 课堂测试:嵌入式基础

    20155228 2018-01-03 课堂测试:嵌入式基础

    题目和要求

    1. 在作业本上完成附图作业,要认真看题目要求。
    2. 提交作业截图
    3. 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

    分析和设计

    根据题意设置基地址和存放时间的寄存器的地址

    #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;
    
  • 相关阅读:
    Luogu P1396 营救
    Luogu P1339 热浪Heat Wave
    哈夫曼树学习笔记
    题解 CF1372C
    题解 CF 1372 B
    题解 CF 1372A
    题解 UVA1193 Radar Installation
    题解 洛谷 P2287 [USACO07NOV]Sunscreen G
    洛谷 P1080 国王游戏 题解
    牛客练习赛 66C公因子 题解
  • 原文地址:https://www.cnblogs.com/besti20155228/p/8196670.html
Copyright © 2011-2022 走看看