单片机第3章(1)_第1页
单片机第3章(1)_第2页
单片机第3章(1)_第3页
单片机第3章(1)_第4页
单片机第3章(1)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,华中科技大学文华学院,单片机原理及应用,讲授人:范娟,.,课堂作业,1.指出下列每条指令中源操作数、目的操作数的寻址方式。,(1)MOV2FH,#40H(2)MOVA,R0(3)MOVDPTR,#2020H(4)MOV45H,P0(5)MOVA,R1(6)MOVCA,A+PC(7)JCLOOP,.,2.设RAM40H单元的内容为80H,80H单元内容为47H,P1口的输入状态为0FFH,试判断下列程序执行结果。MOVR0,#40HMOVA,R0MOVR1,AMOVB,R1MOVR1,P1MOVP2,P1,3.试编写1234H-0FA3H的程序段,将结果高8位存入51H,低8位存入50H单元。,.,华中科技大学文华学院,第3章51系列单片机汇编语言程序设计,3.1概述3.2程序设计基本方法3.3子程序设计3.4典型程序设计举例,.,华中科技大学文华学院,概述,彩灯循环设计,.,概述,ORG0000HMAIN:MOVP1,#80H;D7发光MOVP1,#40H;D6发光MOVP1,#20H;D5发光MOVP1,#10H;D4发光MOVP1,#08H;D3发光MOVP1,#04H;D2发光MOVP1,#02H;D1发光MOVP1,#01H;D0发光SJMPMAIN;循环,.,概述,ORG0000HMAIN:MOVA,#80H;初始状态MOVR0,#08;共8位L1:MOVP1,A;D7发光LCALLDEL;延时子程序RRA;状态下移1位DJNZR0,L1;循环判断SJMPMAIN;循环,.,概述,.,概述,汇编语言程序设计的步骤,分析课题,确定解决方案和算法;分配系统资源及存储单元;绘制程序流程图;设计程序,并反复调试和修改。,MCS-51单片机汇编语言程序设计中,常用的伪指令(七条):ORG起始指令DB字节定义指令DW字定义指令DS保留字节指令EQU赋值伪指令BIT位定义指令END结束汇编伪指令,.,程序设计基本方法,汇编语言程序主要的几种程序设计方法:,顺序程序设计:顺序程序也称作简单程序,是一种无分支、循环的直线程序,程序的走向是唯一的,程序的执行顺序与书写顺序完全一致。分支程序设计:利用条件转移指令实现,即根据条件对程序的执行情况进行判断,满足条件遇转移,否则顺序执行。循环程序设计:在程序中需要反复执行的程序段,可以利用条件转移或无条件转换指令来控制程序的执行,避免多次编写。典型循环结构包括四部分:初始化部分、循环处理部分、循环控制部分、循环结束部分。,.,用于判断分支转移的指令有:JZ、JNZ、JC、JNC、JB、JNB、JBC、CJNE、DJNZ、JMPA+DPTR等。另外在该类分支程序的设计中,要设置好判断测试对象,程序转移方向及转移的标志地址。,程序设计基本方法,一、分支程序设计,.,程序设计基本方法,(1)流程图,方法一:,.,程序设计基本方法,ORG0100HSTART:MOVDPTR,#2000HMOVXA,DPTRCLRCSUBBA,30HJZGIVJCNEGMOVA,#01HSJMPGIVNEG:MOVA,#0FFHGIV:MOV40H,AEND,(2)程序清单,.,程序设计基本方法,方法二:,(1)流程图,.,程序设计基本方法,ORG0100HSTART:MOVDPTR,#2000HMOVXA,DPTRCJNEA,30H,CONCLRASJMPGIVCON:JCNEGMOVA,#01HSJMPGIVNEG:MOVA,#0FFHGIV:MOV40H,AEND,(2)程序清单,.,程序设计基本方法,例2某单片机系统有16个键,经键盘扫描得到键码值(00H0FH)存放在R7中,每个键对应着一个处理程序,各入口地址分别为KEY0,KEY1KEYF。试编程实现由键码寻找转移执行处理程序的功能。,方法一:查转移地址表,方法二:查转移指令表,分析:安排LJMP指令在转移表中,因每条LJMP指令占三个字节,将R7中的内容乘3即为转移表的偏移地址。,分析:将KEY0KEYF入口地址列在表格中,每一项占两个单元,KEYn在表中的偏移量为2n。,.,(1)流程图,START:MOVDPTR,#TABMOVA,R7ADDA,R7MOVR3,AMOVCA,A+DPTRXCHA,R3INCAMOVCA,A+DPTRMOVDPL,AMOVDPH,R3CLRAJMPA+DPTRTAB:DWKEY0,KEY1,KEYFEND,.,(1)流程图,(2)源程序,START:MOVDPTR,#TABMOVA,R7RLAADDA,R7JMPA+DPTRTAB:LJMPKEY0LJMPKEY1LJMPKEYFEND,.,程序设计基本方法,二、循环程序设计,循环程序结构一般有两种:先处理再判断,即至少执行一次循环体先判断再处理,即先判断是否满足循环条件,.,程序设计基本方法,.,程序设计基本方法,例1将首址为DATA的100个外部RAM单元清零。,分析:已知循环次数的循环程序,通过设置循环计数器来控制,将循环次数数存放在R0中。,ORG0100HSTART:MOVR0,#100LOOP:MOVDPTR,#DATACLRAMOVXDPTR,AINCDPTRDJNZR0,LOOPSJMP$,.,例2将内部RAM中起始地址为data的数据串传送到外部RAM中起始地址为buffer的存储区域中,直到发现$字符,传送停止。,分析:由于循环次数事先不知道,但循环条件可以检测到,所以采用先判断后处理的结构。,ORG0020HMOVR0,#dataMOVDPTR,#bufferLOOP0:MOVA,R0CJNEA,#24H,LOOP1SJMPLOOP2LOOP1:MOVXDPTR,AINCR0INCDPTRSJMPLOOP0LOOP2:END,.,例3片内DATA1起的20H个RAM单元,试统计每个单元1的位数,并存入以DATA2起的20H个单元内。,分析:这是一个两重循环的程序,内循环为求8位数1的位数,循环次数为8,外循环的次数为20H。,程序设计基本方法,.,程序设计基本方法,ORG1000HMOVR0,DATA1;置地址指针MOVR1,DADA2MOVR7,20H;外循环计数器CON:MOVR6,#08H;内循环计数器MOVA,R0;取数MOVR5,#00HCONBIT:RLCA;内循环,统计每字节1的个数JNCNEXTBINCR5NEXTB:DJNER6,CONBITMOVA,R5MOVR1,A;存数INCR1;修改指针,指向下一单元INCR0DJNER7,CON;外循环判0END,.,把多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。通常将这种可以被调用的程序段称为子程序。,3.3子程序设计,主程序与子程序的关系,主程序MAIN,LCALLSUB,调用子程序,子程序入口地址,RET,.,子程序嵌套,子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。,子程序SUB1,主程序MAIN,LCALLSUB1,RET,子程序SUB2,RET,LCALLSUB2,.,子程序设计注意事项,(1)给子程序赋一个名字,即入口地址的代号。(2)要能正确地传递参数。入口条件:子程序中要处理的数据如何给出口条件:处理的结果存放在何处(3)注意保护现场和恢复现场。保护现场:压栈指令PUSH恢复现场:弹出指令POP,.,子程序设计,子程序:ORG0120HSUB:ADDA,#00H;根据A中字符的1的个数;产生PSW的奇偶标志位PJNBP,DONE;判A中1个数是否为偶数ORLA,#80H;为奇,置标志位1DONE:RET,例1设内部存放长度为40H的ASCII字符串,首址为40H。试将该字符中每一个字符中加偶校验位。要求先编写ASCII字符的偶校验子程序,通过子程序调用完成所给任务。,分析:入口参数仅有一个ASCII数,出口数据也只有一个加校验位的ASCII字符,可只用累加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论