单片机原理与实用技术课件_第1页
单片机原理与实用技术课件_第2页
单片机原理与实用技术课件_第3页
单片机原理与实用技术课件_第4页
单片机原理与实用技术课件_第5页
已阅读5页,还剩418页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机

原理与实用技术

第1章

单片机入门知识1.1认识单片机计算机巨型机大型机中型机小型机微型机PC机单片机:单片微型计算机SCMC1.1.1什么是单片机1.1.2单片机应用系统应用系统实例1)单片机控制超声波信号发射器定时向前发射超声波并开始计时。2)超声波信号接收器接收到前方车辆反射回来的超声波后向单片机发送信号。3)单片机根据超声波的发射、返回时间计算出与前方车辆的距离。4)单片机同时根据车速传感器的信号计算出汽车行驶速度。5)单片机根据(3)、(4)的数据判断汽车应该加速、减速还是原速行进。6)单片机向汽车电动节气门(俗称油门)发出控制信号,控制节气门开度

增大、减少或者保持不变。

单片机应用系统的基本组成

基本组成信号传感装置外围电路及芯片

单片机外围电路及芯片执行机构单片机系统输入信号输入信号人工控制信号…………图1-3单片机应用系统组成示意图信号传感装置执行机构单片机系统1.1.3单片机应用领域1.生产自动化2.实时测控3.智能化产品4.智能化仪表5.信息通信技术6.科学研究7.国防现代化1.1.4单片机应用特点1.面向控制

微控制器MCU2.在线应用3.嵌入式应用

嵌入式微控制器EMCU1.1.5单片机产品1.通用型单片机2.专用型单片机1.2单片机相关基础知识计数制十进制数例:17D二进制数例:1011B十六进制数例:2AH、0B5H1.进位计数制1001B=(1×23+0×22+0×21+1×20)D=9D

1.2.1数和编码十六进制数十进制数二进制数0123456789ABCDEF01234567891011121314150000000100100011010001010110011110001001101010111100110111101111表1-1二、十、十六进制数对照表二进制数无符号数

有符号数

2.二进制数真值原码反码补码

〔X正〕补=〔X正〕原如:〔+3CH〕补=〔+3CH〕原=3CH

〔X负〕补=〔X负〕反+1

如:〔-3CH〕补=〔-3CH〕反+1=0C3H+1=0C4H

3.编码十进制数码8421码余3码格雷码0123456789000000010010001101000101011001111000100100110100010101100111100010011010101111000000000100110010011001110101010011001000表1-2常见BCD码

(00010110)8421BCD=16D≠00010110B1.2.2逻辑运算与逻辑门电路1.逻辑与和与门电路F=A·B0·0=00·1=01·0=01·1=1“有0则0,全1则1”

2.逻辑或和或门电路

F=A+B或F=A∨B

0+0=00+1=11+0=11+1=1

“有1则1,全0则0”

3.逻辑非和非门电路“1则0,0则1”

F=A0=11=04.复合逻辑门复合逻辑门与非门或非门异或门“有0则1,全1则0”

“有1则0,全0则1”

“同则为0,不同为1”

A∧

B=01100001∧11001011=01000001A⊕B=01100001⊕11001011=10101010〔例1-1〕已知:A=01100001,B=11001011,

求:A∧B,A+B,A⊕B,A解:A+B=01100001+11001011=11101011=00010100

01100001∧1100101101000001

01100001+1100101111101011

01100001⊕11001011

10101010A=10011110=100111101.2.3常用逻辑元件1.三态输出门2.编码器(1)二进制编码器(2)优先编码器3.译码器4.数据选择器5.触发器6.寄存器第2章

单片机基本结构组成及工作原理2.1单片机基本组成及工作原理

计算机的智能是人所赋予的,计算机只会按人们所给的命令一步一步地工作,这些命令称为指令。将指令有效地组合成能够完成特定任务的指令序列,称为程序。程序是计算机工作的命令清单。

2.1.1程序--单片机工作的命令清单┆MOV R0,#RADIMOVX A,@R0MOV

B,#33MUL

ABMOV

R2,AINC

R0

MOVX

A,@R0

MOV

B,AMOV

A,R2DIV

ABCLR

CSUBB

A,DATA0

JC

DOWNSUBB A,DATA1JC

KEEP

AJMP

UP

┆;读取超声波发射到回收的时间t;计算与前辆车的距离(33为声速的十分之一)d;d=t×33;读取车速v;计算以该车速行驶完距离d的时间T;T=d/v;与设定时间范围t0~t0+t1(考虑到人的反应制动时间等)比较;T<t0时降低车速;t0<T<t0+t1时原速行进;T>t0+t1时增加车速

2.1.2存贮器--信息存放及程序运行场所

