PIC16程序设计及应用

上传人:门**** 文档编号:70775794 上传时间:2022-04-06 格式:DOC 页数:65 大小:912KB
收藏 版权申诉 举报 下载
PIC16程序设计及应用_第1页
第1页 / 共65页
PIC16程序设计及应用_第2页
第2页 / 共65页
PIC16程序设计及应用_第3页
第3页 / 共65页
资源描述:

《PIC16程序设计及应用》由会员分享,可在线阅读,更多相关《PIC16程序设计及应用(65页珍藏版)》请在装配图网上搜索。

1、PIC系列单片机应用 kypinePIC16程序设计及应用编写:孔 勇第二版2008年12月2日成都目录1PIC单片机简介32PIC单片机组成原理621基本组成622振荡器配置方法623 PIC单片机的电源和时钟724常用PIC系列芯片引脚功能825 PIC单片机16F8X系列简介926 PIC系列单片机数据存储器的特点和功能103PIC单片机汇编语言常用指令1331 PIC汇编语言指令格式1332清零指令1433面向字节常数与控制操作的指令154PIC单片机汇编设计1841程序的基本格式1942程序设计基础205PIC单片机C语言设计2751 PIC 单片机 C 语言编程简介2752 Hit

2、ech-PICC 编译器2753 MPLAB-IDE 内挂接 PICC2854 PIC 单片机的 C 语言原程序基本框架2955 PICC 中的变量定义3056 PICC 中的子程序和函数3657 PICC 定义特殊区域值3858 MPLAB-IDE 中实现 PICC 的编译选项设置3959 C 和汇编混合编程446PIC应用设计4961 PIC单片机开发的常见问题4962 PIC16F73逆变器541PIC单片机简介1、引言据统计,我国的单片机年容量已达13亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机

3、应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。同时,这种单片机指令多为单字节,程序存储器的空

4、间利用率大大提高,有利于实现超小型化。属于CISC结构的单片机有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)W78系列、荷兰Pilips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通讯产品、工业控制系统应采用CISC单片机。不过,RISC单片机的迅速完善,使其佼佼者在控制关系复杂的场合也毫不

5、逊色。根据程序存储方式的不同,单片机可分为EPROM、OTP(一次可编程)、QTP(掩膜)三种。我国一开始都采用ROMless型单片机(片内无ROM,需片外配EPROM),对单片机的普及起了很大作用,但这种强调接口的单片机无法广泛应用,甚至走入了误区。如单片机的应用一味强调接口,外接I/O及存储器,便失去了单片机的特色。目前单片机大都将程序存储体置于其内,给应用带来了极大的方便。值得一提的是,以往OTP型单片机的价格是QTP的3倍,而现在已降至1.51.2倍,选用OTP型以免订货周期、批量的麻烦是可取的。2、PIC系列单片机有什么优势自从我95年接触PIC单片机以来,便一直热衷于这种单片机的开

6、发与应用。有不少朋友问我:PIC到底有什么优势?也许你也会有这样的疑问,所以我在这里略谈几点自己的看法。1) PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界上最小的单片机,如下图所示:该型号有512字节ROM、25

7、字节RAM、一个8位定时器、一根输入线、5根I/O线,市面售价在36元人民币。这样一款单片机在象摩托车点火器这样的应用无疑是非常适合。PIC的高档型号,如PIC16C74(尚不是最高档型号)有40个引脚,其内部资源为ROM共4K、192字节RAM、8路A/D、3个8位定时器、2个CCP模块、三个串行口、1个并行口、11个中断源、33个I/O脚。这样一个型号可以和其它品牌的高档型号媲美。2) 精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与

8、传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。3) 产品上市零等待(Zero time to market)。采用PIC的低价OTP型芯片,可使单片机在其应用程序开发完成后立刻使该产品上市。4) PIC有优越开发环境。OTP单片机开发系统的实时性是一个重要的指标,象普通51单片机的开发系统大都采用高档型号仿真低档型号,其实时性不尽理想。PIC在推出一款新型号的同时推出相应的仿真芯片,所有的开发系统由专用的仿真芯片支持,实时性非常好。就我个人的经验看,还没有出现过仿真结果与实际运行结果不同的情况。5) 其引脚具有防瞬态能力,通过限流电阻可以接至220V交流电源,

9、可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。6) 彻底的保密性。PIC以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,别人再也无法读出,除非恢复熔丝。目前,PIC采用熔丝深埋工艺,恢复熔丝的可能性极小。7) 自带看门狗定时器,可以用来提高程序运行的可靠性。8) 睡眠和低功耗模式。虽然PIC在这方面已不能与新型的TIMSP430相比,但在大多数应用场合还是能满足需要的。3、分类和特点由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机产业的新趋势。现

