8位PIC®单片机

各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。

PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。

在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。

一、PIC汇编语言指令格式

PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:

标号 操作码助记符 操作数1,操作数2;注释

指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。

1、标号 与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。

书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。

2、操作码助记符 该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。

3、操作数 由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。

指令的操作数项也是可选项。

PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。

4、注释 用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。

二、清零指令(共4条)

1、寄存器清零指令

实例:CLRW;寄存器W被清零

说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。

2、看门狗定时器清零指令。

实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

说明:WDT是英语Watchdog Timer的缩写字母。CLR见上述说明。注意该两条指令无操作数。

3、寄存器f清零指令。指令格式:CLRF f

实例:CLRF TMRO;对TMRO清零

说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00~Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。

4、位清零指令。指令格式 BCF f,b

实例:BCF REG1,2;把寄存器REG1的D2位清零

说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为0~7或D0~D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。

通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。

本文转载自:广电电器

围观 3
82

作者: Regine Monique Aurellano Microchip Technology Inc.

简介

串行外设接口(Serial Peripheral Interface,SPI)一直以来是PIC® MCU内核外设集的一部分。PIC18(L)F2X/4XK42单片机系列引入的最新特性之一是用于实现SPI功能的单独模块。以前的器件将SPI功能与其他串行通信协议集成,并在SPI共享寄存器和中断标志等资源的主同步串行端口(Master Synchronous Serial Port,MSSP)模块中实现。SPI的专用模块可显著改进SPI的传统功能并扩展新功能,从而提高灵活性并加强用户控制。

本技术简介旨在讨论SPI模块的实现、工作模式和其他有用的附加特性。

SPI模块概述

SPI(串行外设接口)模块具有可在全双工和半双工模式下工作的同步串行数据通信总线。器件在主/从环境下通信,在该环境下,由主器件发起通信。从器件由主器件通过从选择(Slave Select,SS)线控制。示例从器件包括串行EEPROM、移位寄存器、显示驱动器、模数转换器或其他PIC® MCU。

SPI模块支持以下模式和特性:

• 主模式
• 从模式
• 时钟极性和边沿选择
• 从选择同步
• 从器件的菊花链连接

以下是全新专用SPI模块特有的新特性:

• SDI、SDO和SS极性控制
• 独立的发送和接收使能
• 具有2字节FIFO和DMA功能的独立发送和接收缓冲区

如前文所述,SPI协议使用主从结构。如果器件配置为主器件,则它将提供并控制时钟信号。连接到主器件的所有从器件都由该主时钟控制,并且可能无法处理该时钟。当数据随时钟移出主器件或从器件时,时钟将同时驱动新数据。从选择(SS)信号控制主器件正在与哪个从器件通信,确保一次只有一个从器件工作。

无论器件的模式为主模式还是从模式,发送过程都涉及将位移入和移出寄存器。数据缓冲区寄存器用于发送和接收数据。数据通常一次移出一位,首先移出最高有效位(Most Significant bit,MSb)。较新的器件包含两个单独的寄存器,一个用于发送数据,另一个用于接收数据。主器件在编程的时钟边沿将数据移出发送寄存器和串行数据输出(Serial Data Out,SDO)引脚,在相反的时钟边沿将数据移入从器件的串行数据输入(Serial Data In,SDI)引脚和接收寄存器。图1给出了一个框图,说明了具有独立数据发送和接收缓冲区的器件中SPI系统的连接。

8位PIC®单片机上的串行外设接口(SPI)通信

注: 主器件和从器件应配置为相同的时钟极性设置。

要开始通信,主器件需发出时钟信号。在每个SPI时钟周期期间,发生数据发送。当主器件通过其SDO引脚发出数据、从器件通过其SDI引脚接收该数据时,从器件还会通过其SDO引脚将一些数据发送到主器件的SDI引脚。移出8位数据后,主器件和从器件应交换了寄存器值。如果有更多数据要交换,寄存器再次装入数据并重复此过程。只要主器件发送时钟信号,发送便可能涉及任意数量的时钟周期。没有更多要发送的数据时,主器件停止发送时钟信号,从器件的SS线禁用,从而取消选择从器件。

