把学单片机过程中遇到的问题与大家分享

2019-04-15 15:48发布

转载 标签:

单片机

常见问题

指令

cpu结构

伪指令

分类: 单片机 一.单片机有4位、8位、16位、32位以及64位现在,请问的是在8位,16位,32位等等是什么意思? 答: CPU内部总线的位数就是单片机的位数。这里的位也就是指单片机中CPU处理的数据的位数(一次处理信息的长度)。比如:51单机  属于8位机,就是CPU处理的数据是8位的。位数的高低体现了CPU处理能力的强弱。单片机总线位数越高,CPU一次能处理的数据量也就越大、处理速度也就越快。同样的主频下(即主频率),8位机只能处理8位信息长度,而16位机则可处理16为信息长度,处理能力当然更强速度更快了。
二.CPU经常挂在嘴边,但是cpu到底是什么?有什么部件组成? 答: CPU是单片机的核心部件,由运算器、控制器和布尔处理器等组成。其功能是产生控制信号,把数据从存储器或输入口传送CPU或反向传送,还可以对输入数据进行算术、逻辑运算以及位操作处理。其中,运算器由算术逻辑单元ALUArithmetic Logic Unit)、累加器ACC(Accumalator)、暂存寄存器、程序状态字存储器PSW(Program Status Word)、布尔处理器和BCD码运算调整电路等电路构成。控制器包括定时控制逻辑(时钟电路、复位电路)、指令寄存器、指令译码器、程序计数器PC、堆栈指针SP、数据指针寄存器DPTR以及信息传送控制部件等。   三.单片机的指令把我搞的稀里糊涂,能不能用一个例子告诉我单片机执行指令的过程? 答: 指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。 取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。 分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操 作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。
一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器, 然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因 而一开机即可执行指令。 下面我们将举个实例来说明指令的执行过程: 开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际 上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。 例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器, 0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是

1 程序计数器的内容(这时是0000H)送到地址寄存器;
2 程序计数器的内容自动加1(变为0001H); 3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H 的单元被选中; 4 CPU使读控制线有效; 5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所 以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。

    由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一
个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存 储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H 。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要 求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此 ,一条指令的执行完毕。单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进 入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一 条地执行指令,完成所有规定的功能。 希望对你有启发。   四.什么是伪指令? 答:伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序(机器码),它只是用来对汇编过程进行某种控制。标准的MCS—5l汇编程序(如Intel的ASM51)定义的伪指令常用的有以下几条:(1)  ORG
    汇编起始命令    格式:      ORG     16位地址
      其功能是规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址,
    例如:             ORG  2000H   
          START:  MOV  A,#64H
    既规定了标号START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。
    ORG可以多次出现在程序的任何地方,当它出现时,下一条指令的地址就由此重新定位。
(2)  END  ——汇编结束命令   
    END命令通知汇编程序结束汇编。在END之后所有的汇编语言指令均不予以处理。 
(3)  EQU  赋值命令   
   格式:    字符名称    EQU    项(数或汇编符号)    EQU命令是把“项”赋给“字符名称”,注意这里的字符名称不等于标号(其后没有冒号),其中的项,可以是数也可以是汇编符号。
    用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。因此,它可以是8位的、也可以是16位的。如:
   AA    EQU  R1    ;AA就代表了工作寄存器Rl
  MOV  A,  AA  ;
(4)  DATA  数据地址赋值命令
     格式:    字符名称  DATA  表达式
(5)  DB    定义字节命令   
     格式:    DB〔项或项表]
(6)  DW  定义字命令 
  格式:    DW  16位数据项或项表
(7)  DS  定义存储空间命令   
  格式:  DS表达式
(8)  BIT  位地址符号命令   
  格式:  字符名  BIT  位地址
五.什么是寻址?又什么是寻址方式?
答:寻址就是寻找指令中操作数或操作数所在地址。
寻址方式就是如何找到存放操作数的地址
   也就是把操作数提取出来的方法,要十分熟悉,牢固掌握。 
  六.通过TCON可以选择中断触发方式,那么低电平触发和跳变触发有什么不同呢? 解释一:电平触发即51单片机每执行完一个指令都将INT0/INT1的信号读入IE0/IE1。因此IE0/IE1的中断请求信号随着INT0/INT1变化。如果送入INT0/INT1的中断请求信号时,51单片机未能及时检查到,而INT0/INT1的信号也随着变化,IE0/IE1的信号也发生变化,这样就会漏掉INT0/INT1的中断要求。 解释二:下降沿触发只要检测到送至INT0/INT1上的信号由高电平变为低电平时,中断请求标志位IE0/IE1就被设定为1,并且一直维持着1,直到此中断请求被接收为止,且必须用软件来清除IE0/IE1。 所以一般设置为跳变触发,除非有特殊需要。