10、在PIC系列单片机在世界单片机市场的份额排名中已逐年升位,尤其在8位单片机市场,据称已从1990年的第20位上升到目前的第二位。PIC单片机从覆盖市场出发,已有三种(又称三层次)系列多种型号的产品问世,所以在全球都可以看到PIC单片机从电脑的外设、家电控制、电讯通信、智能仪器、汽车电子到金融电子各个领域的广泛应用。现今的PIC单片机已经是世界上最有影响力的嵌入式微控制器之一。PIC 8位单片机产品共有三个系列,即基本级、中级和高级。1)基本级系列:该级产品的特点是低价位,如PIC16C5X,适用于各种对成本要求严格的家电产品选用。又如PIC12C5XX是世界第一个8脚的低价位单片机,因其体积很

11、小,完全可以应用在以前不能使用单片机的家电产品的空间。2)中级系列:该级产品是PIC最丰富的品种系列。它是在基本级产品上进行了改进,并保持了很高的兼容性。外部结构也是多种的,从8引脚到68引脚的各种封装,如PIC12C6XX。该级产品其性能很高,如内部带有A/D变换器、E2PROM数据存储器、比较器输出、PWM输出、I2C和SPI等接口。PIC中级系列产品适用于各种高、中和低档的电子产品的设计中。3)高级系列:该系列产品如PIC17CXX,其特点是速度快,所以适用于高速数字运算的应用场合中,加之它具备一个指令周期内(160ns)可以完成88(位)二进制乘法运算能力,所以可取代某些DSP产品。再

12、有PIC17CXX具有丰富的I/O控制功能,并可外接扩展EPROM和RAM,使它成为目前8位单片机中性能最高的机种之一。所以很适用于高、中档的电子设备中使用。上述的三层次(级)的PIC 8位单片机还具有很高的代码兼容性,用户很容易将代码从某型号转换到另一个型号中。4、PIC 8位单片机结构特点PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。1)双总线结构具有CISC结构的单片机均在同一存储空间取指令和数据,

13、片内只有一种总线。这种总线既要传送指令又要传送数据(如图1a所示)。因此,它不可能同时对程序存储器和数据存储器进行访问。因与CPU直接相连的总线只有一种,要求数据和指令同时通过,显然“乱套”,这正如一个“瓶颈”,瓶内的数据和指令要一起倒出来,往往就被瓶颈卡住了。所以具有这种结构的单片机,只能先取出指令,再执行指令(在此过程中往往要取数),然后,待这条指令执行完毕,再取出另一条指令,继续执行下一条。这种结构通常称为冯诺依曼结构,又称普林斯顿结构。在这里PIC系列单片机采用了一种双总线结构,即所谓哈佛结构。这种结构有两种总线,即程序总线和数据总线。这两种总线可以采用不同的字长,如PIC系列单片机是

14、八位机,所以其数据总线当然是八位。但低档、中档和高档的PIC系列机分别有12位、14位和16位的指令总线。这样,取指令时则经指令总线,取数据时则经数据总线,互不冲突。这种结构如图1b所示。指令总线为什么不用八位,而要增加位数呢?这是因为指令的位数多,则每条指令包含的信息量就大,这种指令的功能就强。一条12位、14位或16位的指令可能会具有两条八位指令的功能。因此PIC系列单片机的指令与CISC结构的单片机指令相比,前者的指令总数要少得多(即RISC指令集)。2)两级指令流水线结构由于PIC系列单片机采用了指令空间和数据空间分开的哈佛结构,用了两种位数不同的总线。因此,取指令和取数据有可能同时交

15、叠进行,所以在PIC系列微控制器中取指令和执行指令就采用指令流水线结构(如图2所示)。当第一条指令被取出后,随即进入执行阶段,这时可能会从某寄存器取数而送至另一寄存器,或从一端口向寄存器传送数等,但数据不会流经程序总线,而只是在数据总线中流动,因此,在这段时间内,程序总线有空,可以同时取出第二条指令。当第一条指令执行完毕,就可执行第二条指令,同时取出第3条指令,如此等等。这样,除了第一条指令的取出,其余各条指令的执行和下一条指令的取出是同时进行的,使得在每个时钟周期可以获得最高效率。在大多数微控制器中,取指令和指令执行都是顺序进行的,但在PIC单片机指令流水线结构中,取指令和执行指令在时间上是

16、相互重叠的,所以PIC系列单片机才可能实现单周期指令。只有涉及到改变程序计数器PC值的程序分支指令(例如GOTO、CALL)等才需要两个周期。此外,PIC的结构特点还体现在寄存器组上,如寄存器I/O口、定时器和程序寄存器等都是采用了RAM结构形式,而且都只需要一个周期就可以完成访问和操作。而其它单片机常需要两个或两个以上的周期才能改变寄存器的内容。上述各项,就是PIC系列单片机能做到指令总数少,且大都为单周期指令的重要原因。2PIC单片机组成原理21基本组成PIC系列8位单片机为适应各种不同的用途,有多种型号可供选用。但是,尽管PIC单片机有不同的档次和型号,但其最基本的组成则大同小异。因此,