SPI模式入门

使能和禁止SPI模块

要使能串行端口,相应寄存器的EN位必须置1。将该位置1还可以使能SPI输入和输出:SDI、SDO、SCK和SS。所有这些输入和输出均可通过外设引脚选择(Peripheral Pin Select,PPS)进行控制,并且必须正确映射才能正常工作。清零EN位将中止正在进行的传输、不允许硬件将中断标志置1并复位读写FIFO指针。

校验是否存在正在进行的传输

用户可通过一些位校验是否有传输正在进行。用户可以轮询SPIxCON2寄存器的BUSY位来校验模块的状态,即所进行的数据传输是否完成。

发送和接收寄存器

对于用于发送和接收的数据,可通过具有SPI外设模块的较新器件的只写SPIxTXB和只读SPIxRXB寄存器进行访问。这些寄存器最多可包含两个字节的信息,并且可读取和写入指向下一个执行读取或写入操作的存储单元的指针。每次读取SPIxRXB都会使读指针递增,每次写入SPIxTXB都会使写指针递增。

LSb优先和MSb优先操作

SPI外设模块允许在LSb优先和MSb优先之间进行选择。SPIxCON0寄存器的LSBF位指定数据采用LSb优先还是MSb优先的方式移入或移出器件。该位在默认情况下清零,因此MSb为实际配置。

对于新的SPI模块,有3个位可控制串行端口的极性。SDIP、SDOP和SSP位分别控制SDI、SDO和SS信号的极性。对于全部3个位而言,当该位清零时,输入或输出为高电平有效;否则,输入或输出为低电平有效。

SPI工作模式

主模式

在主模式下,器件控制SCK线并启动数据传输。它还将确定哪个从器件可发送或接收数据。新的独立SPI模块提供了主模式的4种配置,即:
• 全双工(传统)模式
• 仅接收模式
• 仅发送模式
• 传输关闭模式

该模式可由TXR和RXR位配置。表1说明了RXR/TXR位的各个配置对应于哪种模式。

• 全双工(传统)模式(RXR|TXR = 11)
在该模式下,只要接收(RX)寄存器未满并且发送(TX)寄存器中存在数据,就会发生数据传输。实际上,只要接收寄存器为空(即已读取其最新的内容),即会在数据写入发送寄存器后立即发送/接收数据。如果BMODE = 0,则BMODE位也应被视为数据传输可能取决于传输计数器。将BMODE位设置为等于1可完全匹配传统设置。

8位PIC®单片机上的串行外设接口(SPI)通信

• 仅接收模式(RXR|TXR = 10)
在该模式下,如果RX寄存器未满并且传输计数器非零,则将发生数据传输。传输计数器用于控制在数据交换停止之前将发生多少次数据传输。如果TX寄存器中有任何数据,则将发送并且会重复发送该数据。如果TX寄存器中没有数据,则会发送最新接收到的数据。

• 仅发送模式(RXR|TXR = 01)
在该模式下,每当TX寄存器非空(如果BMODE= 1)或传输计数器非零(如果BMODE = 0)时,便会发生数据传输。接收到的任何数据都不会存储在RX寄存器中。当BMODE = 0时,传输计数器还必须在传输之前写入,当传输计数器达到零时,传输将停止。

• 传输关闭模式(RXR|TXR = 00)
在该模式下,SCK将不会翻转,也不会交换数据。

对于SPI外设模块,主模式还提供用于控制从选择引脚的用户选项。用户可以通过SPIxCON2寄存器的SSET位使硬件控制从选择输出,当传输计数器非零时,可选择使其始终保持有效或被驱动为有效状态。对于硬件控制,确保通过外设引脚选择分配选定的SS引脚。从选择功能也可由软件通过任何通用I/O引脚进行控制,只需确保该引脚是配置为输出的GPIO引脚。