存储器

存贮器的主要功能是存放程序和数据,程序是单片机操作的依据,数据是单片机操作的对象。

单片机向存贮单元存放信息称为“写”,取出信息称为“读”,“读”、“写”操作都称为访问存贮器。单片机访问存贮器是根据存贮单元的地址进行的。根据地址访问存贮单元又称寻址。

RAMROM掩膜ROMPROMEPROMEEPROMflashROM

2.1.3

CPU--程序执行者1.运算器用于实现算术和逻辑运算2.控制器指挥控制元件CPU是计算机的核心,由运算器控制器组成。

2.1.4

I/0接口--单片机内外交流通道

单片机控制系统在工作时,单片机要不断从外部获取信息,并向外部发出动作控制信号,信息的输入输出电路称I/O接口(Input/Output),接口是计算机与外部设备之间的交接界面和交流通道。

2.1.5

单片机的基本组成

2.2

MCS-51单片机存贮器2.2.1

MCS-51单片机存贮器配置程序存储器片内数据存储器片外数据存储器

2.2.2

程序存贮器

程序存贮器用来存放程序和重要的数据。

程序运行时,CPU首先从程序存贮器的0000H单元开始读取指令。而程序存贮器的0003H~002AH单元被系统留作特殊用途,用户程序必须写在系统留用之后的单元。所以000H~0002H三个单元一定要存放一个绝对跳转指令(JMP指令),跳转到用户程序的首址。

从0000H开始部分的程序存贮单元是指片内还是片外由每单片机的31引脚EA决定,当EA=1即接高电平时,选择片内,反之则选片外。而对于高出4KB部分的程序存贮单元,不论EA为何值,一定是指片外程序存贮器。

CPU在访问片外ROM时,从PSEN输出低电平信号,选通片外ROM,而不是RAM。ROM只有读出,没有写入,无须读、写信号RD、WR控制。

2.2.3

数据存贮器

数据存贮器是用于运行程序、存放数据。数据存贮器分为内部RAM和外部RAM,各自独立编址。

常用MOV指令读/写片内RAM,MOVX指令读/写片外RAM。当读、写片外RAM时,单片机分别发出RD、WR有效信号,控制读、写片外RAM,而不是片外ROM。片内RAM高128单元:SFR(80H ~FFH)低128单元(00H~7FH)堆栈和数据缓冲区(30H~7FH)位寻址区(20H~2FH)通用寄存器区(00H~1FH)RS1RS0寄存器组R0~R7地址00BANK000~07H01BANK108~0FH10BANK210~17H11BANK318~1FH表2-1工作寄存器区的选择

1.片内RAM低128单元

表2-2位寻址区位地址

单元地址位地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7FH

7EH7DH

7CH

7BH7AH

79H

78H77H

76H

75H

74H

73H

72H

71H

70H6FH6EH

6DH

6CH

6BH

6AH

69H68H67H66H

65H

64H

63H

62H61H

60H5FH5EH5DH

5CH

5BH

5AH

59H

58H57H56H55H

54H

53H

52H51H50H4FH4EH4DH

4CH

4BH

4AH

49H

48H47H46H

45H44H43H

42H

41H

40H3FH3EH3DH3CH3BH

3AH39H38H37H36H35H34H

33H

32H31H

30H2FH2EH

2DH2CH2BH2AH

29H

28H27H26H25H

24H23H22H

21H20H1FH1EH

1DH1CH1BH1AH

19H

18H17H

16H

15H14H

13H

12H11H

10H0FH0EH

0DH0CH0BH

0AH09H08H07H06H05H04H

03H

02H01H

00H2.专用寄存器区(1)累加器A(2)B寄存器(3)程序计数器PC

PC是一个16位计数器,其内容为将要执行指令的存放地址。

PC具有自动加1功能,CPU每进行一次ROM的读数操作,PC内容自动加1,指向下一个ROM单元。

PC没有地址,用户不可以对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以改变程序的执行顺序。

当系统复位时,PC为0000H,CPU从0000H单元运行程序。

(4)程序状态字PSWCY或C(PSW.7)进位标志位

AC(PSW.6)辅助进位标志位

F0(PSW.5)用户标志位

RS1,RS0(PSW.4,PSW.3)当前寄存器区选择位OV(PSW.2)溢出标志位P(PSW.0)奇偶标志位

(5)数据指针DPTR

16位专用寄存器位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位名称CYACFORS1RS0OV-P2.3

单片机外围附加电路2.3.1

时钟电路

2.3.2

复位电路表2-4MCS-51单片机各寄存器的复位状态

00HTCON0000HPC

00HTMOD0×××0000BPCON0×000000BIE不定SBUF

