单片机教学讲解课件_第1页
单片机教学讲解课件_第2页
单片机教学讲解课件_第3页
单片机教学讲解课件_第4页
单片机教学讲解课件_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第4章汇编语言程序设计4.1概述4.2MCS-51汇编语言程序设计 顺序、循环、分支、子程序

第4章汇编语言程序设计4.1概述14.1概述4.1.1计算机常用的编程语言程序设计语言:低级语言和高级语言。低级语言:机器语言

汇编语言:采用特定的助记符号来描述机器指令高级语言:高级语言程序要经过解释程序或编译程序的编译,形成目标程序后,才能执行。常用的高级语言:BASIC,FORTRAN,PASCAL,C等。4.1概述4.1.1计算机常用的编程语言24.1.2MCS-51汇编语言伪指令

1.ORG(Origin)汇编起始地址命令功能:用于规定目标程序的起始地址。格式:

[标号:]ORG地址地址项:16位绝对地址,也可以用标号或表达式表示。如果不用ORG规定,则汇编得到的目标程序将从0000H开始。4.1.2MCS-51汇编语言伪指令3一个源程序中,可多次使用ORG指令以规定不同程序段的起始位置。地址应从小到大顺序排列,不允许重叠。例如:ORG4000H LJMP MAIN

ORG 4200HMAIN: MOV A,30H

一个源程序中,可多次使用ORG指令以规定不同程序段的起始位置42.END(ENDofassembly)汇编终止命令

功能:用于终止源程序的汇编工作。 END之后的指令,汇编程序不予处理。格式:

[标号:]END[表达式]只有主程序模块才有“表达式”项,且“表达式”的值等于该程序模块的入口地址。而其他程序模块就没有“表达式”项。“标号:”也是选择项。

一个源程序只能有一个END命令。2.END(ENDofassembly)汇编终止命令53.EQU(Equate)赋值命令功能:用于给字符名称赋予一个特定值。赋值以后,其值在整个过程中有效。格式:

字符名称EQU赋值项“赋值项”:可以是常数、地址、标号或表达式。8位或16位二进制数。赋值以后的字符名称即可作地址使用,也可作立即数使用。 PA8155 EQU 8001H 给标号PA8155赋值8001H。3.EQU(Equate)赋值命令64.DB(DefineByte)定义数据字节命令功能:用于从指定的地址单元开始,在程序存储器中存放字节数据。格式: [标号:]DB8位数表例如: DB“howareyou?”;1个字节存放1个字符ASCII常使用本命令存放数据表格,例如存放数码管显示的十六进制数的字形码,可使用多条DB命令定义: DB C0H,F9H,A4H,B0H DB 99H,92H,82H, F8H DB 80H,90H,88H, 83H DB C6H,A1H,86H,84H4.DB(DefineByte)定义数据字节命令7查表时,为确定数据区的起始位置,可采用两种方法:(1)根据DB命令前一条指令的地址确定。例: 8100HMOV A,#49H(1字节) TAB:DB C0H,F9H,A4H,B0H(2)使用ORG指令专门规定例: ORG 8100H TAB:DB C0H,F9H,A4H,B0H定义的数码管字形码从8100地址开始存放。查表时,为确定数据区的起始位置,可采用两种方法:8

5.DW(DefineWord) 定义数据字命令功能:用于从指定地址开始,在程序存储器单元中定义16位的数据字(两个字节)。格式:[标号:]DW16位数表存放规则:高8位在前(低地址),低8位在后(高地址)。例: DW100H,1ACH;按顺序存01H,00H,01H,ACH DW “AA” ;存入41H,41H(ASCII码) DW “A” ;存入00H,41H DW “ABC” ;不合法,大于两个字节5.DW(DefineWord) 定义数据字命令9注意: DB和DW定义的数表,数的个数不得超过80个。 如果数据的数目较多时,可使用多个定义命令。在MCS-51程序设计应用中,常以DB定义数据,以DW定义地址。注意: DB和DW定义的数表,数的个数不106.DS(DefineStorage)定义存储区命令功能:用于从指定地址开始,保留指定数目的字节单元为存储区,供程序运行使用。汇编时对这些单元不赋值。格式:[标号:]DS16位数表