SPI主模式的时钟输出可以从以下方式获得,通过配置SPIxCLK寄存器进行设置(有关详细配置信息,请参见数据手册):
• FOSC
• HFINTOSC
• CLKREF
• Timer0
• Timer2/4/6
• SMT

SPIxBAUD寄存器允许对该时钟进行分频。SCK输出的频率由下面的公式1定义。

8位PIC®单片机上的串行外设接口(SPI)通信

对于SPI 数据采样和时钟模式,SDI 的采样由CKE 和SMP位控制,SCK行为由CKP和CKE位控制。

新的SPI模块还在SCK生成时引入了一些同步延时,以确保SS输出正确定时。默认情况下,SPI模块在第一个SCK脉冲之前插入一个1/2波特的延时,以使主从硬件的时间彼此同步。

从模式

在SPI协议中,主器件控制发送和接收数据所使用的时钟信号,从选择引脚用于同步通信。SS线保持其无效状态,直到主器件准备好进行通信。当SS线激活时,从器件即获知主器件的新传输将开始。如果从器件未接收到通信,接收器逻辑将在发送结束时复位,此时SS线返回其无效状态。

在新的SPI模块中,TXR和RXR位控制数据传输的方式。

• 当TXR置1时,将发送TX寄存器的数据,写FIFO指针递增。如果TX寄存器为空,则将发送最新接收到的数据,发送下溢(TXUIF)中断标志位置1,以指示发生此类错误。

• 当 TXR 清零时,将发送 TX 寄存器中的数据(如果可用),但写FIFO指针不会递增。如果TX寄存器为空,则将发送最新接收到的数据,但TXUIF中断将不会置1。

• 当RXR置1时,如果RX寄存器未满,则数据将存储到该寄存器中,读FIFO指针递增。如果接收到数据并且RX寄存器已满,则接收上溢(RXOIF)中断标志位将置1以指示错误,接收到的数据将被丢弃。

• 当RXR清零时,所有接收到的数据将被忽略,不会存储到RX寄存器中。

如果SS线在数据传输过程中转换到无效状态,则SPIxCON2寄存器中的从选择故障(SSFLT)位置1。SPIxCON1寄存器的SSP位控制从选择极性。当SSP位置1时,SS线为低电平有效。相反,当SSP位清零时,SS线为高电平有效。

对于从模式下的SCK 设置,SCK 引脚必须始终为输入,并配置为与主器件相同的时钟极性和边沿。与主模式类似,时钟极性由CKP位控制,时钟沿由CKE位设置,这两个位均位于SPIxCON1寄存器中。

新特性:传输计数器

在主模式下,传输计数器用于确定事务终止前SPI将发送/接收的数据传输数。传输计数器为10位宽,可通过SPIxTCTH/L寄存器对访问。在主模式下,传输计数器可以在两种模式下工作,具体由SPIxCON0寄存器的BMODE位决定。在下面要讨论的两种模式中,当传输计数器达到零时,传输计数器为零中断标志(TCZIF)将置1。

总位计数模式(BMODE = 0)

• 在该模式下,将结合SPIxTCTH/L和SPIxTWIDTH寄存器的值组合来确定要传输的总位数。发送或接收每个字节时,传输计数器均减少8,直到剩余的总数小于8。如果有任何剩余的位,TX寄存器将发出最后一个字节,其中超过剩余位的任何位都将被忽略。类似地,如果有待接收的剩余位,RX寄存器将装入包含这些剩余位的最后一个字节,并用0填充未使用的位。SPIxCON0的LSBF位决定MSb还是LSb用0填充。在该模式下,SPIxWIDTH设置仅适用于交换的最后一个字节。请注意,在该模式下,即使SS引脚由软件控制,SPIxTCNT寄存器也必须始终为非零值。

可变传输大小模式(BMODE = 1)

