文档库 最新最全的文档下载
当前位置:文档库 › 单片机算数运算指令

单片机算数运算指令

单片机算数运算指令
单片机算数运算指令

不带进位位的单片机加法指令

ADD A,#DATA ;例:ADD A,#10H

ADD A,direct ;例:ADD A,10H

ADD A,Rn ;例:ADD A,R7

ADD A,@Ri ;例:ADD A,@R0

用途:将A中的值与其后面的值相加,最终结果否是回到A中。例:MOV A,#30H

ADD A,#10H

则执行完本条指令后,A中的值为40H。

下面的题目自行练习

MOV 34H,#10H

MOV R0,#13H

MOV A,34H

ADD A,R0

MOV R1,#34H

ADD A,@R1

带进位位的加法指令

ADDC A,Rn

ADDC A,direct

ADDC A,@Ri

ADDC A,#data

用途:将A中的值和其后面的值相加,并且加上进位位C中的值。

说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,能表达的数的范围就能达到0-65535。如何合并呢?其实很简单,让我们看一个10进制数的例程:

66+78。

这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8(低位),然后再做6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范置(0-9)。

在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一点加进去。那么计算机中做16位加法时同样如此,先做低8位的,如果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。

带借位的单片机减法指令

SUBB A,Rn

SUBB A,direct

SUBB A,@Ri

SUBB A,#data

