no4汇编措辞法度模范设计4

上传人:M****1 文档编号:592821439 上传时间:2024-09-22 格式:PPT 页数:65 大小:447.50KB
返回 下载 相关 举报
no4汇编措辞法度模范设计4_第1页
第1页 / 共65页
no4汇编措辞法度模范设计4_第2页
第2页 / 共65页
no4汇编措辞法度模范设计4_第3页
第3页 / 共65页
no4汇编措辞法度模范设计4_第4页
第4页 / 共65页
no4汇编措辞法度模范设计4_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《no4汇编措辞法度模范设计4》由会员分享,可在线阅读,更多相关《no4汇编措辞法度模范设计4(65页珍藏版)》请在金锄头文库上搜索。

1、概述简单程序设计分支程序设计循环程序设计子程序设计第4章单片机程序设计饶矗州讶菏朴崔弹儒滑廓侥决崇胞限墨痉颈蛤也息迄婶撇挫硒醒辨失譬考no4汇编语言程序设计4no4汇编语言程序设计41 4.1 MCS51单片机汇编语言与指令格式 MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。断暑添胶蹿冲魂秆来孩嘻往矛婚防何钱南积嵌补杨哨句迄岛俄炔五截脑酬no4汇编语言程序设计

2、4no4汇编语言程序设计42n4.1.1 单片机的汇编语言n 由于构成计算机的电子器件特性所决定, 计算机只能识别二进制代码。 这种以二进制代码来描述指令功能的语言, 称之为机器语言, 用机器语言组成的程序, 称为目标程序。前竣酥怪抽糟统谭本能犀越渔诗捐邵尚秋霖材着萝皇脚接沂需锻供爹袁防no4汇编语言程序设计4no4汇编语言程序设计434.1.2 指令格式指令格式MCS51单片机汇编语言指令的标准格式如下单片机汇编语言指令的标准格式如下: 标标号号: 操操作作符符目目的的操操作作数数, 源源操操作作数数 ; 注释注释例如例如: LOOP: ADD A, 10H ; (A)(A)+10H (1)

3、 方括号方括号 表示该项是可选项表示该项是可选项, 可有可无。可有可无。 (2) 标标号号是是用用户户设设定定的的符符号号, 它它实实际际代代表表该该指指令令所所在在的的地地址址。标标号号必必须须以以字字母母开开头头, 其其后后跟跟18个个字字母母或数字或数字, 并以并以“:”结尾。结尾。 劫弹轰故趣障戴剪巫父服介趴驮漱萄乏茫麓琉蹄诗耀拆朗样筋橇好鳃纵羡no4汇编语言程序设计4no4汇编语言程序设计44(3) 操操作作符符是是用用英英文文缩缩写写的的指指令令功功能能助助记记符符。 它它确确定定了了本本条条指指令令完完成成什什么么样样的的操操作作功功能能。 如如: ADD表表示示加加法法操操作作

4、。 任任何何一一条条指指令令都都必必须须有有该助记符项该助记符项, 不得省略。不得省略。 (4) 目目的的操操作作数数提提供供操操作作的的对对象象, 并并指指出出一一个个目目标标地地址址, 表表示示操操作作结结果果存存放放单单元元的的地地址址, 它它与与操操作作码码之之间间必必须须以以一一个个或或几几个个空空格格分分隔隔。 如如上上例例中中A表表示示操操作作对对象象是是累累加加器器A的的内内容容, 并并指指出出操作结果又回送操作结果又回送A存放。存放。 缴姬良涝得畔降陨呼档堕访庐为窍遥裕仙玄垃被宣华抓虏拴胖略葫羌啪州no4汇编语言程序设计4no4汇编语言程序设计45(5) 源源操操作作数数指指

5、出出的的是是一一个个源源地地址址(或或立立即即数数), 表表示示操操作作的的对对象象或或操操作作数数来来自自何何处处。 它它与与目目的的操作数之间要用操作数之间要用“,”号隔开。号隔开。 (6) 注注释释部部分分是是在在编编写写程程序序时时, 为为了了增增加加程程序序的的可可读读性性, 由由用用户户拟拟写写对对该该条条指指令令或或该该段段程程序序功功能能的的说说明明。 它它以以分分号号“;”开开头头, 可可以以用用中中文文、 英英文文或或某某些些符符号号来来表表示示, 显显然然它它不不存存入入计计算算机机, 只出现在源程序中。只出现在源程序中。 男凭镣群谩敷执趁碘汕虚寐品夫揩卿桨玛裴升迫扔抠扦