××000000BIP00HSCON0FFHP0~P300HTH10000HDPTR00HTL107HSP00HTH000HPSW00HTL000HACC复位状态寄存器复位状态寄存器第3章

MCS-51指令系统

3.1单片机指令系统概述

指令是指挥计算机工作的命令,一种计算机所能执行的指令集合称之为该种计算机的指令系统。

指令机器指令

0010010000001010B(二进制数表示)

240A(十六进制数表示)汇编指令

ADDA,#0AH

3.1.1指令

3.1.2指令格式

指令的表示形式称指令格式。编写程序时必须严格按指令格式书写。

MCS-51指令由操作码和操作数组成。汇编语言指令格式如下:操作码助记符〔操作数1〕〔,操作数2〕〔,操作数3〕

1.操作码助记符2.操作数3.2寻址方式

指令中,操作数可能是具体的数据,也可能是具体的存放数据的地址或符号,无论何种情况,都可由操作数取得参与指令运行的二进制数据。这个过程叫作寻址。寻指方式立即寻址方式直接寻址方式寄存器寻址方式寄存器间接寻址方式基址加变寻址方式位寻址方式相对寻址方式3.2.1立即寻址方式

所谓立即寻址就是操作数在指令中直接给出。立即寻址方式的操作数称立即数,立即数只能是源操作数,不能作为目的操作数。立即数有8位立即数和16位立即数。使用时在立即数前加“#”标志。

例:MOV

A,#20H

MOV

DPTR,#20D8H

3.2.2

直接寻址方式

直接寻址就是操作数直接以单元地址的形式给出。直接地址以存贮单元形式出现。

例如指令:MOVA,20H

3.2.3

寄存器寻址方式

寄存器寻址就是操作数在寄存器中。

例如指令:MOVA,R23.2.4

寄存器间接寻址方式

寄存器间接寻址使用的寄存器为Ri和DPTR,使用时寄存器前面加“@“标志。即以下形式:MOV A,@Ri

MOVXA,@DPTR例如:(R1)=80H、(80H)=33H,则执行指令MOVA,@Ri后,累加器A的内容为33H而不是80H。

寄存器间接寻址是以寄存器中的内容为地址取得操作数的方法。和寄存器寻址相比,寄存器寻址时,寄存器中存放的是操作数,而寄存器间接寻址中时,寄存器中存放的是操作数的地址。3.2.5

基址加变址寻址方式

基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址寄存器,以两者内容相加形成16位地址作为操作数地址。例如指令:

MOVCA,@A+DPTR3.2.6

位寻址方式

位寻址方式就是以位为操作数。MCS-51单片机有相当强的位处理功能,可以对位进行直接操作。例如指令:

MOVC,4AH

位寻址范围1)内部RAM的位寻址区2)可供位寻址的11个专用寄存器

3.2.7

相对寻址方式

相对寻址是在相对转移指令中,根据地址相对当前PC的偏移量得到操作数的方式。如:

JZrel

偏移量rel是一带符号8位二进数的补码数,范围为-128~+127。实际书写程序时往往先用地址标号代替,在汇编为机器指令时再计算出来。

〔例3-1〕指出下列每一条指令的寻址方式。①MOV2FH,#40H②MOVA,@R0③MOVDPTR,#2020H④MOV45H,P0⑤MOVA,R1⑥MOVCA,@A+PC⑦JCLOOP①中的源操作数为立即寻址,目的操作数为直接寻址。②中的源操作数为寄存器间接寻址,目的操作数为寄存器寻址。③中的源操作数为16位立即寻址,目的操作数为寄存器寻址。④中的源操作数和目的操作数都是直接寻址。⑤中的源操作数和目的操作数都为寄存器寻址。⑥中的源操作数为基址加变址寻址,目的操作数为寄存器寻址。⑦中的操作数为相对寻址。

〔例3-2〕判断下列指令是否正确,若不正确请指出错误:

①MOVA,DPTR②MOVDPTR,#03H③MOV#80H,R7④MOVB,C

〔解〕①不正确。A是8位寄存器,DPTR为16位寄存器,不匹配。

②正确。

③不正确。#80H为立即数,不能作为目的地址。

④不正确。B为8位字节寄存器,C为1位位累加器,不匹配。3.3数据传送指令

1.通用传送指令MOV

指令格式:MOV<目的操作数>,<源操作数>

功能:把源操作数所表示的数据传送到目的地址指定的存贮单元之中,而不改变源操作数。即该指令是“复制”,不是“搬家”。

3.3.1内部RAM数据传送指令通用指令2)以Rn为目的地址的指令MOVRn,A ;Rn←(A)MOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←data1)以累加器A为目的地址的指令MOVA,Rn