设(每个H,(R2)=55H,CY=1,执行指令SUBB A,R2之后,A中的值为73H。

说明:没有不带借位的单片机减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。

乘法指令

MUL AB

此单片机指令的功能是将A和B中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。在乘积大于FFFFFH(65535)时,0V置1(溢出),不然OV为0,而CY总是0。

例:(A)=4EH,(B)=5DH,执行指令

MUL AB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。

除法指令

DIV AB

此单片机指令的功能是将A中的8位无符号数除了B中的8位无符号数(A/B)。除法一般会出现小数,但计算机中可没法直接表达小数,它用的是我们小学生还没接触到小数时用的商和余数的概念,如13/5,其商是2,余数是3。除了以后,商放在A中,余数放在B中。CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1。

加1指令

INC A

INC Rn

INC direct

INC @Ri

INC DPTR

用途很简单,就是将后面目标中的值加1。例:(A)=12H,(R0)=33H,(21H)=32H,(34H)=22H,DPTR=1234H。执行下面的指令:

INC A (A)=13H

INC R2 (R0)=34H

INC 21H (21H)=33H

INC @R0 (34H)=23H

INC DPTR (DPTR)=1235H

后结果如上所示。

说明:从结果上看INC A和ADD A,#1差不多,但INC A是单字节,单周期指令,而A DD #1则是双字节,双周期指令,而且INC A不会影响PSW位,如(A)=0FFH,INC A 后(A)=00H,而CY依然保持不变。如果是ADD A ,#1,则(A)=00H,而CY一定是1。因此加1指令并不适合做加法,事实上它主要是用来做计数、地址增加等用途。另外,加法类指令都是以A为核心的��其中一个数必须放在A中,而运算结果也必须放在A中,而加1类指令的对象则广泛得多,能是寄存器、内存地址、间址寻址的地址等等。

减1指令

减1指令

DEC A

DEC RN

DEC direct

DEC @Ri

与加1指令类似,就不多说了。综合练习:

MOV A,#12H

MOV R0,#24H

MOV 21H,#56H

ADD A,#12H

MOV DPTR,#4316H

ADD A,DPH

ADD A,R0

CLR C

SUBB A,DPL

SUBB A,#25H

INC A

SETB C

ADDC A,21H

INC R0

SUBB A,R0

MOV 24H,#16H

CLR C

ADD A,@R0

先写出每步运行结果,然后将以上题目建入,并在软件仿真中运行,观察寄存器及有关单元的内容的变化,是否与自已的预想结果相同。

3算术运算指令实验

2.3 算术运算指令实验 一、实验目的 ·掌握单字节的加减法指令的使用。 ·掌握单字节的乘除法指令的使用。 ·掌握用Keil调试汇编源程序的方法。 ·掌握用Proteus调试汇编源程序的方法。 二、实验预备知识 算术运算指令对程序状态寄存器PSW中的相关位会产生不同的影响。具体如下:◇执行加法指令时,当和的第3位或第7位有进位时,分别将AC、CY标志位置1;否则为O。如果第6位向第7位有进位而第7位没有向前进位,或者如果第7位向前有进位而第6位没有向第7位进位,OV=1,否则OV-O。该操作也影响标志位P。 ◇执行减法指令时,如果第7位有借位,则CY置1,否则清O。若第3位有借位,则 AC置1;否则清O。两个带符号数相减,还要考查OV标志,若OV为1,表示差数溢出,即破坏了正确结果的符号位。该操作也影响标志位P。 ◇执行乘法指令时,若乘积大子OFFH,则OV置1,否则清o(此时B的内容为0)。 CY总是被清O。该操作也影响标志位p。 ◇执行除法指令时,若除数(B) -OOH.则结果无法确定,OV置l。CY总是被清O。该操作也影响标志位P。 三、实验内容 将算术运算指令分成两类,分别编写两个小程序,以完成数据的加减法、乘除法运算。 1.参考程序i-hn减法运算 (1)将立即数# B5H、#36H、#89H分别传送至内部RAM区40H、R2、A中。 (2)将内部RAM区40H中的内容与A中的内容相加,然后再与R2中的内容相加,结果存放至内部RAM区50H中。 (3)将A中的内容与内部RAM区40H中的内容相减,结果存放至内部RAM区60H中。 2.参考程序2——乘除法运算 (1>将立即数#75H、#31H分别传送至内部RAM区15H、33H中。 (2)将内部RAM区15H单元的内容与33H单元的内容相乘。 (3)将乘积的高8位和低8位分别传送至内部RAM区31H、30H中。 (4)将内部RAM区15H单元的内容除以33H单元的内容。 (5)将商和余数分别传送至内部RAM区41H、40H中。四、实验参考程序

单片机课后习题解答

练习练习练习 第二章单片机结构及原理 1、MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 答:(1)一个8bit CPU是微处理器的核心,是运算和逻辑计算的中心。 (2)片内震荡器及时钟电路:提供标准时钟信号,所有动作都依据此进行。 (3)4K ROM程序存贮器:存贮程序及常用表格。 (4)128B RAM 数据存贮器:存贮一些中间变量和常数等。 (5)两个16bit定时器/计数器:完全硬件定时器 (6)32根可编程I/O口线:标准8位双向(4个)I/O接口,每一条I/O线都能独立地作输入或输出。 (7)一个可编程全双工串行口。 (8)五个中断源。 2、什么是指令?什么是程序? 答:指令是规定计算机执行某种操作的命令。 程序是根据任务要求有序编排指令的集合。 3、如何认识89S51/52存储器空间在物理结构上可以划分为4个空间,而在逻辑上又可以划分为3个空间? 答:89S51/52存储器空间在物理结构上设有4个存储器空间:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。在逻辑上有3个存储器地址空间:片内、片外统一的64KB程序存储器地址空间,片内256B数据存储器地址空间,片外64KB的数据存储器地址空间。 4、开机复位后,CPU使用的是哪组工作寄存器?他们的地址是多少?CPU如何确定

和改变当前工作寄存器组? 答:开机复位后,CPU使用的是第0组工作寄存器,地址为00H~07H,CPU通过改变状态字寄存器PSW中的RS0和RS1来确定工作寄存器组。 5、什么是堆栈?堆栈有何作用?在程序设计时,有时为什么要对堆栈指针SP重新赋值?如果CPU在操作中要使用两组工作寄存器,SP应该多大? 答:堆栈是一个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。堆栈指针SP复位后指向07H单元,00H~1FH为工作寄存器区,20H~2FH 为位寻址区,这些单元有其他功能,因此在程序设计时,需要对SP重新赋值。如果CPU在操作中要使用两组工作寄存器,SP应该至少设置为0FH。 6、89S51/52的时钟周期、机器周期、指令周期是如何分配的?当振荡频率为8MHz 时,一个单片机周期为多少微秒? 答:时钟周期为时钟脉冲频率的倒数,他是单片机中最基本的、最小的时间单位。机器周期是指完成一个基本操作所需要的时间,一个机器周期由12个时钟周期组成。指令周期是执行一条指令所需要的时间,由若干个机器周期组成。 若fosc=8MHz,则一个机器周期=1/8×12μs=μs 7、89S51/52扩展系统中,片外程序存储器和片外数据存储器共处同一地址空间为什么不会发生总线冲突? 答:访问片外程序存储器和访问数据存储器使用不同的指令用来区分同一地址空间。 8、程序状态字寄存器PSW的作用是什么?常用状态标志有哪些位?作用是什么? 答:程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下: ):进位标志位。 (C y (AC):辅助进位标志位,又称为半进位标志位。

8051单片机常用指令

3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 9.堆栈操作 3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令

共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指 令;数据交换指令以及准栈操作指令。

9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP) POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H

第八讲 算术运算类指令

