解释单片机中断系统这一章节的程序顺序问题

img


可以解释一下这个的运行过程是什么嘛?有点看不懂整个运行的过程~

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/738964
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【单片机原理及其应用】第五章定时器的介绍和习题分析
  • 除此之外, 这篇博客: 第七章 算术操作指令的实现中的 对任一指令而言,译码工作的主要内容是:确定要读取的寄存器情况、要执行的运算、要写入的目的寄存器等三个方面的信息。下面对其中几个典型指令的译码过程进行解释。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. add指令的译码过程
      add指令译码需要设置的三方面内容如下(addu、sub、subu指令的译码过程可以参考add指令)
      (1)要读取的寄存器情况:add指令需要读取rs、rt寄存器的值,所以设置reg1_read_o、reg2_read_o为1.默认通过regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是add指令中的rs,默认通过regfile模块读端口2读取的寄存器地址reg2_addr_o的值是指令的第16-20bit,正是add指令中的rt所以最终译码阶段的输出reg1_o就是地址为rs的寄存器的值,reg2_o就是地址为rt的寄存器的值。
      (2)要执行的运算:add指令是算数运算中的加法操作,所以此处将alusel_o赋值为EXE_RES_ARITHMETIC,aluop_o赋值给EXE_ADD_OP
      (3)要写入的目的寄存器:add指令需要将结果写入目的寄存器,所以设置wreg_o为WriteEnable,设置wd_o为要写入的目的寄存器地址,默认是指令字的第11-15bit ,正是add指令中的rd。

    2. addi指令的译码过程
      addi指令译码需要设置的三方面内容如下(addiu、subi、subiu指令的译码过程可以参考addi指令)
      (1)要读取的寄存器情况:addi只需要读取rs寄存器的值,所以设置reg1_read_o为1、reg2_read_o为0.默认通过regfile模块读端口1读取的寄存器地址reg1_addr_o的值是指令的第21-25bit,正是addi指令中的rs。设置reg2_read_o为0,表示使用立即数作为参与运算的第二个操作数。imm就是指令中的立即数进行符号拓展后的值。所以最终译码阶段的输出reg1_o就是地址为rs的寄存器的值,reg2_o就是imm的值。
      (2)要执行的运算:addi指令是算术运算中的加法操作,所以此处将alusel_o赋值为EXE_RES_ARITHMETIC,aluop_o赋值为EXE_ADDI_OP。
      (3)要写入的目的寄存器:addi指令需要将结果写入目的寄存器,所以设置wreg_o为WriteEnable,设置要写入的目的寄存器地址wd_o是指令中第16-20bit的值,正是addi指令中的rt。

    3. slt指令的译码过程
      slt指令的译码需要设置三方面内容如下(sltu指令的译码过程可以参考slt指令)
      在这里插入图片描述

    4. slti指令的译码过程
      在这里插入图片描述

    5. mult指令的译码过程
      在这里插入图片描述

    6. mul指令的译码过程
      在这里插入图片描述

    7. clo指令的译码过程
      在这里插入图片描述

  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 详细设计是架构设计的延续小节, 巩固相关知识点

程序用R0计中断次数,并取显示码到p1口进行显示,计次到15即满,停止计数