PIC单片机之汇编语言
PIC18F452单片机原理及编程实践(第二章)PIC结构体与汇编语言编程

2017/8/29
20
―快速访问RAM区”的映射示意图
0区 (256B)
000H 0FFH
GP RAM GP RAM
000H 07FH F80H FFFH
128B 14区 (256B)
GP RAM FSR
GP RAM
F00H F7FH
F80H FFFH
128B
―快速访问”存 储区的组成 (256B)
9
2017/8/29
PIC18F452的“文件寄存器”结构示意图
4K RAM 000H 0FFH
GP RAM GP RAM
0 255
通用寄存器GPR 文件寄存器 特殊功能寄存器SFR
GP RAM
F00H F7FH F80H FFFH
3840
GP RAM SFR区域 (128B)
3967 3968 4095
2017/8/29
8
PIC文件寄存器(RAM)的空间分配
按照功能逻辑划分,文件寄存器(RAM)被分为: ① 通用寄存器 GPR:存储程序中的变量数据; ② 特殊功能寄存器 SFR:用于设定功能模块的工作 模式、工作状态等特殊信息。
GPR和SFR同在一个RAM存储阵列。 凡是没有分配给SFR的空间都可以作为通用寄存器GPR。 在18F系列中,SFR被“统一集中”在RAM的高地址空间 中(第15区的高128B)。 PIC18系列 RAM的大小随型号而不同,从32B~4KB。
―区选择寄存器”BSF的设定是可以通过指令: MOVLW k MOVWF BSR (k=0~15)
15区 (256B)
GP RAM SFR区域 (128B)
PIC单片机汇编语言学习(一)