;A←(Rn)MOVA,direct

;A←(direct)MOVA,@Ri

;A←((Ri))MOVA,#data

;A←data4)以寄存器间接地址为目的的地址的指令MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct

;(Ri)←(direct)MOV@Ri,#data

;(Ri)←data3)以直接地址为目的地址的指令MOVdirect,A

;direct←(A)MOVdirect,Rn

;direct←(Rn)MOVdirect,direct

;direct←(direct)MOVdirect,@Ri

;direct←((Ri))MOVdirect,#data

;direct←data

5)16位数据传送指令MOVDPTR,#data16;DPTR←data16

;DPL←data7~0

;DPH←data15~8〔例3-3〕设RAM40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。MOVR0,#40HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1

〔解〕执行结果为:(A)=80H,(B)=47H,(R0)=40H,(R1)=80H,(P1)=0FFH,(P2)=0FFH,(80H)=0FFH。

;R0←40H;A←

40H)=80H;R1←80H;B←

80H)=47H

;(

80H)

←0FFH;P2←0FFH1)字节交换指令XCH

XCHA,Rn

;(A)←→(Rn)XCHA,direct

;(A)←→(direct)XCHA,@Ri

;(A)←→((Ri))2.数据交换指令例:设(A)=08H,(R7)=0DCH,执行指令

XCHA,R7结果为:(A)=0DCH,(R7)=08H功能:将累加器A中内容与源操作数互换。

例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令

XCHDA,@R结果为:(A)=8FH,(30H)=00H2)半字节交换XCHDXCHDA,@Ri

;(A)低4位←→((Ri))低4位功能:累加器A中内容与源操作数低4位交换,高4位不变。3)累加器高低数字节交换指令SWAPA

SWAPA

;(A)低4位←→(A)高4位功能:A中高4位与低4位互换。例:(A)=80H,执行SWAPA结果为:(A)=08H.〔解〕XCHA,20HSWAPAMOVR1,21HXCHDA,@R1SWAPAXCHA,20H〔例3-4〕试用交换指令使片内20H单元的高4位与21H单元的低4位交换。

数据写入堆栈称入栈,数据从堆栈中读出称出栈。

3.栈操作指令

PUSHdirect;SP←(SP)+1,(SP)←(direct)

功能:将堆栈指针加1后,片内RAM单元内容送进栈顶单元,原RAM单元内容不变。说明:

①PUSH指令常用于保护CPU现场。

②栈操作是字节指令,每次只能压入或弹出1个字节的内容。如PUSHDPTR是错误的,但可以用以下两条指令完成DPTR的入栈。

PUSHDPH

PUSHDPL1)入栈指令PUSH例:设(A)=30H,(B)=80H,(SP)=50H.则执行指令:

PUSHA

PUSHB结果为:(51H)=30H,(52H)=80H,(SP)=52HPOP

direct;direct←((SP)),SP←(SP)-1功能:将(SP)内容传送给片内RAM单元,SP内容减1。说明:①栈操作要注意先入后出的原则。②POP指令常用于恢复CPU现场2)出栈指令POP〔例3-5〕试用栈操作指令完成P0和P1内容的互换。〔解〕PUSHP0

PUSHP1POPP0

POPP13.3.2片外数据存贮器与累加器A

之间的传送指令

MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri

;A←((Ri))MOVX@DPTR,A;(DPTR)←(A)MOVX@Ri

,A

;(Ri)←(A)说明:①片外数据存贮单元与片内RAM之间的数据传送以及片外数据存贮单元之间的数据传送不能直接进行,必须通过累加器A中转。MOVX20H,2000H及MOVX3000H,2000H等都是错误的。②寻址方式只能是寄存器间接寻址。参与间接寻址的寄存器只有Ri和DPTR两种(3个)。DPTR为16位寄数器,寻址范围为000H~0FFFFH共64KB空间。而Ri是8位寄数器,只能寻址00~0FFH低256单元。〔解〕①

MOV

DPTR,#2000HMOVXA,@DPTRMOV20H,A

MOVDPTR,#2000H

MOVXA,@DPTRMOVR0,#0FAH

MOVX@R0,A〔例3-6〕①将片外数据存贮器2000H单元的内容传送到片内的20H单元中;②将片外数据存贮器2000H单元的内容传送到片外0FAH单元。3.3.3程序存贮器向累加器A传送指令

MOVCA,@A+PC;A←((A)+(PC))MOVCA,@A+DPTR;A←((A)+(DPTR))