17、在这里先从型号PIC16F84的单片机入手,讨论其基本组成。现为Microchip公司的独家产品。PIC16F84虽然体积不大,但仍然是一个完整的计算机,它有一个中央处理器(CPU)、程序存储器(ROM)、数据寄存器(RAM)和两个输入/输出口(I/O口)。和其它品种的单片机一样,CPU是此单片机的“首脑”,它从程序存储器中读取和执行指令。在取指和执行时,还可同时对数据寄存器进行取数(前已介绍PIC16F84采用哈佛结构)。程序存储器和数据存储器各有一条总线与CPU相连。有些CPU将CPU内部的寄存器与其外部的RAM是分开管理的,但PIC单片机不是这样,它的通用数据RAM也归为寄存器,称为Fi

18、le寄存器。在PIC16F84中,有68个字节的通用RAM,其地址为0CH4FH。除了通用数据寄存器外,还有一些专用寄存器,其中最常用的工作寄存器为“W寄存器”。CPU将工作数据存放在W寄存器中。寄存器W的作用与其它单片机中的“累加器A”相似。此外,还有几个专用寄存器,它们分别以某种方式控制PIC的运作。PIC16F84的程序存储器是由Flash(闪速)EPROM构成,它可用电来记录和擦除,而在断电时,仍可保留其内容。PIC单片机有些型号的程序存储器用的是EPROM,需要用紫外线来擦除;还有一些型号是一次性可编程(OTP)的产品(一经编程便不能再擦除)。PIC16F84有两个输入/输出口,即A

19、口和B口。每个口的每个引脚可单独设定为输入或输出。各个口的位是从0开始编号的。当A口为输出方式时,其第4位(即RA4)为开路集电极(或开路漏极)输出,而B口及A口其它各位为常规的全CMOS驱动电路。这些功能必须注意,否则会在编程时出错。CPU对每个端口都按一个字节8位来处理,但A口只有5位引脚。PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。PIC16F84还有一些其它功能,如用来长期存放数据的EEPROM、定时器/计数器模块等,这里也暂不讨论。22振荡器配置方法PIC系列单片机可工作于不同的振荡器

20、方式。用户可以根据其系统设计的需要,选择下述四种振荡方式中的一种,其振荡的频率范围在DC20/25MHz之间。用户可以根据不同的应用场合,从四种振荡方式中选择一种(使用PIC编程器时也需作这种选择的操作),以获得最佳的性能价格比。其中,LP振荡器方式可以降低系统功耗,RC振荡器方式可节省成本。建立PIC源程序时,其振荡器方式由配置寄存器CONFIG的D1位和D0位来决定。1、内部晶体振荡器/陶瓷振荡器在LP、XT和HS这三种方式下,需要在微控制器引脚OSC1/CLKIN和OSC2/CLKOUT的两端接一石英晶体或陶瓷谐振器。如图1中,只 有在HS方式下才需要在振荡回路中加入电阻Rs(100Rs

21、1k)。2、外部时钟源或外部晶体振荡器在LP、XT和HS这三种振荡器方式下,各种PIC系列微控制器芯片既可以用集成在内部的振荡器,也可以接受外部输入的时钟源或外接晶体振荡器。若用外部时钟源或外接晶体振荡器,可把外部振荡器输出接芯片的OSC1/CLKIN引脚,此时OSC2/CLKOUT引脚开路即可。图2是外接时钟源的形式,外部晶体独立的振荡器与图2相似。3、外部RC振荡器RC振荡器主要应用于对时间精度要求不太高的场合。RC振荡器是在OSC1/CLKIN引脚接一串联电阻电容,如图3所示。厂家推荐电阻Rext取值在5k100k之间。当Rext小于2.2k时,振荡器的工作可能会变得不稳定或停振;当Re

22、xt取值大于1M时,振荡器易受到干扰。RC振荡器产生的振荡频率fosc,经内部4分频电路分频后从OSC2/CLKOUT输出fosc/4振荡信号,此信号可以用作测试或作其它逻辑电路的同步信号。23 PIC单片机的电源和时钟单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应管,因此,要单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。PIC16F84需要一个5V电源(实际工作电压为4.0V6.0V)。因此,最简单的办法是用三节1.5V的电池串联供电,也可用整流、稳压方式供电,接电源电路都需要在PIC16F84的引脚14(V)与地之间

