单片机原理及其应用第五章_第1页
单片机原理及其应用第五章_第2页
单片机原理及其应用第五章_第3页
单片机原理及其应用第五章_第4页
单片机原理及其应用第五章_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及其应用第五章第1页,共53页,2022年,5月20日,2点36分,星期二补充 汇编语言源程序的格式 源程序基本上由主程序、子程序、中断服务子程序组成。编制汇编语言源程序根据MCS-51单片机ROM的出厂内部定义,一般按这样的主框架编制: ;程序变量定义区1SDABITP1.3;定义SDA位变量 2IOEQUP0;定义I/O等值P0口3ByteConDATA30H;定义字节变量ByteCon;程序主体部分4ORG0000H;程序段从0000H单元开始存放 5LJMPMAIN;跳到主程MAIN6ORG0003H;从0003H开始存放程序段7LJMPINTERUPT1;跳到外部中断0处理

2、子程序第2页,共53页,2022年,5月20日,2点36分,星期二前言 汇编语言源程序的格式8ORG0030H ;从0030H开始存放程序段9MAIN: ;主程序标号说明10MOVSP,#30H ;设置堆栈指针,可以大于30H11LCALLINITIATE ;调用初始化子程12 FCY: ;控制程序循环标号LCALLSUB ;调用功能子程序13LJMPFCY ;跳到FCY构成循环14ORGxxxx ;以下功能程序的存放地址15 INITIATE: ;初始化子程序标号16RET ;子程序返回17 SUB: ;功能子程序标号18RET ;子程序返回19 INTERUPT1: ;外部中断0功能程序2

3、0RETI ;中断返回21 TABLE: ;表的标号22DB 00H,01H ;表的数据 END ;源程序结束,停止汇编。 第3页,共53页,2022年,5月20日,2点36分,星期二前言 汇编语言源程序的格式第13行:把一些符号或变量定义成通俗的符号。第4、6、8、14行:表示程序存储的开始地址。第5行:使CPU在执行程序时,从0000H跳过各中断源的入口地址,主程序以跳转的目标地址作为起始地址开始编写。第6行:中断服务程序的存储地址。第9、12、15、17、19行:为程序语句标号。第10行:设置堆栈指针一般最小设30H,栈区够用还可以增大。第21、22行:为查表指令的表。第4页,共53页,

4、2022年,5月20日,2点36分,星期二5-1 汇编语言概述一、汇编语言程序设计的一般步骤 分析课题 确定算法 画流程图 编写程序 上机调试当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。第5页,共53页,2022年,5月20日,2点36分,星期二4-4 汇编语言程序设计基础一、汇编语言程序设计的一般步骤 分析课题 确定算法 画流程图 编写程序 上机调试 根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。 第6页,共53页,2022年,5月20日,2点36分,星期二

5、4-4 汇编语言程序设计基础一、汇编语言程序设计的一般步骤 分析课题 确定算法 画流程图 编写程序 上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。第7页,共53页,2022年,5月20日,2点36分,星期二4-4 汇编语言程序设计基础一、汇编语言程序设计的一般步骤 分析课题 确定算法 画流程图 编写程序 上机调试 经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。 第8页,共53页,2022年,5月20日,2点36分,星期二4-4 汇编语言程序设计基础一、 汇编语言程序设计的一般