说明:①程序存贮器只能读出,不能写入,所以其数据传送都是单向的,即从程序存贮器读出数据,并且只能向累加器A传送。②ROM片内、片外是统一编址,该指令既可访问片内,又可访问片外程序存贮器。③该类指令主要用于查表,又称查表指令。应用时,一般以PC或DPTR确定表格的首址,查表时,根据A中不同的内容查找到表格中的相应项,故此时称PC或DPTR为基址寄存器,A为变址寄存器,寻址方式为基址加变址寻址。④使用DPTR作基址寄存器比较灵活,且不易出错。建议尽可能使用MOVC

A,@DPTR指令。〔解法一〕以DPTR为基址寄存器,平方表首址可灵活安排在适当的位置如2000H,即平方表的内容从2000H单元放起。程序如下:

ORG1800H

MOVDPTR,#2000HMOVA,20H

MOVCA,@A+DPTR

MOV21H,A

ORG2000HDB

00H,01H,04H,10H,19H,24H

DB

31H,40H,51H,64H,……〔例3-7〕以查表方式求出片内RAM中20H单元数的平方值,存入片内21H单元中。

ORG1000H1000

MOV

A,20H

1001ADD

A,#03H

1003MOVCA,@A+PC

1004MOV

21H,A

1006RET

1007DB 00H,01H,04H……

〔解法二〕以PC为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置。

⑤XCHA,20H

XCHA,30H

XCHA,20H〔例3-8〕改正下列指令中的错误,完成其功能:①MOVA,2000H;片外RAM2000H单元内容送入A。②MOVX20H,2000H;片外RAM2000H单元内容送入片内20H单元。③MOVCA,2000H;将ROM2000H单元内容送入A。④MOVXA,@A+DPTR;以查表方式将片外RAM单元的内容送入A。⑤XCH40H,30H;交换片内RAM30H和40H单元的内容。⑥PUSHAB;将寄存器对AB的内容压入堆栈。〔解〕

①MOVDPTR,#2000HMOVXA,@DPTR

②MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A

③MOVDPTR,#2000HMOVA,#0MOVCA,@A+DPTR④无法以查表方式将片外RAM

存贮单元的内容送入A。⑥PUSHA

PUSHB

3.4

算术运算类指令1.不带进位加法指令ADDADDA,Rn

;A←(A)+(Rn)ADDA,direct

;A←(A)+(direct)ADDA,#data

;A←(A)+dataADDA,@Ri

;A←(A)+((Ri))3.4.1加法指令功能:ADD指令把源操作数与累加器A内容相加,结果存在累加器中。该操作不改变源操作数,影响PSW中的C、AC、OV和P位。说明:①ADD指令的目的操作数只能是累加器A,且只有以上4种形式。如ADD

B,40H或ADDA,203AH等都是不存在的,非法的。②指令中,参加运算的两个8位二进制数,即可看作是8位无符号数(0~255),也可以看作是7位带符号数的补码数(-128~+127)。

10110011

+011110011←00101100〔例3-9〕试编程计算40H和41H两单元字节数的和,并存放在42H单元。若(40H)=0B3H,(41H)=79H,给出计算结果并判断PSW受影响的位。〔解〕程序如下:

MOVA,40H ADDA,41HMOV42H,A若(40H)=0B3H,(41H)=79H则运算结果:若是无符号数,和为12CH;若是有符号数,和为+2CH。(42H)=2CH,(C)=1,(AC)=0,(OV)=0,(P)=1。2.带进位加法指令ADCCADDCA,Rn;A←(A)+(Rn)+(C)ADDCA,direct;A←(A)+(direct)+(C)ADDCA,#data;A←(A)+data+(C)ADDCA,@Ri

;A←(A)+((Ri))+(C)

功能:该操作与ADD类似,只是PSW中的进位位C参与运算。带进位加法指令通常用于多字节或多个数加法运算。

〔解〕当(C)=0时,两指令运行结果一样,为(A)=0A4H。当(C)=1时,两指令运行的结果不同,相差1。即ADDA,30H的结果为(A)=0A4H,而ADDCA,30H的结果是(A)=0A5H。显然,ADD指令与C值无关,而ADDC的运行结果与C值有关。

〔例3-10〕已知(A)=26H,(30H)=7EH,比较在(C)=0、(C)=1两种情况下执行ADDA,30H和ADDCA,30H指令的结果。〔解〕MOVA,30HADDA,40H;低字节相加

MOV50H,AMOVA,31HADDCA,41H;高字节相加

MOV51H,A ADDCA,#00H;取高相加产生的进位

MOV52H,A说明:①多字节数求和,从低字节开始,最低字节相加用ADD指令,高字节相加用ADDC指令。②N字节数相加,结果可能为N+1字节数。③为单独取得进位的值,可参考例3-11。

〔例3-11〕两字节无符号数相加,被加数放在内部RAM30H,31H单元(低位放在前),加数放在内部RAM40H、41H单元。计算两数的和,放在50H~52H单元中。3.增量指令INC

