![汇编语言及其程序设计_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/c05df3ef-8d38-4f68-856e-07b8b7c55dac/c05df3ef-8d38-4f68-856e-07b8b7c55dac1.gif)
![汇编语言及其程序设计_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/c05df3ef-8d38-4f68-856e-07b8b7c55dac/c05df3ef-8d38-4f68-856e-07b8b7c55dac2.gif)
![汇编语言及其程序设计_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/c05df3ef-8d38-4f68-856e-07b8b7c55dac/c05df3ef-8d38-4f68-856e-07b8b7c55dac3.gif)
![汇编语言及其程序设计_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/c05df3ef-8d38-4f68-856e-07b8b7c55dac/c05df3ef-8d38-4f68-856e-07b8b7c55dac4.gif)
![汇编语言及其程序设计_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/c05df3ef-8d38-4f68-856e-07b8b7c55dac/c05df3ef-8d38-4f68-856e-07b8b7c55dac5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第 1页第四章 PIC汇编语言及其程序设计&4.1PIC的RISC指令集&4.2 MPASM 汇编语言&4.3汇编语言的寻址模式&4.4MPASM常用子程序设计 第 2页PICmicro 单片机指令集单片机指令集按按操作数访问形式操作数访问形式分类分类f = 寄存器, k = 立即数 (8位), b = 位地址 , d = 目的地 (1=f, 0=W) 第 3页PIC指令集核心助记符助记符功能说明助记符功能说明ADD加MOV移动SUB减RL左移AND与RR右移IOR或CLR清空XOR异或COM取反INC加一RET返回DEC减一BTF位测试 第 4页指令系统字符
2、说明字符功能说明字符功能说明W工作寄存器FSZSkip if Zerof文件寄存器FSCSkip if Carryb位FSSSkip if SetK( )L立即数( )d方向传输方向 第 5页典型指令分析典型指令分析MyVarW or WREGFile Registers立即数立即数 第 6页PICmicro 单片机指令集单片机指令集字节操作字节操作 第 7页PIC单片机单片机指令集指令集位操作位操作位操作位操作 第 8页PIC单片机单片机指令集指令集立即数操作立即数操作 第 9页控制类操作控制类操作PIC单片机单片机指令集指令集控制类操作控制类操作 第 10页&数据传送类指令 4 条
3、&算术运算类指令 6 条&逻辑运算类指令 14 条&控制转移类指令 11 条PIC16F877指令集的35条指令按操作码的类别分为四类指令 第 11页数据传送类指令助记符操作说明影响状态位MOVF f , dZMOVWF f-MOVLW K-SWAPF f,d- 第 12页程序举例&例1、编程将立即数20H传送到通用寄存器20H中MOVLW 20HMOVWF FSRMOVWF INDFMOVLW 20HMOVWF 20H 第 13页MOVF 20H,WMOVWF 40HMOVF 30H,WMOVWF 20HMOVF 40H,WMOVWF 30H 例2、编程将通用
4、寄存器20H和30H中的内容进行交换 第 14页算术运算类指令助记符操作说明影响状态位ADDWF f , dZSUBWF f , dC、DC、ZADDLW KC、DC、ZSUBLW KC、DC、ZINCF f , dZDECF f , dZ 第 15页程序举例&例1、编程将通用寄存器20H(高位)、30H(低位)构成的16位数据与通用寄存器40H(高)、50H(低)构成的16位数相加后放入40H(高)、50H(低)中(已知其和不会超出65535)MOVF 30H,WADDWF 50H,FBTFSS STATUS,CGOTO LOOPINCF 20H,WLOOP ADDWF 40H,F
5、第 16页 助记符操作说明影响状态位CLRF f ZCLRW -ZCLRWDT -T0、PDBCF f , b-BSF f , b-RLF f , dCRRF f , dC逻辑运算类指令 第 17页助记符操作说明影响状态位ANDWF f , d ZIORWF f , dZXORWF f , dZANDLW KZIORLW KZXORLW KZCOMF f , dZ 第 18页控制转移类指令助记符操作说明影响状态位CALL K-GOTO K-INCFSZ f , d-DECFSZ f , d-BTFSC f , b-BTFSS f , b-RETFIE - 第 19页助记符操作说明影响状态位RE
6、TLW K-RETURN -NOP -SLEEP -TO、PD 第 20页4.1.5 特别功能指令 CLRWDT清除看门狗计数器指令范例:MAINLOOP ;程序主循环 CLRWDT;清看门狗CALLKEYCHECK ;检查按键CALLDISPLAY;显示刷新GOTOMAINLOOP ;重复主循环体SLEEP单片机进入低功耗休眠模式指令范例: CALLPREPSLEEP ;关闭不需要的负载,准备休眠 SLEEP;现在进入休眠模式 NOP;唤醒后开始执行的指令 第 21页4.1.6 指令流水线&由于PIC 单片机的系统结构采用“哈佛”结构,使得在一条指令被执行的同时读取下一条指令成为可能
7、,这就是PIC 单片机的指令执行流水线概念。 第 22页&例1、编程将通用寄存器20H、30HR的数据分别与立即数20H、30H相“与”和相“或”后再相加,结果存入40H存储器中。ORG 0000HNOPMOVLW 20HANDWF 20H,WMOVWF 40HMOVLW 30HIORWF 30H,WADDWF 40H,F程序举例 第 23页例2、分析程序段,指出程序执行后,存储单元的结果MOVLW 22H - - - 22H MOVWF 22H - 22H - 22HMOVWF FSR - 22H 22H 22HADDWF INDF , F - 44H 22H 22HINCF IND
8、F - 45H 22H 22HSWAPF 22H,W - 45H 22H 22HRLF 22H , F - 8AH 22H 54HDECF FSR , F - 8AH 21H 54HMOVWF INDF 54H 8AH 21H 54HBSF INDF , 7 D4H 8AH 21H 54H21H 22H FSR W 第 24页要想控制单片机端口的输入输出,首先需对端口方向寄存器和数据寄存器进行设置,引脚的方向寄存器的相应位设置为1表示输入;设置为0表示输出端口的输入输出控制例:将RA4/T0CKI引脚设置为输入状态BSF STATUS,RP0BSF TRISA,4 第 25页例:将RB0/IN
9、T引脚设置为输入状态BSF STATUS,RP0BSF TRISB,0例:将端口C的低四位设置为输出、高四位设置为输入BSF STATUS,RP0MOVLW 0F0HMOVWF TRISC 第 26页例:从端口C的低四位引脚输出高电平、高四位引脚输出为低电平BSF STATUS,RP0MOVLW 0MOVWF TRISCMOVLW 0FHMOVWF PORTC 第 27页&例2、编程将数据存储器20H低4位和30H高4位组合成一个8位数据并从RC端口输出。ORG 0000HNOPBANKSEL TRISCMOVLW 00HMOVWF TRISCBANKSEL PORTCMOVF 20H
10、,WANDLW 0FHMOVWF 20HMOVF 30HMOVF 30H,WANDLW 0F0HIORWF 20H,WMOVWF PORTC 第 28页4.2 MPASM汇编语言&4.2.1 MPASM简介&4.2.2 MPASM的语法&4.2.3 MPASM的伪指令&4.2.4 MPASM的运算符&4.2.5 MPASM的内置宏指令 第 29页4.2.1 MPASM简介&在MPLAB IDE中已经集成了MPASM编译器工具集。用户在MPLAB IDE中即可实现对汇编程序的编译、连接、调试和编程。&MPLAB安装后汇编编译器的可执行文件名
11、为MPASMWIN.EXE,如是缺省安装则存放路径“C:PROGRAM FILESMICROCHIPMPASM SUITE”下。此目录下还有一个MPLINK.EXE的可执行文件,在多模块(多源文件)可重定位的程序开发模式下,最后一定要用MPLINK把所有的程序与数据模块连接定位成一个目标文件(机器码文件)。但在绝对定位的程序开发模式下,MPLINK将不会被用到。 第 30页4.2.2 MPASM的语法&所有的有效字符都是ASCII字符集范围内的。不包括其它国家的任何专用字符。&MOVLW 0 x8; 错误,“0 x8”中第二个不是ASCII字符&一个指令代码(包含指令及
12、其操作数)必须在同一行中描述完毕。例如: &ADDWF PORTB,F ; 指令后的操作数不能另起一行&汇编指令不要在每一行的起始处开始编写,至少在行首留有一个空格符。例如:&ADDWF PORTB,F ; 汇编指令不能顶格书写&标号或变量符号的命名规则:只能由字母、数字和下划线构成。但不能以数字开头。例如:&1COUNT EQU 0 x22 ; 错误,变量符号或标号不能以数字开头&_1COUNT EQU 0 x23 ;正确&COUNT1 EQU 0 x23 ;正确&COUNT_1 EQU 0 x23 ;正确 第 31页4.2.2
13、 MPASM的语法&程序跳转用的语句标号和程序员定义的变量符号必须顶格,即起始于一行的第一个字符位置处。语句标号可以用也可以不用“:”冒号结尾。例如:&COUNT EQU 0 x21 ; 程序员定义的变量符号必须顶格书写&SUB_1 ; 跳转用的标号必须顶格书写& ADDWF PORTB,F &SUB_2: ; “:”写不写都可以& ADDWF PORTC,F &任何标号或变量名字中不能出现MPASM保留运算符,例如()、+、-、*、/、&、|、!等符号。&COUNT-1 EQU 0 x22 ; 错误,变量或标号不能包含M
14、PASM运算符“-”&MPASM内的保留字(汇编指令码或伪指令)不区分大小写(大小写作用相同)。& ADDWF PORTB,F & ;等价于& addwf PORTB,F 第 32页4.2.2 MPASM的语法& 程序中立即数字的描述方式有以下几种:& 十六进制数:以0 x开头(推荐),如0 x12、0 xFF、0 xFF。或者以H结尾,如34H、0FFH。若以字母开头时前面需加0或H1234、HFFFF。如:& ADDWF 0 x08,F ;正确& ADDWF 8H,F ;正确& ADDWF H8,F ;错误&
15、ADDWF H8,F ;正确& ADDWF 0 xA8,F ;正确& ADDWF A8H,F ;错误,不是立即数形式& 十进制数:.123,以小数点开头或D123。如:& MOVLW .255 ;正确& MOVLW D255 ;正确& 二进制数:B10100101& MOVLW B11100011 ;正确& MOVLW B11100011 ;错误,不是正确的二进制形式& 八进制数:O12,注意是英文字母“O”而不是数字“0”开头。& MOVLW O01 ;正确& MOVLW O01 ;错误,不是正确的八进制
16、形式 第 33页4.2.2 MPASM的语法&注释信息用英文半角“;”引导。“;”后直到此行结束的内容全为注释信息。注释内容可以是任意形式的文本字符,包括全角汉字和符号。除了注释内容外,程序的其他地方不建议使用汉字或全角符号。&源程序中必须出现伪指令END,代表汇编结束。END后的内容将被编译器忽略。 第 34页4.2.3 MPASM的伪指令& EQU & EQU 顾名思义是“等于”的意思,通常称之为“定义”。其作用是用一个标号名(符合MPASM的命名规则)替换其他数字或已经定义过的符号名。& 指令范例:& MYCOUNT EQU 0 x70;定
17、义MYCOUNT 符号替换立即数0 x70& STEP EQU 0 x23;符号名STEP等于0 x23& COUNT1 EQU MYCOUNT+1;如果MYCOUNT没有事先定义则会产生一个错误 第 35页CBLOCK 和 ENDC& CBLOCK 伪指令声明变量块的起始地址,ENDC 伪指令声明变量块定义结束,CBLOCK/ENDC中间可以插入任意多的变量声明。其地址编排由编译器自动计算:第1个变量地址分配从起始地址开始,然后按所声明变量保留的字节数自动分配后面变量的地址,变量所需保留的字节数用“:”加后面的数字表示,如果只有1 个字节“:1 ”可以省略不写。例如:
18、& CBLOCK 0 x20 ;定义变量块起始地址为0 x20& TEMP ;TEMP地址为00,占1个字节& BUFFER:8 ;BUFFER的起始地址为0 x22,并保留8个字节单元& VARL ;VARL的地址为0 x2A,占1个字节& VAR2 ;VAR2的地址为0 x2B,占1个字节& ENDC ;结束变量块定义 第 36页#include 或include&# include用来把另外一个文件的内容全部包含复制到本伪指令所在的位置。被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM能够识别的。
19、最经常被包含的是针对PIC单片机内部特殊功能寄存器定义的包含头文件。如:&#include ;包含PIC16F877A的头文件 第 37页LIST& LIST伪指令可以设定程序编译时的一些信息,例如所选单片机的型号,编译时选择的缺省数制等。& LIST 伪指令使用例子。& LIST P=16F877A,R=DEC ;设定所选单片机型号为PIC16F877A& 第 38页_CONFIG&注意CONFIG前是两个下划线字符。&此伪指令的重要作用是把芯片的配置字设定在源程序中。此配置字无法用指令存取,只能使用编程器存取。建议大家尽量用此伪指令把
20、芯片的配置字写在程序中,便于程序的烧写和调试。 &指令范例:& _CONFIG _WDT_OFF & _RC_OSC & _LVP_OFF ;关闭看门狗定时器& ;选择RC振荡器,关闭低电压编程功能& ;若使用外部的高速振荡器,可以改写为& _CONFIG _WDT_OFF & _HS_OSC & _LVP_OFF 第 39页#define &#define的作用是定义常数符号,即用符号名替换一个常数或符号名。其功能与EQU相同,但是用#define定义的符号无法通过【Watch】窗口观察。所以一般用其定义常量。&
21、amp;指令范例:&#define DELAY_TIME 200 ;定义常数符号,即用DELAY_TIME符号代替200&#define KEY1 PORTB,0 ;用KEY1 符号代替端口PORTB的第0引脚 第 40页ORG&ORG 用以定义程序代码的起始地址,通过此伪指令可以把程序定位到任何可用的程序空间,它实现的是程序代码绝对定位。&指令范例:& ORG 0 x000 ;定义以下指令从程序存储器地址0 x000开始存储& GOTO MAIN& ORG0 x004 ;定义中断入口地址,以下指令从地址0 x004开始存储& M
22、OVWFW_TEMP;其他中断服务代码& &MAIN& ;主程序代码& ORG0 x800;定义PAGE1的起始地址,以下指令代码放在PAGE1中&SUB1& ;SUB1子程序代码& RETURN 第 41页DT & DT 的作用是定义表格数据(Define Table),实现程序存储器的查表操作。DT可以直观的把一串常量数据存放在程序存储器(ROM)内,这些数据会按字节的顺序用“RETLW”指令书写,当程序执行到DT定义的表格数据后就会返回一个字节。& 指令范例:& LTABLEADDWF PCL,F;PC 相对
23、寻址查表&DT0;实际产生指令RETLW 0&DT1, 2, 3;实际产生指令RETLW 1 &实际产生指令RETLW 2 & 实际产生指令RETLW 0 x33(3的ASCII码)&DTABC;实际产生指令RETLW 0 x41(A 的ASCII码)&实际产生指令RETLW 0 x42(B 的ASCII码);实际产生指令RETLW 0 x43(C 的ASCII码)& 当程序执行完以下两行指令后, W的内容就变为了A。& MOVLW 4 & CALL LTABLE & 对以上程序的具体理解请参考本章的“汇编语言的寻
24、址模式”一节内容。 第 42页DE &DE 伪指令可以让程序员在源程序中定义片内EEPROM 的初值。该条伪指令只适用于那些内含EEPROM 数据存储器的单片机,如PIC16F87X 、PIC16F62X 等等。 &例如:& ORG 0 x2100 ;编程器能自动识别此地址作为EEPROM数据区起始地址& DE.32,0 x32 ;EEPROM地址单元0=0 x20, 1=0 x32& DEOK ;4=0 x4F, 5=0 x4B&根据以上的定义,芯片完成编程烧入后,其内部EEPROM 区从0 x00 单元开始被分别初始化成0 x20、0 x32
25、、0 x4F、0 x4B。其他未被初始化的EEPROM单元全部是0 xFF。 第 43页END &END 伪指令告诉汇编编译器编译工作到此为止,END 后面所有的信息,不管正确与否,一概不管。在绝大多数情形下,汇编源代码的最后一行应该是END 。无论如何,END 必须出现在程序中,不然编译器会报错,无法进行编译工作。 第 44页4.2.4 MPASM的运算符& 取当前指令的地址值:$ & ;用语句标号得到指令地址& HEREGOTO HERE;跳转到当前地址,程序进入死循环& DELAY DECFSZCOUNT, F;计数器减1并判0&GOTO
26、DELAY;跳转到上一行重复循环& 以上的代码可以用$运算符简化为:&GOTO $;跳转到当前地址程序进入死循环&DECFSZCOUNT, F ;计数器减1 并判0&GOTO $-1;跳转到(当前地址-1)处,即上一行,& ;重复循环 第 45页取16 位立即数的高低字节:HIGH 和LOW & 2 字节变量赋立即数初值&#defineDELAY_TIME.1000;定义一个常数立即数&MOVLWLOW(DELAY_TIME);取立即数的低字节值,经&编译器计算将得到0 xE8&MOVWFCOUNT;赋给变量的低字
27、节&MOVLWHIGH(DELAY_TIME);取立即数的高字节值,经&编译器计算将得到0 x03 &MOVWFCOUNT+1;赋给变量的高字节 第 46页加减乘除: - * / &高速异步通信波特率BPS=FOSC/16*(X+1) &故,波特率常数X=FOSC(BPS*16)-1&#define BPS.9600;定义工作波特率&#define FOSC .4000000;定义单片机工作振荡频率4MHZ&其他代码&MOVLWFOSC/(BPS*.16)-1;编译器计算得到25(十进制25)&MOVWFSPBRG
28、;设定波特率定时寄存器&程序中用了统一的计算公式后,在调试时只要简单地改变前面的#define 语句定义新的波特率或振荡频率值,然后重新编译一次程序即实现了波特率设定代码的更新,非常方便。 第 47页移位运算:和”运算符把一个立即数算术右移若干位(高位补0),“ 1 ;W=0 x2A &MOVLW XXX 2 ;W=0 x54 &MOVLW 1 7;W=0 x80 第 48页立即数逻辑运算:& | &“&”运算符把一个立即数和另外一个立即数做逻辑与运算。&“|”运算符把一个立即数和另外一个立即数做逻辑或运算。&“”运算符把一个立即
29、数和另外一个立即数做逻辑异或运算。&例如:把两个立即数做逻辑与运算。&#defineVAL10X34&#defineVAL20X0F&MOVLWVAL1&VAL2&注意例子中的VAL1、VAL2都是事先已经定义的立即数而不是RAM 中的变量。 第 49页4.2.5 MPASM的内置宏指令&BANKSEL &BANKSEL可以帮助程序员非常方便地实现寄存器BANK 的设定。程序员只需在BANKSEL 后给它一个变量名或地址,编译器会自动按照变量地址所在的BANK,自动生成设定STATUS寄存器RP1: RP0 位的指令。例如,对于如
30、下指令: &BANKSELTRISC ;设定TRISC所在的BANK(TRISC在BANK1)&若芯片选择PIC16F874A, RAM共有2 个BANK,则编译后的机器码为&BSFSTATUS, RP0;只生成1条汇编代码&若芯片选择PIC16F877A, RAM共有4 个BANK,则编译后的机器码为&BSFSTATUS, RP0;生成2条汇编代码&BCFSTATUS, RP1; 第 50页BANKISEL &与BANKSEL 类似,不过它对付的是用于寄存器相对寻址的STATUS 寄存器中的IRP 位。它也会用最少的代码实现IRP 位的
31、设定。 &芯片选择PIC16F877A, RAM 共有4 个BANK&CBLOCK0 x120& BUFFER:8 ;从地址0 x120 起定义8 字节的数据区&ENDC&BANKISELBUFFER;用BANKISEL 自动设定IRP 位&MOVLWLOW(BUFFER) ;取BUFFER的地址(只有低8位)&MOVWFFSR;送给FSR&编译后的机器码如下。&BSFSTATUS, 7;真正的设定IRP 的汇编代码&MOVLW0 x20&MOVWFFSR 第 51页PAGESEL& PAGESEL
32、 可以帮助程序员设定程序的页面。使用方式与BANKSEL 相似,只是它改变的是PCLATH 两位。该宏指令也同样将用最少的代码实现程序页面设定.& ;芯片选择PIC16F877A, RAM共有4个页面&ORG0 x0100;在第0页内& MAINPAGESEL SUB1;用宏指令设定被调用子程序的页面&CALLSUB1;随后调用该子程序&PAGESEL $;用宏指令设定当前地址的页面&GOTOMAIN;循环&ORG0 x0800;SUB1子程序定义在第1页& SUB1 & & RETURN;子程序返回& 编
33、译后的机器码(MAIN部分)如下。& MAINBSFPCLATH,3;设定SUB1所在的页面&BCFPCLATH,4&CALLSUB1 &BCFPCLATH,3;设定当前指令所在的页面&BCFPCLATH,4&GOTOMAIN 第 52页CLRC/ SETC &CLRC/ SETC针对的是状态寄存器STATUS 中的进位标志位。&CLRC 等同于BCF STATUS,C;C=0&SETC等同于BSF STATUS,C;C=1 第 53页CLRZ/ SETZ &CLRZ/ SETZ针对的是状态寄存器STATUS 中的
34、0标志位。&CLRZ 等同干BCF STATUS,Z;Z=0&SETZ 等同于BSF STATUS,Z;Z=1 第 54页CLRDC/SETDC &CLRDC /SETDC 针对的是状态寄存器STATUS 中的半字节进位标志位。&CLRDC等同于BCF STATUS, DC;DC=0&SETDC等同于BSF STATUS, DC;DC=1 第 55页SKPC/ SKPNC &SKPC/ SKPNC是判状态寄存器STATUS 中的进位标志位,若条件满足则程序跳过下一条指令。&SKPC 等同于BTFSSSTATUS, C;若C=1 则程序跳过
35、下一条指令&SKPNC等同于BTFSCSTATUS, C;若C=0则程序跳过下一条指令 第 56页SKPZ / SKPNZ &SKPZ/ SKPNZ是判状态寄存器STATUS 中的0标志位,若条件满足则程序跳过下一条指令。&SKPZ等同于BTFSSSTATUS,Z;若Z=1则程序跳过下一条指令&SKPNZ等同于BTFSCSTATUS,Z;若Z=0则程序跳过下一条指令 第 57页SKPDC / SKPNDC &SKPDC / SKPNDC 是判状态寄存器STATUS 中的半字节进位标志位,若条件满足则程序跳过下一条指令。&SKPDC等同于BTFSS
36、STATUS,DC;若DC=1 则程序跳过下一条指令&SKPNDC等同于BTFSCSTATUS;若DC=0则程序跳过下一条指令 第 58页BC/BNC&BC/BNC是判断状态寄存器STATUS 中的进位标志位C,按进位标志实现程序的分支跳转。例如: &MOVLW0 x31;W=0 x31&ADDWFSUM,F;SUM=SUM+W&BCCARRY1 ;如果发生进位就跳转到CARRY1处执行&NOP;如果没有进位则继续执行BC下一条指令NOP&请不要被BC/ BNC 这样“一条”指令所迷惑,它实际上是由2 条汇编指令组成,且用到了GOTO 实
37、现跳转,故在用此宏指令前注意页面的设定。 第 59页BZ/ BNZ &与BC / BNC一样,只不过判别的是状态寄存器STATUS 中的Z标志位。例如:&MOVLW0 x55;W=0 x55&XORWFFLAG, W;FLAG=0 x55&BZMATCH;Z=1,FLAG=0 x55,跳转到MATCH 处执行&NOP;Z=0,继续执行BZ 的下一条指令NOP&BDC/NBDC&同上,判别的是状态寄存器STATUS中的半字节进位标志位。 第 60页4.3 汇编语言的寻址方式&立即数寻址&寄存器间接寻址&直接寻址&am
38、p;位寻址 第 61页立即数寻址立即数寻址 例: MOVLW k ADDLW k SUBLW k ANDLW k IORLW k XORLW k 第 62页RETLW kCALL kGOTO k 第 63页举例:MOVLW D255ANDLW B00001111CALL 0 x7F0GOTO LOOP99RETLW H3F 第 64页 MOVLW 0 x60 MOVWF FSRLOOP CLRF INDF INCF FSR,F BTFSS FSR,4 GOTO LOOP 4.3.2 数据寄存器间接寻址 第 65页直接寻址MOVWF 0 x05MOVWF PORTADECF FSR,FIORWF
39、 AAA,WMOVF STATUS,W 第 66页位寻址BSF STATUS,PR0BCF PORTB,7BSF INTCON,GIEBTFSS STATUS,ZBTFSC STATUS,C 第 67页 的装载方式的装载方式(PCL和和PCH 13-bit) 第 68页 第 69页间接寻址间接寻址l清除 0 x20 to 0 x7F的RAM. 第 70页间接寻址间接寻址&FSR 和 INDF 用于间接寻址&FSR 是地址指针&当访问INDF地址时,实际上是访问以FSR内容为地址的数据存储器RAM单元。FSRINDFWritingReading21222324FSRIND
40、F21222324movlw22movwfFSRmovlw5movwfINDFmovlw22movwfFSRmovfINDF,Wmovwf5 第 71页&体选码由STATUS的IRP位和FSR寄存器的BIT7组成&体内单元地址来自FSR的低7位间接寻址 第 72页直接寻址 低7位的数据地址直接在指令中描述体内的单元地址直接来自指令机器码 高2位在STATUS寄存器中 (又称寄存器组号BANK)体选码 第 73页4.4 MPASM汇编常用子程序设计&判断分支程序段设计&循环程序段的设计&延时子程序的设计&查表子程序的设计 第 74页判断分支程序段设
41、计& 本例省略键盘扫描程序部分。假定通过CALL指令去执行识别键盘输入过程,并经数据处理,可以获得各键的序列编号(0N),由W工作寄存器带回。& MAINLOOP&PAGESEL KEY&CALLKEY;调用KEY键盘扫描程序,键值由W返回&PAGESEL JIAN_GN&CALLJIAN_GN& PAGESELMAINLOOP& GOTOMAINLOOP& ;-& ;根据键入情况,确定相应键功能子程序& ;-& JIAN_GNADDWFPCL,F;确定相对偏移量&GOTOPKEY0;执行P
42、KEY0键盘定义功能&GOTOPKEY1;执行PKEY1键盘定义功能&GOTOPKEY2;执行PKEY2键盘定义功能& &GOTOPKEYN;执行PKEYN键盘定义功能 第 75页SZH MOVWF 20H MOVLW 07H ANDWF 20H,W ADDWF PCL,FL0 GOTO LOOP0L1 GOTO LOOP1L2 GOTO LOOP2L3 GOTO LOOP3L4 GOTO LOOP4L5 GOTO LOOP5L6 GOTO LOOP6L7 GOTO LOOP7判断分支例子2、散转指令程序 第 76页循环程序段的设计&假定执行某个显示功能
43、100次后结束工作,显示子程序为SHOW。&ORG0000H&MOVLWD101;取常数101&MOVWF20H;送入20H单元中&LOOPDECFSZ20H,F;20H单元减1,为0间跳&GOTORRT;未到100次跳转显示&GOTOPPY;100次结束&RRTPAGESELSHOW;转入SHOW子程序页面&CALLSHOW;调用显示子程序&PAGESELLOOP;返回到第0页面&GOTOLOOP;返回继续减1操作&PPYEND 第 77页循环程序段的设计&三层循环三层循环&DELAY0
44、MOVLW 0FFH MOVWF hour&DELAY2 DECFSZ hour,F GOTO DELAY1 GOTO OVERDELAY1 MOVLW 0FFH MOVWF MOVWF NEXT1 DECFSZ hmin,F GOTO NEXT2 GOTO DELAY2 NEXT2 DECFSZ hsec,F GOTO NEXT2 GOTO NEXT1 OVER RETURN 第 78页延时子程序的设计&主频为4MHz时,编写单循环的软件延时子程序。& ;-& ;软件延时子程序DELAY& ;-& COUNTEREQU20H;定义循环寄存器COUNTER符号变量& DELAY MOVLW0 xFF;循环常数&MOVWFCOUNTER;循环寄存器&DECFSZCOUNTER,F ;循环寄存器递减&GOTO$-1;继续循环&RETURN 第 79页主频为主频为4MHz时,请编写时,请编写10 ms软件延时子软件延时子程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度美容美发沙龙美容师聘用及客户反馈收集合同范本
- 2025年度基础设施建设项目施工合同协议
- 2025年度绿色有机鸡蛋直销合作合同
- 2025年度文化艺术中心剧院场地租赁合同
- 2025年度企业培训活动策划与实施合同范本
- 2025年度酒店特色文化墙装饰制作合同
- 2025年度古建筑修复与保护工程施工合同范本
- 2025年度酒店客房装修设计施工合同-@-2
- 2025年度绿色建筑评价标识施工总承包合同范本
- 2025年度主机租用托管服务与应急响应协议
- 四年级上册100道口算题大全(通用版各类)
- 四川省成都市2023年中考数学真题卷+答案
- 电阻焊点焊标准参考七所提供资料
- 诫子书教案一等奖诫子书教案
- 浅析音乐课堂中如何培养核心素养 论文
- 最全螺栓扭矩表(各种标准)
- 电力安全工作规程(电网建设部分)2023年
- GB 14907-2018钢结构防火涂料
- 呆死帐的发生与预防课件
- 10000中国普通人名大全
- 导数常见函数图像
评论
0/150
提交评论