单片机原理(2):程序设计

单片机原理(2):程序设计,第1张

指令系统是计算机硬件的语言系统,也叫机器语言,它是软件和硬件的主要界面,从系统结构的角度看,它是系统程序员看到的计算机的主要属性。指令系统表征了计算机的基本功能,决定了机器所要求的能力,也决定了指令的格式和机器的结构。

51系列单片机一般使用汇编语言(Assembly Language)直接编程,其指令系统中,有进行数据传送、算术运算、逻辑运算、位 *** 作、控制传递等功能的111条基本指令。此外也可以采用C语言进行程序设计。

寻址方式

寻址方式是CPU寻找 *** 作数或 *** 作数地址的方法,存放在不同位置的数据具有需要采用不同的方式进行寻址,不同类型计算机的寻址方式也不同,它是计算机重要的性能指标之一。MSC-51单片机有7种寻址方式。

立即寻址

指令中直接给出参与 *** 作的数据,称立即数,用data表示。在汇编语言中,为标明立即数,为data加前缀”#”。立即数可以是8位和16位二进制数,分别用#data和#data16表示。

汇编指令格式:MOV A, #data

如:

MOV A, #30H ;8位立即数30H放入累加器ACC中 MOV DPTR, #2000H ;16位立即数2000H放入数据指针DPTR 直接寻址

指令中直接给出参与 *** 作的数据的地址,直接地址一般用direct表示。

汇编指令格式:MOV A, direct

如:

MOV A, 80H ;将80H单元,即P0口的内容放入累加器ACC中 寄存器寻址

参与 *** 作的数据存放在寄存器中,汇编指令中直接以寄存器名来表示参与 *** 作的数据地址,寄存器包括工作寄存器R0~R7、累加器ACC、寄存器B、数据指针DPTR。

汇编语言格式:MOV A, Rn ;n=0~7

如:

MOV A, R1 ;将R1中的内容放入累加器ACC中 寄存器间接寻址

二次寻址,寻址中寄存器的内容为 *** 作数所存放的地址。第一次寻址得到寄存器的内容为(R0)、(R1)或(DPTR),第二次寻址是将第一次寻址得到的寄存器内容作为地址,在其中存、取参与 *** 作的数据。汇编语言中,寄存器前缀@是寄存器间接寻址的标志,有@R0、@R1、@DPTR等。

汇编语言格式:MOV A, @R0/R1/DPTR

如:

MOV A, @DPTR ;将DPTR所指示的地址单元中的内容放入累加器ACC中 变址寻址

由两个寄存器提供地址。若由ACC、PC提供,在汇编语言指令中寻址地址表示为@A+PC;若由ACC和DPTR提供,在汇编语言指令中寻址地址为@A+DPTR。其中,PC或DPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位无符号加法。

若变址寄存器ACC中的内容加基址寄存器DPTR(或PC)中内容时,低8位有进位,则该进位直接加到高位,不影响进位标志。因变址寻址指令多用于查表,故常称为查表指令。

汇编语言格式:MOV A, @A+DPTP

如:

MOV A, @A+DPTR ;将A+DPTR所指示的地址单元中的内容放入累加器ACC中 相对寻址

相对寻址指令的下一条指令的程序计数器PC的内容为基值,加上指令机器代码中的“相对地址”,形成新的PC值(要转移的指令地址)。指令机器代码中“相对地址”指的是用一个带符号的8位二进制补码表示的偏移字节数,其取值范围为-128~+127,负数表示向后转移,正数表示向前转移。rel代表一个8位带符号的偏移量,要转移的指令地址=(PC)+相对寻址指令字节数+rel,“( )”代表存储单元的内容。

汇编语言格式:SJMP rel

如:

SJMP 08H ;指令代码为双字节,该指令将转到地址为(PC) + 02H + 08H 位寻址

参与 *** 作的数据为“位”,而不是字节,是对片内RAM中的位寻址区20H~2FH、SFR中11个可位寻址单元的位进行 *** 作。bit代表内数据存储器RAM或SFR的直接寻址位。

汇编语言格式:MOV C, bit

如:

MOV C, 00H ;或者写成 MOV C, 20H.0 ;将字节地址20H的D0位内容放到位累加器C

位寻址的位地址与直接寻址的字节地址形式完全一致,主要由 *** 作码进行区分。

所有寻址方式的寻址范围总结如下表:

寻址方式 寻址存储器范围
立即寻址   程序存储器ROM  
直接寻址   片内RAM低128KB,特殊功能寄存器SFR  
寄存器寻址   工作寄存器R0~R7,A,C,DPTR,AB  
寄存器间接寻址   片内RAM低128KB,片外RAM  
变址寻址   程序存储器ROM (@A+DPTR,@A+PC)  
相对寻址   程序存储器ROM(相对寻址指令的下一指令PC值加 -128~+127)  
位寻址   片内RAM的20H到2FH字节地址的所有位,可位寻址SFR  
指令系统 数据传送指令 指令 功能
MOV (Move)   传送内部RAM和SFR的数据  
MOVX (Move External RAM)   传送外部RAM的数据(外部RAM只能和累加器ACC之间进行传送数据)  
MOVC (Move Code)   读取并传送ROM数据表格中的数据  
PUSH (Push onto Stack)   入栈  
POP (Pop from Stack)   出栈  
XCH (Exchange)   全字节交换  
XCHD (Exchange low-order Digit)   低半字节交换  
SWAP   高、低字节互换  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2601594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存