第八讲算术运算类指令 教学方法:讲授法 教学目的: 1、熟悉数据运算类指令的操作方式特点 2、理解二-十进制调整指令的含义 3、熟练掌握加法指令 教学重点、难点: 加法、减法指令、二-十进制调整指令 无条件转移指令的应用 主要教学内容(提纲): 一、数据运算类指令的操作方式特点 二、算术运算类指令 三、逻辑运算类指令 复习: direct、@Ri、@DPTR、Rn、#data、(x)、((x))的含义? 讲授要点 §3-3 算术运算类指令 包括:加、减、乘、除;加一、减一。 一、加法指令 ADD A,Rn ;(A)(A)+ (Rn)以下类同。 ADD A,direct ADD A,@Ri ADD A,#data 无符号数相加时:若C = 1,说明有溢出(其值> 255)。 带符号数相加时:若OV = D7c⊕D6c = 1,说明有溢出。 ADDC A,Rn ;(A)(A)+(Rn)+(C),以下类同。ADDC A,direct ADDC A,@Ri ADDC A,#data 上述四条指令多用于多字节数相加。 INC A ;(A)(A)+1 ,以下类同。 INC Rn INC direct INC @Ri INC DPTR 例1、设(R0)= 7FH;(7EH)= 40H

执行:INC @R0 INC R0 INC @R0 后, (R0)= 7FH; (7EH)= 00H; (7FH)= 41H. DA A ;二——十进制调整指令。 执行过程中,CPU能根据加法运算后,累加器中的值和PSW中的AC及C标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二——十进制调整。 选择修正值的规则: (A3 ~ 0)> 9时或(AC)= 1时,(A3 ~ 0)(A3 ~ 0)+6 (A7 ~ 4)> 9 或(C) = 1时,(A7 ~ 4)(A7 ~ 4)+ 6 例2、设(A)= 56H 为56的压缩的BCD码数,(R3)= 67H,(CY)=1 执行ADDC A,R3 DA A 结果为:124 注意:1)DA指令只能跟在加法指令后面使用; 2)调整前参与运算的两数是BCD码数; 3)DA指令不能与减法指令配对使用,但可以实现对A中压缩BCD 减一操作。 例3、设(A)=30H(压缩BCD码数),执行: ADD A,#99H DA A 后,便实现了30 -1 = 29的操作。 例4、两个4位BCD码相加,一个存放在(31H)(30H);另一个存放在 (33H)(32H);和数拟回存在(31H)(30H)中,试编程实现之。 解:MOV R0,#30H MOV R1,#32H MOV A,@R0 ADD A,@R1 DA A MOV @R0,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A 二、减法指令 SUBB A,Rn ;(A)(A)-(Rn)-(C),以下类同。 SUBB A,direct SUBB A,@Ri SUBB A,#data

基于51单片机的简易计算器制作

基于51单片机的简易计算器制作专业:电气信息班级:11级电类一班 姓名:王康胡松勇 时间:2012年7月12日 一:设计任务 本系统选用AT89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计,具体设计如下: (1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LED 显示数据和结果。 (2)采用键盘输入方式,键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键(on\c)和等号键(=),故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LED上提示八个0;当除数为0时,计算器会在LED上会提示八个负号。 设计要求:分别对键盘输入检测模块;LED显示模块;算术运算模块;错误处理及提示模块进行设计,并用Visio画系统方框图,keil与protues仿真 分析其设计结果。 二.硬件设计 单片机最小系统 CPU:A T89C52 显示模块:两个4位7段共阴极数码管 输入模块:4*4矩阵键盘 1.电路图

电路图说明 本电路图采用AT89C52作为中处理器,以4*4矩阵键盘扫描输入,用两个74HC573(锁存器)控制分别控制数码管的位于段,并以动态显示的方式显示键盘输入结果及运算结果。为编程方便,以一个一位共阴极数码管显示负号。 三,程序设计 #include #define Lint long int #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; //锁存器段选sbit wela=P2^7; sbit display_g=P2^0; //负号段选 sbit display_w=P2^1; //负号位选uchar code table[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3

实验二 算术运算实验

实验二算术运算实验 一、实验目的 1、掌握MASM for Windows 环境下的汇编语言编程环境使用; 2、掌握汇编语言程序设计的基本流程及汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式; 3、掌握汇编语言对多精度十六进制和十进制的编程方法及运算类指令对各状态标志 位的影响及测试方法; 4、掌握无符号数和有符号数运算区别及编程方法; 5、掌握BCD 码调整指令的使用方法 二、软硬件实验环境 1、硬件环境:惠普64 位一体化计算机及局域网; 2、软件环境:windows 8,红蜘蛛管理系统,MASM for Windows。 三、实验基本原理 算术运算实验需要对运行结果进行调试及查看状态字,其相关知识如下。 1) 标志位 在debug调试过程中,标志位用特殊符号表示的,其标志名和状态符号的对照表参照表1所示。 表1标志名和状态符号的对照表参照表 2) 加减法指令 ADD表示加法指令,ADC表示带进位加法指令,SUB表示减法指令,SBB表示带进位减法指令。 3) 乘除法指令