例: ADDRTABL:DS20

例: ORG8100HDS 08H注意:对MSC-51单片机来说,DB、DW、DS命令只能对程序存储器使用,不能对数据存储器使用。6.DS(DefineStorage)定义存储区命令117.BIT位定义命令功能:用于给字符名称赋以位地址。格式:字符名称BIT位地址例如:AAABIT40H BBBBIT 50H7.BIT位定义命令12

4.2MCS-51汇编语言程序设计

汇编和高级语言程序设计的过程:首先对问题进行分析,然后确定算法,再根据算法流程编写程序,最后是调试程序。汇编语言程序设计的独特点在于:(1)用汇编语言进行程序设计时,对数据的存放、寄存器和工作单元的使用等要由设计者安排。而高级语言程序设计时,这些工作都由计算机软件安排,程序设计者不必考虑。4.2MCS-51汇编语言程序设计13(2)汇编语言程序设计要求设计人员必须对所使用的计算机的硬件结构有较为详细的了解。特别是对各类寄存器、端口、定时器/计数器、中断等内容要熟悉,以便在程序设计时能熟练使用。 汇编语言程序共有四种结构形式:顺序结构、循环结构、分支结构(选择结构)和子程序结构。(2)汇编语言程序设计要求设计人员必须对所使用的计算机的硬144.2.1顺序程序

例4.1设三字节无符号数相加,被加数:在内部RAM20H~22H单元(低位在前),加数:在内部RAM30H~32H单元(低位在前),结果:存于内部RAM20~22H单元,进位位存于23H单元。利用ADDC指令进行多字节加法运算。4.2.1顺序程序15

ORG 5000HMOV R0,#20H ;被加数的低字节地址 MOV R1,#30H ;加数的低字节地址 MOV A,@R0 ADD A,@R1 ;低字节相加 MOV @R0,A ;存放字节相加结果

INC R0 INC R1 MOV

A, @R0 ADDC

A, @R1 ;中间字节带进位相加 MOV @R0,A ;存中间字节相加结果 ORG 5000H16 INC R0 INC R1 MOV

A, @R0 ADDC

A, @R1 ;高字节带进位相加 MOV

@R0,A ;存高字节相加结果

INC R0 MOV

A,#00H ADDC

A,

#00H MOV @R0,A ;进位位送23H END INC R017例4.2将片内RAM20H单元的内容拆成两段,每段4位。并将它们分别存入21H与22H单元中。(20H)=0101,1010=5AH (21H)=0AH;存放低4位 (22H)=05H;存放高4位

例4.2将片内RAM20H单元的内容拆成两段,每段4位18 ORG 5000HSTART: MOV R0,#21H ;R0←21H MOV A,20H ;A←(20H)

ANL A,#0FH ;A←#0FH∧(A) MOV@R0,A ;(R0)←(A),保存低4位

INC R0 ;R0←(R0)+1 MOV A,20H ;A←(20H) SWAPA ;高低半字节交换

ANL A,#0FH;A∧#0FH MOV @R0,A ;(R0)←(A) END ORG 5000H194.2.2循环程序循环初态4.2.2循环程序循环初态20循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。循环程序一般由四个主要部分组成:21

循环:单重循环多重循环(二重以上)--循环嵌套。在多重循环程序中,只允许外重循环嵌套内重循环程序,而不允许循环体互相交叉,另外,也不允许从循环程序的外部跳入循环程序的内部。 循环:单重循环22例4.3把外部RAM5000~50FFH单元的内容清零。 ORG4200HSTART1: MOV R0,#00H ;设置循环初始值 MOV DPTR,#5000H LOOP1: MOV A,#00H MOVX

@DPTR,A ;外部RAM单元清零 INC DPTR ;外部RAM单元加1 INC R0 ;循环次数加1

