《单片机程序设计》PPT课件.ppt
《《单片机程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《单片机程序设计》PPT课件.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言设计 顺序结构 分支结构 循环结构3.1汇编语言程序设计方法汇编语言程序设计方法汇编语言程序设计同高级语言程序设计一样,是有章可循的,只要按照一定的方法步骤去做,程序设计就会变成一件轻松愉快的事情,设计的程序也会规范、清晰、易读、易懂。使用汇编语言设计程序大致上可分为以下几个步骤。1.分析题意,明确要求。2.确定算法。3.画程序流程图。4.分配内存工作单元。5.编写源程序。6.程序优化。7.上机调试。3.2 顺序程序设计【例】程序初始化。初始化就是为变量、寄存器、存储单元赋一初值,是最简单、最常用的操作。如将R0-R3,P1,30H,40H单元初始化为00H,把R4,R5初始化为0FF
2、H。参考程序如下:ORG 0000H ;PC起始地址 LJMP START;转主程序 ORG 0100H;主程序起始地址START:MOV R0,#00H ;初始化 MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV P1,#00H MOV R4,#0FFH MOV R5,#0FFH MOV 30H,#00H MOV 40H,#00HHERE:SJMP HERE;反复执行该指令,相当于等待 END用立即数比较直观,但用MOV A,#00H,MOV R0,A 指令赋值,效果更好。【例】【例】逻辑运算。逻辑操作是控制过程中经常使用的,掌握逻辑运算的特点是提高程序效率的重
3、要途径。在逻辑运算中,进位标标志CY的地位很特殊,它是逻辑累加器,大多数逻辑操作要通过CY来完成。用程序实现图4-2所示的逻辑电路功能。图3-2 逻辑电路参考程序如下:ORG 0000H LJMP START ORG 0100H MOV P1,#0FFH ;P1口初始化LOOP:MOV C,P1.1 ORL C,P1.2 ;P1.1与P1.2逻辑或运算 CPL C ;取反 ANL C,P1.0 ;C与P1.0逻辑与运算 CPL C MOV 07H,C ;暂存于07H单元中 MOV C,P1.3 ANL C,/P1.4 ;P1.3与P1.4的反逻辑与运算 CPL C ORL C,07H MOV
4、P1.5,C ;把结果在P1.5口输出 SJMP$END3.3 分支程序设计分支程序的主要特点是程序包含有判断环节,不同的条件对应不同的执行路径。编程的关键任务是合理选用具有逻辑判断功能的指令。由于选择结构程序的走向不再是单一的,因此,在程序设计时,应该借助程序框图(判断框)来明确程序的走向,避免犯逻辑错误。一般情况下,每个选择分支均需单独一段程序,并有特定的名字,以便当条件满足时实现转移。1 1单分支选择结构单分支选择结构当程序的判断是二选一时,称为单分支选择结构。通常用条件转移指令实现判断及转移。单分支选择结构有三种典型表现形式。图3-3 单分支选择结构(a)当条件满足时执行分支程序1,否
5、则执行分支程序2。(b)当条件满足时跳过程序段1,从程序段2顺序执行;否则,顺序执行程序段1和程序段2。(c)当条件满足时程序顺序执行程序段2;否则,重复执行程序段1,直到条件满足为止。由于条件转移指令均属相对寻址方式,其相对偏移量rel是个带符号的8位二进制数,可正可负。因此,它可向高地址方向转移,也可向低地址方向转移。对于第三种形式,可用程序段1重复执行的次数作为判断条件,当重复次数达到某一数值时,停止重复,程序顺序往下执行。这是分支结构的一种特殊情况,这实际是循环结构程序。用这种方式可方便实现状态检测。【例】:LOOP:JB P1.1,LOOP单分支程序一般要使用状态标志,应注意标志位的
6、建立。【例】设a存放在累加器A中,b存放在寄存器B中,若a0,Y=ab;若a0nY=100X=0 n XX0nY=100 X=0 求出Y值,并将Y值放回原处。n X X0n解:设置一个计数器控制循环次数,每处理完一个数据,计数器减1。程序流程如图4-8所示。A=0?YYNNYNA为负数?取数,A(R1)开始结束AXA64HAX+2存数,(R1)A(30H)设置地址指针R1、计数器R0初值R1R1+1;R0R0-1R0=0?图4-8 例4.5的程序流程图返回本节n参考源程序如下:nORG2000H n MOVR0,#10n MOVR1,#30Hn START:MOVA,R1;取数n JBACC.
7、7,NEG;若为负数,转NEG n JZZER0;若为零,转ZER0n ADDA,#02H;若为正数,求X+2n AJMPSAVE;转到SAVE,保存数据n ZER0:MOVA,#64H;数据为零,Y=100 nAJMP SAVE;转到SAVE,保存数据nNEG:DECA n CPLA;求XnSAVE:MOVR1,A;保存数据n INCR1;地址指针指向下一个地址n DJNZ R0,START;数据未处理完,继续处理n SJMP;暂停【例】排序程序。设在内部RAM中存一无符号数的数组,其长度为n,起始地址是30H,要求将它们按从大到小排序,排序后仍存放在原区域中。按“冒泡法”对n个数排序时,可
8、能用不到n-1次循环,排序就结束了。为了提高排序速度,程序中可设一交换标志位,如10H位,每次循环中,若有交换则执行SETB 10H,表明排序未完成;若无交换,则执行CLR 10H,表明排序已经完成。每次循环结束时,测10H位,判断排序是否结束。参考程序如下:ORG 0000H LJMP BUBBLE ORG 0100HBUBBLE:MOV R0,#30H MOV B,#64H CLR 10H DEC B ;长度计数LOOP:MOV A,R0 ;内循环的入口 MOV 20H,A ;暂存,为交换作准备 INC R0 MOV 21H,R0 CJNE A,21H,BUEU ;若(20H)(21H)转
9、移 BUEU:JNC BUNEXT ;(20H)(21H)转移 MOV A,R0 ;若(20H)(21H)则交换 MOV R0,20H DEC R0 ;使R0退格指向小地址 MOV R0,A INC R0 ;恢复R0指向大地址 SETB 10H ;置交换标志BUNEXT:DJNZ B,LOOP;内循环是否结束的判断 JB 10H,BUBBLE ;判断标志位为1否?外循环结束的判断 END3.5 子程序设计n在实际应用中,一些特定的运算或操作经常使用,例如多字节的加、减、乘、除处理,代码转换、字符处理等。如果每次遇到这些运算或操作,都重复编写程序,不仅会使程序烦琐冗长,而且也会浪费编程者大量时间
10、。因此经常把这些功能模块按一定结构编写成固定的程序段,存放在内存中,当需要时,调用这些程序段。通常将这种能够完成一定功能、可以被其它程序调用的程序段称为子程序。调用子程序的程序称为主程序或调用程序。调用子程序的过程,称为子程序调用,用ACALL addr11和LCALL addr16两条指令完成。子程序执行完后返回主程序的过程称为子程序返回,用RET指令完成。1.1.在编写子程序时要注意以下几点:在编写子程序时要注意以下几点:要给每个子程序赋一个名字。它是子程序入口地址的符号,便于调用。明确入口参数、出口参数。所谓入口参数,即调用该子程序时应给哪些变量传递数值,放在哪个寄存器或哪个内存单元,通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机程序设计 单片机 程序设计 PPT 课件
限制150内