MUL表示无符号数乘法指令,IMUL表示带符号数乘法指令,DIV表示无符号数除法指令,IDIV 表示带符号数除法指令。 4) 符号位扩展指令 CBW表示从字节扩展到字的指令,CWD表示从字扩展到双字的指令。 5) BCD码的调整指令 在进行十进制加减运算时,需要将数据用BCD码表示,还要考虑到是组合BCD码还是非组合BCD码,组合BCD码是用一个字节表示两位十进制数,非组合BCD码是用一个字节表示一位十进制数,对于组合的BCD码加减法运算其结果存放在AL中。 组合的BCD码加法调整指令DAA; 组合的BCD码减法调整指令DAS; 非组合的BCD码加法调整指令AAA; 非组合的BCD码减法调整指令AAS; 乘法的非组合BCD码调整指令AAM; 除法的非组合BCD码调整指令AAD。 8088/8086指令系统提供了实现加、减、乘、除运算指令,可参照表2所示内容。 表2数据类型的数据运算表 四、实验步骤与内容 1)对于表格中三组无符号数,试编程求这三组数的指定运算结果,并考虑计算结果对标志寄存器中状态标志位的影响: ①实验分析 本实验要求简单,仅对指定三组数进行基本运算。只需使用ADD、SUB、MUL、DIV四个运算命令,并以MOV命令作为数值转移的手段即可。运算结果和状态标志的情况可以通过debug调试中的T命令进行逐步查看。 需要注意的主要有以下几点: 1.在进行加法和乘法运算时,会出现对高位的进位扩展。因此,在记录结

练习(算术运算及逻辑移位指令3题目)

练习 算术运算与逻辑移位指令 1、若AX=0ABCDH,BX=7F8FH,CF=1。分别执行0886 CPU指令 (1)ADD AX,BX (2)ADC AX,BX (3)SBB AX,BX (3)NEG AX (5)AND AX,BX (6)OR AX,BX (7)XOR AX,BX (8)IMUL BL 后,AX寄存器中的内容,并指出标志寄存器SF、ZF、AF、PF、CF及OF的状态。 2、若CX=6700H,DX=78FFH,CF=1,求分别执行指令 (1)ADD CX,DX (2)ADC CX,DX (3)SUB CX,DX (4)SBB CX,DX (5)AND CX,DX (6)OR CX,DX (7)XOR CX,DX 后,CX和DX中的内容。并指出标志寄存器SF、ZF、AF、PF、CF和OF的状态。 3、X,Y分别为下列各组数,当它们分别进行加、减、AND、OR、XOR运算后,其标志位,SF、OF、CF、PF、ZF的状态如何? (1)X=21H;Y=43H (2)X=9AH;Y=0BCH (3)X=48H;Y=8DH (2)X=54H;Y=54H 4、若AX=98ABH,BX=A8BCH,求执行指令ADD AX,BX后,AX与BX中的内容,并指出SF、ZF、AF、PF、CF和OF的状态。 5、针对下列各条指令执行后的结果,填入目的操作数的值及标志位的状态。 6、若AX=FFF8H,BX=FFFAH,求执行IMUL BX后,DX与AX中的内容,并指出标

志位OF与CF的状态。 7、若AX=FFFEH,BX=FFFDH,求执行指令IMUL BX后,DX与AX中的内容。指出标志位OF与CF的状态。 8、设AL=85H,BL=2AH,均为带符号数,求指令 IMUL BL的执行结果。 9、若AL=78H,BL=87H, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 10、若AL=75H,BL=48, (1)求执行指令 ADD AL,BL DAA 之后,AL=?标志位AF=?CF=?并说明BCD码调整情况。 (2)若执行指令SUB AL,BL与DAS后,情况又如何? 11、若有一个4字节数,放在寄存器BX间址的内存中(低地址对应低字节),要求这个4字节整数整个左移一位如何实现?右移一位又如何实现? 12、若有一个四字节数,放在寄存器DX与AX中(DX放高16位),要求这个四字节数整个左移一位如何实现?右移一位又如何实现? 13、分别编写一程序使 (1)AX寄存器高3位清0; (2)BX寄存器高3位置1; (3)CX寄存器高4位取反; (4)DX寄存器高3位不变,其余位清0。

熟悉并使用算术逻辑操作类指令

