PIC单片机之汇编语言

合集下载

PIC18F452单片机原理及编程实践(第二章)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单片机汇编语言学习(一)

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汇编语言程序设计基础汇编语言是一种底层的计算机语言,可以直接操作计算机的硬件。

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单片机指令系统和汇编语言程序设计PIC(Peripheral Interface Controller)单片机是一种微控制器,它由微芯科技公司推出,广泛应用于嵌入式系统中。

PIC单片机的指令系统是它的核心,它定义了单片机可以执行的操作和命令。

汇编语言程序设计是使用汇编语言编写的PIC单片机程序的过程。

PIC单片机的指令系统包含了多个指令,每个指令都对应着一条特定的操作。

这些操作可以是算术运算、逻辑运算、数据传输、位操作等。

指令系统的设计考虑了单片机的资源限制,以使其能够在有限的资源条件下完成各种任务。

汇编语言是一种低级语言,它与机器语言相似,但更具可读性。

在PIC单片机编程中,汇编语言常用于编写程序。

汇编语言程序设计包括了以下几个方面:1.汇编语言的语法:汇编语言有自己的语法规则,包括指令的书写方式、注释的使用、标号的定义等。

了解汇编语言的语法对于编写正确的程序至关重要。

2.寄存器的使用:PIC单片机有多个寄存器用于存储数据和指令。

在汇编语言程序中,需要了解不同寄存器的功能和使用方法,以便正确地读写数据。

3.指令的编写:编写汇编语言程序需要了解不同指令的功能、操作数的使用和指令的影响。

不同的指令可以实现不同的操作,如加法、逻辑运算、数据传输等。

4.程序的逻辑结构:汇编语言程序需要按照一定的逻辑结构编写,包括初始化程序、主循环、中断处理等。

了解如何组织程序结构对于编写清晰、可读性强的程序至关重要。

5.调试和优化:在编写汇编语言程序时,常常需要进行调试和优化,以确保程序能够正确地运行。

了解如何使用调试工具和优化技巧对于提高程序的效率和稳定性至关重要。

总之,PIC单片机的指令系统和汇编语言程序设计是使用PIC单片机进行编程的基础。

掌握了这些知识,可以编写高效、可靠的PIC单片机程序,实现各种嵌入式系统的功能。

PIC8位单片机汇编语言常用指令

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单片机汇编语言基础

PIC单片机汇编语言基础
2、程序设计基础
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单片机的汇编语言设计

第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单片机简介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进行编译和烧录。

PIC单片机汇编指令集

PIC单片机汇编指令集

PIC16f 8位单片机汇编指令集1。

ADDWF f, d,f寄存器内容与W寄存器相加,d=1时结果放在f,d=0是结果在W,影响STATUS的C,DC和Z标志。

该条指令影响的状态与MCS51一致,有进位时C=1,有半进位时DC=1;否则相反。

结果为0时Z标志置位。

2。

ANDWF f, d,f寄存器内容与W寄存器相与,d=1时结果回存至f,d=0时结果存至W,结果影响STATUS的Z标志位。

3。

CLRF ( CLEAR File Register), 清空页寄存器,STATUS的Z标志位置位4。

CLRW (CLEAR WREG),清空W寄存器,STATUS的Z标志位置位,可以用MOVLW 0H等同使用5。

COMF f, d,f寄存器内容取反,d=1时结果存至f寄存器,d=0时结果存至W 寄存器。

影响Z标志位。

6。

DECF f, d,f寄存器内容自减1,d=1时结果存放于f;d=0时结果存放于w,影响STATUS的Z标志位。

7。

DECFSZ f, d f寄存器内容自减1,为0则跳行,d=1时结果在f寄存器;d=0时结果在W寄存器。

不影响标志位。

8。

INCF f, d,f寄存器内容自加1,d=1时结果回存至f,d=0时结果在W。

影响Z标志位。

9。

INCFSZ f, d,f寄存器内容自加1,结果为0则跳行。

d=1时结果回存至f;d=0时结果存至W寄存器。

该指令不影响标志位。

10。

IORWF f, d,f寄存器内容与W寄存器相或,d=1时结果回存至f,d=0时结果存至W,结果影响STATUS的Z标志位。

11。

MOVF f, d,当d=1时,f寄存器内容不变,d=0时f寄存器内容复制到W寄存器。

当d=1时,只改变Z标志位,可以用与判断f寄存器内容是否为0。

12。

MOVWF , f (MOVE WREG to File Register),很常用的一条指令,将W寄存器的内容保存到RAM中去13。

