版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章第四章汇编语言程序设计基础汇编语言程序设计基础 第四章第四章汇编语言程序设计基础汇编语言程序设计基础三种语言程序处理过程三种语言程序处理过程 标号字段说明标号字段说明 标号是指令的符号地址,一个标号的值标号是指令的符号地址,一个标号的值是该指令代码第一个字节的地址。在是该指令代码第一个字节的地址。在程序的其它地方可以引用这个标号以程序的其它地方可以引用这个标号以代表这个特定的地址。不是每条指令代表这个特定的地址。不是每条指令都采用标号,只有那些被其它语句都采用标号,只有那些被其它语句如转移、调用引用的语句和数据,如转移、调用引用的语句和数据,才需要赋予标号,以便实现控制程序才需要赋予标号
2、,以便实现控制程序的转移或调用。的转移或调用。标号的使用有以下规定:标号的使用有以下规定:(1标号由大写英文字母开头的标号由大写英文字母开头的字母和数字串组成,长度为字母和数字串组成,长度为18个字符。最后必须以冒号个字符。最后必须以冒号“:”完毕。完毕。(2不能使用指令助记符、不能使用指令助记符、CPU的寄存器名以及伪指令等作为标的寄存器名以及伪指令等作为标号。号。(3同一程序内,标号必须互不同一程序内,标号必须互不相同。相同。(4为便于阅读程序,最好使标为便于阅读程序,最好使标号字符有一定含义。号字符有一定含义。 MCS-51单片机汇编语言,包含两类不同性单片机汇编语言,包含两类不同性质的
3、指令。质的指令。(1基本指令:即指令系统中的指令。它基本指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令们都是机器能够执行的指令,每一条指令都有对应的机器码。都有对应的机器码。(2伪指令:汇编时用于控制汇编的指令。伪指令:汇编时用于控制汇编的指令。它们都是机器不能执行的指令,无机器码。它们都是机器不能执行的指令,无机器码。(1)(1)、定位伪指令、定位伪指令ORG ORG 格式:格式: ORG 16ORG 16位地址或标号位地址或标号功能:功能: 用在一段源程序或数据块的前面,说明紧用在一段源程序或数据块的前面,说明紧随在后的程序段或数据块的起始地址。随在后的程序段或数据块的起
4、始地址。例如:例如: ORG 2000HORG 2000H START START: MOV AMOV A,#64H#64H ENDEND(2)(2)、汇编结束伪指令、汇编结束伪指令END END 格式:格式: 标号:标号: END END 表达式表达式 功能:功能: 用在汇编语言源程序的最后,是源程序的用在汇编语言源程序的最后,是源程序的结束标志。在机器汇编时,当汇编程序检测到该结束标志。在机器汇编时,当汇编程序检测到该语句时,它就确认汇编语言源程序已经结束,对语句时,它就确认汇编语言源程序已经结束,对ENDEND后面指令都不予汇编。后面指令都不予汇编。 如果源程序是一段子程序,如果源程序是
5、一段子程序,ENDEND后不写表达式;若后不写表达式;若是主程序,则必须写表达式,所写表达式就是该是主程序,则必须写表达式,所写表达式就是该主程序第一条指令的标号,表示该程序的可执行主程序第一条指令的标号,表示该程序的可执行段的首地址。段的首地址。 格式:格式: 字符名称字符名称 EQU 表达式表达式功能:功能: 汇编程序自动把汇编程序自动把EQU右边的右边的“表表达式达式8位或位或16位)位)”的值赋给左边的的值赋给左边的“字符名称字符名称”。“字符名称必须先赋字符名称必须先赋值后使用。值后使用。EQU伪指令与存储单元无关。伪指令与存储单元无关。 在某程序中,一旦用在某程序中,一旦用EQU伪
6、指令对某字伪指令对某字符名称赋值之后,就不能再用符名称赋值之后,就不能再用EQU伪指伪指令来改变其值,其值在整个程序中是固令来改变其值,其值在整个程序中是固定的。这里定的。这里“字符名称不同于标号,字符名称不同于标号,因此不加冒号。因此不加冒号。例:ORG 2000HBTEQU R3DATAEQU 30HDELAYEQU 1050HMOV R0,DATA ;R0(30H)MOV A,BT;A(R3)LCALL DELAY ;调用;调用1050H子程序子程序END(4)、定义字节伪指令、定义字节伪指令 DB 格式:格式: 标号:标号: DB X1,X2,Xn功能:功能:把右边的把右边的Xii=1
7、n依次存放到以左依次存放到以左边标号为起始地址的连续的存储单元中。边标号为起始地址的连续的存储单元中。其中其中Xi为为8位二进制数据或十进制、位二进制数据或十进制、十六进制、表达式、十六进制、表达式、ASCII码等多种形码等多种形式)。式)。例:例:ORG 1200HTAB: DB 50H,10001100B,100,2*5,-4TAB1: DB D,2,#,ABC例中的字符以例中的字符以ASCIIASCII码存入码存入( (例例如:如:D D、# #、ABC)ABC)。负数用补码存负数用补码存入例如:入例如:-4-4)。)。(5)(5)、定义字伪指令、定义字伪指令DW DW 格式:格式: 标
8、号:标号: DW X1,X2,Xn功能:功能: DW与与DB功能相似,区别在于功能相似,区别在于DB定义的是定义的是字节,字节,DW定义的是字两个字节),所以定义的是字两个字节),所以Xi是是16位的数据字或标号,但该标号必须位的数据字或标号,但该标号必须事先赋值。事先赋值。汇编时一个字数据占用两个连续的存储单汇编时一个字数据占用两个连续的存储单元。元。 例:例:ORG 1500HDATAEQU 3522HADDR: DW 3456H,9BH,10DW DATA(6)(6)、定义存储空间伪指令、定义存储空间伪指令DS DS 格式:格式:标号:标号: DS 表达式表达式功能:功能:指示汇编程序从
9、指示汇编程序从DS伪指令的伪指令的“标号开标号开场,预留一定数量的存储单元,以备程场,预留一定数量的存储单元,以备程序执行时使用。预留单元数量由序执行时使用。预留单元数量由DS语句语句中中“表达式的值决定,表达式的值决定,“表达式可表达式可以是数值也可以是数学表达式以是数值也可以是数学表达式 例:例: ORG 0300H BASE: DS 10 DB AB (7 7定义位地址符号伪指令定义位地址符号伪指令BIT BIT 格式:字符名称格式:字符名称 BIT 位地址位地址功能:把功能:把BIT右边的位地址赋给它左边的右边的位地址赋给它左边的“字符名字符名称称” 例:例: ORG 1000HB1
10、BIT 01HB2 BIT P2.0MOV C,B1MOV B2,C END用连接程序把多个目标文件连接在一起,用连接程序把多个目标文件连接在一起,形成一个大的可执行的文件。形成一个大的可执行的文件。单片机的应用程序一但调试好后就固化在程序存储单片机的应用程序一但调试好后就固化在程序存储器中,以避免受到破坏。程序存储器可以在单片机器中,以避免受到破坏。程序存储器可以在单片机内 部 内 部 R O M 或或 E P R O M ) , 也 可 在 外 部) , 也 可 在 外 部EPROM)。)。ROM型的存储器其程序是由厂家固型的存储器其程序是由厂家固化在芯片内。而化在芯片内。而EPEOM型的
11、存储器是可编程的,允型的存储器是可编程的,允许用户自行写入程序,但必须借助于编程器。许用户自行写入程序,但必须借助于编程器。市面上有各种智能型多功能编程器,可连接在微机市面上有各种智能型多功能编程器,可连接在微机的并行口上,可对上千种器件进行编程即写入)、的并行口上,可对上千种器件进行编程即写入)、测试、加密、逻辑仿真等。许多编程器支持测试、加密、逻辑仿真等。许多编程器支持DOS和和Windows98双平台界面。此外许多仿真器也专门设双平台界面。此外许多仿真器也专门设置了编程器,专门对置了编程器,专门对EPROM芯片编程。芯片编程。一、程序设计步骤:一、程序设计步骤:1分析任务:对任务进行仔细
12、的调分析任务:对任务进行仔细的调查研究,收集必要的现场数据。查研究,收集必要的现场数据。 2确定算法:把控制系统的计算任确定算法:把控制系统的计算任务或控制对象的物理过程演化为计务或控制对象的物理过程演化为计算机可以处理的形式,并拟制出具算机可以处理的形式,并拟制出具体的算法和步骤。体的算法和步骤。3绘制程序流程图:将文字步骤加绘制程序流程图:将文字步骤加以图解,而成为流程图又称程序以图解,而成为流程图又称程序框图)。流程图充分地表达了程序框图)。流程图充分地表达了程序的设计思路,将问题与程序联系起的设计思路,将问题与程序联系起来,使复杂问题简化和收到提纲挈来,使复杂问题简化和收到提纲挈领的效
13、果领的效果 。4编写汇编语言源程序:根据流程图编写编写汇编语言源程序:根据流程图编写程序用汇编语言指令实现流程图中每程序用汇编语言指令实现流程图中每一个功能框的要求),这就是源程序设一个功能框的要求),这就是源程序设计。计。 6上机调试:必须通过上机调试得到正确上机调试:必须通过上机调试得到正确的结果,才能认为是正确的程序。的结果,才能认为是正确的程序。判断程序质量的三个标准:判断程序质量的三个标准:1、程序的执行时间短、程序的执行时间短2、占用的内存单元数少、占用的内存单元数少3、程序的语句行数少、程序的语句行数少程序流程图程序流程图用约定的几何图形、流向线及必要的文用约定的几何图形、流向线
14、及必要的文字说明构成的用以描述程序过程的图形。字说明构成的用以描述程序过程的图形。二、基本程序设计二、基本程序设计(一顺序程序简单程序)(一顺序程序简单程序) 特点:是一种基本上按指令书写顺序从头特点:是一种基本上按指令书写顺序从头至尾逐条执行的程序。它是程序设计的至尾逐条执行的程序。它是程序设计的基础,也能解决某些实际问题,或成为基础,也能解决某些实际问题,或成为复杂程序的某个组成部分。复杂程序的某个组成部分。例例4 41 1:拆字程序:拆字程序 设内部设内部RAMRAM的的20H20H单元中存有两位单元中存有两位BCDBCD码,请编程把它拆成两段,十位码,请编程把它拆成两段,十位BCDBC
15、D数存数存入入21H21H的低的低4 4位,个位位,个位BCDBCD数存入数存入22H22H的低的低4 4位。位。21H21H,22H22H单元的高单元的高4 4位置位置0 0 。 ORG 1000HST:MOV R0,#20H;源数据指针;源数据指针MOV R1,#22H;目的数据指针;目的数据指针MOV A,R0;取源数据送;取源数据送AANL A,#0FH;分离出个位;分离出个位BCD数数MOV R1,A;个位;个位BCD数存数存22H单元单元MOV A,R0;重新取数;重新取数ANL A,#0F0H;分离出十位;分离出十位BCD数数SWAP A;十位;十位BCD数换到低数换到低4位位D
16、EC R1;调整目的数据指针;调整目的数据指针MOV R1,A ;十位;十位BCD数存数存21H单元单元END(二分支程序(二分支程序 特点:在实际问题中,从第一条指令一直特点:在实际问题中,从第一条指令一直执行到最后一条指令的顺序程序是不多执行到最后一条指令的顺序程序是不多的。通常需要计算机对某种情况作出判的。通常需要计算机对某种情况作出判断,根据判断结果作出相应的处理,而断,根据判断结果作出相应的处理,而分支程序就充分体现了计算机的这种分分支程序就充分体现了计算机的这种分析判断能力。程序的分支是通过条件转析判断能力。程序的分支是通过条件转移指令实现的,根据判断给出的条件满移指令实现的,根据
17、判断给出的条件满足与否选择程序的不同走向。足与否选择程序的不同走向。 例例43:符号函数:符号函数 X-X-存在片外存在片外ROMROM的的VARVAR单元中单元中Y-Y-存放在片外存放在片外RAMRAM的的DATADATA单元中单元中解:变量解:变量X X以补码存放。先对符号进行判以补码存放。先对符号进行判断。断。若若X X0 0,则令,则令Y=0Y=0;若若X0X0,再判是否小于,再判是否小于0 0,若是则令,若是则令Y= -Y= -1 1;不是就令;不是就令Y=1Y=1。流程图:流程图: ORG 0100HSTA:MOV DPTR,#VAR MOV A,#00H MOVC A,A+DPT
18、R;取数取数A)X JZ DONE;若若X=0,则转,则转DONE JNB ACC.7,PLUS;若若X0,则转,则转PLUS MOV A,#0FFH ;若若X0,那么那么A)-1 SJMP DONEPLUS:MOV A,#01H;若若X0,那么那么A)1DONE:MOV DPTR,#DATA MOVX DPTR,A ;存;存Y值值 END例例44:多路分支程序:多路分支程序根据根据R5的内容转向相应的处理程序,设的内容转向相应的处理程序,设R5的内容为的内容为0N,对应处理程序的入口地址分,对应处理程序的入口地址分别为别为BR0BRN。根据某一输入变量或运算结果的值实现多路根据某一输入变量或
19、运算结果的值实现多路分支的程序,若采用条件转移指令逐次比较,分支的程序,若采用条件转移指令逐次比较,程序的执行速度会很低。通常采用转移指令程序的执行速度会很低。通常采用转移指令表或转移地址表实现。表或转移地址表实现。解解1 1:采用转移指:采用转移指令表实现多路分支。令表实现多路分支。先在程序存储器中先在程序存储器中建立一张起始地址建立一张起始地址为为TABTAB的绝对转移的绝对转移指令表,表中连续指令表,表中连续存放存放N N条条AJMPAJMP指令,指令,每条每条AJMPAJMP指令对应指令对应一个分支占两个一个分支占两个字节)。字节)。ORG 3100HSRA:MOV A,R5;取数;取
20、数A)R5RL A;(;(A)(A)*2MOV DPTR,#TAB;TAB转移指令表首地址转移指令表首地址JMP A+DPTR;跳转到;跳转到(A)+DPTR单元单元TAB:AJMP BR0;转分支;转分支0AJMP BR1;转分支;转分支1AJMP BR2;转分支;转分支2AJMP BR3;转分支;转分支3AJMP BRN;转分支;转分支NEND 由于由于JMP A+DPTR指令转移的范围是以指令转移的范围是以DPTR为起始的为起始的256个字节空间,故由个字节空间,故由AJMP构成的转构成的转移指令表其最大长度不能超过移指令表其最大长度不能超过256个字节,由个字节,由于于AJMP指令为两
21、字节指令,故表中可连续存指令为两字节指令,故表中可连续存放放128条条AJMP 指令,实现指令,实现128路分支的转移。路分支的转移。所以所以R5中的中的N=0128。由于由于AJMP指令的转移范围是指令的转移范围是2KB,因此分支,因此分支处理程序的位置受到了限制,必须驻留在与处理程序的位置受到了限制,必须驻留在与AJMP指令同一个指令同一个2KB存储区内。若把转移指存储区内。若把转移指令表中的令表中的AJMP改为改为LJMP指令,则分支处理指令,则分支处理程序可分布在整个程序可分布在整个64KB范围内,但程序中范围内,但程序中N要要进行乘进行乘3处理。处理。 解解2 2:采用转移地址表实现
22、多路分支:采用转移地址表实现多路分支 先在程序存储器中建立一张起始地址为先在程序存储器中建立一张起始地址为TABTAB的转移地址表,表中连续存放的转移地址表,表中连续存放N N个处个处理程序的入口地址。根据理程序的入口地址。根据R5R5的内容即的内容即分支转移序号乘以分支转移序号乘以2 2),由查表指令),由查表指令MOVCMOVC取出相应分支入口地址送入取出相应分支入口地址送入DPTRDPTR中,中,再执行再执行JMP A+DPTRJMP A+DPTR指令指令A A清清0 0转向相转向相应的处理程序。应的处理程序。 ORG 0300HSTA: MOV A,R5;取分支转移序号;取分支转移序号
23、(A)R5RL A;(;(A)(A)*2MOV R0,A;(;(A)*2后暂存入后暂存入R0MOV DPTR,#TAB;置转移地址表首地址;置转移地址表首地址TABMOVC A,A+DPTR;取入口地址的高;取入口地址的高8位到位到AXCH A,R0;入口地址的高;入口地址的高8位暂存位暂存R0INC AMOVC A,A+DPTR;取入口地址的低;取入口地址的低8位到位到AMOV DPL,AMOV DPH,R0;入口地址送;入口地址送DPTRCLR A;(;(A)0JMP A+DPTR ;转向处理程序;转向处理程序TAB: DW BR0;转移地址表;转移地址表DW BR1DW BR2DW BR
24、NEND (三循环程序(三循环程序 顺序程序中:所有的指令仅被执行一次;顺序程序中:所有的指令仅被执行一次;分支程序中:有的指令被执行一次,而有的可分支程序中:有的指令被执行一次,而有的可能一次也未被执行。能一次也未被执行。实际应用中:需要反复执行某种操作,而每次实际应用中:需要反复执行某种操作,而每次完成这些操作都是执行同样的程序,只是处理完成这些操作都是执行同样的程序,只是处理的数据不同,这时就可以采用循环程序结构的数据不同,这时就可以采用循环程序结构 循环程序:使所需程序段自动执行多次,而无循环程序:使所需程序段自动执行多次,而无须多次写出这段程序,使源程序大大缩短,同须多次写出这段程序
25、,使源程序大大缩短,同时也节省了内存空间,但不能节省执行时间。时也节省了内存空间,但不能节省执行时间。 例例45 负数求补程序:外部负数求补程序:外部RAM地址地址为为3000H的数据块中有的数据块中有100个补码,要求个补码,要求逐一检查,若为负数则取补后放回,正逐一检查,若为负数则取补后放回,正数则不变。数则不变。 编制循环程序的要点:发现和寻找过程编制循环程序的要点:发现和寻找过程中具有重复性和规律性的部分,并分析中具有重复性和规律性的部分,并分析出重复的次数、重复结束的条件等。出重复的次数、重复结束的条件等。 解:这个任务中规律性的过程是:取数、解:这个任务中规律性的过程是:取数、判符
26、号、若为负数则取补判符号、若为负数则取补 ORG 1000HSTART:MOV DPTR,#3000H;置地址指针;置地址指针MOV R7,#64H;置计数初值;置计数初值LOOP1:MOVX A,DPTR ;取数;取数JNB ACC.7,LOOP2 ;若正数转;若正数转LOOP2CPL AINC A;负数取补;负数取补MOVX DPTR,A;负数取补后送回;负数取补后送回LOOP2:INC DPTR;修改地址指针;修改地址指针DJNZ R7,LOOP1;100个数未完继续个数未完继续END循环程序的结构包括四个部分:循环程序的结构包括四个部分:(1初始化部分:为循环做准备。初始化部分:为循环
27、做准备。(2处理部分循环体部分):实际数据处理部分,处理部分循环体部分):实际数据处理部分,是重复执行的程序段部分,是循环程序的主体。是重复执行的程序段部分,是循环程序的主体。(3控制部分:控制循环的进行和结束。两个内容:控制部分:控制循环的进行和结束。两个内容:1、修改循环参数为下一次循环做准备;、修改循环参数为下一次循环做准备;2、判断是否满足结束条件,若不满足则转去继续、判断是否满足结束条件,若不满足则转去继续执行循环体部分,满足则退出循环。执行循环体部分,满足则退出循环。(4结束部分:存放所得结果,恢复某些工作单元结束部分:存放所得结果,恢复某些工作单元的初值。的初值。 循环程序的循环
28、程序的2 2种组织方式种组织方式 两种组织方式的区别两种组织方式的区别 1 1、判断循环结束条件的时刻不同:、判断循环结束条件的时刻不同:方式方式1 1:处理部分至少执行一次:处理部分至少执行一次方式方式2 2:处理部分可能一次也不执行:处理部分可能一次也不执行 2 2、程序的出口不同:、程序的出口不同:方式方式1 1:程序的出口在最后:程序的出口在最后方式方式2 2:程序出口通常不是在最后:程序出口通常不是在最后例例46 46 发送字符串程序发送字符串程序 一串一串ASCIIASCII字符存放在以字符存放在以BLOCKBLOCK开始的开始的连续片外连续片外RAMRAM单元中,以空白字符单元中
29、,以空白字符“0 0结尾。要求用串行口发送出去。结尾。要求用串行口发送出去。循环结束条件是通过检查约定的结束循环结束条件是通过检查约定的结束标志标志0 0来决定继续循环或终止循环。来决定继续循环或终止循环。循环次数不定的情况采用方式循环次数不定的情况采用方式2 2。ORG 2000HMOV DPTR,#BLOCK;字符块首地址;字符块首地址LOOP: MOVX A,DPTR;取要发送字符;取要发送字符JZ NEXT; 0字符转结束字符转结束LOOP1:JNB TI,LOOP1;上个发送完吗?;上个发送完吗?CLR TI;发送完清;发送完清TIMOV SBUF,A;发送字符;发送字符INC DP
30、TR;调整指针下一个;调整指针下一个SJMP LOOPNEXT:RET例例4747】双重循环实现】双重循环实现1ms1ms延时的程序延时的程序 DELAY1:MOV R6,#32;1个机器周期个机器周期DEL2:MOV R7,#7;1个机器周期个机器周期DEL3:NOP;1个机器周期个机器周期 NOP;1个机器周期个机器周期 DJNZ R7,DEL3;2个机器周期个机器周期 DJNZ R6,DEL2;2个机器周期个机器周期 RET;2个机器周期个机器周期延时时间为:延时时间为:1+1+(1+1+27+232+2=995个机器周期个机器周期( 四位操作程序四位操作程序 通过位处理器和位处理指令可
31、进行随机逻通过位处理器和位处理指令可进行随机逻辑运算和设计,可实现复杂的逻辑操作。辑运算和设计,可实现复杂的逻辑操作。ORG 2000HSTART:MOV A,P0;输入;输入8位信号位信号MOV C,ACC.0ANL C,ACC.1ANL C,ACC.2MOV 00H,C;(;(00H)X0X1X2MOV C,ACC.2ANL C,ACC.3;(;(C)X2X3ORL C,00HCPL CJC OUT;(;(C)=1,转输出,转输出MOV C,ACC.1ANL C,/ACC.2ANL C,ACC.3;JC OUT; (C)=1,转输出,转输出MOV C,ACC.4CPL CANL C,ACC
32、.5ANL C,/ACC.6ANL C,/ACC.7;OUT:MOV P1.7,C;(;(P1.7)最终结果最终结果SJMP $( 五子程序五子程序 子程序要为所有调用程序共享,在结构上应具子程序要为所有调用程序共享,在结构上应具有通用性和独立性,编写时应注意以下几点。有通用性和独立性,编写时应注意以下几点。 (1有子程序名以备调用。通常以子程序的第一条指有子程序名以备调用。通常以子程序的第一条指令的标号作为子程序名,这个标号最好有一定含义,令的标号作为子程序名,这个标号最好有一定含义,以便一看就一目了然。以便一看就一目了然。(2子程序末尾要安排一条子程序末尾要安排一条RET返回指令。返回指令
33、。(3保护现场与恢复现场。主程序调用子程序之前所保护现场与恢复现场。主程序调用子程序之前所使用的各寄存器的内容称为现场,通常在子程序开头使用的各寄存器的内容称为现场,通常在子程序开头和末尾和末尾RET指令前安排一些入栈和出栈指令来保指令前安排一些入栈和出栈指令来保护和恢复现场。而主程序的断点地址,通过调用指令护和恢复现场。而主程序的断点地址,通过调用指令和返回指令能自动保护和恢复,无须用户安排。和返回指令能自动保护和恢复,无须用户安排。(4子程序要有可浮动性。所谓可浮动性就是子程子程序要有可浮动性。所谓可浮动性就是子程序可以放在存储器的任何地方并能为主程序调用。序可以放在存储器的任何地方并能为
34、主程序调用。为此子程序中必须使用相对转移指令而不用其它转为此子程序中必须使用相对转移指令而不用其它转移指令,以便汇编时生成浮动代码。此外,尽量使移指令,以便汇编时生成浮动代码。此外,尽量使用寄存器和堆栈作数据暂存器使用,而避免使用固用寄存器和堆栈作数据暂存器使用,而避免使用固定存储单元作数据暂存器。定存储单元作数据暂存器。(5参数传递子程序参数分为入口参数和出口参参数传递子程序参数分为入口参数和出口参数两类)。因为子程序是主程序的一部分,子程序数两类)。因为子程序是主程序的一部分,子程序被调用之前,主程序应先把有关参数即入口参数被调用之前,主程序应先把有关参数即入口参数送到某些约定的位置,子程
35、序在运行时可从约定的送到某些约定的位置,子程序在运行时可从约定的位置得到有关参数。同样,子程序结束前也应该把位置得到有关参数。同样,子程序结束前也应该把运算结果出口参数送到约定的位置,返回主程运算结果出口参数送到约定的位置,返回主程序后,主程序可从约定位置上获得结果,这就是参序后,主程序可从约定位置上获得结果,这就是参数传递。数传递。8051单片机常用工作寄存器、累加器、地单片机常用工作寄存器、累加器、地址寄存器、堆栈等来传数。址寄存器、堆栈等来传数。例例411411用指针寄存器来传递参数用指针寄存器来传递参数 当数据放在存储器中,且量比较大时,可用当数据放在存储器中,且量比较大时,可用指针来
36、指示数据的位置,可节省传递数据的指针来指示数据的位置,可节省传递数据的工作量。工作量。参数放在片内参数放在片内RAMRAM时,用时,用R0R0或或R1R1作指针;作指针;参数在外部参数在外部RAMRAM或程序存储器时,用或程序存储器时,用DPTRDPTR作作指针。指针。试编写试编写6 6位位BCDBCD码的加法程序。设被加数放在码的加法程序。设被加数放在片内片内RAM 40HRAM 40H42H42H单元,加数放在单元,加数放在50H50H52H52H单元,和放入单元,和放入40H40H42H42H中。(注:低位在低中。(注:低位在低地址)地址) 解:解:主程序通过指针寄存器主程序通过指针寄存
37、器R0R0和和R1R1将参加运算的将参加运算的BCDBCD码的地址传递给子程序码的地址传递给子程序子程序通过指针寄存器子程序通过指针寄存器R0R0将结果的地址传递将结果的地址传递给主程序。给主程序。入口参数:(入口参数:(R0R0)、()、(R1R1分别指向被加数分别指向被加数和加数的低字节和加数的低字节出口参数:(出口参数:(R0R0指向结果的高字节指向结果的高字节主程序:完成入口参数的传递和子程主程序:完成入口参数的传递和子程序的调用。序的调用。ORG 0100HSTAR:MOV R0,#40H ;被加数低字节地被加数低字节地址送址送R0MOV R1,#50H ;加数低字节地址送加数低字节
38、地址送R1ACALL BADD ;调调6位位BCD码的码的加法子程序加法子程序 子程序子程序BADD:MOV R7,#3;6位位BCD码占码占3字节字节CLR C;低字节相加时,进位位清;低字节相加时,进位位清0LOOP:MOV A,R0;取被加数字节;取被加数字节ADDC A,R1;取加数字节并加到;取加数字节并加到ADA A;BCD码调整码调整MOV R0,A;保存相加的和;保存相加的和INC R0;修改被加数指针;修改被加数指针INC R1;修改加数指针;修改加数指针DJNZ R7,LOOP;未完继续;未完继续DEC R0;使;使R0指向结果的高字节指向结果的高字节RETEND( 六中断
39、服务程序与堆栈操作六中断服务程序与堆栈操作主程序主程序 (1 1起始地址:(起始地址:(PCPC)=0000H=0000H,而从,而从0003H002BH0003H002BH分别为各中断源的入口地址,分别为各中断源的入口地址,编程时应在编程时应在0000H0000H处安排一条长跳转指令,处安排一条长跳转指令,使使CPUCPU执行程序时可从执行程序时可从0000H0000H跳过各中断源的跳过各中断源的入口地址,然后从跳转的目的地址开始执行入口地址,然后从跳转的目的地址开始执行主程序。主程序。2 2初始化:对将要用到的单片机内部部件或初始化:对将要用到的单片机内部部件或扩充部件进行初始工作状态的设
40、定。扩充部件进行初始工作状态的设定。 中断服务程序中断服务程序 1 1起始地址:起始地址: 0003H002BH0003H002BH为各中断源的入口,为各中断源的入口,5 5个个中断源的入口地址相距很近中断源的入口地址相距很近8 8个字节),若中断服个字节),若中断服务程序的指令代码少于务程序的指令代码少于8 8个字节,则可直接从入口地个字节,则可直接从入口地址开始编写;若大于址开始编写;若大于8 8个字节,在相应的入口处安排个字节,在相应的入口处安排一条跳转指令。一条跳转指令。(2 2中断服务程序编制中的注意事项:中断服务程序编制中的注意事项: 视需要确定是否保护现场。视需要确定是否保护现场
41、。 时清除那些不能被硬件自动清除的中断请求标志,时清除那些不能被硬件自动清除的中断请求标志,以免产生误中断。以免产生误中断。 中断服务程序中的压栈中断服务程序中的压栈PUSHPUSH与弹出与弹出POPPOP指令必须成指令必须成对使用,以确保中断服务程序的正确返回。对使用,以确保中断服务程序的正确返回。主程序与中断服务程序之间的参数传递类似主程序主程序与中断服务程序之间的参数传递类似主程序与子程序之间的参数传递。与子程序之间的参数传递。( 七应用程序举例七应用程序举例1. 定时器:首先初始化编程,步骤:定时器:首先初始化编程,步骤:(1) 设置设置TMOD:根据功能要求、工作方式及:根据功能要求、工作方式及运行工作方式设置。运行工作方式设置。(2) 设计数初值设计数初值TH、TL:根据定时时间或计数:根据定时时间或计数要求设置。要求设置。(3)若使用中断系统则设置中断控制寄存器若使用中断系统则设置中断控制寄存器IE、IP和和TCON。(4)启动定时器工作。启动定时器工作。 例例414计算定时计算定时/计数器计数器T0工作于方式工作于方式0 、1、2 时的最大定时时间,设时钟频率时的最大定时时间,设时钟频率fosc=6MHz分析:因为是加分析:因为是加1计数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年保育师四级(中级)资格考试理论知识全真模拟考试卷及答案(一)
- 2026生物医药产业发展现状分析及未来机遇与资本布局策略报告
- 2026区块链技术在金融领域应用分析及发展趋势与投资价值报告
- 2026中国第三方检测认证服务市场扩容与标准化建设白皮书
- 2026组织生理药物治疗产品科技盈利模式发展研究文档
- 2026中国金融科技监管沙盒试点效果与创新方向研究报告
- 2026中国锂资源供需格局及价格走势预测报告
- 2026中国智能智能交通设施行业市场供需分析及投资评估规划分析研究报告
- 2026自行车健身课程开发与线下体验店运营模式
- 污水污泥检测岗笔试真题及答案完整答案
- 金融管理综合应用案例昌盛餐厅
- 2027届广州市天河区普通高中毕业班适应性训练作文题目解析及范文:长期规划是对未来的研判与谋划
- 2026年四川政府采购评审专家题库(含答案)
- 煤矿班组长培训课件
- 鱼类育种课件
- 转账信息确认协议书
- 《JBT 7257-2018 行车式提板刮渣刮砂机》(2026年)实施指南
- 福建省泉州市永春第一中学2025-2026学年高二上学期开学考试数学试卷
- 绵阳东辰学校五升六预备年级招生考试数学试题
- 足底疾病科普
- 嗜酸性肉芽肿性多血管炎诊治多学科专家共识(2025年版)解读
评论
0/150
提交评论