23、接一电容0.1F,而且,此电容应紧靠单片机安装,以滤除电源的纹波,并使PIC和相邻元件不受噪声干扰。这里要强调的是,不论电源如何“纯净”,均必须安装此电容。注意:这里的PIC16F84除了引脚14(V或VDD)直接接至电源外,引脚4(MCLR复位输入脚)通常也通过一个10k的电阻接至电源V。MCLR是低电平有效,如将其接地,将使PIC复位,并将RAM清零。如果上电很慢,则PIC可能会处于一种不定状态。这时,应当在MCLR与地之间装接一个常开复位按键。与任何微处理器一样,PIC16F84的运作是有节奏的,因此,就需要一个节拍发生器时钟,以控制CPU的运行速度,步进执行各种操作。16F8404P的

24、最大时钟速变为4MHz。降低时钟频率,可节省能源,并使PIC执行速度减慢,当时钟频率为30kHz时只耗电0.1mA。24常用PIC系列芯片引脚功能笔者读了本版有关PIC 8位单片机的产品性能和相应的封装引脚介绍后,认为对初学者而言还需了解各引脚符号的意义,才能进一步学习和使用它。笔者为此作相关的说明,以便和初学者共同提高。1、关于I/O口符号PIC单片机系列封装引脚最少的是8引脚(如PIC12C5XX和PIC12C6XX),多的可达84引脚(如PIC17C76X),其中I/O(输入/输出)口线按PIC单片机产品型号不同,其口线数量也不相同。8脚封装的I/O口线是6根线,而84脚封装的I/O线多

25、达66根线。这些口线符号分别按英文字母顺序排列编号,简称A口、B口、C口、D口、E口、F口,每个口是8位的,但不一定占满8位。这些口在封装引脚图的标注上均在各口之前加有R符号。例如B口标注为RB0、RB1、RB2RB7;E口为RE0、RE1RE7;G口为RG1、RG2;而对8脚封装的单片机共有6根I/O口线,其引脚图的标注与上略有不同而是GP0GP5。上述的各口线都是可独立编程的双向I/O口线。2、引脚的复用功能和符号单片机的信号引脚是单片机外特性的体现,在硬件上用户只能使用引脚,通过引脚的连接组建单片机系统。PIC 8位单片机系列和MCS51系列单片机一样,其引脚除电源VDD、VSS为单一功

26、能外,其余的信号引脚常是多个功能,即引脚的复用功能。常见的引脚符号和主要功能如下:1)MCLR/Vpp清除(复位)输入/编程电压输入。其中MCLR为低电平时,对芯片复位。该脚上的电压不能超过VDD,否则会进入测试方法。Vpp代表编程电压。2)OSC1/CLKIN振荡器晶体/外部时钟输入端。3)OSC2/CLKOUT振荡器晶体输出端,在晶体振荡方式接晶体,在RC方式输出OSC1频率的1/4信号CLKOUT。4)TOCK1 TMRO计数器输入端,如不用,为了减少功能应接地或接VDD。5)TICK1 TMR1时钟输入端。6)TIOSI TMR1的振荡输入端。7)TIOSO TMR1的振荡输出端。8)

27、RD、WR、CS分别代表并行口读信号、写信号和片选控制线。9)AN0AN7A/D转换的模拟量输入端。AN0、AN1分别表示通道的个数。10)CCP捕捉/比较/脉宽调制等功能端。CCP是Capture/Compare/PWM的缩写。有的PIC芯片内有两个CCP部件,其引脚用符号CCP1和CCP2表示。11)SCK/SCL同步串行通信时钟输入端。12)TX/CK异步通信发送端/SCI同步传输的时钟端。13)SDI/SDASPI通信数据输入端。14)SD0SPI通信数据输出端。15)RD0/PSP0RD7/PSP7D口,双向可编程,亦可作为并行口。作并行口对TTL输入,作I/O口时为斯米特输入。以上

28、是PIC 8位单片机系列封装引脚符号的说明,此外在阅读PIC 8位单片机有关资料时,常遇到一些字母符号和功能,也简介如下:1)OTP一次性编程。OTP是One Time Program的缩写。2)RISC简称精简指令集。RISC是Reduced Instruction Set Computer的缩写。3)SSP同步串行口。SSP是Synchronous Serial Port的缩写。4)SCI串行通信接口。SCI是Serial Communication Interface的缩写。5)USART全双工通用串行异步接收发送系统。USART是Universal Serial Aosynchrono

29、us Receiver Transmitter的缩写。6)UART通用异步接收发送器。7)POR上电复位功能。POR是Power On Reset的缩写。8)OST振荡器起振定时器。OST是Oscillator Startup Timer的缩写。9)PWRT上电延时定时器。PWRT是Powerup Timer的缩写。10)SFR专用寄存器。SFR是Special Function Register的缩写。11)PWM脉宽调制器。PWM是Pulse Width Modulation的缩写。12)MIPS每秒可执行百万条指令。MIPS是Million Instructions Per Second