NOP,没什么可说的,空操作而已,但是确实很常用的语句,短延时必须的。

PIC8位单片机汇编语言常用指令的识读(中)

PIC8位单片机汇编语言常用指令的识读(中)

PIC8位单片机汇编语言常用指令的识读(中)三、面向字节、常数与控制操作的指令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内容是多少?还应在汇编语言开始时附加指令,这里从略。

pic18系列单片机-汇编语言程序例程-AD

pic18系列单片机-汇编语言程序例程-AD

;程序实现A/D转换功能,A/D采用中断方式。

该程序通过单片机的RA2模拟通道送入;一直流电压,当送入的直流电压大于2.5V时,8个LED闪动,当直流电压恢复到2.5V以下;时,LED停止闪动。

为了防止干扰,本程序对直流电压采样10次后再作判断,中间的采样结;果用间接寻址的方式存取。

LIST P=18F458INCLUDE "P18F458.INC"TIMES EQU 0X20DEY EQU TIMES+1ACCALO EQU TIMES+2 ;ACCA为双精度加数寄存器ACCAHI EQU TIMES+3ACCBLO EQU TIMES+4 ;ACCB为双精度加法的结果寄存器ACCBHI EQU TIMES+5FLAG EQU TIMES+6DEYH EQU TIMES+7DEYL EQU TIMES+9BEGFSR EQU 0X30 ;间接寻址FSR的起始值(宏定义方式给出)ORG 0X0000GOTO MAINORG 0X0008GOTO INTSERVE ;转向中断服务子程序ORG 0X30;***双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB***D_SUBCALL NEG_A ;求ACCA的补码;***双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB***D_ADDMOVF ACCALO,0 ;ACCB和ACCA低半字节相加ADDWF ACCBLOBTFSC STA TUS,C ;有进位否?INCF ACCBHI ;有,ACCB高字节加1,再加ACCAHIMOVF ACCAHI,0 ;ACCA、ACCB高半字节相加ADDWF ACCBHIRETURN ;子程序返回;************** ACCA取补子程序*****************NEG_ACOMF ACCALO ;ACCALO取反加1INCF ACCALOBTFSC STA TUS,Z ;低8位有进位吗?DECF ACCAHI ;有,ACCAHI减1,再取反COMF ACCAHI ;否则ACCAHI直接取反RETURN ;子程序返回;*********初始化子程序***************INITIALCLRF INTCON ;禁止总中断和外围中断MOVLW 0X51MOVWF ADCON0 ;选择AD通道为RA2,且打开A/D转换器;在工作状态,且使AD转换时钟为8Tosc MOVLW 0X80MOVWF ADCON1 ;转换结果右移,即ADRESH寄存器的高6;位为"0",且把RA2口设置为模拟量输入式;(注意后面要把RA5改成数据I/O方式,以;输出显示琐存信号)BCF PIR1,ADIF ;清除A/D转换标志BSF PIE1,ADIE ;A/D转换中断允许BSF INTCON,PEIE ;外围中断允许BSF IPR1,ADIP ;B口变位中断高优先级BSF RCON,7 ;使能中断优先级BSF TRIS A,2 ;设置RA2为输入方式BCF TRIS A,5 ;置RA5为输出方式,以输出锁存信号BCF TRISC,5BCF TRISC,3 ;设置SCK与SDO为输出方式MOVLW 0XC0MOVWF SSPSTA T ;设置SSPSTA T寄存器MOVLW 0X30MOVWF SSPCON1 ;设置S PI的控制方式,允许SSP方式,并;且时钟下降沿发送,与"74HC595当其;SCLK从低到高电平跳变时,串行输入数据;(DI)移入寄存器"的特点相应CLRF FLAGRETURN;*********软件延时子程序****************DELAYMOVLW 0XFFMOVWF DEYHAGAIN1 MOVLW 0XFFMOVWF DEYLAGAIN2 NOPDECFS Z DEYLGOTO AGAIN2DECFS Z DEYHGOTO AGAIN1RETURN;*************** A/D中断服务子程序*****************INTSERVEBCF PIR1,ADIF ;清除A/D转换标志MOVF ADRES H,WMOVWF INDF0 ;读取并存储A/D转换结果的高两位INCF FSR0LMOVF ADRESL,WMOVWF INDF0INCF FSR0L ;读取并存储A/D转换结果的低8位DECF TIMES,1 ;A/D转换次数减1MOVLW 0X02MOVWF DEYLOOP13 DECFS Z DEY,1GOTO LOOP13 ;给予一定的延时,保证两次A/D转换期间;2Tad的间隔时间和电容的采样时间BSF ADCON0,2 ;启动下一次A/D转换RETFIE ;中断返回;********** LED闪烁报警子程序*************ALARMMOVLW 0X01XORWF FLAG,1BTFSS FLAG,0CALL DISPLAY0 ;调用显“0”子程序NOPBTFSC FLAG,0CALL DISPDARK ;调用显“DARK”子程序RETURN;**********显全0子程序*************DISPLAY0TRANS MIT ;SPI发送显示子模块CLRF POR TA ;LACK送低电平,为锁存做准备MOVLW 0X08MOVWF TIMESLOOP80 MOVLW 0XC0 ;显示值为0,C0H为0的段码MOVWF SSPBUF ;启动发送WAITBTFSS PIR1,SSPIFGOTO WAIT ;等待发送结束BCF PIR1,SSPIF ;清除中断标志DECFS Z TIMESGOTO LOOP80 ;一次要发送完8个数据BSF POR TA,5 ;最后给一个锁存信号,代表一次显示任务完成RETURN;**********显示全DARK子程序*************DISPDARKTRANS MIT1 ;SPI发送显示子模块CLRF POR TA ;LACK送低电平,为锁存做准备MOVLW 0X08MOVWF TIMESLOOP8D MOVLW 0XFF ;显示值为0,FFH为DARK的段码MOVWF SSPBUF ;启动发送WAIT1BTFSS PIR1,SSPIFGOTO WAIT1 ;等待发送结束BCF PIR1,SSPIF ;清除中断标志DECFS Z TIMESGOTO LOOP8D ;一次要发送完8个数据BSF POR TA,5 ;最后给一个锁存信号,代表一次显示任务完成RETURN;***************主程序******************MAIN NOPCALL INITIAL ;初始化LOOPMOVLW 0X80 ;转换结果右移,及ADRESH寄存器的高6位为"0";且把RA2口设置为模拟量输入式(注意后面要把; RA5改成数据I/O方式,以输出显示琐存信号) MOVWF ADCON1MOVLW BEGFSRMOVWF FSR0L ;给出间接寻址时FSR的初值MOVLW 0X0AMOVWF TIMES ;每一轮A/D连续采样10次BSF INTCON,GIE ;总中断打开,及可以进行A/D转换中断BSF ADCON0,2 ;启动A/D转换LOOP1 MOVF TIMES,WBTFSS STA TUS,ZGOTO LOOP1 ;等待A/D转换中断BCF INTCON,GIE ;A/D转换次数到10次,关闭中断NOPCLRF ACCBHICLRF ACCBLO ;双精度加法的结果寄存器清0,为后面准备MOVLW 0X0AMOVWF TIMESMOVLW BEGFSRMOVWF FSR0LLOOP15 MOVF INDF0,WMOVWF ACCAHIINCF FSR0LMOVF INDF0,WMOVWF ACCALOINCF FSR0LCALL D_ADDDECFS Z TIMESGOTO LOOP15NOP ;计算得到10次A/D转换的和MOVLW 0X84MOVWF ADCON1 ;把RA5设成数字I/O,以输出显示锁存信号MOVLW 0X14MOVWF ACCAHICLRF ACCALOCALL D_SUB ;通过双精度减判断模拟量是否达到报警限;度(1400H=200H*0AH,200H与2.5V对应) BTFSS ACCBHI,7CALL ALARM ;若ACCBHI的最高位为1,则证明减法结;果为负,即直流电压值超过2.5V,则报警NOPBTFSC ACCBHI,7CALL DISPLAY0 ;若没有超过2.5V,则不报警,8个LED;同时显示0CALL DELAY;软件延时,使电压检测不要过于频繁GOTO LOOP ;重复检测输入的直流电压值END。

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”,例如B;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。

