一个8位MCU学习(基于PIC16F72X)

Posted xm-9466

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个8位MCU学习(基于PIC16F72X)相关的知识,希望对你有一定的参考价值。

  首先,这个8位MCU的指令集是基于PIC16,不过省去了SLEEP。因此,可以使用MPLAB来实现编译,通过软硬件协同测试来进行验证。

  这是一个基于嵌入式的指令集,相对于传统的取址,译码,执行,访存和写回的五级流水操作,只有取址,译码,执行和写回这四步。它主要的指令格式有三种,分别是针对字节的文件寄存器操作,针对位的文件寄存器操作以及立即数和控制操作,其中,指令一共有35条(包含NOP,CLRWDT,SLEEP)。下图是指令的通用格式:

  技术分享图片

 

  大部分指令可以在一个指令周期内完成,除非条件测试指令或指令执行改变PC值,这种情况需要两个指令周期,并且第二个指令是NOP。

  在自己设计的PIC内核中,主要分为IAU(取址),IRU(译码),EU(执行),STATUS(状态寄存器)以及STK_CTRL(堆栈和读写REG控制)。本内核采用的是八个硬核堆栈,并且将取址译码放在同一级流水,执行写回在第二级流水。在两级流水中,分别有对数据存储器的读写操作,由于可能出现连续两条指令出现,对同一个寄存器出现先写后读的操作,会导致出现数据冒险。因此,对于这种情况,在硬件上设置了旁路,可以直接将执行输出值,送到下一级的操作数上。

  由于我们的数据存储器是单口RAM,并且由于流水线操作,所以存在在同一时钟周期,对数据存储器进行读写操作。因此,我们将数据存储器的时钟设置为指令执行时钟的2倍,从而避免了结构冒险。最后对于控制冒险,分支跳转指令则是通过插入NOP来实现的。

 

以上是关于一个8位MCU学习(基于PIC16F72X)的主要内容,如果未能解决你的问题,请参考以下文章

pic16f877单片机TMR0的使用

PIC16F877XA指令系统(汇编语言)

应用PIC16F1938中IIC读取LM75A温度

与 Pic 16F913 通信

PIC16F193X单片机开发环境搭建

带有 XC8 v1.43 的 PIC16F1717,可用于键盘按键