1、课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础第第4 4章章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计教学基本要求教学基本要求:(1 1)、了解)、了解MCS-51MCS-51汇编语言程序设计的特点;汇编语言程序设计的特点;(2 2)、熟悉)、熟悉MCS-51MCS-51汇编语言伪指令的功能及用法;汇编语言伪指令的功能及用法;(3 3)、掌握顺序、分支、循环程序的设计方法;)、掌握顺序、分支、循环程序的设计方法;(4 4)、掌握)、掌握KEILKEIL软件的使用方法。软件的使用方法。教学重点教学重点:(1 1)、)、KEIL软件的使用方法软件的使用方法;(2
2、 2)、分支、循环程序的设计方法;)、分支、循环程序的设计方法;(3 3)、定时、查表程序的设计方法;)、定时、查表程序的设计方法;教学难点教学难点:(1 1)、)、KEIL软件调试程序的方法软件调试程序的方法;(2 2)、利用)、利用JMP A+DPTRJMP A+DPTR指令实现程序多分支;指令实现程序多分支;(3 3)、查表程序的设计方法;)、查表程序的设计方法;(4 4)、子程序结构与堆栈的关系。)、子程序结构与堆栈的关系。课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础4.1 单片机程序程序设计语言概述4.1.1 4.1.1 机器语言和机器语言和汇编语言汇编语言4.
3、1.2 4.1.2 单片机使用的高级语言单片机使用的高级语言(1 1)BASICBASIC语言语言(2 2)C C语言语言(3 3)PL/MPL/M语言语言 4.1.3 80C514.1.3 80C51单片机汇编语言的语句格式单片机汇编语言的语句格式课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础汇编语言程序设计汇编语言程序设计必须注意如下特点:必须注意如下特点:(1 1)设计人员必须详细了解单片机的硬件结构,以便在程序设)设计人员必须详细了解单片机的硬件结构,以便在程序设计中熟练使用;计中熟练使用;(2 2)必须熟悉汇编语言指令的功能和用法;)必须熟悉汇编语言指令的功能和用
4、法;(3 3)在程序设计前,必须分析设计任务,确定所用算法,确定)在程序设计前,必须分析设计任务,确定所用算法,确定程序结构,确定数据的类型、数据的结构,必须对数据的存放、程序结构,确定数据的类型、数据的结构,必须对数据的存放、寄存器和工作单元的使用以及所用硬件资源等作出具体安排;寄存器和工作单元的使用以及所用硬件资源等作出具体安排;(4 4)根据分析,画出程序设计流程图;)根据分析,画出程序设计流程图;(5 5)根据程序设计流程图编写程序。)根据程序设计流程图编写程序。课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础4.2 汇编语言程序的基本结构形式 单片机单片机汇编语言程
5、序设计的基本结构形式一般分为以下汇编语言程序设计的基本结构形式一般分为以下4 4种种形式,即顺序结构、分支结构、循环结构和子程序结构。形式,即顺序结构、分支结构、循环结构和子程序结构。4.2.1 4.2.1 顺序程序结构顺序程序结构 顺序程序是顺序程序是最简单的程序结构,在最简单的程序结构,在顺序顺序程序中程序中,既无分支,既无分支,循环,也循环,也不调用不调用子程序,程序执行时一条一条子程序,程序执行时一条一条地地按顺序执行指令按顺序执行指令 例:假定三字节无符号数相加,其中一个加数在内部例:假定三字节无符号数相加,其中一个加数在内部RAMRAM的的50H50H、51H51H和和52H52H
6、单元中,另一个加数在内部单元中,另一个加数在内部RAMRAM的的53H53H、54H54H和和55H55H单元中,要求把相加之和存放在单元中,要求把相加之和存放在50H50H、51H51H和和52H52H单元中,进位存单元中,进位存放在位寻址区的放在位寻址区的00H00H位中。位中。解解:(:(1 1)分析任务:求两数之和)分析任务:求两数之和 (2 2)算法:加法运算()算法:加法运算(ADDADD或或ADDCADDC)课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 (3 3)程序结构:顺序或循环结构)程序结构:顺序或循环结构 (4 4)数据类型:三字节、二进制、无符号数
7、)数据类型:三字节、二进制、无符号数 (5 5)数据结构:升序或降序排列)数据结构:升序或降序排列 (6 6)RAMRAM单元安排单元安排:(内部(内部RAMRAM字节单元、位地址空间字节单元、位地址空间)(7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1)加数(N1N1)高字节(8 8位)中字节(8 8位)低字节(8 8位)加数(N2N2)高字节(8 8位)中字节(8 8位)低字节(8 8位)加数(N1N1)加数(N2N2)和(N3N3)52H52H单元低字节(8 8位)55H55H单元 低字节(8 8位)52H52H单元 低字节(8 8位)51H51H单元中字节
8、(8 8位)54H54H单元 中字节(8 8位)51H51H单元 中字节(8 8位)50H50H单元高字节(8 8位)52H52H单元 高字节(8 8位)50H50H单元 高字节(8 8位)00H00H位进位位课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 (8 8)程序设计流程框图;)程序设计流程框图;常常用用流流程程框框图图符符号号开开始始结结束束进进程程判判断断判判断断开开始始加加数数N N1 1和和加加数数N N2 2的的低低字字节节相相加加加加数数N N1 1和和加加数数N N2 2的的高高字字节节相相加加加加数数N N1 1和和加加数数N N2 2的的中中字字节
9、节相相加加处处理理进进位位位位结结束束开开始始取取N N1 1低低字字节节取取N N2 2低低字字节节N N1 1和和N N2 2低低字字节节相相加加保保存存N N1 1和和N N2 2低低字字节节和和取取N N1 1中中字字节节取取N N2 2中中字字节节N N1 1和和N N2 2中中字字节节相相加加保保存存N N1 1和和N N2 2中中字字节节和和取取N N1 1高高字字节节取取N N2 2高高字字节节N N1 1和和N N2 2高高字字节节相相加加保保存存N N1 1和和N N2 2高高字字节节和和处处理理进进位位位位结结束束课程:单片机技术课程:单片机技术 教材:单片机基础教材:单
10、片机基础 (9 9)程序清单;)程序清单;ORG 1000HORG 1000H MOV RO MOV RO,#52H#52H;加数;加数N1N1的低字节地址送地址指针的低字节地址送地址指针R0R0 MOV R1 MOV R1,#55H#55H;加数;加数N2N2的低字节地址送地址指针的低字节地址送地址指针R1R1 MOV A MOV A,R0R0;取取N1N1的低字节的低字节 ADD AADD A,R1R1;N1N1、N2N2低字节相加低字节相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2低字节和低字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址
11、指针内容 DEC R1DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0R0;取取N1N1的中间字节的中间字节 ADDC AADDC A,R1R1;N1N1、N2N2中间字节带低字节和进位相加中间字节带低字节和进位相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2中间字节和中间字节和 DEC R0DEC R0;修改加数修改加数N1N1的地址指针内容的地址指针内容课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 DEC R1 DEC R1;修改加数修改加数N2N2的地址指针内容的地址指针内容 MOV AMOV A,R0
12、R0;取取N1N1的高字节的高字节 ADDC AADDC A,R1R1;N1N1、N2N2高字节带中间字节和进位相加高字节带中间字节和进位相加 MOV R0MOV R0,A A;保存保存N1N1、N2N2高字节和高字节和 MOV 00HMOV 00H,C C;高字节和的高字节和的进位送进位送00H00H位保存位保存 ENDEND 思考题:思考题:1 1)上述程序中,如果只采用)上述程序中,如果只采用ADDCADDC指令,应如何修改程序?指令,应如何修改程序?2 2)如果)如果N1N1、N2N2,N3N3均为十进制数,应如何修改程序?均为十进制数,应如何修改程序?3 3)如果加数)如果加数N1N
13、1在内部在内部RAM RAM 50H50H、51H51H和和52H52H单元中单元中,而,而加数加数N2N2与与和和N3N3均均在外部在外部RAM00RAM0053H53H、0054H0054H和和0055H0055H单元中,单元中,其它条件不变,其它条件不变,应如何修改程序?应如何修改程序?4 4)如果)如果N1N1、N2N2,N3N3均存放在外部均存放在外部RAMRAM单元,应如何修改程序?单元,应如何修改程序?课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础例:设内部例:设内部RAM 40HRAM 40H,41H41H单元中分别存放单元中分别存放8 8位二进制数,位二进
14、制数,现分别现分别取取这这两个单元中的半两个单元中的半个个字节,合并成一个字节,合并成一个新新字节存放在字节存放在42H42H单元单元中中。要求如下:要求如下:42H42H单元单元新字节的低半字节取自新字节的低半字节取自40H40H单元的低半字单元的低半字节,而高半字节取自节,而高半字节取自41H41H单元的低半字节。单元的低半字节。解解:(:(1 1)分析任务:拆字、合字)分析任务:拆字、合字内内部部R RA AM MN N1 14 40 0H H单单元元N N2 2内内部部R RA AM MN N4 44 42 2H H单单元元N N2 2内内部部R RA AM MN N3 34 41 1
15、H H单单元元N N4 4课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 (2 2)算法:逻辑运算)算法:逻辑运算 (3 3)程序结构:顺序)程序结构:顺序 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:升序或降序排列)数据结构:升序或降序排列 (6 6)程序设计流程框图;)程序设计流程框图;开开始始取取4 40 0H H单单元元内内容容取取4 41 1H H单单元元内内容容保保留留4 40 0H H单单元元低低半半字字节节保保留留4 41 1H H单单元元低低半半字字节节结结束束合合字字并并保保存存课程:单片机技术课
16、程:单片机技术 教材:单片机基础教材:单片机基础 (7 7)程序清单;)程序清单;ORG 2000HORG 2000H S START:MOV R1TART:MOV R1,#40H#40H;初始化数据指针;初始化数据指针R1R1的内容的内容 MOV AMOV A,R1R1;取取40H40H单元内容送单元内容送A A ANL A ANL A,#0FH#0FH;保留;保留40H40H单元内容低单元内容低4 4位位 INC R1INC R1;修改数据指针修改数据指针R1R1的内容的内容 XCH AXCH A,R1R1;(A)(A)与与R1R1内容互换内容互换 ANL AANL A,#0FH#0FH;
17、保留;保留41H41H单元内容低四位单元内容低四位 SWAP ASWAP A;41H41H单元内容高低半字节互换单元内容高低半字节互换 ORL AORL A,R1R1;合字生成新字节合字生成新字节 INC R1INC R1;修改数据指针修改数据指针R1R1的内容的内容 MOV R1MOV R1,A A;新字节送新字节送42H42H单元保存单元保存 ENDEND作业题:作业题:上例中其它条件不变,要求如下:上例中其它条件不变,要求如下:42H42H单元单元新字节的低半字节新字节的低半字节取自取自40H40H单元的低半字节,而高半字节取自单元的低半字节,而高半字节取自41H41H单元的高半字节。单
18、元的高半字节。课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础(1 1)单分支程序)单分支程序 单分支程序单分支程序是通过条件转移指令实现的,即根据条件对程序是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件程序就的执行进行判断,满足条件则进行程序转移,不满足条件程序就顺序执行。顺序执行。在在MCS-51MCS-51指令系统中,可利用指令系统中,可利用JZJZ,JNZJNZ,CJNECJNE,DJNZDJNZ,JCJC,JNCJNC,JBJB,JNBJNB,JBCJBC等指令,完成为等指令,完成为0 0、为为1 1、为正为正、为负以及
19、相为负以及相等等、不相等等各种条件判断。不相等等各种条件判断。例:两个例:两个8 8位无符号二进制数比较大小。位无符号二进制数比较大小。假假设设在外部在外部RAMRAM中有中有ST1ST1、ST2ST2和和ST3ST3共共3 3个连续单元(单元地址从小到大),其个连续单元(单元地址从小到大),其中中ST1ST1、ST2ST2单元中单元中存放存放着着两个两个8 8位位无符号二进制数无符号二进制数N1N1,N2N2,要求,要求找出其找出其中中的的大数大数并并存存入入ST3ST3单元单元中中。4.2.2 分支程序结构课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础解解:(:(1 1
20、)分析任务:比较两个数的大小)分析任务:比较两个数的大小 (2 2)算法:算术运算、控制转移)算法:算术运算、控制转移 (3 3)程序结构:单分支)程序结构:单分支 (4 4)数据类型:单字节、二进制、无符号数)数据类型:单字节、二进制、无符号数 (5 5)数据结构:单元地址升序排列)数据结构:单元地址升序排列 (6 6)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (7 7)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(8 8)程序设计流程框图程序设计流程框图;(9 9)程序清单程序清单;思考题(补充作业题):思考题(补充作业题)
21、:上例中,如果采用上例中,如果采用CJNE ACJNE A,directdirect,relrel指令,应如何修改指令,应如何修改程序?程序?课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础开开 始始设设 置置 数数 据据 指指 针针取取 数数 据据 N N2 2取取 数数 据据 N N1 1并并 暂暂 存存结结 束束N N1 1保保 存存 于于 A A中中N N2 2 N N1 1修修 改改 数数 据据 指指 针针保保 存存 大大 数数N N2 2保保 存存 于于 A A中中Y YN N返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 ORG 8000
22、H ORG 8000H START:CLR C START:CLR C;进位清;进位清0 0 MOV DPTR MOV DPTR,#ST1#ST1;设数据指针设数据指针 MOVX AMOVX A,DPTRDPTR;AA(ST1ST1),取),取N1N1 MOV R2 MOV R2,A A;暂存暂存N1N1 INC DPTR INC DPTR;DPTR ST2DPTR ST2(指向(指向N2N2单元)单元)MOVX AMOVX A,DPTRDPTR;取取N2N2存于存于A A中中 SUBB ASUBB A,R2R2;N1N1,N2N2比较(比较(N2-N1N2-N1,差在,差在A A中)中)JN
23、C BIG1JNC BIG1;N2N1N2N1,转,转BIG1BIG1,N2N2N1N1,顺序执行,顺序执行 XCH AXCH A,R2R2;N1N1,N2N2互换,互换,A N1A N1 SJMP BIG0 SJMP BIG0 BIG1:MOVX A BIG1:MOVX A,DPTRDPTR;A N2A N2 BIGO:INC DPTR BIGO:INC DPTR;DPTR ST3DPTR ST3(指向(指向N3N3单元)单元)MOVX DPTRMOVX DPTR,A A;ST3 ST3 大数大数 ENDEND返回返回 课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础(2
24、2)多分支程序)多分支程序 假设多分支程序中,分支序号的最大值为假设多分支程序中,分支序号的最大值为n n,则多分支转移,则多分支转移结构如图所示:结构如图所示:MCS-51MCS-51指令系统指令系统没有没有多分支多分支转移转移指令,无法使用指令,无法使用单单条指令完条指令完成多分支转移成多分支转移。要实现多分支转移,。要实现多分支转移,可采用以下几种方法:可采用以下几种方法:K K=?转转向向分分支支转转向向n n分分支支转转向向n n-1 1分分支支转转向向1 1分分支支K K=0 0K K=n nK K=n n-1 1K K=1 1课程:单片机技术课程:单片机技术 教材:单片机基础教材
25、:单片机基础 假设分支序号值保存在累加器假设分支序号值保存在累加器A A中,则可使用中,则可使用CJNE ACJNE A,#data#data,relrel指令,其分支流程如图所示:指令,其分支流程如图所示:(A A)=0 0?转转向向0 0分分支支(A A)=1 1?(A A)=2 2?转转向向2 2分分支支转转向向1 1分分支支Y YY YY YN NN NN N(a)使用多条CJNE指令,通过逐次比较,实现分支程序转移课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础例:例:已知已知:127127X X-128-128,求,求Y Y。设设X X,Y Y分别分别存存放在外部
26、放在外部RAM RAM 1000H1000H和和2000H2000H单元中。单元中。解解:(:(1 1)分析任务:解方程)分析任务:解方程 (2 2)算法:控制转移)算法:控制转移 (3 3)程序结构:多分支)程序结构:多分支 (4 4)数据类型:单字节、二进制、有符号数)数据类型:单字节、二进制、有符号数 (5 5)RAMRAM单元安排单元安排:外部:外部RAMRAM单元单元 (6 6)采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)(7 7)程序设计流程框图程序设计流程框图 (8 8)程序清单程序清单;思考题(补充作业题):思考题(补充作业题):上
27、例中,如果采用上例中,如果采用CJNECJNE指令,应如何修改程序?指令,应如何修改程序?011y000 xxx课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础开开 始始取取 数数 据据 X X结结 束束X X=0 0Y Y=0 0Y YN NX X 0 0Y Y=-1 1Y Y=1 1N NY Y保保 存存 数数 据据 Y Y返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 ARE EQU 1000H ARE EQU 1000H;BUF EQU 2000HBUF EQU 2000H;ORG 1000HORG 1000HSTARTSTART:MOV DP
28、TRMOV DPTR,#ARE#ARE;数据数据X X的地址送数据指针的地址送数据指针DPTRDPTR MOVX A MOVX A,DPTRDPTR;AA取数据取数据X X JZ SUL JZ SUL;X X0 0转转SULSUL JB ACC.7 JB ACC.7,NEGNEG;X X0 0转转NEGNEG,否则,否则,X X0 0 MOV A MOV A,#01H#01H;SJMP SULSJMP SUL;NEG:MOV ANEG:MOV A,#0FFH#0FFH;(0FFH(0FFH为为-1-1补码补码)SUL:MOV DPTR SUL:MOV DPTR,#BUF#BUF;数据数据Y Y
29、的地址送数据指针的地址送数据指针DPTRDPTR MOVX DPTR MOVX DPTR,A A;保存保存Y Y值值 ENDEND返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 首先,在程序中建立一个转移指令表,在表格中存放转移指首先,在程序中建立一个转移指令表,在表格中存放转移指令,然后,通过查转移指令表的方式实现多分支程序转移。令,然后,通过查转移指令表的方式实现多分支程序转移。这种方法主要利用散转指令这种方法主要利用散转指令JMP A+DPTRJMP A+DPTR,此指令采用变址,此指令采用变址寻址方式,操作过程:(寻址方式,操作过程:(PCPC)(A A)+(D
30、PTRDPTR),),CPUCPU根据根据PCPC的内容来实现多分支程序转移。的内容来实现多分支程序转移。DPTRDPTR中送转移指令表的表首地中送转移指令表的表首地址(常用转移指令表的名称标号代替),而址(常用转移指令表的名称标号代替),而A A中送转移指令表中中送转移指令表中存放的转移指令的序号(常常从第存放的转移指令的序号(常常从第0 0条开始)。条开始)。例如,有多个分支程序,如要通过例如,有多个分支程序,如要通过AJMPAJMP转移指令进行转移,转移指令进行转移,则应把这些转移指令按序写入转移指令表中,并设置一个序号指则应把这些转移指令按序写入转移指令表中,并设置一个序号指针(例如针
31、(例如R3R3),序号往往从),序号往往从0 0开始,然后可使用以下查表程序实开始,然后可使用以下查表程序实现程序转移。现程序转移。(b)使用查转移指令表的方法实现多分支程序转移课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 MOV A MOV A,R3R3;分支程序序号送分支程序序号送A A RL A RL A;分支程序序号乘分支程序序号乘2 2 MOV DPTR MOV DPTR,#BRTAB#BRTAB;BRTABBRTAB为转移指令表名称标号,为转移指令表名称标号,JMP A+DPTRJMP A+DPTR;也为转移指令表首地址也为转移指令表首地址BRTABBRTAB
32、:AJMP ROUT0AJMP ROUT0;分支程序分支程序0 0的转移指令的转移指令 AJMP ROUT1AJMP ROUT1;分支程序分支程序1 1的转移指令的转移指令 AJMP ROUT2AJMP ROUT2;AJMP ROUT127 AJMP ROUT127;分支程序分支程序127127的转移指令的转移指令ROUT0ROUT0:;分支程序分支程序0 0ROUT1:ROUT1:;ROUT127:ROUT127:;分支程序分支程序127127课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 由于由于AJMPAJMP指令是二字节指令,因此,程序中通过指令是二字节指令,因此,
33、程序中通过RL ARL A指令将指令将分支序号乘分支序号乘2 2。转移指令表中最多只能安排。转移指令表中最多只能安排128128条分支转移指令,条分支转移指令,如需多于如需多于128128条,则必须另行修改程序。条,则必须另行修改程序。由于由于AJMPAJMP指令转移范围是指令转移范围是2KB2KB,因此,分支程序应安排在以,因此,分支程序应安排在以JMP A+DPTRJMP A+DPTR指令为中心的指令为中心的2KB2KB范围之内,否则会出错。范围之内,否则会出错。如果转移指令表中的转移指令是如果转移指令表中的转移指令是LJMPLJMP指令,则分支程序可安指令,则分支程序可安排在排在64KB
34、 ROM64KB ROM空间的任何地方。但转移指令表中的转移指令的条空间的任何地方。但转移指令表中的转移指令的条数最多为数最多为8585条(条(LJMPLJMP指令是三字节指令),上述程序应作相应的指令是三字节指令),上述程序应作相应的修改。修改。MOV AMOV A,R3R3;MOV BMOV B,#03H#03H;MUL ABMUL AB;课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 MOV DPTR MOV DPTR,#BRTAB#BRTAB;BRTABBRTAB为转移指令表名称标号,为转移指令表名称标号,JMP A+DPTRJMP A+DPTR;也为转移指令表首地
35、址也为转移指令表首地址BRTABBRTAB:LJMP ROUT0LJMP ROUT0;分支程序分支程序0 0的转移指令的转移指令 LJMP ROUT1LJMP ROUT1;分支程序分支程序1 1的转移指令的转移指令 LJMP ROUT2LJMP ROUT2;LJMP ROUT85 LJMP ROUT85;分支程序分支程序8585的转移指令的转移指令ROUT0ROUT0:;分支程序分支程序0 0ROUT1:ROUT1:;ROUT85ROUT85:;分支程序分支程序8585课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础J JM MP P A A+D DP PT TR RE ER
36、 R分分支支程程序序C CR R分分支支程程序序X XS S分分支支程程序序D DS S分分支支程程序序序序号号=0 00 0H HD DP PT TR R表表首首地地址址A A分分支支序序号号2 2序序号号=0 03 3H H序序号号=0 02 2H H序序号号=0 01 1H H返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础4.2.3 循环程序结构 MCS-51 MCS-51汇编语言指令系统没有专用的循环指令,但可以使用汇编语言指令系统没有专用的循环指令,但可以使用条件转移指令通过条件判断来控制循环是继续还是结束。条件转移指令通过条件判断来控制循环是继续还是结束。循
37、环程序一般由四个主要部分组成循环程序一般由四个主要部分组成:(1 1)初始化部分:为循环程序做准备,如规定循环次数、给)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。各变量和地址指针预置初值。(2 2)处理部分)处理部分:为反复执行的程序段,是循环程序的实体,为反复执行的程序段,是循环程序的实体,也是循环程序的主体。也是循环程序的主体。(3 3)循环控制部分)循环控制部分:其作用是修改循环变量和控制变量,并其作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。判断循环是否结束,直到符合结束条件时,跳出循环为止。(4 4)结束部分)结束
38、部分:这部分主要是对循环程序的结果进行分析、这部分主要是对循环程序的结果进行分析、处理和存放。处理和存放。课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 单循环程序一般有以下两种典型结构:单循环程序一般有以下两种典型结构:课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 双重循环程序的结构:双重循环程序的结构:开开始始外外循循环环初初始始化化结结束束外外循循环环结结束束否否N NY Y内内循循环环初初始始化化内内循循环环处处理理内内循循环环变变量量修修改改外外循循环环处处理理外外循循环环变变量量修修改改结结束束处处理理内内循循环环结结束束否否N NY Y课
39、程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 在应用系统程序设计时在应用系统程序设计时,有时经常需要将数据存储器中各部有时经常需要将数据存储器中各部分地址单元作为工作单元,以存放程序执行的中间值或执行结果分地址单元作为工作单元,以存放程序执行的中间值或执行结果,因此,在使用这些工作单元之前,必须将工作单元清零。工作因此,在使用这些工作单元之前,必须将工作单元清零。工作单元清零可用循环程序完成。单元清零可用循环程序完成。例:假设在内部例:假设在内部RAMRAM区,开辟区,开辟9696个工作单元,工作单元首地个工作单元,工作单元首地址为址为20H20H,则工作单元清零程序子程序
40、如下,则工作单元清零程序子程序如下:ORG 1000H ORG 1000H CLR0 CLR0:MOV R0MOV R0,#20H#20H;循环初始化部分;循环初始化部分 MOV R7MOV R7,#96#96;CLR ACLR A LOOP LOOP:MOV R0MOV R0,A A;循环体部分循环体部分 INC R0INC R0;修改变量修改变量 DJNZ R7DJNZ R7,LOOPLOOP;循环控制部分循环控制部分 RETRET END END思考题(补充作业题):如采用思考题(补充作业题):如采用CJNECJNE指令,应如何修改程序?指令,应如何修改程序?课程:单片机技术课程:单片机
41、技术 教材:单片机基础教材:单片机基础 例:两个三字节二进制无符号数相加,被加数放在内部例:两个三字节二进制无符号数相加,被加数放在内部RAM RAM 20H20H22H22H单元(低字节存放在低地址单元,高字节存放在高地址单元(低字节存放在低地址单元,高字节存放在高地址单元,即低位在前,高位在后),加数放在单元,即低位在前,高位在后),加数放在2AH2AH2CH2CH单元,和放单元,和放在在20H20H22H22H单元,最高位如有进位,则放在单元,最高位如有进位,则放在23H23H单元中。单元中。解:数据类型(二、十进制数,有、无符号数);数据结构(升解:数据类型(二、十进制数,有、无符号数
42、);数据结构(升、降序排列)、降序排列)被加数(N1N1)高字节(8 8位)中字节(8 8位)低字节(8 8位)加数(N2N2)高字节(8 8位)中字节(8 8位)低字节(8 8位)被加数(N1N1)加数(N2N2)和(N3N3)20H20H单元低字节(8 8位)2AH2AH单元 低字节(8 8位)20H20H单元 低字节(8 8位)21H21H单元中字节(8 8位)2BH2BH单元 中字节(8 8位)21H21H单元 中字节(8 8位)22H22H单元高字节(8 8位)2CH2CH单元 高字节(8 8位)22H22H单元 高字节(8 8位)23H23H单元进位位课程:单片机技术课程:单片机技
43、术 教材:单片机基础教材:单片机基础被加数被加数 N1 N1 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)加数加数 N2 N2 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)+)进位位()进位位(CYCY)进位位(进位位(CYCY)进位位(进位位(CYCY)和和 N3 N3 进位进位 高字节(高字节(8 8位)位)中字节(中字节(8 8位)位)低字节(低字节(8 8位)位)程序流程框图程序流程框图 程序清单程序清单思考题:统计正数、负数、零的个数。思考题:统计正数、负数、零的个数。课程:单片机技术课程:单
44、片机技术 教材:单片机基础教材:单片机基础 ORG 0030H ORG 0030HADDDUOADDDUO:MOV R0MOV R0,#20H#20H;循环初始化部分循环初始化部分 MOV R1MOV R1,#2AH#2AH;MOV R7MOV R7,#03H#03H;循环次数循环次数 CLR CCLR C;LOOPLOOP:MOV AMOV A,R0R0;循环体部分循环体部分 ADDC AADDC A,R1R1;MOV R0MOV R0,A A;INC R0INC R0;修改指针变量修改指针变量 INC R1INC R1;DJNZ R7DJNZ R7,LOOPLOOP;循环控制部分循环控制部
45、分 CLR ACLR A;循环结束处理部分循环结束处理部分 ADDC AADDC A,#00H#00H;MOV R0MOV R0,A A;RETRET;END END 返回返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础开开始始初初始始化化数数据据指指针针结结束束两两数数加加完完否否N NY Y初初始始化化控控制制变变量量取取加加数数N N1 1取取加加数数N N2 2两两数数相相加加并并保保存存修修改改指指针针变变量量数数据据处处理理返回返回课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 例:把内部例:把内部RAMRAM中起始地址为中起始地址为DAT
46、ADATA的数据串传送到外部的数据串传送到外部RAMRAM以以BUFFERBUFFER为首地址的区域,直到发现为首地址的区域,直到发现“$”$”字符的字符的ASCASC码为止,同码为止,同时规定数据串最大长度为时规定数据串最大长度为3232个字节。个字节。解解:(:(1 1)分析任务:数据传送;()分析任务:数据传送;(2 2)算法:比较、控制转移)算法:比较、控制转移 (3 3)程序结构:分支、循环()程序结构:分支、循环(4 4)数据类型:多字节字符串)数据类型:多字节字符串 (5 5)RAMRAM单元安排单元安排:内部:内部RAMRAM单元、单元、外部外部RAMRAM单元单元 (6 6)
47、采用寄存器间接寻址方式()采用寄存器间接寻址方式(R0R0、R1R1或或DPTRDPTR)外外部部R RA AM MX XX X内内部部R RA AM MD DA AT TA A单单元元A AB BU UF FF FE ER R单单元元Y YY Y(A A)$(A A)=$结结束束课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础 (7 7)程序流程框图;)程序流程框图;开开始始初初始始化化数数据据指指针针结结束束数数传传送送完完否否N NY Y初初始始化化控控制制变变量量取取数数数数据据传传送送修修改改指指针针变变量量是是$吗吗?Y YN N课程:单片机技术课程:单片机技术
48、教材:单片机基础教材:单片机基础 ORG 0030H ORG 0030H DATACSDATACS:MOV R0MOV R0,#DATA#DATA;DATADATA数据区首地址数据区首地址 MOV DPTRMOV DPTR,#BUFFER#BUFFER;BUFFERBUFFER数据区首地址数据区首地址 MOV R1MOV R1,#20H#20H;最大数据串长最大数据串长 LOOPLOOP:MOV AMOV A,R0R0;取数据取数据 SUBB ASUBB A,#24H#24H;判是否为判是否为“$”$”字符字符 JZ LOOP1JZ LOOP1;是是“$”$”字符,转结束字符,转结束 MOVX
49、 DPTRMOVX DPTR,A A;数据传送数据传送 INC R0INC R0;INC DPTRINC DPTR;DJNZ R1DJNZ R1,LOOPLOOP;循环控制循环控制 LOOP1LOOP1:RETRET;结束结束 ENDEND课程:单片机技术课程:单片机技术 教材:单片机基础教材:单片机基础4.3 80C51单片机汇编语言程序设计举例 4.3.2 4.3.2 定时程序定时程序 在单片机的控制应用中,常有定时的需要,如定时中断、定在单片机的控制应用中,常有定时的需要,如定时中断、定时检测和定时扫描等。定时功能除可以使用纯硬件电路、可编程时检测和定时扫描等。定时功能除可以使用纯硬件电
50、路、可编程定时定时/计数器实现外,还可以使用软件程序(定时程序)完成。计数器实现外,还可以使用软件程序(定时程序)完成。定时程序是典型的循环程序,它是通过执行一个具有固定延定时程序是典型的循环程序,它是通过执行一个具有固定延迟时间的循环体来实现定时的。迟时间的循环体来实现定时的。(1 1)单循环定时程序)单循环定时程序 MOV R5MOV R5,#TIME#TIME;LOOP:NOPLOOP:NOP;NOPNOP;DJNZ R5DJNZ R5,LOOPLOOP;开开始始初初始始化化部部分分结结束束循循环环控控制制部部分分N NY Y循循环环体体课程:单片机技术课程:单片机技术 教材:单片机基础