PIC单片机指令系统和汇编语言程序设计

PIC单片机指令系统和汇编语言程序设计

第二章PIC单片机指令系统和汇编语言程序设计2.1 指令系统概述2.1.1 指令的表示方法1.机器指令的表示方法:指令用于规定计算机的基本操作。

一台计算机所能执行的指令集合就是它的指令系统。

指令共有两种表示方法,分别是机器语言表示方法和汇编语言表示方法。

不同种类的单片机有不同的一套命令(即所谓“指令系统”)。

2.汇编语言的表示方法:汇编语言是对机器语言的改进,它采用便于人们记忆的一些符号(例如简化的英文单词)来表示操作码、操作数和地址码等。

通常把表示指令的符号称之为助记符。

3.PIC16F87X单片机指令:PIC16F87X单片机采用精简指令集(RISC)结构,指令效率高,功能强。

它的指令为单字的宽字位(14)指令,由此生成的程序代码短。

指令条数少,仅有35条。

(1)面向字节操作类(2)面向位操作类(3)常数操作和控制类操作。

2.1.2PIC单片机指令的寻址方式1.寄存器间接寻址:所谓寄存器间接寻址指的是通过寄存器F0、F4来实现。

实际的寄存器地址放在F4的低5位中,通过F0来进行间接寻址。