微处理器原理课实验日志 一、实验题目:熟悉并使用算术逻辑操作类指令 二、实验结果 本次实验的目的是为了让我们熟悉算术运算类指令,熟悉逻辑运算类指令,掌握算术运算类指令对标志位的影响。本次实验分为验证性和操作性,对于验证性实验要求在自己理解程序的基础上去运行程序,查看运行结果。操作性实验要求自己编写程序实现相关要求,最后运行查看结果。 第一个程序是验证性(加法减法指令),代码为: MOV A,#12H MOV R0,#24H MOV 21H,#56H ADD A,#12H MOV DPTR,#4316H ADD A,DPH ADD A,R0 CLR C SUBB A,DPL SUBB A,#25H INC A SETB C ADDC A,21H

INC R0 SUBB A,R0 MOV 24H,#16H CLR C ADD A,@R0 此程序的功能为:熟悉加法减法指令,尤其是ADD与ADDC、还有就是在SUBB中注意什么时候Cy标志位清零的运用;DPH、DPL 的运用等。最后在没有运行程序之前对程序进行简单的运算,累加器A中的数据是0xE0=#83H,程序运算结果如下: 按照实验要求第二个程序代码为: MOV 30H,#34H MOV 31H,#2AH MOV 32H,#0FAH MOV 33H,#48H MOV R0,#30H MOV A,@R0 INC R0 MOV B,@R0 MUL AB MOV R1,A MOV R2,B MOV A,@R0 INC R0 MOV B,@R0 DIV AB MOV R3,A MOV R4,B

本程序的重点是分析乘法中高八位存在B寄存器中和低八位存在累加器A中,除法运算A累加器中存放的是商,B寄存器中存放的余数。所以,分析得到乘法运算中A累加器中存放的是88H,B寄存器中存放是08H;除法运算中A累加器存放的是00H,B寄存器中存放的是2AH.程序运算的结果如下: 按照第三个程序是移位指令代码为: MOV A,#39H CPL A RL A CLR C RRC A SETB C RLC A SWAP A 此程序的运行结果应该是:0C6H、8DH、46H、8DH、D8H。 操作性实验,按照要求书写代码如下:

第三章 单片机运算符及表达式

第三章运算符及表达式 说明:Cx51的运算符与普通C语言的几乎完全一样,带复习性质,重点介绍在单片机中应用的特点。 一、运算符及表达式 运算符:完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。 运算对象:在程序运行时,有数值或有数值传递给它。 表达式:表达式则是由运算符及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。 例:x=a*(b+c-a); 子表达式:成对的括号以及在它们之间的全部符号组成的表达式。上例中 (b+c-a)就是子表达式。 二、运算符 1、赋值运算符

1) 赋值运算符 赋值符号“=”完成的操作即为赋值运算,它是右结合性,且优先级最低。 2) 赋值表达式 将一个变量与表达式用赋值号连接起来就构成赋值表达式。形式如下: 变量名=表达式 赋值表达式中的表达式包括变量、算术运算表达式、关系运算表达式、逻辑运算表达式等,甚至可以是另一个赋值表达式。赋值过程是将“=”右边表达式的值赋给“=”左边的一个变量,赋值表达式的值就是被赋值变量的值。 例如: a=(b=4)+(c=6);,该表达式的值为10,变量a 的值为10。 3) 赋值的类型转换规则 在赋值运算中,当“=”两侧的类型不一致时,要将数据转换成同一数据类型,转换的方式有两种,一种是系统自动转换,一种是强制转换。 (1)系统自动转换

编译时,将右边表达式的值转换成左侧变量的类型,再赋给该变量。转换规则如下: ①实型数据赋给整型变量时,舍弃小数部分。 ②整型数据赋给实型变量时,数值不变,但以IEEE 浮点数形式存储在变量中。 ③长字节整型数据赋给短字节整型变量时,实行截断处理。如将long 型数据赋给int型变量时,将long 型数据的低两字节数据赋给int 型变量,而将long 型数据的高两字节的数据丢弃。 ④短字节整型数据赋给长字节整型变量时,进行符号扩展。如将int 型数据赋给long型变量时,将int 型数据赋给long 型变量的低两字节,而将long 型变量的高两字节的每一位都设为int 型数据的符号值。 (2)强制转换 使用强制类型转换运算符转换: (类型名) (表达式); 将表达式的数据类型转换为前面要求的类型名。 例1:x=(float)a; y=(int)(x+y);

单片机试题及答案

