最新单片机第四章ppt课件.ppt
《最新单片机第四章ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新单片机第四章ppt课件.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 4.1 汇编语言程序设计方法汇编语言程序设计方法 4.2 简单和分支程序设计简单和分支程序设计 4.3 循环和查表程序设计循环和查表程序设计 4.4 子程序和运算程序设计子程序和运算程序设计相应程序为:相应程序为: ORG 1000HVAR DATA 30HFUNC DATA 31H MOV A,VAR ; X送送AJZ DONE; 若若X=0,则转,则转DONE JNB ACC.7,POSI ; 若若X0,则转,则转POSI MOV A,#0FFH ; 若若X 0? A 1 存结果存结果A 1(a) 先分支后赋值先分支后赋值 YN N Y 图图4-1 例例4. .2流程图流程图 2先赋值后
2、分支。先赋值后分支。 先把先把X调入累加器调入累加器A,并判断它是,并判断它是否为零?否为零? 若若X0,则,则A中内容送中内容送FUNC单单元;元; 若若X0,则先给,则先给R0赋值(如赋值(如1),),然后判断然后判断A0? 若若A0,则把,则把R0修改成修改成1后送后送FUNC单元,单元, 程序流程如图程序流程如图4-1(b)所示。所示。 (b) 先赋值先赋值后分支后分支 A X,R0 0 R0 1 存结果存结果 R0 1A = 0 ? A 0 ?YN YN 图图4-1 例例4. .2流程图流程图 相应程序为:相应程序为: ORG 1000H VAR DATA 30H FUNC DATA
3、 31H MOV R0,#00H MOV A, VAR ; X送送A JZ DONE ; 若若X = 0,则转,则转DONE MOV R0, #0FFH ; 若若X 0,则,则1送送R0 JB ACC.7,DONE ; 若若X 0,则,则1送送R0 DONE:MOV FUNC,R0 ; 存存Y值值 SJMP $ END 例例4.3 某系有某系有200名学生参加外语统考,若成绩已存放名学生参加外语统考,若成绩已存放在在MCS-51外部外部RAM始地址为始地址为ENGLISH的连续存储单元,的连续存储单元,现决定给成绩在现决定给成绩在95分分100分之间学生颁发分之间学生颁发A级合格证书级合格证书
4、和成绩在和成绩在90分分94分之间学生颁发分之间学生颁发B级合格证书。试编制级合格证书。试编制一个程序,可以统计一个程序,可以统计A级和级和B级证书的学生人数,并把统级证书的学生人数,并把统计结果存入内部计结果存入内部RAM的的GRADA和和GRADB单元。单元。 解:这是一个循环和分支相结合程序,解:这是一个循环和分支相结合程序, 程序流程图如图程序流程图如图4-2所示。所示。 A95? A90?完成否完成否?GRADB单元内容加单元内容加1修改修改DPTR指针指针 结结 束束GRADA单元单元内容加内容加1GRADA和和GRADB单元清零、单元清零、DPTR置初置初值值ENGLISH、循环
5、计数器、循环计数器R2置初值置初值200取某学生外语成绩取某学生外语成绩图图4 -2 例例4.34.3程序流程图程序流程图 相应程序为:相应程序为: ORG 1000HENGLISH DATA 2000HGRADA DATA 20HGRADB DATA 21H MOV GRADA, #00H ; GRADA单元清零单元清零 MOV GRADB, #00H ; GRADB单元清零单元清零 MOV R2,#0C8H ; 参考总人数送参考总人数送R2 MOV DPTR,#ENGLISH ; 学生成绩始地址送学生成绩始地址送DPTRLOOP: MOVX A,DPTR ; 取某学生成绩到取某学生成绩到A
6、 CJNE A,#5FH,LOOP1 ; 和和95作比较,形成作比较,形成CyLOOP1: JNC NEXT1 ; 若若A95,则,则NEXT1 CJNE A,#5AH,LOOP2 ; 和和90作比较作比较LOOP2: JC NEXT ; A e63,则两个存贮单元中内容交,则两个存贮单元中内容交换,反之就不交换;换,反之就不交换; 然后使然后使e62和和e63相比,按同样原则决定是否交换;相比,按同样原则决定是否交换; 一直比较下去;最后完成一直比较下去;最后完成e1和和e2比较及交换,经过比较及交换,经过N-163次比较(常用内循环次比较(常用内循环63次来实现)后,次来实现)后,e1位置
7、上必然得到数组中位置上必然得到数组中的最大值,犹如一个气泡从水底冒到了水顶,如图的最大值,犹如一个气泡从水底冒到了水顶,如图4-5所示。所示。 第二次冒泡过程和第一次冒泡过程完全相同,比较次数也可第二次冒泡过程和第一次冒泡过程完全相同,比较次数也可以是以是63次(其实只需次(其实只需62次),冒泡后可以在次),冒泡后可以在e2位置上得到次最大位置上得到次最大值,如图值,如图4-5所示。所示。 冒泡循环次数计算:冒泡循环次数计算: (以(以 64个数的排序为例)个数的排序为例) 大循环(外循环)共大循环(外循环)共63次;次; 内循环:共内循环:共6363次。次。 完成完成64个数的排序需要外循
8、环个数的排序需要外循环63次、内循环次、内循环3969次。次。第一次冒泡排序(比较第一次冒泡排序(比较5次)次) N=6时时 比较比较1 比较比较2 比较比较3 比较比较4 比较比较5 e1 4 4 4 4 4 256e2 1 1 1 1 256 4 e3 0 0 0 256 1 1e4 42 42 256 0 0 0e5 36 256 42 42 42 42e6 256 36 36 36 36 36第二次冒泡排序(比较第二次冒泡排序(比较4次)次) N=6时时 比较比较1 比较比较2 比较比较3 比较比较4e1 256 256 256 256 256 256e2 4 4 4 4 42 42
9、e3 1 1 1 42 4 4e4 0 0 42 1 1 1e5 42 42 0 0 0 0e6 36 36 36 36 36 36第三次冒泡排序(比较第三次冒泡排序(比较3次)次) N=6时时 比较比较1 比较比较2 比较比较3e1 256 256 256 256 256 256e2 42 42 42 42 42 42 e3 4 4 4 36 36 36e4 1 1 36 4 4 4e5 0 36 1 1 1 1e6 36 0 0 0 0 0第四次冒泡排序(比较第四次冒泡排序(比较2次)次) N=6时时 比较比较1 比较比较2e1 256 256 256 256 256 256e2 42 4
10、2 42 42 42 42 e3 36 36 36 36 36 36e4 4 4 4 4 4 4e5 1 1 1 1 1 1e6 0 0 0 0 0 0第五次冒泡排序(比较第五次冒泡排序(比较1次)次) N=6时时 比较比较1e1 256 256 256 256 256 256e2 42 42 42 42 42 42 e3 36 36 36 36 36 36e4 4 4 4 4 4 4e5 1 1 1 1 1 1e6 0 0 0 0 0 0其实,其实,64个无符号数的数组排序需要冒泡个无符号数的数组排序需要冒泡63次的机会是很次的机会是很少的,每次冒泡所需的数据比较次数,也是从少的,每次冒泡所
11、需的数据比较次数,也是从63逐次减少(每逐次减少(每冒一次泡减少一次比较)。冒一次泡减少一次比较)。为了禁止那些不必要的冒泡次数,人们常常设置一个为了禁止那些不必要的冒泡次数,人们常常设置一个“交交换标志位换标志位”。“交换标志位交换标志位”在循环初始化时清零,在数据交在循环初始化时清零,在数据交换时置位成换时置位成1(表示冒泡中进行过数据交换)。(表示冒泡中进行过数据交换)。“交换标志位交换标志位”用来控制是否再需要冒泡:用来控制是否再需要冒泡:若若“交换标志位交换标志位”为为1,则表明刚刚进行的冒泡中发生过,则表明刚刚进行的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;数据交换(
12、即排序尚未完成),应继续进行冒泡;若若“交换标志位交换标志位”为为0,则表明刚进行完的冒泡中未发生,则表明刚进行完的冒泡中未发生过数据交换(即排序已完成),冒泡应该禁止。过数据交换(即排序已完成),冒泡应该禁止。例如,对于一个已经排好序的数组:例如,对于一个已经排好序的数组:1,2,3,63,64,排序程序只要进行一次冒泡便可根据,排序程序只要进行一次冒泡便可根据“交换标志位交换标志位”状态状态而结束排序程序的再执行,这自然可以节省而结束排序程序的再执行,这自然可以节省63162次的冒次的冒泡时间。冒泡程序流程如图泡时间。冒泡程序流程如图4-6所示。所示。开始开始数据块始址送数据块始址送R0块
13、长块长1 送送 R2“交换标志位交换标志位” 7FH清零清零 eN送送20H和和A 修改数据指针修改数据指针 eN-1送送21H eNeN-1?“交换标志交换标志”7FH=1?e和和e在数据块中位置交换在数据块中位置交换“交换标志交换标志” 7FH置置”1”结束结束 R210 ?图图4-6 冒泡程序流程图冒泡程序流程图 参考程序为:参考程序为: ORG 1000H BUBBLE: MOV R0,#30H ;置数据块指针;置数据块指针R0 MOV R2,#64 ;块长送;块长送R2 CLR 7FH ;交换标志;交换标志2FH.7清零清零 DEC R2 ;块长;块长1为比较次数为比较次数 BULO
14、OP: MOV 20H,R0 ;e送送20H MOV A,R0 ;e送送A INC R0 MOV 21H,R0 ;e送送21H CJNE A,21H,LOOP ;(20H)和和(21H)比较比较 LOOP: JC BUNEXT ;若;若(20H) 除数?计数器减1计数器=0?返回NYN商减去除数0 商YR5R4R3R2C左环移1位NSDIV0 CC=1?(R5R4)(R7R6) AR1(F0)=1?返回YYN(AR1) (R5R4)(执行减法)(R2)+1 R2(上商1)(R5R4)(R7R6) 1 F016 BC F0(B)-1 B=0?1 F0YNN比较除法程序框图无符号双字节除法程序框图
15、 判断除法是否完成(判断除法是否完成(B=0)?若未完成,则重复执行第四步;若已完成,)?若未完成,则重复执行第四步;若已完成,则令则令F0=0,然后结束除法运算。,然后结束除法运算。参考程序为:参考程序为: ORG 1000H NSDIV: MOV A,R6 ;除数低;除数低8位送位送A JNZ START ;若除数;若除数0,则,则START MOV A,R7 ;除数高;除数高8位送位送A JZ ERR ;若除数;若除数0,则转,则转ERR START: MOV A,R4 ;R4送送A CLR C ;Cy清零清零 SUBB A,R6 ;R4R6送送A,形成,形成Cy MOV A,R5 ;R
16、5送送A SUBB A,R7 ;R5R7Cy送送A,形成,形成Cy JNC LOOP4 ;若;若R5R4R7R6,则,则LOOP4(溢出)(溢出) MOV B,#16 ;否则,准备做除法;否则,准备做除法LOOP1: CLR C ;Cy清零清零 MOV A,R2 ;R2送送A RLC A ;左移一位,低位补零;左移一位,低位补零 MOV R2,A ;送回;送回R2 MOV A,R3 ;R3送送A RLC A ;左移一位;左移一位 MOV R3,A ;送回;送回R3 MOV A,R4 ;R4送送A RLC A ;左移一位;左移一位 MOV R4,A ;送回;送回R4 XCH A,R5 ;R5进入
17、进入A, R5保存保存R4移位后的内容移位后的内容 RLC A ;左移一位;左移一位 XCH A,R5 ;送回;送回R5,A中保存中保存R4移位后的内容移位后的内容 MOV PSW.5,C ;被除数最高位送;被除数最高位送F0 CLR C ;Cy清零清零 SUBB A,R6 ;R4R6 MOV R1,A ;送;送R1保存保存 MOV A,R5 ;R5送送A SUBB A,R7 ;R5R7Cy送送A JB PSW.5,LOOP2 ;若够减(;若够减(F0=1),则),则LOOP2 JC LOOP3 ;若不够减,则;若不够减,则LOOP3 LOOP2:MOV R5,A ;余数高字节送;余数高字节送
18、R5 MOV A,R1 ;余数低字节送;余数低字节送A MOV R4,A ;存入;存入R4 INC R2 ;上商;上商1 LOOP3:DJNZ B,LOOP1 ;若除法未完,则;若除法未完,则LOOP1 CLR PSW.5 ;若除法完成,则;若除法完成,则F0清零清零 DONE: RET ;返回主程序;返回主程序 LOOP4: SETB PSW.5 ;令;令F0=1 SJMP DONE ;转入;转入DONE ERR: ;出错处理程序;出错处理程序 END 上述子程序中,我们省略了累加器上述子程序中,我们省略了累加器A、B寄存器、寄存器、PSW和和R1中内容的保护和恢复语句。在实际编程中,若需要
19、的中内容的保护和恢复语句。在实际编程中,若需要的话可根据实际情况添补。话可根据实际情况添补。 (2)带符号多字节乘法运算程序)带符号多字节乘法运算程序 带符号多字节乘除法运算程序和无符号多字节乘除法运算带符号多字节乘除法运算程序和无符号多字节乘除法运算程序类似,只是符号位应单独处理。为了简便起见,以程序类似,只是符号位应单独处理。为了简便起见,以8位带位带符号乘法运算程序为例说明符号处理的运算规则。符号乘法运算程序为例说明符号处理的运算规则。 例例4.15 设设R0和和R1中有两个补码形式的带符号数,试编写出求中有两个补码形式的带符号数,试编写出求两数之积并把积送入两数之积并把积送入R3R2(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 第四 ppt 课件
限制150内