30、的缩写。25 PIC单片机16F8X系列简介Microchip公司生产的PIC 8位单片机16F8X系列产品是PIC单片机中级型产品之一。该系列产品的主要型号是16F83和16F84。其引脚功能如附图所示。该系列产品的最大特点是有8k14的Flash(闪速E2PROM)程序存储器和带8位的Flash(闪速E2PROM)数据存储器,其擦写次数上万次,数据保存时间大于40年。所以该系列产品极适合那些可能会经常改动程序编程的应用,例如用户可以随时改动出厂产品中的单片机程序以增加或调整产品的功能。此外,对那些学习、开发PIC单片机的个人或单位,都是一种很好的可重复多次的实验芯片。还有它内部的Flash

31、数据存储器不仅具有掉电保护数据的功能,加之它是由单片机内部进行控制操作的,自然外部电路无法对其进行读写,所以它有极高的数据保密性,使得PIC16F8X在智能IC卡、密码锁、电子防盗系统等方面得到广泛的应用。16F8X系列封装如下图:内部结构如下图所示:1、主要功能高性能RISC结构CPU;精简指令集35条单字节指令;执行速度DC400ns;Flash程序和数据存储器;多种硬件中断和直接/间接/相对三种寻址方式。2、微控制特性上电复位;自振式看门狗;程序保密位;微功耗睡眠功能和四种可选的振荡方式。3、电源和温度特性宽工作电压:2V6V(PIC 16LF84工作电压为2V)宽工作温度范围:商用级0

32、70;工作级4085;汽车级40125。这里的宽工作温度范围,特别是汽车级产品已大量用于汽车电子,甚至已用于航空仪表上。26 PIC系列单片机数据存储器的特点和功能PIC系列单片机品种虽多,但各产品内部硬件资源的数据存储器设置仍是很有规律的。笔者以PIC16C71A和PIC16C63/65/65A两个品种为实例,查看它们片内数据存储器的结构,找出它们的特点并说明某些寄存器的主要功能,以供用户快速编程。1、统一编址PIC系列单片机各类数据存储器都是以寄存器方式工作和寻址的。专用寄存器包括了定时寄存器TMRO、选择寄存器OPTION(又称为项选寄存器)、程序计数器PCL、状态寄存器STATUS、间

33、接寻址寄存器INDF和FSR、端口I/O寄存器(如PORTA、PORTB)和相对应的端口I/O控制寄存器(又称为端口I/O数据方向寄存器,如TRIAS、TRISB)、保持寄存器PCLATH和中断控制寄存器INTCON等。上述的专用寄存器都是PIC16C63/65/65A和PIC16C71A共同有的,它们不仅是寄存器名称、功能相同,而且寄存器的地址也完全相同。如果再查看其它PIC单片机,如PIC16C62/62A/64/64A、PIC16C71/72/73/73A/74/74A、PIC16C8X它们的专用寄存器名称凡是与以上相同者其地址也完全与上述相同,可见尽管PIC系列单片机品种多,但掌握它们

34、的规律后,学习是不难的。型号不同的PIC单片机,其数据存储器的内部资源仅仅是功能种类和多少的不同。如PIC16C71A型,其引脚为18脚,主要功能是带有8位的A/D转换部件,有4个A/D通道模拟输入,所以在表1中与其A/D转换部件有关的专用寄存器ADRES(用于存放A/D转换的数值结果)、A/D控制寄存器ADCON0(用于控制A/D转换器的操作)和A/D控制寄存器ADCON1(用于控制选择A/D引脚的功能)等。对PIC16C65/65A型,其引脚是40脚的,其功能比PIC16C71A强,因而数据存储器表2中的专用寄存器的种类就比表1的增加了很多。专用寄存器的每个寄存单元都有相对应的固定用途,它

