补做课上实践题目

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

题目

  • 以课上的小时为例:
  • 需要设置小时,首先需要将原来的小时清除,原来的小时有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;

原文地址:https://www.cnblogs.com/lhyhahaha/p/8213510.html

时间: 2024-10-07 17:58:38

补做课上实践题目的相关文章

2017-2018-1 《信息安全系统设计基础》 20155322 十六周课上实践

2017-2018-1 <信息安全系统设计基础> 20155322 十六周 课上实践 题目 原理 实现 小时设置及提取 #define TIME_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000 #define TIME *(volatile int *) (TIME_Addr+2) //时间存放在基址+2的寄存器中 void SetHours(int hours) { int oldtime = TIME; int newtime = oldtime &

第四周课上实践验收

目录 任务一:基于winpcap的网络嗅探工具的实现 1 实践原理介绍 2 实践环境搭建 3 实现过程 4 实验截图 任务二:嗅探登录网站的账号和密码 任务三:抓取手机App登录过程数据包 实践思考 参考资料 任务一:基于winpcap的网络嗅探工具的实现 1 实践原理介绍 Windows用户态中的winpcap与Unix中的libpcap库相兼容,使用winpcap库实现网络嗅探工具的原理与Unix下使用libpcap非常的类似,具体的实现技术如下图: 根据上面的技术图可知嗅探器的实现基本的流

20165315 第二次考试课下补做

20165315 第二次考试课下补做 课上内容的补做,结果截图 参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值, 提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java Sumo

20165212任胤第四周课上作业补做

20165212任胤 第四周课上测试补做 题目:jdb调试递归循环程序 程序代码: import java.util.Arrays; public class B { public static void main(String [] args) { if(args.length < 1){ System.out.println("Usage: java CLSumRecursion num1 num2 ..."); System.exit(0); } int m = Integ

20165204Java第四周课上补做

20165204Java第四周课上补做 反省 课下没有认真理解JDB的具体使用过程,只是在按着老师的博客一步一步进行,而没有真正搞懂这些命令行的作用是什么. 在运行在命令行中赋值的程序时没有搞懂,绕了很多弯路. 在进入方法之后,只是使用了step在一步一步地向前推进,而并未使用next,浪费了非常多的时间. 总体来说还是自己课下练习的不认真,导致了课上的不熟练,进而没有完成课上任务. 补做截图 原文地址:https://www.cnblogs.com/jph596299009/p/8643093

20165328课上补做

一.相关知识点总结: 顺序查询:即指ResultSrt对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行前面.next()方法向下移动游标,移动成功返回ture,否则返回false. 条件与排序查询: 一般格式: select 字段 form 表名 while 条件 (1)字段值和固定值比较,例如: selet name,height form mess where name="李四" (2)字段值在某个区间范围,例

20165337岳源第十周课上补做

课上补做-2 要求:针对下面的Student类,使用Comparator编程完成以下功能: 在测试类StudentTest中新建学生列表,包括自己和学号前后各两名学生,共5名学生,给出运行结果(排序前,排序后) 对这5名同学分别用学号和总成绩进行增序排序,提交两个Comparator的代码 课下提交代码到码云 import java.util.Comparator; public class IDComparator implements Comparator { @Override publi

第八周课上内容补做

第八周课上内容补做 1. 通过输入gcc -S -o main.s main.c 将下面c程序"week04学号.c"编译成汇编代码 int g(int x){ return x+3; } int f(int x){ int i = 学号后两位: return g(x)+i; } int main(void){ return f(8)+1; } 删除汇编代码中 . 开头的代码,提交f 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码. 结合C函数调用机制及栈帧指针中的实例,

20165328 第十二周课上补做

一.补做截图: 在上课时的代码检查p300时,我的idea出现了jdk配置错误的问题,我努力了十几分钟依然没有解决,后来使用虚拟机完成了代码运行要求,但规定的20分钟时间已过,特此补上虚拟机运行截图: 原文地址:https://www.cnblogs.com/dky20165328/p/9063523.html