单片机原理与接口技术习题答案 习题与思考题1 1-1 微型计算机通常由哪些部分组成?各有哪些功能? 答:微型计算机通常由控制器、运算器、存储器、输入/输出接口电路、输入设备和输出设备组成。控制器的功能是负责从内部存储器中取出指令并对指令进行分析、判断、并根据指令发出控制信号,使计算机有条不紊的协调工作;运算器主要完成算数运算和逻辑运算;存储器用于存储程序和数据;输入/输出接口电路完成CPU与外设之间相连;输入和输出设备用于和计算机进行信息交流的输入和输出。 1-2 单片微型计算机与一般微型计算机相比较有哪些区别?有哪些特点? 答:与通用微型计算机相比,单片机的硬件上,具有严格分工的存储器ROM和RAM和I/O端口引脚具有复用功能;软件上,采用面向控制的指令系统和硬件功能具有广泛的通用性,以及品种规格的系列化。单片机还具备体积小、价格低、性能强大、速度快、用途广、灵活性强、可靠性高等特点。 1-3 简述计算机的工作过程。 答:计算机的工作是由微处理器以一定的时序来不断的取指令、指令译码和执行指令的过程。 1-4 单片机的几个重要指标的定义。 答:单片机的重要指标包括位数、存储器、I/O口、速度、工作电压、功耗和温度。 1-5 单片微型计算机主要应用在哪些方面? 答:单片机的主要应用领域有智能化产品、智能化仪表、智能化测控系统、智能化接口等方面。 1-6 为什么说单片微型计算机有较高的性能价格比和抗干扰能力? 答:因为单片微型计算机主要面向特定应用而设计,设计者在硬件和软件上都高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,具备较高的性能、价格比;单片机嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中,另外单片机体积小,可以放入屏蔽设备中,从而使其具有较高的抗干扰能力。 1-7 简述单片机嵌入式系统的定义和特点。 答:单片机嵌入式系统是嵌入到对象体系中的专用计算机系统;其特点是面向特定应用、与各个行业的具体应用相结合、硬件和软件高效率、软件固化在存储器芯片或单片机本身和不具备自举开发能力。 习题与思考题2 2-1 MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么? 答:MCS-51单片机在一块芯片中集成了CPU、RAM、ROM、定时/计数器、多功能I/O口和中断控制等基本功能部件。 单片机的核心部分是CPU,CPU是单片机的大脑和心脏。 程序存储器用于存放编好的程序或表格常数。数据存储器用于存放中间运算结果、数据暂存和缓冲、标志位等。 定时/计数器实质上是加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器。 I/O接口的主要功能包括:缓冲与锁存数据、地址译码、信息格式转换、传递状态(外设状态)和发布命令等。 中断控制可以解决CPU与外设之间速度匹配的问题,使单片机可以及时处理系统中许多随机的参数和信息,同时,它也提高了其处理故障与应变能力的能力。 2-2 MCS-51单片机的核心器件是什么?它由哪些部分组成?各部分的主要功能是什么? 答:单片机的核心部分是CPU,可以说CPU是单片机的大脑和心脏。它由运算器、控制器和布尔(位)处理器组成。 运算器是用于对数据进行算术运算和逻辑操作的执行部件。

单片机实验指导书

实验一KEIL 51软件实验 实验目的: 1、掌握KEIL集成开发环境的使用 2、掌握算术运算程序 实验设备:计算机、KEIL51软件 实验内容: 编程实现把片人RAM30H单元和40H单元两个16字节数相加,结果放于30H单元开始的位置处。在KEIL51编译、连接、仿真调试。 实验步骤: 一、运行KEIL51软件,出现图1所示KEIL 51主界面。 图1 KEIL 51主界面 首先用Project菜单下的New Project命令建立项目文件,过程如下。 (1) 选择Project菜单下的New Project命令,弹出如图2所示的Create new Project对话框。 图2 Create New Project对话框 (2) 在Create New Project对话框中选择新建项目文件的位置(最好一个项目建立一个文件夹如E:\project), 输入新建项目文件的名称,例如,项目文件名为example,单击【保存】按钮将弹出如图3所示的Select Device for Target ‘Target 1’对话框,用户可以根据使用情况选择单片机型号。Keil uVision2 IDE几乎支持

所有的51核心的单片机,并以列表的形式给出。选中芯片后,在右边的描述框中将同时显示选中的芯片的相关信息以供用户参考。 图3 Select Device for Target ‘Target 1’对话框 (3) 这里选择atmel公司的A T89c51。单击【确定】按钮,这时弹出如图4所示的Copy Standard 8051 Startup Code to Project Folder and Add File to Project确认框,C语言开发选择【是】,汇编语言开发选择【否】。 单击后,项目文件就创建好了。项目文件创建后,在主界面的左侧的项目窗口可以看到项目文件的内容。 这时只有一个框架,紧接着需向项目文件中添加程序文件内容。 图4 Copy Standard 8051 Startup Code to Project Folder and Add File to Project确认框 二、给项目添加程序文件 当项目文件建立好后,就可以给项目文件加入程序文件了,Keil uVision2支持C语言程序,也支持汇编语言程序。这些程序文件可以是已经建立好了的程序文件,也可以是新建的程序文件,这里我们新建的汇编程序文件后再添加。 (1) 选择文件菜单上的new命令,出现新建文本窗口,如图5所示。