35、们可分成两类:一类用于供CPU操作(如INDF和FSR、STATUS、PCL);另一类用于控制外围功能芯片的操作。学习PIC单片机数据存储器时,不仅要了解各寄存器单元的功能,而且还应在编制程序时会调用它们完成编程目的。下面笔者将以编程实例说明它们的用途。2、间接寻址寄存器INDF和FSR位于PIC数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器INDF是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器FSR(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器INDF和FSR时,记住下述的逻辑关系对编程是有帮助的:使用寄存器INDF的任

36、何指令,在逻辑上都是对寄存器FSR所指向的RAM进行访问,即对INDF(本身)进行间接寻址(访问),读出的应是FSR内容。以下的一个简单程序是用间接寻址方式清除RAM地址20h2Fh单元寄存器内容的实例。 MOVLW 0x20 ;20hw,对指向RAM单元的指针初始化 MOVWF FSR ;20hFSR,FSR指向RAMLOOP CLRF INDF ;清除INDF,即清除FSR内容所指向的单元20h2Fh INCF FSR ;(指针)FSR内容加1BTFSS FSR,4 ;判断(指令)FSR的D3位,若为零执行下条循环指令,若为1间跳执行。 GOTO LOOP ;跳转到LOOP(循环)CONT

37、INUE ;已完成功能,继续执行程序由上述指令看出,因寄存器INDF和FSR的配合工作,达到了对RAM地址20h2Fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使PIC单片机的指令集得以精简。说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“BTFSS FSR,4”比较关键。该条指令是保证题设中要选择RAM地址单元上限值2Fh时,其对应的二进制数为00101111B,此时FSR的第4位恰为1。所以上述指令中用了一条判断指令;BTFSS FSR,4,判断FSR的D3位值是否为1,若不为1而为0,则执行下条循环指令GOTO LOOP,使FSR中的地址不断加

38、1,直到寄存器FSR的D3位为1时,这时它的内容代表的RAM地址恰为2Fh。由此可见,学习PIC单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。3、A/D转换寄存器这里摘录一段笔者从网上下载的用PIC16F877芯片(带Flash存储器的)完成有关A/D转换的源程序部分指令,并用它说明有关A/D转换寄存器在指令中的用法。这里先引用部分源程序,源程序中的注释是笔者按照指令在程序中的作用所加的注释(不是某条指令的直接功能),这是初学者读以下指令时应注意

39、的。PIC16F877芯片管脚如下图:A/D转换器部分源程序清单如下:DEMO877ASMListP=16F877org 0x00 ;复位向量NOP ;空操作Start Banksel PORTC ;选择PORTC所在数据存储器的存储体(实为Bank0)CLRF PORTC ;对RC口清零MOVLW B 01000001 ;A/D转换时钟选择FOSC/8,打开A/D转换器MOVWF ADCON0 ;设定了A/D转换操作部分参数Banksel OPTION_REG ;选择OPTION所在数据存储器的存储体(实为Bank1)MOVLW B 10000111 ;设置预分频器TMR0,分频率1256M

40、OVWF OPTION ;完成上条指令设置CLRF TRISC ;设定RC口(8位)为输出MOVLW B 0001110 ;选中模拟量通道1 (RA1/AN1)MOVWF ADCON1 ;模拟基准电压VREF为芯片电源电压,选择通道1(RA1/AN1)完成,要阅读上述的指令,读者还需了解以下必要的补充知识。1)关于用PIC16F877作A/D转换器。PIC16F877单片机是具有多通道模拟量输入的8位A/D转换器。上述的源程序是利用该PIC产品作A/D转换的一种实验程序,其实验目的是用PIC16F877来实现一个通道的8位A/D转换,并将转换结果以二进制形式经RC口输出再由LED显示。实验的电

41、路原理如附图(笔者根据源程序而绘出的PIC16F877 A/D转换硬件电路图)所示。2)编制与A/D转换器有关的专用寄存器指令。要读懂上述的源程序,应根据以下的线索:(1)把握源程序的编写惯例;(2)选择RC口和对它清零;(3)给A/D控制寄存器ADCON0的各位置数,达到A/D转换时选择A/D位的采样时间,即注释中的A/D时钟选择;(4)选择专用寄存器Option并给它各位置数,达到选择预分频器TMR0和确定其分频率(1256);(5)设定RC口为输出,以保证LED显示;(6)给A/D控制器ADCON1的各位置数,以确定PIC1F877的RA1口为模拟量的输入通道。并选中芯片电源作基准电压。

42、读者若需深入了解A/D控制寄存器ADCON0和ADCON1的各位详细功能,请参看有关PIC单片机书籍的详细介绍。A/D转换的主程序(main)约有13条,将在本版PIC系列专题的后期结合实验板的编程器介绍。3PIC单片机汇编语言常用指令各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。在这

43、里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。31 PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。1、标号与MCS51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格

44、式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。书写标号时,规定第一字符必须是字母或半角下划线“_”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。2、操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。3、操作数由操作数的数据值或以符号表

45、示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASC码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。指令的操作数项也是可选项。PIC系列与MCS51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指

46、令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。4、注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。32清零指令1、寄存器清零指令实例:CLRW;寄存器W被清零说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS51系列单片机

47、中的累加器A,CLR是英语Clear的缩写字母。2、看门狗定时器清零指令。实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)说明:WDT是英语Watchdog Timer的缩写字母。CLR见上述说明。注意该两条指令无操作数。3、寄存器f清零指令指令格式:CLRF f实例:CLRF TMRO;对TMRO清零说明:在PIC系列8位单片机中,常用符号F(或f)代表片内的各种寄程器和F的序号地址。F取值按PIC系列不同型号而不同,一般为Ox00Ox1F/7F/FF。TMRO代表定时器/计数器TMRO,所以CLRF对寄程器清零,采用了直接寻址方式直接给出要访问的寄存器TMRO。4、位清零指

