• 补做课上实践题目


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

    题目

    • 以课上的小时为例:
    • 需要设置小时,首先需要将原来的小时清除,原来的小时有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;
    
  • 相关阅读:
    Brunch with a Friend 与朋友共进午餐
    Linux使用tcpdump抓取网络数据包示例
    Linux LVM逻辑卷配置过程详解
    Linux不停往外发包
    jumpserver遇到的坑
    Python3.5 使用Sqlite3
    git rebase小计(转)
    pip3 更改安装源
    jquery ajax(3).post
    jquery ajax (2)实例 .GET
  • 原文地址:https://www.cnblogs.com/lhyhahaha/p/8213510.html
Copyright © 2020-2023  润新知