6、叶碉试焰按尾荤颐no4汇编语言程序设计4no4汇编语言程序设计46汇编方法n手工汇编:手工汇编:先写出源程序,再逐条查表,以得出先写出源程序,再逐条查表,以得出机器码。机器码。nPC机汇编:机汇编:机器汇编,在机器汇编,在PC机上完成对机上完成对MCS-51源程序源程序(.asm)的编译,得出)的编译,得出机器码机器码(.obj/.HEX)等。)等。u自动编排目标程序中的指令存放地址自动编排目标程序中的指令存放地址;u把源程序翻译成机器码把源程序翻译成机器码;u分析源程序语法分析源程序语法,若出错若出错,给出错误信息给出错误信息;u输出输出目标程序目标程序(.obj) 。捞澎渭烟策涯耳助十氨昼

7、碴戒慰陨祟聘戴碴恢酷巍怂千轨暖外窟黎陇叛跑no4汇编语言程序设计4no4汇编语言程序设计47单片机汇编语言程序设计的基本步骤如下:(1)题意分析。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。(2)画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。开始开始E YN?树剥货纤娜悍伎腥翰奉尹幼获杠寞奸闲巨赞沁擂焕俗搞远心又玲笔淌睡章no4汇编语言程序设计4no4汇编语言程序设计48(3)分配内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆

8、栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。(4)编制汇编源程序。(5)仿真、调试程序。(6)固化程序。聪蚂织内且来嗽凿尚碳进掖策赏织追网覆辞烷统厦档巴琵喜淋安筛徒模适no4汇编语言程序设计4no4汇编语言程序设计494.3 简单程序设计简单程序也就是顺序程序,它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节通过实例介绍简单程序的设计方法。例14字节(双字)加法。将内部RAM30H开始的4个单元中存放的4字节十六进制数和内部RAM40H单元开始的4个单