48、令指令格式 BCF f,b实例:BCF REG1,2;把寄存器REG1的D2位清零说明:BCF是英语Bit Clear F的缩写。指令格式中的F,同上说明;符号b是表示PIC片内某个8位数据寄存器F的位号(或位地址),所以b的取值为07或D0D7。实例中REG是Register的缩写。实例中的2代表指令格式中的b=2即寄存器REG1的D2位。通过上述四条清零指令格式和实例,可以说明,学习PIC系列8位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。初学者没有必要死记指令,重要是理解和实践。33面向字节常数与控制操作的指令1、传送立即数至工作寄存器W指令指令格式:MOVL

49、W k;k表示常数、立即数和标号说明:MOVLW是Move Literal to w的缩写实例:MOVLW 0x1E;常数30送W2、I/O口控制寄存器TRIS设置指令指令格式;TRISf说明;TRIS f是Load TRIS Register的缩写。其功能是把工作寄存器W的内容送入I/O口控制寄存器f。当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。实例:MOVLW 0x00 ;把00H送入W TRIS RA ;置PIC RA口为输出 MOVLW 0xFF ;把FFH送入W TRIS RB ;置PIC RB口为输入说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里

50、是RA口和RB口)为输入或输出的语句。可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。3、W寄存器内容送寄存器f(W内容保持不变)指令指令格式:MOVWF f说明:MOVWF是Move W to f的缩写实例:MOVLW 0x0B;送0BH送W MOVWF 6 ;送W内容到RB口说明:第一条指令0x0B(常数11)送工作寄存器W,第二条指令,把W内容常数11送到寄存器F6中,查表F6即为RB口,所以PORT_B(B口)=0BH=D114、寄存器f传送指令指令格式:MOVF f,d说明:MOVF是Move f的缩写。F代表PIC中的某个寄存器。指令中的d规定:d=0时,f内容送W

51、;d=1时,f内容送寄存器。实例:MOVF 6,0 ;RB口内容送W MOVWF 8 ;RB口内容送f8说明:第一条指令中的6代表寄存器f=6,查寄存器表f=6为RB口;0代表d=0,代表选择的目标为寄存器W。第二条指令中的8代表寄存器f=8。所以两条指令结果是把RB口的内容送f8。至于f8内容是多少?还应在汇编语言开始时附加指令,这里从略。5、空操作指令指令格式:NOP说明:NOP是英语No Operation的缩写。NOP无操作数,所以称为空操作。执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0x0F ;送0FH到W MOVWF PORT_B ;W内容写入B

52、口 NOP ;空操作 MOVF PORT_B,W ;读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。6、无条件跳转指令指令格式:GOTO k说明:执行该条指令时,将指令转移到指定的地址(跳转)。指令中的k,常与程序中的标号联系起来。实例:见第9条指令中7、寄存器内容减1,结果为零的间跳指令指令格式:DECFSZ f,d说明:DECFSZ是英语Decrement f,Skip of not 0的缩写。符号f,d代表的意义,前述已作说明。该条指令是指寄存器的内容减1存入W(d=0)或f(d=1)

53、中。若指令执行结果减1不为零,指令顺序执行;为零时,就间跳下一条指令后再执行(等效顺序执行一条空指令NOP),实际指令中,当d=1时,该项常被略去。8、寄存器内容加1,结果为零间跳指令指令格式:INCFSZ f,d说明:INCFSZ是英语Increment f,Skip of 0的缩写。该条指令与上一条(7)指令差别仅在于“1”上,即执行这条指令时,寄存器f内容加1,若结果不为零,则指令顺序执行;为零则指令间跳执行。执行这条指令的其它逻辑关系与上条相同。9、子程序返回指令指令格式:RETLW k说明:RETLW是Return Literal to W的缩写。该指令代表子程序返回,返回前先把8位

54、立即数送W。实例:PIC某个汇编语言的延时子程序(摘要):(1) BELY MOVLW 0xC5 ;送延时常数0C5H入W(2) MOVWF COUNT2;0C5H送入计数器2(3) CLRF COUNT1;对计数器1清零(4) LOOP INCFSZ COUNT1;计数器1加1结果不为零,跳转循环(5) GOTO LOOP;(6) DECTSZ CPUNT2 ;计数器2减1结果不为零,跳转循环重复执行第4条指令(7) GOTO LOOP(8) RETLW 0;子程序执行结束返回说明:程序中的注释已分别对每条指令的功能作了说明,补充说明1)当执行第(4)条加1指令结果为零时,就间跳转到执行第(

55、6)条指令。2)当执行第(6)条减1指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。3)计数器1或2代表PIC中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。本文关于指令的注释将与前述指令中的略有不同。前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。10、寄存器半字节交换指令指令格式:SWAPFf,d说明:SWAPF是Swap f的