PIC单⽚机汇编语⾔学习(⼀)1、汇编语⾔的语句格式:标号操作码(指令助记符)操作数 ;注释(label) (opcode) (operand) (comment)2、常⽤伪指令a.EQU——符号名赋值伪指令格式:符号名 EQU nn——程序起始地址定义伪指令格式:ORG nnnnc.END——程序结束伪指令格式:ENDd.LIST——列表选项伪指令格式:LIST [可选项,可选项,......]e.INCLUDE:调⼊外部程序⽂件伪指令格式:INCLUDE "⽂件名"2、分⽀程序结构——对于程序中的指令运⽤作⼏点说明:(1)凡是需要2个数参与的逻辑运算(与、或、异或)和算术运算(加、减),都需要事先将其中⼀个操作数放⼊W中。
对于在此使⽤的减法指令更要格外关注,应预先把减数放⼈W中,或者说,预先放⼊W中的数,在运算中是当做减数,⽽寄存器中的数当做了被减数。
(2)⼀条条件跳转指令往往需要跟随⼀条⽆条件跳转指令,才能实现长距离的转移和程序的分⽀。
(3)PIC单⽚机的指令系统中没有设置专⽤的停机指令,可以⽤⼀条跳转到⾃⾝的⽆条件跳转指令GOTO来实现。
3、PIC单⽚机指令由3种基本类型指令组成:a.字节操作类指令b.位操作类指令c.⽴即数和控制操作类指令对于字节操作指令,f——>⽂件寄存器标识符,d——>⽬标寄存器标识符说明:⽬标标识符指定了操作结果的存放位置:d=0 操作结果存⼊W寄存器d=1 操作结果存⼊指定的⽂件寄存器,d默认值为14、指令集5、例⼦1 ;--------------------------------------------------------23 ;顺序程序结构4 ;将20H单元低4位取出存⼊21H,⾼四位取出存⼊22H5 ;要点:ANDLW和SWAPF67 ;---------------------------------------------------------8 MOVF 20H,0 ;将20H单元的内容送⼈W9 ANDLW 0FH ;W⾼四位清零低4位保持不变10 MOVWF 21H ;将拆分后的低4位送21H11 SWAPF 20H,0 ;将20H单元内容⾼、低半字节换位后送W1213 ANDLW 0FH ;再将W⾼四位清0低四位保持不变14 MOVWF 22H ;将拆分后的⾼四位送22H单元151617 ;--------------------------------------------------------1819 ;分⽀程序结构20 ;RAM中20H和21H单元存放2个数,找出⼤着存⼊22H单元21 ;要点:两数做减法,判断标志位C的值2223 ;---------------------------------------------------------24 STATUS EQU 03H ;定义STATUS寄存器地址为03H25 C EQU 0 ;定义进位/借位标志C在STATUS中得地址为026 MOVF 20H 0 ;将20H单元的内容送⼈W27 SUBWF 21H 0 ;⽤21H单元的内容减去W中的内容,结果存在W中28 BTFSS STATUS,C;若C=1,没借位,则21H单元中的数⼤,跳到F21BIG29 GOTO F20BIG ;若C=0,有借位,20H单元中得数较⼤,则跳⾄F20BIG 3031 F21BIG MOVF 21H,0 ;将21H中的内容存⼊W寄存器32 MOVWF 22H ;再将它转存到22H单元33 GOTO STOP ;跳过下⾯两条指令到程序末尾3435 F20BIG MOVF 20H,0 ;将20H中的内容存⼊W寄存器36 MOVWF 22H ;再将它转存到22H单元3738 STOP GOTO STOP ;任务完成,停机,原地踏步394041 ;--------------------------------------------------------4243 ;循环程序结构44 ;数据存储器中,从地址30H开始的50个单元全部写⼊00H45 ;要点:间接寻址寄存器FSR当做地址指针4647 ;---------------------------------------------------------48 COUNT EQU 20H ;指定20H单元作为循坏次数计数器(即循环变量)49 FSR EQU 04H ;定义FSR寄存器地址为04H50 INDF EQU 00H ;设定INDF寄存器地址为00H51 MOVLW D50 ;把计数器初值50送⼊W52 MOVWF COUNT ;再把50转⼊计数器(作为循环变量的操作值)53 MOVLW 30H ;把30H(起始地址)送⼊W54 MOVWF FSR ;再把30H转⼊寄存器FSR(⽤作地址指针)5556 NEXT CLRF INDF ;把以FSR内容为地址所指定的单元清057 INCF FSR,1 ;地址指针内容加1,指向下⼀单元58 DECFSZ COUNT,1 ;计数值减1,结果为0就跳过到下⼀条指令到STOP处59 GOTO NEXT ;跳转回去并执⾏下⼀次循环60 STOP GOTO STOP ;循环结束之后执⾏该语句,实现停机6162 ;--------------------------------------------------------6364 ;⼦程序结构65 ;3个数最⼤者放⼊40H单元6667 ;---------------------------------------------------------68 STATUS EQU 03H69 C EQU 00H70 X EQU 20H71 Y EQU 21H72 Z EQU 22H73 ;--------------------------------------------------------7475 ;主程序7677 ;---------------------------------------------------------7879 MAIN MOVF 30H,080 MOVWF X81 MOVF 21H,082 MOVWF Y83 CALL SUB84 MOVF Z,085 MOVWF X86 MOVF 32H,087 MOVWF Y88 CALL SUB89 MOVF Z,090 MOVWF 40H91 STOP GOTO STOP92 ;--------------------------------------------------------9394 ;⼦程序:(⼊⼝参数:X和Y,出⼝参数:Z)9596 ;---------------------------------------------------------97 SUB MOVF X,0 ;将X内容送⼈W98 SUBWF Y,0 ;Y内容减去W内容,结果存⼊W99 BTFSS STATUS,C;若C=1,没有发⽣借位,执⾏下⼀条,否则跳转100 GOTO X_BIG101102 Y_BIG MOVF Y,0 ;将Y中的数据送⼊W103 MOVWF Z ;再将它转存到Z104 GOTO THEEND ;跳过下⾯两条到末尾105106 X_BIG MOVF X,0 ;将X中的数据送⼊W107 MOVWF Z ;再将它转存到Z108 THEEND RETURN ;⼦程序返回。
PIC汇编语言程序设计基础