INCA;A←(A)+1INCRn

;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri

;(R)i←((Ri))+1INCDPTR;DPTR←(DPTR)+1

功能:对A,Rn,内部RAM单元及数据指针DPTR进行加1操作,除INCA影响P外,不影响任何标志位。

说明:若原为0FFH,执行该指令后,将变为00H,但不影响进位位C。

其结果为:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(P)=0,C及其它位不变。〔例3-12〕(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH执行下列指令:

INCA

INCR2

INC@R0

INCDPTR4.十进制调整指令DAADAA功能:对累加器中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的结果进行调整。说明:

①在指令系统中,没有专门的十进制(BCD码)的加法运算指令,只能使用ADD,ADDC命令,但有时会产生错误。例如:(a)5+3=8

(b)7+6=13(c)8+9=17

01010111

1000+)0011+)0110+)1001

1000

1101

10001其中(a)的运算结果是正确的,(b)(c)的运算结果是错误的。

②为了消除错误,要对运算结果进行DAA调整,调整为正确的压缩BCD码形式。注意,DAA指令必须紧跟ADD或ADDC指令使用。

〔例3-13〕在20H、21H中分别存放压缩BCD码55和72,试将两数相加,并计算出结果。〔解〕MOVA,20H

ADDA,21H

DAA,结果(A)=27,C=1如果不使用DA

A指令,则结果为0C7H,是错误的。

〔例3-14〕设两个4位BCD码分别存放在30H(十位、个位)和31H(百位、千位)、40H(十位、个位)和41H(百位、千位)。试编程求这两个数的和,结果存放在30H、31H、32H中。

〔解〕程序如下:

MOVR0,#30H MOVR1,#40H MOVA,@R0;取十位、个位

ADDA,@R1

;两数十位、个位相加

DAA

;调整为BCD码

MOV@R0,A

;存十位、个位

INCR0

INCR1 MOVA,@R0

;取千位、百位

ADDCA,@R1

;两数千位、百位和进位位相加

DAA

;调整为BCD码

MOV@R0,A;存千位、百位

MOVA,#0 ADDCA,#0 INCR0 MOV@R0,A;存万位

3.4.2减法指令

1.带进位减法指令SUBBSUBBA,Rn

;A←(A)–(Rn)–(C)SUBBA,direct

;A←(A)–(direct)–(C)SUBBA,@Ri

;A←(A)–((Ri))–(C)SUBBA,#data

;A←(A)–data–

(C)

功能:指令功能是以A中数为被减数,减去操作数,再减去进位,差存在A中。影响PSW中的C,AC,OV,和P位。说明:①MCS-51指令系统中,无不带进位(实为借位)的减法指令。若进行不带借的减法运算,要在运算前使用ADDA,#00H或CLRC等指令将进位标志清0。②减法指令中,无BCD码调整。〔例3-15〕两个双字节数相减,被减数放在30H,31H,减数放在40H,41H中,差放入50H、51H。〔解〕ADDA,#00H

;将进位位清0

MOVA,30HSUBBA,40H;低字节相减

MOV50H,AMOVA,31H

SUBBA,41H;高字节相减

MOV51H,A说明:多字节相减,从低字节开始,最低字节相减时,应先将进位位清0。2.减1指令DECDECA

;A←(A)-1DECRn

;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri

;(Ri)←((Ri))-1

功能:减1运算说明:①与INC命令类似,但无DPTR减1指令。