基于加减法单片机

常熟理工学院 电气与自动化工程学院 《微机原理与接口技术》课程设计 题目:基于1602加减法 计数系统的设计 姓名: 学号: 班级: 指导教师: 起止日期:2015.7.6—2015.7.10

目录 第1章引言 (1) 1.1设计任务与要求 (1) 1.2作品设计思路及方案 (2) 第2章硬件设计 (2) 2.1 单片机功能的介绍 (2) 2.2 proteus 介绍 (3) 2.3 电路原理图 (4) 2.3.1复位电路 (4) 2.3.2晶振电路 (5) 2.3.3 指示灯电路设计 (5) 2.3.4 AT89C51单片机 (6) 2.3.5 74LS48 芯片介绍 (7) 2.3.6 七段数码管 (8) 第3章软件设计 (9) 3.1 软件主程序设计 (9) 3.2 软件设计的流程图 (9) 3.3 软件代码 (10) 第4章系统调试 (14) 总结 (17) 参考文献 (18)

第1章引言 抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合中,它能迅速、客观地分辨出最先获得发言权的选手。本课题是利用89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器原理,将软、硬件结合起来,使得系统能够正确的进行计时,数码管可以正确的显示时间和选手号码。同时系统能后实现:在抢答过程中只有在主持人按下开始抢答键开始之后5秒以内抢答才被认为抢答有效,如果在开始抢答之前抢答则被视为犯规(抢答无效)。在抢答成功之后相应的发光二极管会点亮,数码管也会显示选手的号码。同时还有主持人控制的系统复位键,以实现系统的复位。还有按键锁定,在第一个选手抢答成功或者犯规状态下其他按键均无效。 1.1设计任务与要求 1、抢答器同时供4名选手比赛,分别用4个按键S0~S3表示。 2、设置一个系统复位和抢答控制按键S,该按键由主持人控制的。 3、抢答器具有数码显示功能。即选手按动按钮,锁存相应的编号,并在LED 数码管上显示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人讲系统复位为止。 4、参赛选手在规定时间内抢答,则抢答有效,定时器停止工作,显示器上显 示选手的编号并保持到支持人将系统清除位置。 5、若再规定时间内没有人抢答,则数码管关闭,违规灯亮,那主持人则按复 位按键,跳至下一题。

51单片机指令

3.2 分类指令 在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。 Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。 Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。 (Ri):Ri间址寻址指定的地址单元。 ((Ri)):Ri间址寻址指定地址单元中的内容。 dir:8位直接字节地址(在片内RAM和SFR存储空间中)。 #data8:8位立即数。 #datal6:16位立即数。 addrl6:16位地址值。 addrll:11位地址值。 bit:位地址(在位地址空间中)。 rel:相对偏移量(一字节补码数)。 下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。 3.2.1数据传送与交换类指令 共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指

令;数据交换指令以及准栈操作指令。 9.堆栈操作 PUSH dir ;SP十1-6P,(dir)一(SP)

POP dir ;((SP))一dir,SP-1--P , 例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。 例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。 综合例 把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。方法一(直接地址传送法): MOV A ,50H 数据传送与交换类指令是各类指令中数量最多、使用最频繁的一类指令,编程时应能十分熟练地灵活运用

单片机习题集及答案