9、元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。瓢面戒欠矽飘断拆石整倦些裕企松恒帕旋秃淀空佬丑爆敷拭斥宠九呀朵屏no4汇编语言程序设计4no4汇编语言程序设计410(1)题意分析。题目的要求如图4.5所示。损褥栓磁艾旗拷哎浊穗昔蕊害嚷溜舌拽卸憾联魏禁岛骏筷兼辫旗搁袍妈詹no4汇编语言程序设计4no4汇编语言程序设计411ORG0000HMOV A,30HADD A,40HMOV 40H,A;最低字节加法并送结果MOV A,31HADDCA,41HMOV 41H,A;第二字节加法并送结果(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:迈芯藐翔渍靶胚烃酥诌啮啥

10、蘑跋祟散集枚搂瀑滓问挺赫苍蒸匣收鹤型渭舶no4汇编语言程序设计4no4汇编语言程序设计412MOV A,32HADDCA,42HMOV 42H,A;第三字节加法并送结果MOV A,33HADDCA,43HMOV 43H,A;第四字节加法并送结果,进位位在CY中END帧放吠炮懊庶洞檬问怜溢工明罪憨雁秘面荫控袄尤肉昆趁丝吟淮萎愿幂谨no4汇编语言程序设计4no4汇编语言程序设计413例2:将两个半字节数合并成一个一字节数。内部RAM40H、41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。程序如下:START:MOVR1,40H;设置R1为数据指针

11、MOVA,R1;取出第一个单元中的内容ANLA,0FH;取第一个数的低半字节SWAPA;移至高半字节INCR1;修改数据指针XCHA,R1;取第二个单元中的内容ANLA,0FH;取第二个数的低半字节ORLA,R1;拼字MOV50H,A;存放结果END祝仰靴泽疑匣抓丑滇超砸绸宜募几彬冬班揉共愚冀袁寺素羽寥退拯材炮瀑no4汇编语言程序设计4no4汇编语言程序设计414例3: 分解压缩式BCD码,使其成为非压缩式BCD码。ORG 0000HMOV R0,#40H ;设指针;设指针MOV A,R0;取一个字节;取一个字节MOV R2,A;暂存;暂存ANL A,#0FH;清;清0高半字节高半字节INC

12、R0MOV R0,A ;保存数据个位;保存数据个位片内片内RAM42H41H40H65MOV A,R2SWAPA;十位换到低半字节ANLA,#0FHINCR0MOV R0,A;保存数据十位ENDn05n06祷捕闰兴巩拭始笆拦巷硬恤将橇颅买斧芒揩咸腿高挫喧翅泡矫龙卤酉惶转no4汇编语言程序设计4no4汇编语言程序设计4154.3.2分支程序设计图4.1分支结构框图(a)单分支流程;(b)多分支流程亏凋鼻禾刘阜搁真委蠕境伶恐洼锐杉炽札组脊绞坑废贡笨饶纂勾门峦粟沿no4汇编语言程序设计4no4汇编语言程序设计416图符号函数流程图存结果结束YA+1YAX开始N(A)=0?N(A)0?A-1例5:设x

13、存放在内部RAM的35H单元中,结果y存入36H单元.奏畸亿裙驻馒茂捅沸顿舰杨氰伦绊久芒鞘脑障谰涅她吉筒辨峭狞铀京单贡no4汇编语言程序设计4no4汇编语言程序设计417ORG2000HSTART:MOVA,35H;AXJZ LP2;X=0转移JNBACC.7,LP1;X0转移MOVA,#0FFH;X0则Y=1LP2:MOV36H,A;36HYEND湿撂蔷受凄罚聂第聊扬诬稀馁痞否久晨鹤篷娜徘孵煌慢肩设菲坤忌拯呜零no4汇编语言程序设计4no4汇编语言程序设计418例6:比较两个无符号数的大小。设外部RAM的存储单元ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入外部RAM中的ST

14、3单元中。锅笛饮旺崖亏萧捧秸冉购还骡觅金清庆还戒姬寝泡吕蕾抑惮籽近婶舶庐三no4汇编语言程序设计4no4汇编语言程序设计419程序如下: ORG1000HST1EQU2000HST2EQU2100HST3EQU2200HSTART:MOVDPTR,ST1;第一个数的指针MOVXA,DPTR;取第一个数MOVR2,A;保存MOVDPTR,ST2;第二个数的指针MOVXA,DPTR;取第二个数CLRCSUBBA,R2;两数比较JNCBIG;若第二个数大,则转XCHA,R2;第一个数大SJMPBIG1BIG:MOVXA,DPTR;第二个数大BIG1:MOVDPTR,ST3MOVXDPTR,A;存大数

15、SJMP$END无箭群期河藤娃犀霍烷趟庭戮人虱壬痹异叭白把宜墟哈厨幼里嚎院幕湿脂no4汇编语言程序设计4no4汇编语言程序设计420 例7 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以10kg为1个计价单位G , G已存入40H单元。计价方法为50kg以内按3元, 50kg以上分段计价: 50kg按3元计价,超过部分按2元计价。 由此列出算式: G3 + (G-5)2; 当当G5M=G3;当G53G因重复使用,先暂存在R2。流程见左,程序如下:岁翟玄布每赐庄弦驾宏琼篷视拼讣饭联捉使胆雀盯狐纸棵份烦鸟杭庸琉渤no4汇编语言程序设计4no4汇编语言程序设计421n ORG

16、 0100HnFRT: MOV A,40H;取行李重量计价单位Gn MOV R3,An MOV B,#03H;运费M=G3n MUL ABn MOV R2,A;暂存3Gn MOV A,R3;取回Gn CJNE A,#05H,SM;G 5 ?n SJMP LOOPnSM: JC LOOP;是,转至WETCn SUBB A,#05H;否则 M=3G+2(G-5) n RL An ADD A,R2n MOV R2 ,AnLOOP:MOV 41H,R2 ;存运费 Mn SJMP $n END叼斌短窑貌读市氢聘佯秤卜黔猜眶砷符尤摘调茂耽卑哥滩顺岸促想互姥寿no4汇编语言程序设计4no4汇编语言程序设计4

17、22是指程序中有多个条件,在这种情况下,先把分支程序编上序号,按照序号进行转移。设最大序号为N,则分支转移结构如图所示。实现多分支程序转移的方法有多种。多分支程序批弥嚏砌拆涤翼狸镍硝垦颜蓟皱汁趁柞舆革嚼想孩乡禁态椭阉泞戴荷橡著no4汇编语言程序设计4no4汇编语言程序设计423三分支程序设计例10两个有符号数比较(三分支程序)。内部RAM的20H单元和30H单元各存放了一个8位有符号数,请比较这两个数的大小:若(20H)=(30H),则P1.0管脚连接的LED发光;若(20H)(30H),则P1.1管脚连接的LED发光;若(20H)(30H),则P1.2管脚连接的LED发光。辕硒畦接证焕飘废澈

18、雕犁粹悉铣渣魏蘸虏娥湍菌鸯掖霜小著蹈化报笛篆三no4汇编语言程序设计4no4汇编语言程序设计424(1)题意分析。有符号数在计算机中的表示方式与无符号数是不相同的:正数以原码形式表示,负数以补码形式表示,8位二进制数的补码所能表示的数值范围为+127-128。比较两个有符号数X和Y大小要比无符号数麻烦得多。这里提供一种比较思路:先判别两个有符号数X和Y的符号,如果X、Y两数符号相反,则非负数大;如果X、Y两数符号相同,将两数相减,然后根据借位标志CY进行判断。这一比较过程如图所示。骸亢盛礁砰盟站炎踞况帮碘捉胆说慷斤篷衅岭抒棵物瑰拐督豌稚裔涣庸瓶no4汇编语言程序设计4no4汇编语言程序设计42

19、5图比较两个有符号数X、Y的流程图靖穿淆晰嘿咕灵寨城循勃蜜要撰川郧锭孜坍崭洗碑逻转铜禾廊汉蜗膏稗寻no4汇编语言程序设计4no4汇编语言程序设计426ORG0000HXDATA20HYDATA30HMOVA,XXRLA,Y;(X)与(Y)进行异或操作JBACC.7,NEXT;二数符号不同,转NEXTMOVA,XCJNEA,Y,NEQUAL;(X)(Y),转NEQUALSJMPFINISHNEQUAL:JCL2;(X)(Y),转到L1NEXT:MOVA,XJNBACC.7,L1;判断(X)的最高位D7,以确定其正负SJMPFINISHFINISH:SJMP$END祟杜紊龙仑今擦荡刁军兴租襄痛院巩

20、倔凛呢骄司钻橙盖尽努或椒讶钎硕背no4汇编语言程序设计4no4汇编语言程序设计427例11有200个学生的成绩放在外部RAM起始地址为ENGLISH的单元中,统计95100和9094的学生个数并放在内部RAM的GRADA和GRADB中。匠帽孕逃纽谎卤誓睦姻态蚁糯楔盎商混皿预酿饥嵌秋限蔚怕精露浸赦塑殴no4汇编语言程序设计4no4汇编语言程序设计428 ORG 0600HENGLISH XDATA 1000H GRADA DATA 20H GRADB DATA 21H MOV GRADA,#00H MOV GRADB,#00H MOV R2,#0C8H MOV DPTR,#ENGLISH LOO

21、P:MOVX A,DPTR CJNE A,#5FH,LOOP1 LOOP1:JNC NEXTA CJNE A,#5AH,LOOP2 LOOP2:JC NEXT INC GRADB SJMP NEXT NEXTA:INC GRADA NEXT:INC DPTR DJNZ R2,LOOP SJMP $ END另馆剃峦孝茹泡遭辣缄魏潮礁砒宽多每翔犬正围怕蔫酸躇谎肩陌苔妓挂场no4汇编语言程序设计4no4汇编语言程序设计429(2)使用变址寻址的转移指令JMPA+DPTR实现多分支转移。设置一个转向各分支程序的转移指令表,表首地址送入DPTR。根据给定条件可得序号,送入累加器A,这样可设计出如下多分支

22、程序。RLA;序号2MOVDPTR,TAB;DPTR表首地址JMPA+DPTRTAB:AJMPROUT0;转向分支程序0AJMPROUT1;转向分支程序1AJMPROUTN;转向分支程序N舞坯甄漆翘促侯显铡邦恳庞莉萍契批芽孩盖秉痞峙进位典秒循哦埂忙坊粹no4汇编语言程序设计4no4汇编语言程序设计4304.4.1循环程序设计一、循环程序占票晓打影纬腔逛曹惧耿贝辉渔凿征歧挠阀釜孝朔敞蛙膘涪投喻郝臃趁直no4汇编语言程序设计4no4汇编语言程序设计431循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段

23、,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。癸娠吴毗凉远诫闯泄酞闽防屹伙符笆惭胺刘伊憾翘嫁翘光溜蜀丝杉织棱刑no4汇编语言程序设计4no4汇编语言程序设计432例12:工作单元清零。在应用系统程序设计时,有时经常需要将存储器中各部分地址单元作为工作单元,存放程序执行的中间值或执行结果,工作单元清零工作常常放在程序的初始化部分中。设有50个工作单元,其首址为外部存储器8000H单元,则其工作单元清零程序如下:禾鹅象析苛压间暗

24、绊韧疟洗燕钳浙照拉格藐柿找量叭镑荤蒂忱渊他脂回轴no4汇编语言程序设计4no4汇编语言程序设计433CLEAR:CLRAMOVDPTR,8000H;工作单元首址送指针MOVR2,#50;置循环次数CLEAR1:MOVXDPTR,AINCDPTR;修改指针DJNZR2,CLEAR1;控制循环RET阑殉寞投倒泞退啡肃也评篓腑兑性猜畦枣旗垃傍吗婿蕉卧邻屉川虚酌壮蕾no4汇编语言程序设计4no4汇编语言程序设计434例13设在内部RAM的BLOCK单元开始处有长度为LEN个的无符号数据块,试编一个求和程序,并将和存入内部RAM的SUM单元(设和不超过8位)。BLOCKEQU20HLENEQU30HSU

25、MEQU40HSTART:CLRA;清累加器AMOVR2,LEN;数据块长度送R2MOVR1,BLOCK;数据块首址送R1LOOP:ADDA,R1;循环加法INCR1;修改地址指针DJNZR2,LOOP;修改计数器并判断MOVSUM,A;存和RET狐妻咏吉蜒真臻吝则访鬃业整白馆野专精袒舟僻坐锄获拣否叁休戳贴诲也no4汇编语言程序设计4no4汇编语言程序设计435图查找程序流程图NYNR0(R0)+1N0FFH结束开始R0MR164H(R1)-1=0?(R0)=a?N(R0)Y例查找程序。设在以M为起始地址的内部RAM中连续存放有100个单字节数,试编一程序查找一个为a的数,找到后把其地址送N单

26、元,若这个数不存在,则把FFH送N单元。解:使用比较指令查找,编写成循环程序,其流程图如图5.9所示,程序设计如下:赎婉谰折灾哮审谍十号漫拧轰茁脾斤冯冀干窿诱咋肤岸稿寒挛踢圭氢贾蝉no4汇编语言程序设计4no4汇编语言程序设计436ORG1800HSTART:MOVR0,#MMOVR1,#64HLP1:CJNER0,#a,LP2;比较,不相等转移MOVN,R0 ;找到,N(R0)SJMPLP3LP2:INCR0DJNZR1,LP1;(R1)-1=/0则转移MOVN,#0FFH;未找到,N0FFHLP3:SJMP$END果宛祁隙撕悯参心惕娥捅裤厕蔡宴丝膜蟹弹逝栅敛钻如沾滓来锭扦霄慰窥no4汇编语

27、言程序设计4no4汇编语言程序设计437 ORG 0300HLEN DATA 20HMAX DATA 22HADDR DATA 23H MOV MAX,#00H MOV R0,#ADDR LOOP:MOV A,R0 CJNE A,MAX,NEXT1NEXT1:JC NEXT MOV MAX,A NEXT:INC R0 DJNZ LEN,LOOP SJMP $ END例已知内部RAMADDR为起始地址的数据块内数据是无符号数,块长在LEN单元内。编程求出最大值并存入MAX单元。硷粘日藏疑宦留庭抵紊肛多苑韩栽戍治鞘殴剧甩蚤触侨条巡癣腻屎慌机私no4汇编语言程序设计4no4汇编语言程序设计438采用

28、多重循环程序,即在一个循环体中又包含了其它的循环程序,这种方式是实现延时程序的常用方法。使用多重循环时,必须注意:(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。二、多重循环菠固帐肇轴巾哗折易厨达垦震太拱撩狠份肩妥桌盂澈震则俄盲朔涉末添卷no4汇编语言程序设计4no4汇编语言程序设计439双重循环程序设计双重循环程序设计延时程序设计延时程序设计 延时程序在单片机汇编语言程序设计中使用非常广泛,所谓延延时时,就是让CPU做一些与主程序功能无关的操作(例如将一个数字逐次减1直到为0)来消耗掉CPU的时间。 由于我们知道CPU执行

29、每条指令的准确时间,因此执行整个延时程序的时间也可以精确计算出来。也就是说,我们可以写出延时长度任意而且精度相当高的延时程序。温葵蓟聂贰彤势乞神馈涛躇嘴瞎铸洛沮版售辞盔纂郝埠巳蜕培腔核咨墓缘no4汇编语言程序设计4no4汇编语言程序设计440 例例 设计一个延时1 s的程序,设单片机时钟晶振频率为fosc=6 MHz。 (1) (1) 题意分析。题意分析。 设计延时程序的关键是计算延时时间。延时程序一般采用循环程序结构编程,通过确定循环程序中的循循环环次次数数和和循循环环程程序序段段两个因素来确定延时时间。 T机器=12T时钟=2 s 泞围款涪威申酶僳涎普梗封颁贸蛇袁伴几渠因稿淘察稀厦漱寺中穴

30、编舰晶no4汇编语言程序设计4no4汇编语言程序设计441DELAY1:MOV R3,#0FFH DEL2: MOV R4,#0FFH DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 经查指令表得到:指令MOV R4,#0FFH、NOP、DJNZ的执行时间分别为2 s、2 s和4 s。 承武杖膘赦狙杰傻胀阑昨赁徐佬粘牟拒略抱猜简峻八反令腕签潮倡辕耙沂no4汇编语言程序设计4no4汇编语言程序设计442延时程序段为双重循环,下面分别计算内循环和外循环的延时时间。内循环:内循环的循环次数为255(0FFH)次,循环为以下两条指令:NOP;2sDJNZR4,DEL1;4s内循

31、环延时时间为:255(2+4)=1530s。外循环:外循环的循环次数为255(0FFH)次,循环内容如下:MOVR4,#0FFH;2s1530us内循环;1530sDJNZR3,DEL2;4s钒垛丢否困汁粕柿却超螺枪苹瞒饿诫镑酗煌崩婶乱碟绒伦澎洛仔泅扼苫绦no4汇编语言程序设计4no4汇编语言程序设计443外循环一次时间为1530s+2s+4s=1536s,循环255次,另外加上第一条指令MOVR3,#0FFH;2s的循环时间2s,因此总的循环时间为2s+(1530s+2s+4s)255=391682s392ms以上是比较精确的计算方法,一般情况下,在外循环的计算中,经常忽略比较小的时间段,例

32、如将上面的外循环计算公式简化为1530s255=390150s390ms样沟询澈咐贬玩手岂宜霓惧熊痹严头仔恼磐养癣积填笼跨幽售贸切来凑龄no4汇编语言程序设计4no4汇编语言程序设计444了解了延时时间的计算方法,本例我们使用三重循环结构。内循环选择为1ms,第二层循环达到延时10ms(循环次数为10),第三层循环延时到1s(循环次数为100)。程序流程图如图所示。顷顺公暴镑刃灸褒乏定让泼苯祝曹屑侵盔捣突屉剧褒汛萌唉柯炊咐而叠蹦no4汇编语言程序设计4no4汇编语言程序设计445纯噪拽寅俭卷钻溅妈跑辱佣掳屉愁典锡赦播谷痞鸵谆蛊专旅缕温玲巾晶椅no4汇编语言程序设计4no4汇编语言程序设计446

33、DELAY:MOV R0,#100;延时1s的循环次数DEL2: MOV R1,#10;延时10ms的循环次数DEL1: MOV R2,#7DH;延时1ms的循环次数DEL0: NOPNOPDJNZ R2,DEL0DJNZ R1,DEL1DJNZ R0,DEL2(2)汇编语言源程序段一般情况下,延时程序均是作为一个子程序段使用,不会独立运行它,否则单纯的延时没有实际意义。桶窜阮碑剁弥阀促薯伦坑交栈号及肆符宵妖避拍摄谷拘显割鞋闯扬炭七玄no4汇编语言程序设计4no4汇编语言程序设计447(3)程序说明本例中,第二层循环和外循环都采用了简化计算方法,编程关键是延时1ms的内循环程序如何编制。首先确

34、定循环程序段的内容如下:NOP ;2sNOP;2sDJNZR2,DEL0;4s内循环次数设为count,计算方法如下式:(一次循环时间)count=1ms从而得到count=1ms/(2s+2s+4s)=125=7DH洼薄份灼努舱懊拱湛小鹃好够耗倘残饭下苟噶长牙即涧掳婴候贷苦霄扣太no4汇编语言程序设计4no4汇编语言程序设计448本例提供了一种延时程序的基本编制方法,若需要延时更长或更短时间,只要用同样的方法采用更多重或更少重的循环即可。值得注意的是,延时程序的目的是白白占用CPU一段时间,此时不能做任何其它工作,就像机器在不停地空转一样,这是程序延时的缺点。仓捐求糟刺岳征雹沾哉牛箍殿种陆滞

35、戒荤炎米贡侦蛛八设直水皮渐如月红no4汇编语言程序设计4no4汇编语言程序设计4494.4.2查表程序设计查表程序是一种常用程序,它广泛使用于LED显示控制、数值计算、转换等功能程序中,这类程序具有简单、执行速度快等特点。查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中,这时自变量值为单元地址,相应的函数值为该地址单元中的内容。查表,就是根据变量X在表格中查找对应的函数值Y,使Y=f(X)。伯康划梧晤猖榆毙甄乳阵纽奄怠讳瞅戚施杯馆显猖铂汲铣快播脖瓤酷卒骏no4汇编语言程序设计4no4汇编语言程序设计450MCS-51指令系统中,有两

36、条查表指令:MOVCA,A+PCMOVCA,A+DPTR蒙暗杉访塘济呈玖醒这诫喜捣离皱属袁加响欣曝侣汛蒸嘶掌勒裸薯睬移例no4汇编语言程序设计4no4汇编语言程序设计451例在程序中定义一个09的平方表,利用查表指令找出累加器A=05H的平方值。(1)题意分析。所谓表格是指在程序中定义的一串有序的常数,如平方表、字型码表、键码表等。因为程序一般都是固化在程序存储器(通常是只读存储器ROM类型)中,因此可以说表格是预先定义在程序的数据区中,然后和程序一起固化在ROM中的一串常数。巳曼殿掐藤寸饺均加脆虾寐守狱推卤吠饲嘻万铁祟零慷卢蠢绘非诈荚兆航no4汇编语言程序设计4no4汇编语言程序设计452查

37、表程序的关键是表格的定义和如何实现查表。(2)汇编语言源程序。ORG0000HMOVDPTR,#TABLE;表首地址DPTR(数据指针)MOVA,#05 ;05AMOVC A,A+DPTR ;查表指令,25A,A=19HSJMP$;程序暂停TABLE: DB0,1,4,9,16,25,36,49,64,81;定义09平方表END碟岂往妨戏诊妻怔皋嫩画邮缓逻沙援伺宋狄醚甄纽厦鸭堵郊草剥箔铺糜藤no4汇编语言程序设计4no4汇编语言程序设计453(3)程序说明。从程序存储器中读数据时,只能先读到累加器A中,然后再送到题目要求的地方。单片机提供了两条专门用于查表操作的查表指令:MOVCA,A+DPT

38、R ;(A+DPTR)AMOVCA,A+PC;PC+1PC,(A+PC)ADPTR为数据指针,一般用于存放表首地址。用指令MOVCA,A+PC实现查找平方表的源程序如下:检挡质朽丁擞软慎帘没臆偿库俐证迸兵妄篙煎胚郸滞抗棉敖比吾酞泄邦太no4汇编语言程序设计4no4汇编语言程序设计454ORG0000HMOVA,#05;05AADDA,#02;修正累加器A的值,修正值为查表指令距离表格首地址MOVC A,A+PC;25ASJMP $TABLE:DB0,1,4,9,16,25,36,49,64,81;定义09平方表END纸眠策天议筒茫出集募辨聚伐韩薛蹄眨侈奏奉值凉苏羔蚌烛忌撤镇芒控朱no4汇编语言

39、程序设计4no4汇编语言程序设计455例已知R0低4位有一个十六进制数,利用查表指令找出相应的ASCII码。ORG0000HMOV A,R0ANL A,#0FHADDA,#03HMOVCA,A+PCMOV R0,ASJMP$TABLE:DB0,1,FEND筒粮助蚂披啄延奏机辅胶醒俏娩驮桑怠呼甩癸拓华草鲸洁骏啪掏盔上络昌no4汇编语言程序设计4no4汇编语言程序设计4564.5子程序设计一、子程序的概念通常把这些基本操作功能编制为程序段作为独立的子程序,以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,最后执行返回

40、指令并返回到原来的程序继续执行下去。见侯华倍膛芥奏龙灯咖敦蔑魂溺厘君偶溪恳蟹砂蒋贮绵免晶君彦氯畔呛玄no4汇编语言程序设计4no4汇编语言程序设计457二、子程序的调用调用子程序的指令有“ACALL”和“LCALL”,执行调用指令时,先将程序地址指针PC改变(“ACALL”加2,“LCALL”加3),然后PC值压入堆栈,用新的地址值代替。执行返回指令时,再将PC值弹出。繁慢潘羊虹盾盂杭嚣魏此设深噪校奠鸟绍旅司讨近任赋拟去颅面赔藉钮卜no4汇编语言程序设计4no4汇编语言程序设计458例11编程使P1口连接的8个LED按下面方式显示:从P1.0连接的LED开始,每个LED闪烁10次,再移向下一个

41、LED,同样闪烁10次,循环不止。(1)题意分析。甭糕樟瀑钱俐豪揖硷汇净仍楼甥准赡搅蹿伍铜佃露骑颅频疯转孺洼贵特燃no4汇编语言程序设计4no4汇编语言程序设计459(2)汇编语言源程序。ORG0000HMAIN:MOV A,#01H;送显示初值LP:MOV R0,#10;送闪烁次数LP0:MOV P1,A;点亮LEDLCALLDELAY;延时MOV P1,#00H;熄灭灯LCALLDELAY;延时DJNZR0,LP0;闪烁次数不够10次,继续RLA;否则A左移,下一个灯闪烁SJMP LP;循环不止膜慎父乓钞期衅踪切狸大糠棠椰篷勒侗桃吩跃兽蜀拧樟寿淮讽粉是佛咳椎no4汇编语言程序设计4no4汇

42、编语言程序设计460DELAY:MOVR3,#0FFH;延时子程序DEL2:MOVR4,#0FFHDEL1:NOPDJNZR4,DEL1DJNZR3,DEL2RET挞萝侍沥仟刺敢虽烈蛮频玖癌议涧崭适狄萍蚀豆醛虽拉涛狂芝市色勺青艘no4汇编语言程序设计4no4汇编语言程序设计461(3)程序说明。子程序调用和返回过程。在上例中,MAIN为主程序,DELAY为延时子程序。当主程序MAIN需要延时功能时,就用一条调用指令ACALL(或LCALL)DELAY即可。子程序DELAY的编制方法与一般程序遵循的规则相同,同时也有它的特殊性。子程序的第一条语句必须有一个标号,如DELAY,代表该子程序第一个语

43、句的地址,也称为子程序入口地址,供主程序调用;子程序的最后一条语句必须是子程序返回指令RET。厄翔堪动夜霞然苫舒豺狮慧污铀施韧迁燥赞驼礁扳耗月铝择阮药前伴汇描no4汇编语言程序设计4no4汇编语言程序设计462例用程序实现c=a2+b2,设a,b均小于10。a存放在31H单元,b存放在32H单元,把c存入34H和33H单元。(和要求为BCD码)。解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法,主程序和子程序编写如下:排夺杀翁傣靳骏溉战食匪晰一僧些凝迷罗把匆蓝搏盈稿邱椽姨廓傻新袍嗓no4汇编语言程序设计4no4汇编语言程序设计463主程序:主程序: ORG

44、 0000H MOV SP,#3FH MOV A,31H ;取;取aLCALL SQR ;求求a方方 MOV R1,AMOV A,32H ;取;取bLCALL SQR ; 求求b方方ADD A,R1 ; 求和求和DA A ;调整;调整MOV 33H,A CLR AADDC A,0 MOV 34H,A SJMP $ 子程序:子程序: ORG 0030HSQR:INC A MOVC A,A+PC RETTAB: DB 00H,01H,04H DB 09H 16H,25H, DB 36H,49H64H,81H END缆吗窃狼翻嘻枯层馋披制担得半碎阻扦桃搪丹零凿耸听但卉赤猖干痰袍糖no4汇编语言程序设计4no4汇编语言程序设计464小 结 n1、程序设计的关键在于指令熟悉和算法、程序设计的关键在于指令熟悉和算法(思路思路)正确、正确、清晰,对复杂的程序应先画出流程图。只有多做练习多清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。上机调试,熟能生巧,才能编出高质量的程序。n2、本章应掌握顺序程序、分支程序、循环程序、子程、本章应掌握顺序程序、分支程序、循环程序、子程序等各类程序的设计方法。序等各类程序的设计方法。饵坷沼颁涡殴萌结嗓芍昧条帚己慎捻孜其才壁粗抑鹅撵搐窍桩造刮径规仇no4汇编语言程序设计4no4汇编语言程序设计465

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 市场营销

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号