56、合写。符号f、d的意义与前述的相同。该条指令的功能是寄存器f的高4位与低4位交换,即指令执行前,若寄存器f的8位状态为D7、D6、D5、D4、D3、D2、D1、D0,执行后的8位状态变为D3、D2、D1、D0、D7、D6、D5、D4,其结果存入W(d=0)或f(d=1)中。实例:中断现场保护是中断技术中重要部分。由于PIC16C指令系统中没有进栈PUSH和出栈POP指令,所以只能用其它指令来实现。因为在主程序中常常用到工作寄存器W和状态寄存器STATUS,所以中断现场保护常要保护寄存器W和STATUS。下面是对PIC16C7系列芯片中断现场保护的实例程序。MOVWF W_TEMP ;将W内容存

57、入到临时寄存器W_TEMP中SWAPF STATUS,W ;交换STATUS与W内容MOVWF STATUS_TEMP ;将STATUS的内容存入到临时寄存器中中断服务程序 SWAPF STATUS_TEMP,W;交换STATUS_TEMP与W的内容MOVWF STATUS ;STATUS复原成原来的状态SWAPF W_TEMP,F ;交换内容SWAPF W_TEMP,W;W复原成原来的状态说明:上述程序中各条指令的注释基本上都是以程序应达到的目的而注释的,对每条指令的功能几乎未涉及。这是初学者应特别注意的。11、子程序调用指令(Subroutine Call)指令格式:CALL k;k为立即

58、地址说明:子程序调用,不同型号芯片的实现方法不尽相同,其共同点是首先将返回地址(PC)1)压栈保护,再转入所调用的子程序入口地址执行(与MCS51指令功能相似)。指令格式: HERE CALL DELAY;调用延时子程序 DELAY MOVLW 0x80;延时子程序 RETLW 0说明:调用指令执行前,PC=地址HERE调用指令执行后,PC=地址DELAY(标号),堆栈指针TOS=HERE1(返回地址)。实例:见下条指令的实例12、寄存器内容取反指令指令格式:COMFf,d说明:COMF是Complement f的缩写。其中d=1时,操作(f)f;d=0时,操作(f)w。功能:寄存器f内容取反

59、后送入W(d=0)或f自身(d=1)。实例: ORG 0x1FF GOTO MAIN ORG 0 DELAY MAIN MOVLW 0 ;主程序开始 TRTS 5 ;设置RA口为输出 BCF 5,0 ;置RA口0位为0 LOOP CALL DELAY;闪动延时 COMF 5 ;RA口求反(亮灭亮控制) GOTO LOOP ;循环 说明:上述指令是一种PIC16C54 LED发光控制实验部分程序。其中延时子程序DELY未列出,但不影响本条指令的识读。程序中的主程序开始的三条指令,均已介绍过,紧跟着的CALL指令是调用执行子程序,其入口地址为标号DELAY。子程序执行结束后,又执行COMF 5的L

60、ED发光亮灭亮灭控制指令。后面一条GOTO LOOP指令是达到LED循环点亮目的。13、面向位的操作指令(共4条,PIC高级产品多增一条)该类指令除一条位清零外,另有一条寄存器f位b的置1指令和另外两条位跳步指令(PIC高级产品多增一条f的b位触发转换指令)。1)位置1指令。指令格式 BSFf,b说明:BSF是Bit Set f的缩写。F和b的意义与前述相同,该条指令的功能是将寄存器f的b位置1。2)位测试、为零间跳指令。指令格式 BTFSC f,b说明:BTFSC是Bit Test,Skip if Clear的缩写。指令功能是测试寄存器f位“b”,如为0,跳过下一条指令;为1顺序执行,即当f(b)=0时,就不执行当前指令而执行下一条指令(间跳),即用一条空指令NOP代替它,所以该条指令占用2个指令周期。3)位测试、为1间跳指令。指令格式 BTFSSf,b说明:BTFSS是Bit Test,Skip if Set的缩写。其指令的逻辑功能与上条相反,位测试f(b)=1就间跳执行,f(b)=0顺序执行。上面介绍的PIC 8位单片机汇编语言指令仅是部分指令,此外还有循环左、右移指令;W和寄存器f相“加”、相“与”指令和进入睡眠方式等指令。鉴于版面的限制,不在这里一一介绍,今后将在程序的应用试验中再作补充说明。4PIC单片机汇编设计要单片机完

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!