INDF不是物理上实际存在的寄存器,而任何寻址INDF的指令都是以FSR寄存器内容为地址的RAM单元中存放着参加运算或操作的数据。

2.立即数寻址:所谓立即寻址就是操作数在指令中直接给出。

通常把出现在指令中的操作数称之为立即数,因此就把这种寻址方式称之为立即寻址。

3.直接寻址:指令中操作数以其所在存储单元地址的形式给出,就称之为直接寻址。

这种方式是对任何一寄存器直接寻址访问。

4.位寻址:这种寻址方式是对寄存器中的任一位(bit)进行操作。

2.1.3指令符号的意义说明1.PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释2.指令符号的意义说明:在PIC系列单片机指令中常把数据存储器RAM当作寄存器来使用(处理)并用字母f(或F)表示。

PIC04汇编语言程序设计

PIC04汇编语言程序设计

MAIN CLRW CALL SUB …… GOTO MAIN ;--------------------------------------------------------------------------;子程序和中断服务程序区 ;--------------------------------------------------------------------------SUB MOVLW 01H ;子程序 ;子程序 …… RETURN ;子程序返回 ;子程序返回 INT_BODY ;中断服务程序 ;中断服务程序 MOVLW 0FFH RETFIE ;中断服务程序返回 ;中断服务程序返回 ;---------------------------------------------------------------------------END ;全部程序结束 ;全部程序结束
⒊操作数 指操作对象, 可以是立即数或地址。 指操作对象 , 可以是立即数或地址 。 当用 数值表示操作数时, 数值可以是二进制、 数值表示操作数时 , 数值可以是二进制 、 八进 十进制、十六进制数值,见下表。 制、十进制、十六进制数值,见下表。
注意:编译器 MPASM默认的进制不是十进制 , 默认的进制不是十进制, 注意 : 编译器MPASM 默认的进制不是十进制 而是十六进制。 而是十六进制。 操作数可以是事先定义过的符号及表达式。 操作数可以是事先定义过的符号及表达式。 在源 表示一个以 A ~ F 打 头的十六进制数时, 头的十六进制数时,则必须在它的前面增添一 如十六进制数FF应表示为 FFH。 应表示为0 个“0”。如十六进制数FF应表示为0FFH。 用字符代表的常数就是该字符的ASCII码 用字符代表的常数就是该字符的ASCII码。 ⒋注 释 注释可有可无, 注释可有可无,但是最好养成附带注释的 习惯。 习惯。

单片机编程之汇编语言基础-PIC单片机汇编指令

单片机编程之汇编语言基础-PIC单片机汇编指令

单片机编程之汇编语言基础-PIC单片机汇编指令1、程序的基本格式先介绍二条伪指令:EQU 标号赋值伪指令ORG 地址定义伪指令PIC16C5X在RESET后指令计算器PC被置为全1,所以PIC16C5X几种型号芯片的复位地址为:PIC16C54/55:1FFHPIC16C56:3FFHPIC16C57/58:7FFH一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。

但这里我们推荐一种清晰明了的格式供参考。

TITLE This is ;程序标题;--------------------------------------;名称定义和变量定义;--------------------------------------F0 EQU 0RTCC EQU 1PC EQU 2STATUS EQU 3FSR EQU 4RA EQU 5RB EQU 6RC EQU 7┋PIC16C54 EQU 1FFH ;芯片复位地址PIC16C56 EQU 3FFHPIC16C57 EQU 7FFH;-----------------------------------------ORG PIC16C54 GOTO MAIN ;在复位地址处转入主程序ORG 0 ;在0000H开始存放程序;-----------------------------------------;子程序区;-----------------------------------------DELAY MOVLW 255┋RETLW 0;------------------------------------------;主程序区;------------------------------------------MAINMOVLW B00000000TRIS RB ;RB已由伪指令定义为6,即B口┋LOOPBSF RB,7 CALL DELAYBCF RB,7 CALL DELAY┋GOTO LOOP;-------------------------------------------END ;程序结束注:MAIN标号一定要处在0页面内。