1.在MCS-51中,有7种寻址方式,它们分别为立即数寻、寄存器寻址、直接寻址、寄存器间接寻址、相对寻址、变址寻址和位寻址。 2.汇编语言的指令格式为标号:操作码操作数注释。 3.数据传送类指令执行完毕,源操作数的内容不会(会/不会)丢失。 4.8051内部RAM从20H至2FH既可位寻址,又可间接寻址,位地址空间从00H到7FH。5.MCS-51单片机指令系统中,指令长度有一字节、二字节和(三)字节,指令执行时间有一个机器周期、两个机器周期和四机器周期,乘法指令需四机器周期。6.MOV A,20H中,20H的寻址方式称之为_直接___; SETB 20H的寻址方式为位寻址。7.关于堆栈类操作的两条指令分别是_PUSH(入栈)指令_ 、POP(出栈)指令;堆栈操作只能是寄存器间接寻址寻址。 8.访问8031片外数据存储器MOVX指令采用的是寄存器间接寻址寻址方式。访问片外序存储器MOVC指令采用的是变址寻址方式。 9.设(A)=55H,(R5)=AAH,则执行ANL A,R5指令后的结果是(A)=00H,(R5)= AAH;则执行ORL A,R5指令后的结果是(A)= FFH ,(R5)= AAF; 则执行XRL A,R5指令后的结果是(A)= FFH,(R5)= AAH 。 10.伪指令不产生 (产生/不产生)可执行目标代码。汇编语言程序结束的指令为END。11.DA指令跟在ADD,ADDC指令的后面,用与二进制数与BCD码的调整。若 (A)=0AH ,执行DA A指令后,(A)= 15。 单项选择题 跳转范围是:(D. -128~127B) 2.MCS—51系列单片机最长的一条指令需 B. 4个机器周期。 3.MOV A,@R0这条指令中@R0的寻址方式称为:(B. 寄存器间接寻址) 4.在CPU内部,反映程序运行状态或反映运算结果的特征寄存器是:B. PSW 5.下列指令中正确的是:B. JBC TF0,L1 6.下列指令中错误的是:A. SETB 7.将累加器的值压入堆栈的正确指令是:B. PUSH A 8.下列那条减法指令是错误的:C. SUBBC 9. 指令CJNE A ,#00H ,LOOP 影响PSW的哪一位: 10. 在MUL AB指令中,若积超过255,则C. OV=1 11.在相对寻址方式中,寻址的结果体现在中 12.在相对寻址方式中,"相对"两字是指相对于 C.当前指令的末地址 13.在寄存器间接寻址方式中,指定寄存器中存放的是B.操作数地址 14.对程序存储器的读操作,只能使用D.MOVC指令 15.必须进行十进制调整的十进制运算C.只有加法

51单片机汇编指令集

1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

单片机C语言编程中多位乘法运算问题探讨

第23卷第4期 2006年12月广东工业大学学报Journa l of Guangdong Un i versity of Technology Vol .23 No .4Dece mber 2006 收稿日期:2005212212 项目基金:广东省科技计划项目(2003C102022) 作者简介:严克剑(19822),男,硕士研究生,主要研究方向为控制网络集成. 单片机C 语言编程中多位乘法运算问题探讨 严克剑,张 淼,黄先伟 (广东工业大学自动化学院,广东广州510090) 摘要:本文指出了人们运用C51实现多字节乘法运算时可能忽视的一个问题.通过分析该问题出现的原因,提出了中间变量法、分步运算法和强制数据类型转换法等3种解决方法,实验表明这些方法是可行的. 关键词:C51;单片机;乘法运算 中图分类号:TP332.3 文献标识码:A 文章编号:100727162(2006)0420023204 C 语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作[1].Keil C51是德国Keil Soft w are 公司出品的51系列兼容单片机C 语言软件开发系统.与汇编相比,C 语言在功能、结构性、可读性、可维护性上有明显的优势,因而易学易用.Keil C51继承了C 语言对数据有很强的表达能力的优点,具有丰富的运算符,在算术运算和逻辑运算上更体现了汇编不可比拟的优点.由于C5l 语言具有强大的数据处理能力和数学运算库函数,当涉及到复杂的数学运算,使用C51语言往往会比较方便.在一般情况下,由C51编译生成的代码不论长度还是程序运行速度均能适应程序要求.利用C51开发单片机系统,不但可以使编程工作量大为减少,而且使软件维护、修改亦变得非常方便[2]. 1 问题提出 在Keil C51中,bit 和unsigned char 型变量是机器语言直接支持的,因此两个unsigned char 类型的数据相乘恰好与汇编指令中的“MUL AB ”相符.使用Keil C51做乘法运算编程,往往只需要利用乘法表达式来编译,只要编译通过Keil C51就会自动地寻找寄存器把运行结果存放在里面.因此,在运用C51来完成乘法运算的时候,编程员通常就是编写一个乘法表达式和把乘积结果赋值给一个存储单元就可以了.而如果乘法运算中的乘数不是unsigned char 型变量,就算是简单的一个乘法表达式也需要调用C51中的库函数;如果乘数是大于255的常量,C51自动地把这个乘数以相应的类型储存起来,由于unsigned char 是8位的,大于255的常量和其他类型的变量一样也需要调用库函数.因此,如果在这些情况下还仅仅是用乘法表达式来编译的话,得到的结果就可能与实际结果不相等.笔者在编程的时候曾经遇上上述情况. 例如以下有一段程序,运行之后所得结果gg 的值不等于9310000所得的结果. #include main ()

单片机指令英文全称

51单片机汇编指令集(指令集带英文翻译) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移;

相关文档