6、步骤 分析课题 确定算法 画流程图 编写程序 上机调试在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。 第9页,共53页,2022年,5月20日,2点36分,星期二二、评价程序质量的标准 (1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。 第10页,共53页,2022年,5月20日,2点36分,星期二三、汇编程序结构按程序的走向可以将程序分成5种结构:简单程序 分支程序 循环程序 查表程序 子程序第11页,共53页,2022年,5月20日,2点36分,星期二简单程序 简

7、单程序是指一种无分支的顺序执行程序,即CPU从第一条指令开始依次执行每一条指令,直到最后一条指令。 这种程序虽然比较简单,但也能完成一定的功能,并且往往也是构成复杂程序的基础。拆字程序 拼字程序 求和程序 第12页,共53页,2022年,5月20日,2点36分,星期二ORG 1000HMOV A, R0ADD A, R2MOV R0, AMOV A, R1ADDC A, R3MOV R1, AMOV A, #0ADDC A, #0MOV R2, ASJMP $END求和程序 例:设2个16位二进制数分别存于R1R0和R3R2中,求二者的和,并将和存于R2R1R0。 解 : 分析命题确定算法画流

8、程图编写程序上机调试(R0)+(R2)送R0单元;(R1)+(R3)+Cy送R1单元; Cy+0送R2单元开始(R0)+(R2)送R0单元 (R1)+(R3)+Cy送R1单元Cy+0送R2单元结束第13页,共53页,2022年,5月20日,2点36分,星期二拆字程序 例:将20H单元中存放的一个两位的BCD拆开并转换成ASCII码,然后存入21H 和22H单元。 解 : 分析命题确定算法画流程图编写程序上机调试22H21H20H89H38H39H拆开BCD码,然后分别或#30H即可。ORG 1000HMOV R0, #22HMOV R0,#0MOV A,20H XCHD A,R0ORL 22H

9、,#30HSWAP AORL A,#30HMOV 21H,ASJMP $END开始将22H清零将A、22H中低4位交换将22H内容或#30H累加器A中高低4位交换20H单元的内容送AA与#30H相或后送21H结束第14页,共53页,2022年,5月20日,2点36分,星期二拼字程序 例:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD码存入32H单元,31H单元中的数为低4位。 解 : 分析命题确定算法画流程图编写程序上机调试32H31H30H04H07H47H将30H单元的高4与低4交换,再与31H单元相或 MOV A,30HSWAP AORL A,31HMOV 32H,

10、ASJMP $开始将30H单元的内容送A将A中高、低4位交换将A中内容与31H单元内容相或将A中内容存入32H单元结束第15页,共53页,2022年,5月20日,2点36分,星期二进制转换程序 例:将内部RAM的20H单元中的8位无符号二进制数转换为3位BCD码,并将结果存放在FIRST(百位)和SECOND(十位、个位)两单元中。 解 : 分析命题确定算法画流程图编写程序上机调试22H21H十位、个位百位先除以100,取出百位;再除以10位,取出十位和个位。FIRST DATA 22HSECOND DATA 21HORG 1000HHBCD: MOV A, 20HMOV B, #100DIV

11、 ABMOV FIRST,AMOV A, BMOV B, #10DIV ABSWAP AORL A, BMOV SECOND, ASJMP $开始将20H单元的内容送A将A除以100将A中内容存入FIRSTBA, 再将A除以10结束将A、B合成后存入SECOND第16页,共53页,2022年,5月20日,2点36分,星期二分支程序 分支程序就是条件分支程序,即根据不同的条件执行不同的程序段。在编写分支程序时,关键是如何判断分支的条件。在MCS-51中可以直接用来判断分支条件的指令不是很多,只有累加器为零(或不为零)、比较条件转移指令CJNE等,但它还提供位条件转移指令,如JC,JB等。把这些指

12、令结合在一起使用,就可以完成各种各样的条件判断,如正负判断、溢出判断、大小判断等。分段函数 符号函数 比较大小 第17页,共53页,2022年,5月20日,2点36分,星期二例:两个无符号数分别存于ONE和TWO单元,试比较它们的大小,将较大者存人MAX单元。若两数相等则任存入一个即可。 解 :分析命题确定算法画流程图编写程序上机调试比较大小:简单分支程序MOV A,ONECJNEA, TWO,NEXT1NEXT1: JC NEXT2 MOV MAX,ONESJMP $NEXT2: MOV MAX,TWO SJMP $返回开始将ONE单元的内容送A结束A TWO将TWO单元内容送MAX单元YN

13、将ONE单元内容送MAX单元第18页,共53页,2022年,5月20日,2点36分,星期二例:设变量X存放于VAR单元,函数值Y存放在FUNC单元。试按照下式的要求给Y赋值。 解 : Y= 分析命题确定算法画流程图编写程序上机调试符号函数VARDATA30HFUNCDATA31H MOVA,VAR JZ COMP JNB ACC.7,POSI MOVA,#0FFH SJMPCOMPPOSI: MOV A,#1COMP: MOV FUNC,A SJMP $开始将VAR单元的内容送A结束A=0?将0送FUNC单元A 0?将1送FUNC单元将-1送FUNC单元YNYN第19页,共53页,2022年,

14、5月20日,2点36分,星期二例:设变量X存放于VAR单元,函数值Y存放在FUNC单元。试按照下式的要求给Y赋值。 解 : Y= 分析命题确定算法画流程图编写程序上机调试分段函数MOV A,VARCJNEA,#10,NEXT1NEXT1: JC NEXT2 MOV R0,#1CJNE A,#21,NEXT3NEXT3: JNC NEXT4 MOV R0,#0 SJMP NEXT4NEXT2: MOV R0,#0FFHNEXT4: MOV FUNC,R0 SJMP $开始将VAR单元的内容送A结束A 20?将0送FUNC单元A 1 0?将-1送FUNC单元将1送FUNC单元YYNN第20页,共5

15、3页,2022年,5月20日,2点36分,星期二多重分支程序设计散转法 根据某种输入或运算的结果转向各个处理程序称为散转多分支,即散转程序。 (1) 利用转移指令表实现转移 将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。【例】【功能】某菜单有9项。根据输入数码转去执行相应的子程序。即输入“1”,执行子程序1;输入“2”,执行子程序2;依次类推。第21页,共53页,2022年,5月20日,2点36分,星期二【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP A+DPTR实现散转。【入口参数】(R3)=存输入键盘码1

16、9。【出口参数】转移到相应的子程序入口。 ORG 0030HKEY_JMP:MOV DPTR, #PRGTBL;子程序入口首地址送DPTR MOV A, R3;把键盘输入缓冲区内容送累加器(A) DEC A;由于输入数码为19,因此需减1 MOV B, #03H第22页,共53页,2022年,5月20日,2点36分,星期二 MUL AB ;由于长跳转指令LJMP占用3B, ;各子程序入口地址相距3B JMP A+DPTR ;根据输入码,执行相应的子程序 ORG 2000H ;程序入口地址表PRGTBL:LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 L

17、JMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END第23页,共53页,2022年,5月20日,2点36分,星期二(2) 利用转向地址表实现转移 这种方法将转移地址列成表格,将表格的内容作为转移的目标地址。【例】【功能】根据R3(0n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0PRn(n256)【分析】将PR0 PRn入口地址(16位地址)列在表格中,故每一项占两个单元;PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP A+DPT

18、R指令(A先清零)即转移到PRn入口执行。第24页,共53页,2022年,5月20日,2点36分,星期二【入口参数】(R3)=0n 转移。【出口参数】转移到相应的子程序入口。PR0EQU0110HPR1EQU0220HPR2EQU0330HORG0030HKEY_JMP:MOVDPTR, #TAB MOVA, R3ADDA, R3;(A)(R3)*2JNCNADDINCDPH;(R3*2)256第25页,共53页,2022年,5月20日,2点36分,星期二NADD: MOV R3, A MOVC A, A+DPTR XCHA, R3 ;转移地址高8位 INCA MOVCA, A+DPTR MO

19、VDPL,A;转移地址低8位 MOVDPH, R3 CLRA JMPA+DPTR TAB: DW PR0,PR1,PR2, PRn PR0:处理程序0 PR1:处理程序1 PRn:处理程序n END第26页,共53页,2022年,5月20日,2点36分,星期二(3) 利用地址偏移量表实现散转 这种方法将转移目标地址与表首地址差列表,作为转移目标地址。【例】【功能】有5个按键 0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。【分析】汇编时,利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差即可转到处理程序。【入口参数】(B)=转向程序号

20、(键盘编码)。【出口参数】转移到相应的子程序入口。第27页,共53页,2022年,5月20日,2点36分,星期二 ORG0030HKEY_JMP:MOVA, BMOVDPTR, #TABMOVCA,A+DPTRJMPA+DPTR TAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR4-TAB PR0:处理程序0 PR1:处理程序1 PR2:处理程序2 PR3:处理程序3 PR4:处理程序4END第28页,共53页,2022年,5月20日,2点36分,星期二循环程序 一、循环程序的应用场合二、循环程序的组成三、循环程序举例字符串长度 求最大值 数组清0 第29

21、页,共53页,2022年,5月20日,2点36分,星期二循环程序 一、循环程序的应用场合分段函数 符号函数 比较大小 在程序执行时,往往同样的一组操作要重复许多次。当然可以采用简单程序,重复使用同样的指令来完成,但若使用循环程序,重复执行同一条指令许多次来完成重复操作,就可大大减化程序。例如:要使00H7FH单元的内容清0。方法1:用128条赋值指令完成。方法2:只用一条赋值指令,并使之执行128次,每次执行时操作数亦作相应的变化以完成规定的操作。方法1:MOV 00H,#0 MOV 01H,#0 MOV 7FH,#0方法2: MOV R0,#128 CLR AUP:MOV R0,A DJNZ

22、 R0,UP SJMP $第30页,共53页,2022年,5月20日,2点36分,星期二循环程序 一、循环程序的应用场合二、循环程序的组成循环程序一般由四部分组成: 置循环初值 循环体 循环修改部分 循环控制部分确定循环开始时的状态,如使得工作单元清0,计数器置初值等 。要求重复执行的部分 。每循环一次就要需要修改一次初值,以便在一定情况下,能结束循环。 根据循环结束条件,判断是否结束循环 流 程 图第31页,共53页,2022年,5月20日,2点36分,星期二循环程序 图 1 图 2第32页,共53页,2022年,5月20日,2点36分,星期二例:使00H-7FH单元清0。 数组清0分析命题

23、确定算法画流程图编写程序上机调试7FH00H00H00H00H用MOV R0,A 做循环主体,修改R0的值,可以将0送入00H7FH单元中。 MOV R0,#128 CLR AUP:DEC R0MOV R0,ACJNE R0,#00H,UP SJMP $开始给R0赋128、A清0A送R0R0减1结束R0=00H?YN第33页,共53页,2022年,5月20日,2点36分,星期二数组清0思考:如下程序能使00H7FH单元清0吗?为什么? MOV R0,#0 MOV R7,#128CLR AUP:MOV R0,AINC R0 DJNZ R7,UP SJMP $第34页,共53页,2022年,5月2

24、0日,2点36分,星期二例:内存中以STRING开始的区域有若干个字符和数字,一般称为一个字符串,最末一个字符为$,试统计这些字符数字的数目,结果存人NUM单元 字符串长度分析命题确定算法画流程图编写程序上机调试NUM DATA 2DHSTRING DATA 21HORG 0030H CLRA MOV R0,#STRINGLOOP: CJNE R0,#24H,NEXT SJMP COMP NEXT:INC AINC R0 SJMP LOOPCOMP: INC A MOV NUM,A SJMP $开始给R0赋21H、A清0A加1,并送2DH单元A加1R0加1结束 R0=24H?YN第35页,共5

25、3页,2022年,5月20日,2点36分,星期二例:从外部RAM中BLOCK单元开始有一个无符号数数据块,其长度存于LEN单元,试求出数据块中最大的数,并存入MAX单元。 求最大值分析命题确定算法画流程图编写程序上机调试 LEN DATA 30H MAX DATA 31HBLOCK DATA 0100HORG 0400H FMAX:MOV DPTR,#BLOCKDEC LENMOVX A,DPTRLOOP:CLRCMOV B,AINC DPTRMOVX A,DPTRSUBBA,BJNCNEXTMOVA,BSJMPNEXT1NEXT:ADDA,BNEXT1:DJNZLEN, LOOPMOVMAX

26、,ASJMP $END 开始给DPTR赋BLOCK,LEN-1,取出第一个数A与下一个RAM内容相减结束Cy=0?YNLEN减1A-BLEN=0?A送MAX单元NY恢复A第36页,共53页,2022年,5月20日,2点36分,星期二多重循环程序设计【例1】【功能】设计一个延时10ms的程序。【分析】延时程序的延时主要与所用晶振和延时程序中的循环次数 有关。已知AT89C51单片机使用的晶振为12MHz,则可知一个机器周期T为1us。【入口参数】(R0)=毫秒数,(R1)=1ms延时预定值。【出口参数】定时到,退出程序。 ORG2000H 指令机器周期数1MOV R0 , #0AH ;毫秒数R0

27、 12DL2:MOV R1 , #MT ;1ms延时值R1 13DL1:NOP 14NOP 15DJNZ R1 , DL1 ;1ms延时循环 26DJNZ R0 , DL2 ;10ms延时循环 2第37页,共53页,2022年,5月20日,2点36分,星期二循环程序设计该延时程序是一个双重循环程序,内循环1ms延时的预定值MT需计算: (1+1+2)1TMT=1000T MT=250=0FAH用0FAH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑第1、2、6行延时参数配置指令的时间因素,则该段延时程序的精确延时时间计算式为:11+(1+2)110+(1+1+2)125010=

28、10.031ms第38页,共53页,2022年,5月20日,2点36分,星期二多重循环程序设计【例2】 将内存一串单字节无符号数升序排序(冒泡法)。分析命题并确定算法:每次取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较N-1次,取到数据表中最大值。第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。内循环控制 ?循环工作循环结束外循环控制 ?内循环初始化开始外循环初始化第39页,共53页,2022年,5月20日,2点36分,星期二SORT: MOV A,#N-1;N个数据排序 MOV R4,A;外循环次数LOOP1: MOV A,R4 MOV R3,

29、A;内循环次数 MOV R0,#TAB;设数据指针LOOP2: MOV A,R0;取第n个数 MOV B,A ;第n个数放入B INC R0 MOV A,R0;取第n+1个数 CJNE A,B,L1;比较L1: JNC UNEX;AB,不交换 DEC R0;否则交换数据 XCH A ,R0 INC R0 MOV R0,AUNEX: DJNZ R3,LOOP2;内循环结束? DJNZ R4,LOOP1;外循环结束? RETR3R31=0 ?B (R0) A ( R0 + 1 )循环结束外循环次数R4R4R41=0 ?内循环次数R3表首TABR0开始A B?(R0)(R0+1)R0 R0+1YN第

30、40页,共53页,2022年,5月20日,2点36分,星期二5-5 查表程序例5-19 一个十六进制数存放在HEX单元的低四位,将其转换成ASCII码并送回HEX单元。 编程: ORG 0100H HEX EQU 30HHEXASC:MOV A, HEX ANL A ,#00001111B ADD A, #3 ;变址调整 MOVC A, A+PC MOV HEX,A ;2字节 RET ;1字节ASCTAB:DB30H,3lH,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB43H,44H,45H,46H END 第41页,共53页,2022年,5月2

31、0日,2点36分,星期二子程序 一、子程序的应用场合二、子程序的优缺点三、编制子程序注意事项四、子程序举例第42页,共53页,2022年,5月20日,2点36分,星期二2. 参数传递入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。(1)子程序无须传递参数如:延时子程序 第43页,共53页,2022年,5月20日,2点36分,星期二例5-24 双字节求补子程序CPLD。解 入口参数:(R7R6)=16位数 出口参数:(R7R6)=求补后的16位数 CPLD: MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A A

32、DDC A,#0 MOV R7,A RET (2)用累加器和工作寄存器传递参数 第44页,共53页,2022年,5月20日,2点36分,星期二例5-25 n字节求补子程序。解 入口参数:(R0)=求补数低字节指针,(R7)=n-1 出口参数:(R0)=求补后的高字节指针 CPLN: MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET(3)通过操作数地址传递参数 第45页,共53页,2022年,5月20日,2点36分,星期二例5-26 在HEX单元存放两个十

33、六进制数,将它们分别转换 成ASC码并存入ASC和ASC+1单元。解 由于要进行两次转换,故可调用查表子程序完成。主程序:MAIN: PUSH HEX;取被转换数 LCALLHASC;转入子程序 *PC POP ASC;ASCLASC MOVA,HEX;取被转换数 SWAPA;处理高四位 PUSHACC LCALLHASC ;转子程序 POPASC+1;ASCH ASC+1 (4)通过堆栈传递参数 第46页,共53页,2022年,5月20日,2点36分,星期二子程序:HASC:DEC SP DEC SP ;修改SP指向HEX POPACC ;弹出HEX ANL A,#0FH ;屏蔽高四位 。 ADD A,#5 ;变址调整 MOVCA,A+PC ;查表 PUSHACC ;结果入栈 (2字节) INCSP ; (1字节)

温馨提示

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

评论

0/150

提交评论