欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    MCS-51单片机的程序设计.ppt

    • 资源ID:6512350       资源大小:543KB        全文页数:38页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MCS-51单片机的程序设计.ppt

    第五章 MCS-51单片机的程序设计,(6学时),5.1 程序设计基本方法5.1.1 单片机程序设计语言5.1.2 程序设计步骤5.1.3 程序流程图5.2 汇编语言程序设计的基本概念5.2.1 MCS-51伪指令5.2.2 汇编语言程序的格式5.2.3 汇编语言程序的汇编5.3 单片机汇编语言与C51语言的程序设计,5.1.1单片机程序设计语言,设计语言基本分类:机器语言汇编语言高级语言,MCS-51系列单片机的汇编语言和C51程序设计。,5.1.2 程序设计步骤,(1)分析题意,明确要求;(2)建立思路,确定算法;(3)编制框图,绘出流程;(4)分配内存工作区及相关端口地址。(5)编写源程序及相关注释,上机调试;(6)固化程序。,5.1.3 程序流程图,画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的 流向。根据条件在两个可供选择的程序 处理流程中做出判断,选择其中的一条 程序处理流程。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。与程序流程图的其它部分相连结的入口 或出口。,5.2.1 MCS-51伪指令,伪指令是不能执行的指令,在汇编时起控制作用。,(1)汇编起始命令格式:ORG 16位地址(2)汇编结束命令格式:ENDEND是汇编语言源程序的结束标志。,例p107:ORG 1000HSTART:MOVR0,2FH MOVR2,#00H MOVA,R0 MOVR3,A INCR3 SJMPNEXT LOOP:INCR0 CJNER0,#44H,NEXT INCR2 NEXT:DJNZR3,LOOP MOV2AH,R2 SJMP$END,X,(3)等值命令格式:字符名称 EQU 数或汇编符号,如:TEMPEQUR4 XEQU16H DAEQU1456H下面语句可以使用这些符号MOVA,TEMP;MOVA,R4MOVA,X;MOVA,16HLCALLDA;LCALL 1456H,5.2.1 MCS-51伪指令,(4)数据地址赋值命令 格式:字符名称 DATA 表达式(5)定义字节指令 格式:标号:DB 8位二进制数表,如:ORG0200H L1:DB 45H,67H,50,80H,111B,”B”,(6)定义字命令 格式:标号:DW 16位二进制数表,如:ORG0300H L1:DW 1067H,6068H,110;先高八位,后低八位存放,(7)定义空间命令 格式:标号:DS 表达式(8)位地址符号命令 格式:字符名称 BIT 位地址MARKEQU20HMARK1BIT MARK.0MARK2BITMARK.7SETBMARK1CLRMARK2CPLMARK1ANLC,MARK2,5.2.2 汇编语言程序的格式,汇编语言程序的每一句程序一般由四部分组成,即标号、操作码、操作数和注释。,格式:标号:操作码 操作数;注释,标号判断:,课堂知识巩固:,B3,4A,DA,DELY,ADD,LOOP,A+B,ad,END,5.2.3 汇编语言程序的汇编,人工汇编机器汇编,5.3.1 16位加减法程序,例5-1:已知两个16位二进制数分别存放在R1R0和R3R2中,试求其和,并将结果存入R1R0中。,加 数:R1 R0 被加数:R3 R2 结 果:R1 R0,分析:,汇编语言程序:ORG0000HCLRCMOV A,R2ADDA,R0MOV R0,AMOV A,R3 ADDCA,R1MOV R1,ASJMP$END,C51语言程序:void main(void)int bdata x,y;x=x+y;,5.3.2 顺序程序,特点:按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。,其中F、X、Y、Z均为位变量,依次存在以30H为首址的位寻址区中。FBIT 30HXBIT31HYBIT32HZBIT 33HORG0000HSJMPMAINORG0040HMAIN:MOV C,Y;YCORLC,Z;Y+ZCANLC,X;X(Y+Z)CMOVF,C;CFSJMP$END,例5-2:编写逻辑运算程序,功能为 F=X(Y+Z)。,分析:,void main(void)bit bdata F,X,Y,Z;F=X,5.3.2 顺序程序,ORG0000HSJMPMAINORG0040HMAIN:MOV C,P2.0;P2.0CORLC,P1.0;P2.0+P1.0CANLC,P1.1;(P2.0+P1.0)P1.1C MOVP2.0,C;CP2.0SJMP$END,例5-3:编写逻辑运算程序,功能为。,分析:,sbitP1_0=P10;/*定义P1.0、P1.1、P2.0*/sbitP1_1=P11;sbitP2_0=P20;void main(void)P2_0=P1_1,5.3.3 分支程序,根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。,例5-5:假设内部RAM 40H与41H单元中有两个无符号数,现要求找出其中的较大者,并将其存入40H单元中,较小者存入41H单元。,ORG1000HMOVA,40HCLRCSUBBA,41HJNCEXITXCHA,41HMOV40H,AEXIT:SJMPEXITEND,5.3.3 分支程序,执行一条判断指令时,只能形成两路分支。,注意:,根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。,void main(void)unsigned char data*x1,*x2;unsigned char data temp;x1=0 x40;x2=0 x41;if(*x1*x2)temp=*x2;*x2=*x1;*x1=temp;,例5-5:假设内部RAM 40H与41H单元中有两个无符号数,现要求找出其中的较大者,并将其存入40H单元中,较小者存入41H单元。,单分支程序,5.3.3 分支程序,例5-6:已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋值,结果存入31H单元。,三分支程序,汇编语言程序,XEQU30HYEQU31HORG100HMOVA,XJZSAVE;X=0JNBACC.7,PPS;X0MOVA,#-1;X0SJMPSAVEPPS:INCASAVE:MOVY,AEND,void main(void)char data*x,*y;x=0 x30;y=0 x31;if(*x0)*y=*x+1;else if(*x=0)*y=0;else*y=-1;,例5-6:已知30H单元中有一变量X,要求编写一程序按下述要求给Y赋值,结果存入31H单元。,5.3.4 循环程序,循环程序一般由如下四部分组成:初始化部分:用来设置循环初值,包括预置变量、计数器和数据指针初值,为实现循环做准备。循环处理部分:要求重复执行的程序段,是程序的主体,称为循环体。循环体既可以是单个指令,也可以是复杂的程序段,通过它可完成对数据进行实际处理的任务。循环控制部分:控制循环次数,为进行下一次循环而修改计数器和指针的值,并检查该循环是否已执行了足够的次数。也就是说,该部分用条件转移采控制循环次数和判断循环是否结束。循环结束部分:分析和存放结果。,5.3.4 循环程序,初始化部分 循环处理部分 循环控制部分 循环结束部分,5.3.4 循环程序,根据题目要求,编写统计数据长度子程序ADUP,同时编写主程序,调用ADUP子程序。,例5-7:试编写统计数据区长度的程序。设数据区从内部RAM 30H单元开始,该数据区以0结束,统计结果送入2FH单元。,分析:,统计数据长度子程序如下:ORG 0400HADUP:MOV2FH,#0;对统计数据区长度数清零MOVR0,#30H;置数据区首址ALOP:MOVA,R0;取数据内容JZLP1;判断是否为结束标志0,若数据区结束,则跳转到LP1INC2FH;数据区未统计完毕,长度加一INCR0;修改数据区地址SJMPALOP LP1:RET;子程序返回,主程序如下:ORG0000HSJMPMAIN;单片机程序复位地址,程序无条件跳转到MAINORG0040HMAIN:;主程序入口地址LCALLADUP;调用子程序SJMP$;原地等待END,5.3.4 循环程序,void main(void)char idata*x;char data*y;x=0 x30;y=0 x2F;while(*x!=0)*y+=1;x+=1;,例5-7:试编写统计数据区长度的程序。设数据区从内部RAM 30H单元开始,该数据区以0结束,统计结果送入2FH单元。,5.3.4 循环程序,根据题目要求,编写延时程序首先必须要知道晶振的频率,然后计算机器周期。fosc=12MHz T机器=121/fosc=1sMCS-51单片机对每一条指令都给出了它的指令周期数。DY10ms:MOV R6,#20;置外循环次数DLP1:MOV R7,#250;置内循环次数DLP2:DJNZ R7,DLP2;2机周250=500机周 DJNZ R6,DLP1;500机周20=10000机周 RET 1+1+(2机周250)+220+21s/机周=10063s10ms,例5-8:编写延时10ms子程序,fosc=12MHz。,分析:,说明:MOV Rn指令为1个机器周期;DJNZ指令为2个机器周期;RET指令为2个机器周期;,循环程序设计,延时程序中延时时间的设定:,源程序:指令周期DELAY:MOV R6,#(X)H 1个T机器 DEL2:MOV R7,#(Y)H 1个T机器 DEL1:DJNZ R7,DEL1 2 个T机器 DJNZ R6,DEL2 2个T机器 RET 2个T机器,指令周期、机器周期T机器与时钟周期T时钟的关系:T机器=12T时钟=121/fosc=1s(假设晶振频率fosc为12MHz),延时时间的简化计算结果:2 X Y,延时时间怎样计算?,若想延时50ms,只需修改计数初始值,即 2 125200s=50ms,循环程序设计,延时程序中延时时间的设定:,源程序:指令周期DELAY:MOV R3,#(X)H 2个T机器 DEL2:MOV R4,#(Y)H 2个T机器 DEL1:NOP 1个T机器 NOP 1个T机器 DJNZ R4,DEL1 2 个T机器 DJNZ R3,DEL2 2个T机器 RET,指令周期、机器周期T机器与时钟周期T时钟的关系:T机器=12T时钟=121/fosc=1s(假设晶振频率fosc为12MHz),延时时间的简化计算结果:(1+1+2)X Y,若想延时100ms,只需修改计数初始值,即(1+1+2)125200s=100ms,5.3.4 循环程序,根据C51的数据类型规定,使用指针类型定义x,y,定位于片内RAM中。程序如下:void delay_10ms(void)unsigned char i,j;/*i,j定位于片内RAM中*/for(i=0;i 13;i+)/*i,j的循环次数由延时时间确定*/for(j=0;j250;j+);,例5-8:编写延时10ms子程序,fosc=12MHz。,分析:,5.3.4 循环程序,使用KEIL C的C51编译器和连接软件将delay()延时子程序编译后,可得对应的反汇编程序如下,C:0 x0003 E4 CLR AC:0 x0004 FF MOV R7,AC:0 x0005 E4 CLR AC:0 x0006 FE MOV R6,AC:0 x0007 0E INC R6C:0 x0008 BE18FC CJNE R6,#0 xFA,C:0007C:0 x000B 0F INC R7C:0 x000C BF64F6 CJNE R7,#0 x0D,C:0005C:0 x000F 22 RET,例5-8:编写延时10ms子程序,fosc=12MHz。,R6 0 xFA(250)R7 0 x0D(13),5.3.5 查表程序,表格是事先存放在ROM中的,一般为一串有序的常数。(平方表、字型码),表格可通过伪指令DB来确定。通过查表指令MOVC A,A+DPTR MOVC A,A+PC来实现。当用DPTR作基址寄存器时,查表的步骤分三步:基址值(表格首地址)DPTR;变址值(表中要查的项与表格首地址之间的间隔字节数)A;执行MOVC A,A+DPTR。一般情况下用DPTR作基址寄存器。,5.3.5 查表程序,用DPTR作基址寄存器时,源程序如下:ORG0000H MOVDPTR,#TABLE;表首地址送DPTR MOVA,#05;被查数字5A MOVC A,A+DPTR;查表求平方 SJMP$TABLE:DB 0,1,4,9,16,25,36,49,64,81 END,例5-9:用查表法计算平方。,5.3.5 查表程序,C51源程序如下:unsigned char code table10=0,1,4,9,16,25,36,49,64,81;void main(void)unsigned char i,j;/*i,j定位于片内RAM中*/i=5;j=tablei;,例5-9:用查表法计算平方。,5.3.5 查表程序,用DPTR作基址寄存器时,源程序如下:ORG0100H MOVDPTR,#TABLE;表首地址送DPTR MOVA,#03;被查数字3A MOVC A,A+DPTR;查表求段码 SJMP$TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END,例5-9A:用查表法求数码管显示的段码,5.3.6 散转程序,散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。在C51语言程序设计中,常用switch/case语句处理多路分支的情况。,5.3.6 散转程序,C51源程序如下:假定工作寄存器R7在0区,则对应的内部RAM地址为07H。unsigned char data Opr_data _at_ 0 x07;/定义R7地址switch(Opr_data)case 0:/OPR1对应的程序段break;/转向对应的散转地址人口case 7:/OPR7对应的程序段break;default:break;,例5-10:根据R7的内容,转向各自对应的操作程序(R7=0,转入OPR0;;R7=n,转入OPRn。,5.3.7 子程序,(1)要给每个子程序起一个名字,也就是入口地址的代号。(2)要能正确地传递参数。即首先要有入口条件,说明进入子程序时,它所要处理的数据放在何处。另外,要有出口条件,即处理的结果存放在何处。(3)注意保护现场和恢复现场。,5.3.7 子程序,SQR:PUSHDPH;保护现场,将主程序中DPTR的高八位放入堆栈 PUSHDPL;保护现场,将主程序中DPTR的低八位放入堆栈 MOVDPTR,#TABLE;在子程序中重新使用DPTR,表首地址DPTR MOVC A,A+DPTR;查表 POP DPL;恢复现场,将主程序中DPTR的低八位从堆栈中弹出 POP DPH;恢复现场,将主程序中DPTR的高八位从堆栈中弹出 RETTABLE:DB 0,1,4,9,16,25,36,49,64,81,例5-11:利用子程序的参数传递,计算平方和c=a2+b2(假设c255)。,;子程序:SQR;功能:通过查表求出平方值y=x2;入口参数:x存放在累加器A中;出口参数:求得的平方值y存放在A中;占用资源:累加器A,数据指针DPTR,5.3.7 子程序,ORG0000H;主程序MOVSP,#5FH;设置栈底MOVA,31H;取数a存放到累加器A中作为入口参数LCALLSQR;计算a2MOVR1,A;出口参数平方值存放在A中MOVA,32H;取数b存放到累加器A中作为出口参数LCALLSQR;计算b2ADDA,R1;求和MOV33H,A;存放结果SJMP$,例5-11:利用子程序的参数传递,计算平方和c=a2+b2(假设c255)。,5.3.7 子程序,C51源程序如下:unsigned char a,b,c;/*a,b,c被定义为unsigned char整型数据*/*其中对a,b分别赋初值*/unsigned char func(unsigned char val)return(val*val);/*计算val*val并返回结果*/void main(void)c=func(a)+func(b);,例5-11:利用子程序的参数传递,计算平方和c=a2+b2(假设c255)。,习题5.4,8、9、11、12、14、16,

    注意事项

    本文(MCS-51单片机的程序设计.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开