欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    单片机汇编语音程序设计.ppt

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

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

    单片机汇编语音程序设计.ppt

    ,MCS-51系列单片机汇编语言程序设计,MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。,连接/定位器L51,汇编语言源程序,汇编器A51,符号转换程序OHS51,绝对地址目标程序.BIN,C语言程序,浮动地址目标程序,编译器C51,HEX,两种语言源程序转换成目标程序,汇编:将汇编语言源程序转换成机器语言目标程序的过程称为汇编。汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件称为汇编程序。,汇编方法1.手工汇编:人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。2.机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。,MCS-51系列单片机汇编程序常用伪指令,伪指令是放在汇编语言源程序中用于指示汇编程序如何对源程序进行汇编的指令,它不同于指令系统中的指令,指令系统中的指令在汇编程序汇编时能够产生相应的指令代码,而伪指令在汇编程序汇编时不会产生代码,只是对汇编过程进行相应的控制和说明。伪指令通常在汇编语言源程序中用于定义数据、分配存储空间、控制程序的输入输出等。MCS-51汇编语言源程序相对于一般的微型计算机汇编语言源程序结构简单,伪指令数目少,常用的伪指令只有几条。,1起始指令ORG格式:ORG 地址(十六进制表示)这条伪指令放于一段源程序或数据的前面,汇编时用于指明程序或数据从程序存储空间什么位置开始存放。ORG伪指令后的地址是程序或数据的起始地址。例:ORG 1000HSTART:MOV A,#7FH 指明后面的程序从程序存储器的1000H单元开始存放。,2字节定义DB格式:标号:DB 项或项表 DB伪指令用于定义字节数据,可以定义一个字节,也可定义多个字节,字义多个字节时,两两之间用逗号间隔,定义的多个字节在存储器中是连续存放的。定义的字节可以是一般常数,也可以为字符,还可以是字符串,字符和字符串以引号括起来,字符数据在存储器中以ASCII码形式存放。在定义时前面可以带标号,定义的标号在程序中是起始单元的地址。,例:ORG 3000HTAB1:DB 12H,34H DB 5,A,abc汇编后,各个数据在存储单元中的存放情况如下:,3字定义DW格式:标号:DW 项或项表 这条指令与DB相似,但用于定义字数据。项或项表指所定义的一个字在存储器中占两个字节。汇编时,机器自动按高字节在前,低字节在后,即高字节存放在低地址单元,低字节存放在高地址单元。,例:ORG 3000H TAB2:DW 1234H,5678H汇编后,各个数据在存储单元中的存放情况如下:,4保留字节DS格式:标号:DS 数值表达式 该伪指令用在存储器中保留一定数量的字节单元。保留存贮空间主要为以后存放数据。保留的字节单元数由表达式的值决定。,例:ORG 3000H TAB1:DB 12H,34H DS 4H DB 5汇编后,存储单元中的分配情况如下:,5等值指令EQU格式:符号 EQU 项 该伪指令的功能是将指令中的项的值赋予EQU前面的符号。项可以是常数、地址标号或表达式。以后可以通过使用该符号使用相应的项。例:TAB1 EQU 1000H TAB2 EQU 2000H 汇编后TAB1、TAB2分别等于1000H、2000H。程序后面使用1000H、2000H的地方就可以用符号TAB1、TAB2替换。用EQU伪指令对某标号赋值后,该符号的值在整个程序中不能再改变。,6位定义bit格式:符号 bit 位地址 bit该伪指令用于给位地址赋予符号,经赋值后可用该符号代替bit后面的位地址。例:PLG bit F0 AI bit P1.0 定义后,在程序中位地址F0、P1.0就可以通过FLG和AI来使用。,7结束指令END格式:END 该指令放于程序最后位置,用于指明汇编语言源程序的结束位置,当汇编程序汇编到END伪指令时,汇编结束。END后面的指令,汇编程序都不予处理。一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。,汇编语言程序设计步骤,一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标三.建立系统数学模型,确定控制算法和操作步骤四.合理分配存储器单元和了解I/O接口地址,五.编制源程序1.按功能设计程序,明确各程序之间的相互关系2.用流程图表示程序结构和功能,3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改,顺序程序设计例3-1 编程将外部数据存储器的000EH和000FH单元的内容相换。,常用程序结构 顺序程序、分支程序、循环程序、子程序,分析:外部数据存储器的数据操作只能用MOVX指令,且只能和A之间传送,因此必须用一个中间环节作暂存,设用20H单元。用R0、R1指示两单元的低八位地址,高八位地址由P2指示。编程过程如下:,ORG 0000H MOV P2,#0H;送地址高八位至P2口 MOV R0,#0EH;R0=0EH MOV R1,#0FH;R1=OFH MOVX A,R0;A=(000EH)MOV 20H,A;(20H)=(000EH)MOVX A,R1;A=(000FH)XCH A,20H;A=(000EH),(20H)=(000FH)MOVX R1,A MOV A,20H MOVX R0,A;交换后的数送各单元 SJMP$END,例3-3 设变量放在片内RAM的20H单元,其值为00H05H之间,要求编查表程序,查出变量的平方值,并放入片内RAM的21H单元。,ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR;查表 MOV 21H,A SJMP$TAB2:DB 00H,01H,04H,09H,16H,25H END,分析:在程序存储器安排一张平方表,首地址为TAB,以DPTR指向表首址,A存放变量值,利用查表指令MOVC A,A+DPTR,即可求得。表中数据用BCD码存放合乎人们的习惯.,如果平方值为两个字节,程序应如何编。,ORG 0000H MOV A,R2 JNB ACC.7,N;为正数?CPL A;负数变补 INC A MOV R2,A N:SJMP$;结束,分支程序的设计 由条件转移指令构成程序判断框部分,形成分支结构。,单分支程序一个判断决策框,两种分支结构图。,例:求8位有符号数的绝对值。方法:正数不变,负数变补,多分支散转程序的设计 有一类分支程序,它根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这类程序通常利用JMPA+DPTR间接转移指令实现转移。有如下两种设计方法:1.查转移地址表:将转移地址列成表格,将表格的内容作转移的目标地址。2.查转移指令表:将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行,下面用两个例子说明。,1.利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3的内容为0n,处理程序的入口符号地址分别为PR0PRn(n128)。分析:将PR0PRn入口地址列在表格中,每一项占两个单元,PRn在表中的偏移量为2n,因此将R3的内容乘2即得PRn在表中的偏移地址,从偏移地址2n和2n+1两个单元分别取出PRn的高八位地址和低八位地址送DPTR寄存器,用JMP A+DPTR指令(A先清零)即转移到PRn入口执行。,ORG 0000HMOV A,R3;R3AADD A,ACC;A*2MOV DPTR,#TABPUSH ACCMOVC A,A+DPTR;取地址表中高字节MOV B,A;暂存于BINC DPL POP ACCMOVC A,A+DPTR;取地址表中低字节MOV DPL,AMOV DPH,B;DPTR为表中地址CLR A;A=0JMP A+DPTR;转移TAB:DW PR0,PR1,PR2,.,PRn;转移地址表END,TAB,TAB+2,DPH DPL,如 R3=1的操作,02,20,2.利用转移指令表实现转移 例3-8 设有五个按键 0、1、2、3、4其编码分别为3AH、47H、65H、70H、8BH,要求根据按下的键转向不同的处理程序,分别为PR0、PR1/PR2、PR3、PR4,设按键的编码已在B寄存器中,编出程序。,分析:将键码排成表,将键码表中的值和B中的键编码比对,记下在键码表中和B中的键编码相等的序号,另安排一个转移表,安排AJMP指令(机器码),因每条AJMP指令占二字节,将刚才记下的序号乘2即为转移表的偏移地址,利用JMP A+DPTR执行表内的AJMP指令,从而实现多分支转移,,设JPT的地址为001AH、PR0入口地址为0110H,求AJMP PR0的机器码 0000 0001 0001 0000 001 00001 0000(2110h),AJMP PR0的机器码为2110H,PR1入口地址为0220H AJMP PR1的机器码为4120H,转移指令表JPT的内容如下所示。设B=65H,键值为2:,转移指令表JPT,键码表TAB,65H,A,2,B,2A,A=1,A=2,A=0,65H,65H,ORG 0000H MOV DPTR,#TAB;置键码表首址 MOV A,#0;表的起始位的偏移量为0 NEXT:PUSH ACC MOVC A,A+DPTR;A=键码表的编码 CJNE A,B,AGAN;将B中值和键码表的值比较 POP ACC RL A;如相等,序号乘2得分支表内偏移量 MOV DPTR,#JPT;置分支表首址 JMP A+DPTR AGAN:POP ACC;不相等比较下一个 INC A;序号加1 CJNE A,#5,NEXT SJMP$;键码查完还没有B中按键编码程序结束 JPT:AJMP PR0;分支转移表 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4 TAB:DB 3AH,47H,65H,70H,8BH;键码表 END,当程序中的某些指令需要反复执行多次时,采用循环程序的方式,这样会使程序缩短,节省存储单元(并不节省执行时间)。循环次数的控制,有两种控制方式:第一种方法 先判断再处理即先判断满不满足循环条件,如不满足,就不循环,多以循环条件控制。第二种方法 先处理再判断,即循环执行一遍后,下一轮还需不需要进行,多以计循环次数控制。循环可以有单重循环和多重循环,在多重循环中,内外循环不能交叉,也不允许外循环跳入内循环。下面通过几个实例说明循环程序的设计方法。,循 环 程 序 设 计,例 3-9 设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHz。分析:延时时间与两个因素有关:晶振频率和循环次数。由于晶振采用6MHz,一个机器周期是2s,用单循环可以实现1ms延时,外循环10次即可达10ms延时。内循环如何实现1ms延时呢,程序中可先以未知数MT代替,从附录A查每条指令机器周期计算程序的执行时间。,ORG 0020H MOV R0,#0AH;外循环10次 DL2:MOV R1,#MT;内循环MT次 DL1:NOP NOP;空操作指令 DJNZ R1,DL1 DJNZ R0,DL2 RET,内循环DL1到指令DJNZ R1,DL1的计算:MT=125=7DH(1+1+2)2SMT=1000S,将7DH代入上面程序的MT,计算总的延时时间:1+1+(1+1+2)125+28102S=10062S=10.062mS,若需要延时更长时间,可以采用多重循环。,内,外,例3-10 编写多字节数10程序。内部RAM以20H为首址的一片单元中存放着一个多字节符号数,字节数存放在R7中,存放方式为低位字节在低地址,高位字节在高地址,要求乘10后的积仍存放在这一片单元中。分析:用R1作该多字节的地址指针,部分积的低位仍存放于本单元,部分积的高位存放于R2,以便和下一位的部分积的低位相加。以R7作字节数计数。编程如下:,345 H 0A H 32 H 28 H 2B H 1E H 20B H,ORG 0000H CLR C;清进位位C MOV R1,#20H;R1指示地址 MOV R2,#00H;存积的高八位寄存器R2清0S10:MOV A,R1;取一字节送A MOV B,#0AH;10送B PUSH PSW MUL AB;字节乘10 POP PSW ADDC A,R2;上次积高八位加本次积低八位 MOV R1,A;送原存储单元 MOV R2,B;积的高八位送R2 INC R1;指向下一字节 DJNZ R7,S10;未乘完去SH10,否则向下执行 MOV R1,B;存最高字节积的高位 SJMP$,MCS-51单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算。这种用软件替代硬件的方法,可以大大简化甚至完全不用硬件,但比硬件要多花运算时间。例3-14 编写一程序,以实现图3-4中的逻辑运算电路。,位操作程序设计,其中,P1.1和P2.2分别是端口线上的信息,TF0和IE1分别是定时器定时溢出标志和外部中请求标志,25H和26H分别是两个位地址,运算结果由端口线P1.3输出。,硬件逻辑运算电路,程序如下:START:MOV C,P2.2 ORL C,TF0 ANL C,P1.1 MOV F0,C MOV C,IE1 ORL C,/25H ANL C,F0 ANL C,/26H MOV P1.3,C SJMP$,例3-15 设累加器A的各位ACC.0ACC.7分别记为X0X7,编制程序用软件实现下式:Y=X0X1X2+X0 X1 X2+X0X1X2X3+X4 X5 X6X7,X0 BIT ACC.0 X1 BIT ACC.1 X2 BIT ACC.2 X3 BIT ACC.3 X4 BIT ACC.4 X5 BIT ACC.5 X6 BIT ACC.6 X7 BIT ACC.7,ORG 0000H MOV C,X0 ANL C,X1 ANL C,X2 MOV 00H,C;X0X1X2 MOV C,X0 ANL C,/X1 MOV 01H,C;X0X1 ANL C,/X2 ORL C,00H MOV 00H,C MOV C,X2 ANL C,01H,ANL C,X3;X0X1X2X3ORL C,/00HMOV 00H,C MOV C,X7ANL C,/X6ANL C,/X5ANL C,/X4;X4 X5 X6 X7ORL C,00H;最终结果 YCSJMP$,子程序是构成单片机应用程序必不可少的部分,通过ACALL和LCALL两条子程序调用指令,可以十分方便地用来调用任何地址处的子程序。子程序节省占用的存储单元,使程序简短、清晰,善于灵活的使用子程序,是程序设计的重要技巧之一。子程序必须以RET指令结尾.在调用子程序时,有以下几点应注意:,子程序设计,当一段程序需多次应用,或为多人应用时,这段程序编为子程序。,1)保护现场。如果在调用前主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有其他用途,就应先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。2)设置入口参数和出口参数。用之前主程序要按子程序的要求设置好地址单元或存储器(称为入口参数),以便子程序从指定的地址单元或存储器获得输入数据;子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为出口参数),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。,3)子程序中可包括对另外子程序的调用,称为子程序嵌套。,例3-16 用程序实现c=a2+b2,设a,b均小于10。a存放在31H单元,b存放在32H单元,把c存入34H和33H单元。(和要求为BCD码)。解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法,主程序和子程序编写如下:,主程序:ORG 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 MOV A,#0ADDC 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,小 结,1、程序设计的关键在于指令熟悉和算法(思路)正确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。2、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。3、本章应掌握顺序程序、分支程序、循环程序、子程序等各类程序的设计方法,并能熟练应用查表技术简化程序的设计。,

    注意事项

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

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




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开