CJNE R0,#00H,LOOP1;循环控制,不等转移 END例4.3把外部RAM5000~50FFH单元的内容清零23例4.4设三字节无符号数相加,被加数:内部RAM20H~22H单元(低位在前),加数:内部RAM30H~32H单元(低位在前),结果:存于内部RAM20~22H单元,进位位存于23H单元。利用ADDC指令进行多字节加法运算。例4.4设三字节无符号数相加,24 ORG 4200H MOV R0,#20H ;被加数的低字节地址 MOV R1,#30H ;加数的低字节地址 MOV R2,#03H ;循环次数 CLR CLOOP:

MOV

A,@R0 ADDC

A,@R1 ;低字节相加 MOV

@R0,A ;存放字节相加结果

INC

R0 INC

R1

DJNZ

R2,LOOP ;循环控制,R2递减不为零转移 MOVA,#00H ADDC

A,#00H MOV

@R0,A ;进位位送23H END ORG 4200H25例4.5

把内部RAM中起始地址为40H的数据串传送到外部RAM以5000H为首地址的区域,直到发现“$”字符的ASCII码为止。同时规定数据串的最大长度为32个字节。例4.5把内部RAM中起始地址为40H的数据串传送26 ORG 4200H MOV R0,#40H ;内部RAM起始地址 MOV DPTR,#5000H ;外部RAM起始地址

MOV R1,#20H ;最大串长LOOP: MOV A,@R0 ;取数据 CLR C ;清进位位 MOV R2,A ;暂存

SUBB A,#24H ;判断是否为“$”

JZ QUIT ;是,转“QUIT” MOV A,R2

;不是,送入外部RAM MOVX

@DPTR,A INC

DPTR ;数据指针加1 INC

R0 ;R0加1 DJNZ

R1,LOOP ;循环次数控制,R1递减,不为零转移QUIT: END ORG 4200H27例4.6设MCS-51单片机的时钟频率为fosc=6MHz,试设计延时0.1s的延时程序。延时程序所花费的时间是该程序指令的总机器周期数与机器周期的乘积。通常,延时程序采用MOV和DJNZ指令来实现。单循环延时程序,最大的循环次数位256,则程序段为:

MOV R0,#00H ;机器周期数为1DJNZ R0,$ ;机器周期数为2若单片机晶振为6MHz,则一个机器周期为2us。延时时间:(1+256×2)×2μs=1026μs。

需采用多重循环。