• 在该模式下,SPIxTWIDTH寄存器确定每次数据传输的位长。SPIxTCTH/L寄存器对指定该长度的传输的次数。如果SPIxTWIDTH = 0,每次数据传输均为一个字节宽。否则,只有指定的位数移入TX寄存器,未使用的位将被忽略。接收到的数据在未使用的区域用0 填充,然后装入RX 寄存器。

SPIxCON0的LSBF位决定MSb还是LSb用0填充。在该模式下,SPIxWIDTH设置适用于发送的每个字节。请注意,在该模式下,当SS引脚由软件控制时,SPIxTCNT寄存器无需为非零值。

在从模式下,传输计数器仍递减,但不控制数据传输。传输计数器与BMODE位一起使用时,可供从器件用来确定何时应寻找从选择故障。如果BMODE = 1,则在发送每次单独传输的最后一位之前,如果SS线转换到无效状态,SSFLT 位将置1。如果BMODE = 0,则当SS线在数据字节之间发生转换时,SSFLT位将置1。如果SS 线在消息最后一个字节的位之间发生转换,则SSFLT位也将置1。此外,SSFLT位对于初次使用的用户而言更易于想象。

SPI在休眠模式下的工作

在SPI外设模块中,如果源时钟在休眠模式下有效,则SPI主模式可在休眠状态下工作。有关休眠模式下有效的时钟列表,请参见数据手册。所有中断仍将触发,并可将器件从休眠状态唤醒。从模式仍可工作,因为时钟由外部主器件提供。中断仍会触发并可将器件从休眠状态唤醒。

SPI中断

SPI模块可在几种不同的条件下触发中断。这些中断标志位和允许位位于PIRx/PIEx特殊寄存器中。

下面是适用于SPI外设模块的新中断:

• SPI接收器数据中断(SPIxRIF/SPIxRIE)
SPI接收器数据中断在RX寄存器包含数据时置1,在RX寄存器清零时清零。该中断可实现完全由中断驱动的操作,并且兼容DMA。

• SPI发送器数据中断(SPIxTIF/SPIxTIE)
SPI发送器数据中断在TX寄存器未满时置1,在TX寄存器已满时清零。与接收器数据中断一样,它可实现完全由中断驱动的操作,并且也兼容DMA。

• 移位寄存器空中断(SRMTIF/SRMTIE)
移位寄存器空中断仅在主模式下可用,并且在数据传输完成但新传输未准备就绪时置1。

• 传输计数器为零中断(TCZIF/TCZIE)
传输计数器为零中断在传输计数器达到0时置1。该位也必须用软件清零。

• 从选择开始和从选择结束中断(SOSIF/SOSIE和EOSIF/EOSIE)
这些中断在SS输入的前沿和后沿触发,可在主模式和从模式下使用。不过,应注意的是,在主模式下,应使用PPS将SS输入连接到与SS输出相同的引脚,以便在SS线发生转换时触发这些中断。

• 接收器上溢和发送器下溢中断(RXOIF/RXOIE和TXUIF/TXUIE)
当有待接收的数据但RX寄存器已满且RXR位置1时,接收器上溢中断触发。类似地,当没有要发送的数据但TXR位置1时,发送器下溢中断触发。

这些条件仅在从模式下出现,必须由软件通过清零各个标志位或清零SPIxCON0的EN位的方式清零。

结论

由于专用协议的普及和广泛应用,SPI外设成为所有PIC® MCU器件的主要部分。PIC MCU中包含的SPI外设能够支持SPI系统可能需要的所有功能。本技术简介讨论了SPI模块的不同模式,并简要介绍了每个角色(无论是主器件还是从器件)和模式的设置以及每个设置的数据传输方式。本技术简介还概述了仅针对专用SPI模块提供的全新传输计数器功能,还讨论了可在发生与SPI活动相关的特定事件时触发的中断,这将极大地帮助理解文档中提到的事件。这些特性证明了PIC®MCU器件已成为可靠且强大的平台,适合使用SPI协议的任何应用。

8位PIC®单片机上的串行外设接口(SPI)通信
围观 23
615

页面

订阅 RSS - 8位PIC®单片机