PIC汇编语言程序设计基础汇编语言是一种底层的计算机语言,可以直接操作计算机的硬件。
PIC汇编语言是一种常用于单片机(microcontroller)的汇编语言,主要用于编写控制程序。
本文将介绍PIC汇编语言的基本概念和学习方法。
首先,了解一些关于单片机的基本知识是很有帮助的。
单片机是一种集成电路,它包含了处理器、内存和输入输出接口等功能。
常用的单片机系列有PIC、AVR和8051等。
其中,PIC是由美国Microchip公司开发的一系列单片机。
学习PIC汇编语言的基础知识包括以下几个方面:1.计算机系统的基本概念:了解计算机系统的组成,包括处理器、内存和输入输出设备等。
了解汇编语言是如何运行在计算机系统上的。
2.汇编语言的基本知识:了解汇编语言的语法和指令集。
汇编语言是一种低级语言,使用符号代表具体的机器指令。
掌握汇编语言的基本语法,如变量声明、标号、指令和操作数等。
3.PIC汇编语言的特点:了解PIC单片机的特点和架构。
掌握PIC汇编语言的指令集和寄存器的使用方法。
了解数据存储器、程序存储器和特殊功能寄存器等的地址和用途。
4.单片机的编程方法:学习如何编写控制程序,包括输入输出控制、中断处理和定时器等。
了解控制程序的基本结构,如初始化、主循环和中断处理程序等。
在学习PIC汇编语言时,可以通过以下几种途径进行:1. 理论学习:可以通过阅读相关的教材和参考书籍了解PIC汇编语言的基本概念和语法。
可以参考Microchip官方提供的PIC汇编语言手册。
2. 实验实践:可以通过实验和实践的方式学习。
可以利用单片机开发板进行实验,通过编写控制程序来实现一些简单的功能。
可以使用Microchip官方提供的开发环境和仿真器。
3.网上资源:可以利用互联网上的资源进行学习。
有很多相关的教程和视频可以参考。
可以加入一些技术论坛和交流群组,与其他学习者进行交流和探讨。
在学习和实践过程中1.理解问题:首先要明确需要解决的问题,确定需要设计和实现的功能。
PIC单片机指令系统和汇编语言程序设计

PIC单片机指令系统和汇编语言程序设计PIC(Peripheral Interface Controller)单片机是一种微控制器,它由微芯科技公司推出,广泛应用于嵌入式系统中。
PIC单片机的指令系统是它的核心,它定义了单片机可以执行的操作和命令。
汇编语言程序设计是使用汇编语言编写的PIC单片机程序的过程。
PIC单片机的指令系统包含了多个指令,每个指令都对应着一条特定的操作。
这些操作可以是算术运算、逻辑运算、数据传输、位操作等。
指令系统的设计考虑了单片机的资源限制,以使其能够在有限的资源条件下完成各种任务。
汇编语言是一种低级语言,它与机器语言相似,但更具可读性。
在PIC单片机编程中,汇编语言常用于编写程序。
汇编语言程序设计包括了以下几个方面:1.汇编语言的语法:汇编语言有自己的语法规则,包括指令的书写方式、注释的使用、标号的定义等。
了解汇编语言的语法对于编写正确的程序至关重要。
2.寄存器的使用:PIC单片机有多个寄存器用于存储数据和指令。
在汇编语言程序中,需要了解不同寄存器的功能和使用方法,以便正确地读写数据。
3.指令的编写:编写汇编语言程序需要了解不同指令的功能、操作数的使用和指令的影响。
不同的指令可以实现不同的操作,如加法、逻辑运算、数据传输等。
4.程序的逻辑结构:汇编语言程序需要按照一定的逻辑结构编写,包括初始化程序、主循环、中断处理等。
了解如何组织程序结构对于编写清晰、可读性强的程序至关重要。
5.调试和优化:在编写汇编语言程序时,常常需要进行调试和优化,以确保程序能够正确地运行。
了解如何使用调试工具和优化技巧对于提高程序的效率和稳定性至关重要。
总之,PIC单片机的指令系统和汇编语言程序设计是使用PIC单片机进行编程的基础。
掌握了这些知识,可以编写高效、可靠的PIC单片机程序,实现各种嵌入式系统的功能。
PIC8位单片机汇编语言常用指令

PIC8 位单片机汇编语言常用指令
各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。
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 系列单片机功能相同,标号代表指令的符号地址。
在。
PIC单片机汇编语言基础