②若原为00H,执行该指令后,将变为0FFH。例如(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。则执行以下指令:DECA,DECR5,DEC30H,DEC@R0结果为:(A)=0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=0

3.4.3乘法指令MUL

MULAB功能:累加器A和寄存器B中的两个无符号8位数相乘,所得16位乘积的低8位放在A中,高8位入在B中。说明:乘法指令影响PSW的状态。执行MUL指令后,C被清0,OV与结果有关,若OV=0,表示乘积小于255(0FFH),只在A中,(B)=0;若OV=1,则乘积大于255,(B)≠0。例如:(A)=20H,(B)=0A0H,执行指令

MULAB结果:(A)=00H,(B)=14H,即积为1400H,(C)=0,(OV)=1

3.4.4除法指令DIV

DIVAB

功能:两8位无符号数相除,被除数置于累加器A中,除数置于寄存器B中。指令执行后,商存于A中,余数存于B中。说明:该指令执行后,C清0,若除数为0(即寄存器B内数据为0),(OV)=1,表明除0没有意义;若除数不为0,则(OV)=0。例:(A)=0FBH,(B)=12H,则DIVAB结果:(A)=0DH,(B)=11H,(C)=0,(OV)=0〔例3-16〕编程实现下列运算:F=D1×D2+D3/D4,其中D1、D2、D3、D4都为非0的8位二进制无符号数。〔解〕MOVA,#D1

MOV B,#D2 MUL AB

;计算D1×D2 MOV R2,A;暂存D1×D2的结果

MOV R3,B MOV A,#D3 MOV B,#D4 DIV AB;计算D3/D4 ADD A,R2

;乘积的低位与商相加

MOV R2,A;存F低位

MOV A,R3 ADDCA,#0;乘积的高位与低位和的进位相加

MOV R3,A

;存F高位在R3中3.5

逻辑运算及移位指令

1.逻辑与指令ANL

ANLA,Rn

;A←(A)∧(Rn)ANLA,direct

;A←(A)∧(direct)ANLA,@Ri

;A←(A)∧((Ri))

ANLA,#data

;A←(A)∧dataANLdirect,A

;direct←(A)∧(direct)ANLdirect,#data;direct←(direct)∧data

3.5.1逻辑运算指令说明:①逻辑运算是按位进行的,对进位标志位C不产生影响。②该指令用于屏蔽某些位。

[例3-17〕将R1中的低4位清0,高4位不变。〔解〕MOVA,#11110000B

ANLA,R1

MOVR1,A01111010

∧)11100110

01100010结果为:(A)=62H例:设(A)=7AH,(20H)=0E6H,执行指令

ANLA,20H2.逻辑或指令ORLORLA,Rn

;A←(A)∨(Rn)ORLA,direct;A←(A)∨(direct)ORLA,@Ri;A←(A)∨((Ri))ORLA,#data;A←(A)∨dataORLdirect,A;direct←(A)∨(direct)ORLdirect,#data;direct←(direct)∨data

〔例3-18〕将片外RAM2000H单元的0、1位置1,2、3位清0,其它位不变。〔解〕MOVDPTR,#2000HMOVXA,@DPTRORLA,#00000011BANLA,#11110011BMOV@DPTR,A3.逻辑异或指令XRLXRLA,Rn

;A←(A)⊕(Rn)XRLA,direct;A←(A)⊕(direct)XRLA,@Ri

;A←(A)⊕((Ri))XRLA,#data;A←(A)⊕dataXRLdirect,A,;direct←(direct)⊕(A)XRLdirect,#data;direct←(direct)⊕data说明:①若与0进行异或运算,结果保持不变;②若与1进行异或运算,结果取反;③自身异或等效于清0。例XRLA,A结果为:(A)=0

11110110⊕

0101010110100011〔例3-19〕将20H单元内容1、3、5、7位保持不变,0、2、4、6位取反。

〔解〕XRL20H,#01010101B

(20H)=11110110

则执行指令:结果为(20H)=10100011B4.累加器清0指令CLRCLRA

CPLA

5.累加器取反指令CPL

例如(A)=0E6H执行CPLA,结果为:(A)=19H说明:1)取反即为逻辑非运算。2)MCS-51单片机没有求补指令,若对累加器A中数求补,则程序如下:

CPLA

INCA3.5.2移位指令

循环左移

RLA;An+1←An,A0←A7循环右移

RRA;An←An+1,A7←A0进位循环左移

RLCA;An+1←An

,A0←C,C←A7带进位循环右移

RRCA;An←An+1,A7←C,C←A0

移位指令〔例3-21〕分析下列程序段实现的功能:

MOVA,directRLAMOVR1,ARLARLAADDA,R1MOVdirect,A〔解〕各指令实现的功能依次如程序右边注译,可知该程序实现的功能是将存贮单元的数乘以10。;取数设为D0;D0×2;(R1)=2D0;2D0×2;4D0×2;8D0+2D0;存数10D0〔例3-20〕将20H单元存放的无符号数除2。〔解〕ADDA,#0;C清零

MOVA,20HRRCAMOV20H,A3.6

位操作指令

MOV C,bit;C←(bit)MOVbit,C;bit←(C)

〔例3-22〕将20H位的内容送至50H位,并要求不改变C的状态。〔解〕MOV10H,C;保护C内容

MOVC,20HMOV50H,CMOVC,10H;恢复C内容

3.6.1位传送指令MOV

说明:①多数位操作指令由C参与,C称位累加器。②位操作指令寻址方式为位寻址。

3.6.2位置位/复位指令

(修改位内容命令)

1.位置位(置1)命令SETB

SETBC

;C←1SETBbit;bit←12.位复位(清0)命令

CLRC

;C←0

CLRbit;bit←0说明:①位置位/复位命令可以方便改变位空间的单个位的内容,十分灵活。②例如许多运算要先将C清零,我们用以用ADDA,#0来清零,也可以直接用CLRC指令。