例4.6设MCS-51单片机的时钟频率为fosc=628多重循环:在一个循环体中又包含了其它的循环程序。这种方式是实现延时程序的常用方法。使用多重循环时,必须注意:(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。(3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。多重循环:在一个循环体中又包含了其它的循环29 MOV R7,#200 DELAY1: MOV R6,#125 DELAY2: DJNZ R6,DELAY2;125×4=500μs=0.5ms DJNZ R7,DELAY1;0.5×200=0.1s该段程序的延时时间约为0.1006s若需延时更长时间,可采用多重循环,如1s延时可采用3重循环,而用7重循环可延时几年。 MOV R7,#200 304.2.3分支程序(选择)分支程序的基本结构:单分支和多分支。 其特点是:各处理模块是相互排斥的。4.2.3分支程序(选择)3113条条件转移指令,分别为:JZ,JNZ:累加器判零转移指令;CJNE:比较条件转移指令,4条;DJNZ:减1条件转移指令,2条;JC,JNC,JB,JNB,JBC:位控制条件转移指令等四类。13条条件转移指令,分别为:32例4.7x,y均为8位二进制数,x存放在VAR单元中,函数值y存放在FUNC中,

按下式给y赋值.

例4.7x,y均为8位二进制数,x存放在VAR单元33单片机教学讲解课件34 ORG 4200H

VAR

EQU

40H FUNC

EQU

50H

START: MOV A,VAR ;取x

JZ COMP ;为零转COMP

JNB ACC.7,

POSI ;x>0,转POSI

MOV A,

#0FFH ;x<0,(A)=-1,补码 SJMP COMP

POSI: MOV A,#01HCOMP: MOV FUNC,A ;保存结果 END ORG 4200H35例4.8片内RAMDATA1和DATA2两个单元中存有两个无符号数字,将两个数中的小者存入30H单元。 ORG 4000H DATA1

EQU

34H DATA2

EQU

56H MOV

A, DATA1 ;第一数送A CLR

C

CJNE

A,

DATA2,

BIG SJMP

STORE ;相等,DATA1作为小的数BIG:JC STORE ;C=1跳转,即A<DATA2 MOV A,DATA2 STORE:MOV 30H, A ;小者送RAM

END例4.8片内RAMDATA1和DATA2两个单元中存有36例4.10假定R0中存放的是采集到的被按键键值,共有128个键值(0~127),根据该键值转向不同键的处理程序中去。

跳转方法:逐个比较,类似CASE。 使用散转指令JMP@A+DPTR。

设(R0)=0~n,对应的处理程序入口地址分别为PROG0~PROGn,且按照一定的规律排列。例4.10假定R0中存放的是采集到的被按键键值,共有1237ORG2000H

MOVDPTR,#TAB;设置处理程序入口首地址MOVA,R0

RLA

;为何要左移?NEXT:JMP@A+DPTR;转向形成的散转地址入口

TAB:AJMP PROG0;直接转移地址表

AJMP PROG1……

AJMP PROGnORG2000H384.2.4子程序设计子程序与一般程序的主要区别是在子程序的末尾有一条子程序返回指令(RET),其功能是执行完子程序后通过将堆栈内的断点地址弹出到PC而返回到主程序中。在编写子程序时应注意以下几点:

(1)要给每个子程序赋一个名字。

实际上是一个入口地址的代号。

(2)要能正确地传递参数。首先要有入口条件,说明进入子程序时它所要处理的数据如何得到,另外,要有出口条件,即处理的结果是如何存放的。4.2.4子程序设计39(3)注意保护现场和恢复现场。注意保存主程序和子程序共同涉及的但值不同的累加器、寄存器和单元的内容。保护现场:PUSH恢复现场:POP(4)注意子程序的通用性。主程序调用子程序的指令:“LCALL”,“ACALL”。子程序返回指令:RET。子程序可以嵌套,嵌套次数从理论上说是无限的,但实际上由于受堆栈深度的影响,嵌套次数是有限的。(3)注意保护现场和恢复现场。40例4.11设有a,b,c三个数(0~9),存于内部RAM的DATAA、DATAB、和DATAC三个单元。编程实现:c=a2+b2。设DATAA、DATAB、DATAC分别对应内部RAM的40H、41H和42H单元。例4.11设有a,b,c三个数(0~9),存于内部RAM41 ORG 5000H DATAA EQU 40H DATAB EQU 41H

DATAC EQU 42HSTART: MOV

A, DATAA ;取第一操作数 ACALL

SQR ;调用查表程序 MOV

R1,A ;a2暂存R1

MOV

A,DATAB ;取第二操作数

ACALL

SQR ;调用查表程序 ADD

A,R1 ;A←a2+b2 MOV

DATAC,A ORG 5000H42子程序:SQR:INC

A

;偏移量调整,为何?MOVC

A, @A+PC

;查平方表,PC自动累加1 RETTAB:DB0,1,4,9,16,25,36,49,64,81 END 子程序:43例4.12向P1口输出全高电平,延时1s后,再输出全低电平,延时1s后,再输出全高电平。 主程序: ORG 5000H MAIN: MOV P1,#0FFH ACALLDELAY MOV P1,#00H ACALLDELAY SJMP MAINEND例4.12向P1口输出全高电平,延时1s后,再输出全低电44子程序:DELAY: MOV R5,#10 ;假设Fosc=6MHzDELAY0: MOV R6,#200 DELAY1: MOV R7,#125

DELAY2: DJNZ R7,DELAY2

DJNZ R6,DELAY1

DJNZ R5,DELAY0

RET子程序:45第4章汇编语言程序设计4.1概述4.2MCS-51汇编语言程序设计 顺序、循环、分支、子程序

第4章汇编语言程序设计4.1概述464.1概述4.1.1计算机常用的编程语言程序设计语言:低级语言和高级语言。低级语言:机器语言

汇编语言:采用特定的助记符号来描述机器指令高级语言:高级语言程序要经过解释程序或编译程序的编译,形成目标程序后,才能执行。常用的高级语言:BASIC,FORTRAN,PASCAL,C等。4.1概述4.1.1计算机常用的编程语言474.1.2MCS-51汇编语言伪指令

1.ORG(Origin)汇编起始地址命令功能:用于规定目标程序的起始地址。格式:

[标号:]ORG地址地址项:16位绝对地址,也可以用标号或表达式表示。如果不用ORG规定,则汇编得到的目标程序将从0000H开始。4.1.2MCS-51汇编语言伪指令48一个源程序中,可多次使用ORG指令以规定不同程序段的起始位置。地址应从小到大顺序排列,不允许重叠。例如:ORG4000H LJMP MAIN

ORG 4200HMAIN: MOV A,30H

一个源程序中,可多次使用ORG指令以规定不同程序段的起始位置492.END(ENDofassembly)汇编终止命令

功能:用于终止源程序的汇编工作。 END之后的指令,汇编程序不予处理。格式:

[标号:]END[表达式]只有主程序模块才有“表达式”项,且“表达式”的值等于该程序模块的入口地址。而其他程序模块就没有“表达式”项。“标号:”也是选择项。

一个源程序只能有一个END命令。2.END(ENDofassembly)汇编终止命令503.EQU(Equate)赋值命令功能:用于给字符名称赋予一个特定值。赋值以后,其值在整个过程中有效。格式:

字符名称EQU赋值项“赋值项”:可以是常数、地址、标号或表达式。8位或16位二进制数。赋值以后的字符名称即可作地址使用,也可作立即数使用。 PA8155 EQU 8001H 给标号PA8155赋值8001H。3.EQU(Equate)赋值命令514.DB(DefineByte)定义数据字节命令功能:用于从指定的地址单元开始,在程序存储器中存放字节数据。格式: [标号:]DB8位数表例如: DB“howareyou?”;1个字节存放1个字符ASCII常使用本命令存放数据表格,例如存放数码管显示的十六进制数的字形码,可使用多条DB命令定义: DB C0H,F9H,A4H,B0H DB 99H,92H,82H, F8H DB 80H,90H,88H, 83H DB C6H,A1H,86H,84H4.DB(DefineByte)定义数据字节命令52查表时,为确定数据区的起始位置,可采用两种方法:(1)根据DB命令前一条指令的地址确定。例: 8100HMOV A,#49H(1字节) TAB:DB C0H,F9H,A4H,B0H(2)使用ORG指令专门规定例: ORG 8100H TAB:DB C0H,F9H,A4H,B0H定义的数码管字形码从8100地址开始存放。查表时,为确定数据区的起始位置,可采用两种方法:53

5.DW(DefineWord) 定义数据字命令功能:用于从指定地址开始,在程序存储器单元中定义16位的数据字(两个字节)。格式:[标号:]DW16位数表存放规则:高8位在前(低地址),低8位在后(高地址)。例: DW100H,1ACH;按顺序存01H,00H,01H,ACH DW “AA” ;存入41H,41H(ASCII码) DW “A” ;存入00H,41H DW “ABC” ;不合法,大于两个字节5.DW(DefineWord) 定义数据字命令54注意: DB和DW定义的数表,数的个数不得超过80个。 如果数据的数目较多时,可使用多个定义命令。在MCS-51程序设计应用中,常以DB定义数据,以DW定义地址。注意: DB和DW定义的数表,数的个数不556.DS(DefineStorage)定义存储区命令功能:用于从指定地址开始,保留指定数目的字节单元为存储区,供程序运行使用。汇编时对这些单元不赋值。格式:[标号:]DS16位数表

例: ADDRTABL:DS20

例: ORG8100HDS 08H注意:对MSC-51单片机来说,DB、DW、DS命令只能对程序存储器使用,不能对数据存储器使用。6.DS(DefineStorage)定义存储区命令567.BIT位定义命令功能:用于给字符名称赋以位地址。格式:字符名称BIT位地址例如:AAABIT40H BBBBIT 50H7.BIT位定义命令57

4.2MCS-51汇编语言程序设计

汇编和高级语言程序设计的过程:首先对问题进行分析,然后确定算法,再根据算法流程编写程序,最后是调试程序。汇编语言程序设计的独特点在于:(1)用汇编语言进行程序设计时,对数据的存放、寄存器和工作单元的使用等要由设计者安排。而高级语言程序设计时,这些工作都由计算机软件安排,程序设计者不必考虑。4.2MCS-51汇编语言程序设计58(2)汇编语言程序设计要求设计人员必须对所使用的计算机的硬件结构有较为详细的了解。特别是对各类寄存器、端口、定时器/计数器、中断等内容要熟悉,以便在程序设计时能熟练使用。 汇编语言程序共有四种结构形式:顺序结构、循环结构、分支结构(选择结构)和子程序结构。(2)汇编语言程序设计要求设计人员必须对所使用的计算机的硬594.2.1顺序程序

例4.1设三字节无符号数相加,被加数:在内部RAM20H~22H单元(低位在前),加数:在内部RAM30H~32H单元(低位在前),结果:存于内部RAM20~22H单元,进位位存于23H单元。利用ADDC指令进行多字节加法运算。4.2.1顺序程序60

ORG 5000HMOV R0,#20H ;被加数的低字节地址 MOV R1,#30H ;加数的低字节地址 MOV A,@R0 ADD A,@R1 ;低字节相加 MOV @R0,A ;存放字节相加结果

INC R0 INC R1 MOV

A, @R0 ADDC

A, @R1 ;中间字节带进位相加 MOV @R0,A ;存中间字节相加结果 ORG 5000H61 INC R0 INC R1 MOV

A, @R0 ADDC

A, @R1 ;高字节带进位相加 MOV

@R0,A ;存高字节相加结果

INC R0 MOV

A,#00H ADDC

A,

#00H MOV @R0,A ;进位位送23H END INC R062例4.2将片内RAM20H单元的内容拆成两段,每段4位。并将它们分别存入21H与22H单元中。(20H)=0101,1010=5AH (21H)=0AH;存放低4位 (22H)=05H;存放高4位

例4.2将片内RAM20H单元的内容拆成两段,每段4位63 ORG 5000HSTART: MOV R0,#21H ;R0←21H MOV A,20H ;A←(20H)

ANL A,#0FH ;A←#0FH∧(A) MOV@R0,A ;(R0)←(A),保存低4位

INC R0 ;R0←(R0)+1 MOV A,20H ;A←(20H) SWAPA ;高低半字节交换

ANL A,#0FH;A∧#0FH MOV @R0,A ;(R0)←(A) END ORG 5000H644.2.2循环程序循环初态4.2.2循环程序循环初态65循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。循环程序一般由四个主要部分组成:66

循环:单重循环多重循环(二重以上)--循环嵌套。在多重循环程序中,只允许外重循环嵌套内重循环程序,而不允许循环体互相交叉,另外,也不允许从循环程序的外部跳入循环程序的内部。 循环:单重循环67例4.3把外部RAM5000~50FFH单元的内容清零。 ORG4200HSTART1: MOV R0,#00H ;设置循环初始值 MOV DPTR,#5000H LOOP1: MOV A,#00H MOVX

@DPTR,A ;外部RAM单元清零 INC DPTR ;外部RAM单元加1 INC R0 ;循环次数加1

CJNE R0,#00H,LOOP1;循环控制,不等转移 END例4.3把外部RAM5000~50FFH单元的内容清零68例4.4设三字节无符号数相加,被加数:内部RAM20H~22H单元(低位在前),加数:内部RAM30H~32H单元(低位在前),结果:存于内部RAM20~22H单元,进位位存于23H单元。利用ADDC指令进行多字节加法运算。例4.4设三字节无符号数相加,69 ORG 4200H MOV R0,#20H ;被加数的低字节地址 MOV R1,#30H ;加数的低字节地址 MOV R2,#03H ;循环次数 CLR CLOOP:

MOV

A,@R0 ADDC

A,@R1 ;低字节相加 MOV

@R0,A ;存放字节相加结果

INC

R0 INC

R1

DJNZ

R2,LOOP ;循环控制,R2递减不为零转移 MOVA,#00H ADDC

A,#00H MOV

@R0,A ;进位位送23H END ORG 4200H70例4.5

把内部RAM中起始地址为40H的数据串传送到外部RAM以5000H为首地址的区域,直到发现“$”字符的ASCII码为止。同时规定数据串的最大长度为32个字节。例4.5把内部RAM中起始地址为40H的数据串传送71 ORG 4200H MOV R0,#40H ;内部RAM起始地址 MOV DPTR,#5000H ;外部RAM起始地址

MOV R1,#20H ;最大串长LOOP: MOV A,@R0 ;取数据 CLR C ;清进位位 MOV R2,A ;暂存

SUBB A,#24H ;判断是否为“$”

JZ QUIT ;是,转“QUIT” MOV A,R2

;不是,送入外部RAM MOVX

@DPTR,A INC

DPTR ;数据指针加1 INC

R0 ;R0加1 DJNZ

R1,LOOP ;循环次数控制,R1递减,不为零转移QUIT: END ORG 4200H72例4.6设MCS-51单片机的时钟频率为fosc=6MHz,试设计延时0.1s的延时程序。延时程序所花费的时间是该程序指令的总机器周期数与机器周期的乘积。通常,延时程序采用MOV和DJNZ指令来实现。单循环延时程序,最大的循环次数位256,则程序段为:

MOV R0,#00H ;机器周期数为1DJNZ R0,$ ;机器周期数为2若单片机晶振为6MHz,则一个机器周期为2us。延时时间:(1+256×2)×2μs=1026μs。

需采用多重循环。

例4.6设MCS-51单片机的时钟频率为fosc=673多重循环:在一个循环体中又包含了其它的循环程序。这种方式是实现延时程序的常用方法。使用多重循环时,必须注意:(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。(3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。多重循环:在一个循环体中又包含了其它的循环74 MOV R7,#200 DELAY1: MOV R6,#125 DELAY2: DJNZ R6,DELAY2;125×4=500μs=0.5ms DJNZ R7,DELAY1;0.5×200=0.1s该段程序的延时时间约为0.1006s若需延时更长时间,可采用多重循环,如1s延时可采用3重循环,而用7重循环可延时几年。 MOV R7,#200 754.2.3分支程序(选择)分支程序的基本结构:单分支和多分支。 其特点是:各处理模块是相互排斥的。4.2.3分支程序(选择)7613条条件转移指令,分别为:JZ,JNZ:累加器判零转移指令;CJNE:比较条件转移指令,4条;DJNZ:减1条件转移指令,2条;JC,JNC,JB,JNB,JBC:位控制条件转移指令等四类。13条条件转移指令,分别为:77例4.7x,y均为8位二进制数,x存放在VAR单元中,函数值y存放在FUNC中,

按下式给y赋值.

例4.7x,y均为8位二进制数,x存放在VAR单元78单片机教学讲解课件79 ORG 4200H

VAR

EQU

40H FUNC

EQU

50H

START: MOV A,VAR ;取x

JZ COMP ;为零转COMP

JNB ACC.7,

POSI ;x>0,转POSI

MOV A,

#0FFH ;x<0,(A)=-1,补码 SJMP COMP

POSI: MOV A,#01HCOMP: MOV FUNC,A ;保存结果 END ORG 4200H80例4.8片内RAMDATA1和DATA2两个单元中存有两个无符号数字,将两个数中的小者存入30H单元。 ORG 4000H DATA1

EQU

34H DATA2

EQU

56H MOV

A, DATA1 ;第一数送A CLR

C

CJNE

A,

DATA2,

BIG SJMP

STORE ;相等,DATA1作为小的数BIG:JC STORE ;C=1跳转,即A<DATA2 MOV A,DATA2 STORE:MOV 30H, A ;小者送RAM

END例4.8片内RAMDATA1和DATA2两个单元中存有81例4.10假定R0中存放的是采集到的被按键键值,共有128个键值(0~127),根据该键值转向不同键的处理程序中去。

跳转方法:逐个比较,类似CASE。 使用散转指

温馨提示

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

评论

0/150

提交评论