1)设置I/O口的输入/输出方向
PIC16C5X勺I/O口皆为双向可编程,即每一根I/O端线都可分 别单独地由程序设置为输入或输出。这个过程由写I/O控制寄存器TRIS f来实现,写入值为“1”,则为输入;写入值为“0”,则为 输出。
MOVLW 0FH ; 0000 1111 (0FH
TITLE This is ……;程序标题
•
;名称定义和变量定义
;
F0EQU0
RTCCEQU1
PCEQU2
STATUSEQU3
RBEQU 6
RБайду номын сангаасEQU 7
1:
PIC16C54 EQU 1FFH;芯片复位地址
PIC16C56 EQU 3FFH
PIC16C57 EQU 7FFH
;
ORG PIC16C54 GOTO MAIN;在复位地址处转入主程序
ORG 0;在0000H开始存放程序
;
;子程序区
;
DELAY MOVLW 255
1:
RETLW 0
;
;主程序区
;
MAIN
MOVLW B00000000'
LOOP
BSF RB 7 CALL DELAY
BCF RB 7 CALL DELAY
1:
GOTO LOOP
;
END;程序结束
注:MAIN标号一定要处在0页面内。
PIC
1、程序的基本格式
先介绍二条伪指令:
EQU——标号赋值伪指令
OR-一地址定义伪指令
PIC16C5X在RESET后指令计算器PC被置为全“1”,所以
PIC16C5XJI种型号芯片的复位地址为:
第6章-PIC单片机的汇编语言设计

第6章PIC单片机的汇编语言设计张益昕Email: zyixin@南京大学工程管理学院2015/9/2812015/9/2826.1 创建结构化的程序6.2 分支程序6.3 产生延时和时间间隔6.4 子程序6.5 常用数学运算6.6 随机数生成内容提要36.1 6.1 创建结构化的程序创建结构化的程序设计程序并不是一个简单的工作,需要在开始编写代码前就考虑和规划程序结构。
在使用汇编语言时尤其需要重视程序的结构化。
可以采用程序框图来表示程序,从而指导编程过程。
46.1 6.1 创建结构化的程序创建结构化的程序流程图流程图((flow diagram )程序流程图是一种非常好用的程序框图,是程序员对解决问题的方法、思路或算法的一种描述。
流程图的优点:采用简单规范的符号,容易实现。
结构清晰,逻辑性强。
便于描述,容易理解。
56.1 6.1 创建结构化的程序创建结构化的程序流程图包含许多种符号,用来表示程序的各个部分。
起始框终止框执行框判别框66.1 6.1 创建结构化的程序创建结构化的程序以电冰箱程序的流程图为例:电冰箱内部主要包括温度传感器和压缩机两个部件。
上电时控制器应运行初始化程序。
对温度的调节通过启动和关闭压缩机实现。
程序循环读取实际的温度,并将其和用户设定温度对比,判断哪一个温度更高。
如果实际温度更高,则启动压缩机指令,反之则关闭压缩机。
如果实际温度偏离设定值过大,则发出警告。
如果用户关机,则进行关机准备,切断电源。
76.1 6.1 创建结构化的程序创建结构化的程序每一个表示判断的菱形框都包含一个问题,每个问题都有“是”和“否”两种回答。
对于两种回答,菱形框有两个程序出口。
流程图可繁可简,通常详细到让程序员能够将其转化为汇编程序即可。
对于较复杂的程序,可以只画出流程图的整个框架,而用子流程图来分别表示内部的功能。
86.1 6.1 创建结构化的程序创建结构化的程序状态图状态图((state diagram )在流程图中,程序通过一系列动作或事件来表示,这一系列动作或事件的发生就代表了程序的执行过程。
pic单片机汇编语言程序设计实例

pic单片机汇编语言程序设计实例一、前言单片机是现代电子技术中的重要组成部分,而汇编语言则是单片机编程中最基础的语言。
本文将以PIC单片机为例,介绍汇编语言程序设计实例。
二、PIC单片机简介PIC(Peripheral Interface Controller)是一种微控制器,由美国Microchip Technology公司开发。
PIC单片机具有体积小、功耗低、价格便宜等优点,广泛应用于各种电子设备中。
三、汇编语言基础1. 寄存器PIC单片机有许多寄存器,其中最常用的有W寄存器和F寄存器。
W 寄存器是一个8位的通用寄存器,可用于存储临时数据;F寄存器则是一个8位的特殊功能寄存器,可用于控制各种外设。
2. 指令集PIC单片机的指令集非常丰富,涵盖了各种数据操作、逻辑运算、跳转等指令。
例如:- MOVF:将指定地址中的数据移动到W寄存器中;- ADDWF:将指定地址中的数据与W寄存器中的数据相加,并将结果保存到指定地址中;- BTFSS:测试指定地址中某一位是否为0,并跳过下一条指令。
3. 标志位PIC单片机还有一些标志位,用于记录各种状态信息。
其中最常用的有C(进位标志位)、Z(零标志位)和DC(半进位标志位)。
四、汇编语言程序设计实例下面以一个简单的LED闪烁程序为例,介绍PIC单片机汇编语言程序设计。
1. 硬件连接将一个LED连接到PIC单片机的RA0口,通过一个220欧姆电阻限流。
将VDD和VSS分别连接到5V和地。
2. 程序设计首先定义RA0口为输出口,并将其置为低电平。
然后进入一个死循环,在循环中将RA0口置为高电平、延时一段时间、再将RA0口置为低电平、再延时一段时间。
程序如下:LIST P=16F84AINCLUDE "P16F84A.INC"__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON &_HS_OSCORG 0x00GOTO MAINORG 0x04MAIN:MOVLW 0x00 ; 将W寄存器清零TRIS PORTA ; 将PORTA定义为输出口LOOP:BSF PORTA, 0 ; 将PORTA.0置为高电平CALL DELAY ; 延时BCF PORTA, 0 ; 将PORTA.0置为低电平CALL DELAY ; 延时GOTO LOOPDELAY:MOVLW 0x64 ; 将W寄存器设置为100(十进制)DELAY_LOOP:NOP ; 空操作,延时1个指令周期DECFSZ W, F ; 将W寄存器减1,如果不为0则跳转到DELAY_LOOPGOTO DELAY_LOOP ; 否则跳出循环RETURN ; 返回主程序3. 编译和烧录将程序保存为.asm文件,使用MPLAB IDE进行编译和烧录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PIC指令介绍2006-12-24 03:03:05来源:嵌入式技术网关键字: PIC指令系统<a target='_blank' href='/www/delivery/ck.php?n=826cd67'><img border='0' alt='' src='/www/delivery/avw.php?zoneid=212&n=826cd67' /></a>工作以来一直使用ST的单片机,其他的单片机虽大致了解但从未认真看过,近几日恰好无事,决定熟悉一下PIC的单片机,于是想将自己从网上或这书本上的东西转下来,予以同一样的初学者共同参考。
PIC的指令系统PIC 8位单片机共有三个级别,有相对应的指令集。
基本级PIC 系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。
其指令向下兼容。
一、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位单片机的指令时应首先了解指令的助记符意义(功能),再有就是它的表达方式。
初学者没有必要死记指令,重要是理解和实践。
三、面向字节、常数与控制操作的指令1 传送立即数至工作寄存器W指令指令格式:MOVLW k;k表示常数、立即数和标号说明:MOVLW是Move Literal to w的缩写实例:MOVL 0x1E;常数30送W2 I/O口控制寄存器TRIS设置指令指令格式;TRIS f说明;TRIS f是Load TRIS Register的缩写。
其功能是把工作寄存器W的内容送入I/O口控制寄存器f。
当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。
实例:MOVLW 0x00 ;把00H送入WTRIS RA ;置PIC RA口为输出MOVLW 0xFF ;把FFH送入WTRIS RB ;置PIC RB口为输入说明:这是PIC汇编语言中常用的几条指令,即设置某个I/O口(这里是RA口和RB口)为输入或输出的语句。
可见,识读指令时,一应充分理解语句格式的功能,二应前后联系阅读。
3 W寄存器内容送寄存器f(W内容保持不变)指令指令格式:MOVWF f说明:MOVWF是Move W to f的缩写实例:MOVLW 0x0B;送0BH送WMOVWF 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;d=1时,f内容送寄存器。
实例:MOVF 6,0 ;RB口内容送WMOVWF 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 0xOF ;送OFH到WMOVWF PORT_B ;W内容写入B口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)中。
若指令执行结果减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位立即数送W。
实例:PIC某个汇编语言的延时子程序(摘要):(1)BELY MOVLW 0xC5 ;送延时常数0C5H入W(2) MOVWF COUNT2;0C5H送入计数器2(3) CLRF COUNT1;对计数器1清零(4)LOOP INCFSZ COUNT1;计数器1加1计数器1加1结果不为零,跳转循环(5) GOTO LOOP ;(6) DECTSZ CPUNT2 ;计数2减1计数器2减1结果不为零,跳转循环重复执行第4条指令(7) GOTO LOOP ;(8) RETLW 0 ;子程序执行结束返回说明:程序中的注释已分别对每条指令的功能作了说明,补充说明1 当执行第(4)条加1指令结果为零时,就间跳转到执行第(6)条指令。
2 当执行第(6)条减1指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。
3 计数器1或2代表PIC中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。
本文关于指令的注释将与前述指令中的略有不同。
前述指令注释时是对指令具体完成的功能给以说明,这种注释方法对初学者确实易于接受和理解,但是实际应用中的PIC产品汇编语言的注释通常是以程序要做什么(或指令的作用)而不是说指令的直接功能。
鉴于上述原因,下述的指令注释将改变过去的注释方法,用程序应起的作用作注释。
10 寄程器半字节交换指令指令格式:SWAPF f,d说明:SWAPF是Swap f的合写。
符号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)中。