3.6.3位运算指令

1.逻辑与指令ANL

ANLC,bit

;C←(C)∧(bit)ANLC,/bit;C←(C)∧(/bit)2.逻辑或指令ORL

ORLC,bit;C←(C)∨(bit)ORLC,/bit;C←(C)∨(/bit)3.逻辑非(求反)指令CPL

CPLbit

;bit←(/bit)

〔解〕MOVC,bit1

ANLC,/bit2

;C←(bit1).(/bit2)

MOVbit0,C

MOVC,bit2

ANLC,/bit1;C←(/bit1).(bit2)

ORLC,bit0

MOVbit0,C〔例3-23〕设bit0,bit1,bit2为三个位地址,试编程实现异或运算

bit0=bit1⊕bit2=(bit1)∧(/bit2)+(/bit1)∧(bit2)程序如下:

MOVC,P0.1ANL

C,/P0.0ORLC,/P0.2MOVP1.7,C〔例3-24〕编程实现图3-9的逻辑功能。化简可得:

P1.7=P0.0•P0.1•P0.2〔解〕根据逻辑图得出逻辑关系:

P1.7=P0.0•P0.1•P0.1•P0.23.7

控制转移类指令

程序的顺序执行是由PC自动加1实现的,要改变程序的执行顺序,实现分支转向,必须通过强迫改变PC值的方法来实现,这就是控制转移类指令的基本功能。控制转移类指令可以控制程序根据不同情况执行不同的程序段,令单片机应用系统做出相应的动作。控制转移类指令使单片机具有“智能化”功能。控制类指令的掌握使用较复杂,包括无条件转移指令、条件转移指令及子程序调用返回指令。

3.7.1无条件转移指今

1.长转移指令LJMP

LJMPaddr16;PC←addr16功能:指令执行后将16位地址(addr16)传送给PC,从而实现程序转移到新的地址开始运行。

说明:该指令可实现64KB范围的任意转移。

SJMPrel;PC←(PC)+2+rel功能:执行指令后,程序从当前位置向前或向后跳转rel个单元运行。说明:①该指令中寻址方式称相对寻址。②rel为8位带符号补码数,因此所能实现的程序转移是双向的,若rel为正数,则向前转移,若rel为负数向后转移。转移相对范围图是-128~+127H共256个单元;③注译中的“PC←(PC)+2+rel”是这样得来的:注译中“(PC)”是该指令执行前的值,前面的“PC”是指指令执行后的值。因“SJMPrel”指令存放在ROM中占用2个字节单元(为双字节指令),故程序从指令执行后“当前位置”向前或向后跳转rel个单元,也就是从指令执行前的位置向前或向后跳转2+rel个单元。2.短转移指令SJMP

AJMPaddr11;PC←(PC)+2,PC10~0←addr11

功能:addr11的11位数取代该指令执行后程序指针PC的低11位PC10~0,程序根据PC值转移运行。说明:①addr11为11位无符号数,程序转移最大范围为2KB。②LJMP,STMP,AJMP功能相同,只是转移范围不同。3.绝对转移指令AJMP

JMP@A+DPTR

;PC←(A)+(DPTR)

功能:由A及DPTR的内容决定程序转移的目的地址。说明:

①DPTR为基址寄存器,A为变址寄存器,为基址加变址寻址方式。

②把DPTR值固定,赋与A不同的值,则可实现程序的多分支转移。4.变址转移指令JMP

3.7.2条件转移指令

1.测试转移指令

1)累加器A判0转移指令JZrel

;若(A)=0,转移,PC←(PC)+2+rel

;若(A)≠0,顺序执行。JNZrel

;若(A)≠0,转移,PC←(PC)+2+rel

2)进位位测试转移指令JCrel

;若(C)=1,转移,PC←(PC)+2+relJNCrel

;若(C)=0,转移,PC←(PC)+2+rel

所谓条件转移就是程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移,仍顺序执行。

3)位单元测试转移指令JBbit,rel;若(bit)=1,转移,PC←(PC)+3+relJNBbit,rel

;若(bit)=0,转移,PC←(PC)+3+relJBCbit,rel

;若(bit)=1,转移,PC←(PC)+3+rel

;同时将bit位清零。

功能:根据测试条件决定程序是否转移执行。说明:①若条件满足程序转移执行;若条件不满足,顺序执行。②位单元测试转移指令为三字节指令,故执行该类指令,若条件满足转移时,PC=(PC)+3+ rel。其它测试转移指令为双字节指令,条件满足转移时,PC=(PC)+2+rel。

〔解〕MOV

R0,#DATA2

;赋首址

MOVDPTR,#DATA1LOOP1:MOVXA,@DPTR;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论