PIC8位单片机的汇编语言

PIC8位单片机的汇编语言

PIC 8位单片机的汇编语言要单片机完成一项基本任务,必须将任务分解成一些具体步骤,再要求它去逐项执行每个步骤,还要对它下命令。

该命令在单片机术语中称为“指令”(Inetruction)。

完成一项任务所需的所有指令的有序集合就称为“程序”(Programm)。

这些指令要预先一条一条顺序地放到单片机的程序存贮器中,单片机在运行时,片中的CPU从程序存贮器中逐条有序取出指令,执行指令,并将有关指令执行完毕,即可完成既定任务。

不同种类的单片机有不同的一套命令(即所谓“指令系统”)。

PIC单片机其指令系统与51系列的完全不同。

PIC16F84单片机有30余条指令构成的指令系统。

每条指令由14位(bit)构成,这些位是二进制码的0和1,如果要使16F84单片机端口B的B 0位输出高电平,以点亮一只发光二极管LED,而B口的其余各位仍保持低电平,则需要使单片机执行下列各条指令(机器码): 11000000000000 00000001100110 11000000000001 00000010000110 10100000000100早先的技术人员就是用这样的二进制码来编写程序的。

上列程序,看起来像天书,很费解,但它完全能指挥单片机的运作。

因为单片机实际上是一种复杂的数字逻辑电路。

我们都知道,要数字电路运作,必须相应输入高、低电平,对正逻辑而言,高电平为1,低电平为0。

上述指令顺序在不同的数位上出现的0和1,经译码后,即可完成各种不同的运作,逐步完成单片机所要执行的任务,如点亮一个LED。

上述各条指令的写法,虽然是完全面向单片机,是用来直接指示单片机该如何运作的。

因此,这种由0、1组成的指令称为机器语言。

实际上,这种由二进码构成的指令集不但难读懂,而且用来编程也有困难。

因为程序往往不是从头到尾顺序执行,有时还需中途转移到其它单元执行一段程序后再返回来。

而指令是一条一条顺序存放在存贮器各个单元内的。

因此,如果要转移,需指明具体转到哪个单元,即要写出该单元的地址。

pic单片机汇编语言程序设计实例

pic单片机汇编语言程序设计实例

PIC单片机汇编语言程序设计实例介绍在计算机科学领域中,汇编语言是一种低级语言,用于编写机器指令的文本形式。

汇编语言程序设计是一门重要的技能,特别是在嵌入式系统开发中。

PIC (Peripheral Interface Controller)单片机是一种常见的微控制器,广泛应用于各种电子设备中。

本文将介绍PIC单片机汇编语言程序设计的实例,旨在帮助读者更好地理解和应用汇编语言编程。

PIC单片机简介PIC单片机是由美国微芯科技公司(Microchip Technology Inc.)设计和生产的一种微控制器。

它具有高性能、低功耗和丰富的外设接口,适用于各种应用领域,如家电、汽车电子、医疗设备等。

PIC单片机的指令集是基于汇编语言的,因此掌握汇编语言编程对于理解和应用PIC单片机至关重要。

PIC单片机汇编语言基础在开始编写PIC单片机汇编语言程序之前,我们首先需要了解一些基本概念和语法。

以下是一些常用的指令和语法:1. 数据寄存器PIC单片机有多个数据寄存器,用于存储数据和中间结果。

例如,W寄存器是一个通用寄存器,用于存储临时数据。

另外,还有一些特定功能的寄存器,如PORTA寄存器用于控制输入输出。

2. 指令集PIC单片机的指令集包含了各种操作指令,如算术运算、逻辑运算、位操作等。

每个指令都有特定的操作码和操作数,用于执行相应的操作。

3. 标志寄存器PIC单片机的标志寄存器用于存储一些状态信息,如进位标志、零标志等。

这些标志位可以用于条件分支和循环控制。

4. 中断PIC单片机支持中断机制,可以在特定条件下中断当前程序的执行,执行中断服务程序。

中断可以提高系统的响应速度和实时性。

PIC单片机汇编语言程序设计实例下面将通过几个实例来演示PIC单片机汇编语言程序的设计和实现。

实例1:LED闪烁步骤:1.初始化端口为输出模式。

2.设置LED引脚为高电平,使LED熄灭。

3.延时一段时间。

4.设置LED引脚为低电平,使LED亮起。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)中。

相关文档
最新文档