您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 李全利版单片机原理及接口技术课后答案(第四章)
-74-章480C51的汇编语言程序设计1.80C51单片机汇编语言有何特点?答:汇编语言结构紧凑、灵活,汇编成的目标程序效率高,具有占存储空间少、运行速度快、实时性强等优点。它是面向机器的语言,对于单片机硬件的操作直接、方便,有利于初学者对单片机结构的认知。但它与高级语言相比移植性不好、编程复杂、对编程人员的基础要求高。2.利用80C51单片机汇编语言进行程序设计的步骤如何?答:一、任务分析首先,要对单片机应用系统的设计目标进行深入分析,明确系统设计任务:功能要求和技术指标。然后对系统的运行环境进行调研。这是应用系统程序设计的基础和条件。二、算法设计经过任务分析和环境调研后,已经明确的功能要求和技术指标可以用数学方法(或模型)来描述,进而把一个实际的系统要求转化成由计算机进行处理的算法。并对各种算法进行分析比较,并进行合理的优化。三、流程描述程序的总体构建。先要确定程序结构和数据形式,资源分配和参数计算等。然后根据程序运行的过程,规划程序执行的逻辑顺序,用图形符号将程序流程绘制在平面图上。应用程序的功能通常可以分为若干部分,用流程图将具有一定功能的各部分有机地联系起来。流程图可以分为总流程图和局部流程图。总流程图侧重反映程序的逻辑结构和各程序模块之间的相互关系;局部流程图反映程序模块的具体实施细节。3.常用的程序结构有哪几种?特点如何?答:顺序程序:无分支、无循环结构的程序,其执行流程是依指令在存储器中的存放顺序进行的;分支程序:可以改变程序的执行顺序;循环程序:按某种控制规律重复执行的程序,控制一部分指令重复执行若干次,以便用简短的程序完成大量的处理任务。4.子程序调用时,参数的传递方法有哪几种?答:利用累加器或寄存器;利用存储器;利用堆栈。5.什么是伪指令?常用的伪指令功能如何?答:伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的伪指令包括:ORG,功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址;-75-END,功能是结束汇编;DB,功能是从标号指定的地址单元开始,在程序存储器中定义字节数据;DW,功能是从标号指定的地址单元开始,在程序存储器中定义字数据空间;EQU,功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名;BIT,功能是将位地址赋给指定的符号名。6.设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放在24H、25H中,试编写出16位无符号数相加的程序(采用大端模式存储)。答:程序如下:ORG0000HMOVR0,#21HMOVR1,#23HMOVA,@R0ADDA,@R1MOV25H,ADECR0DECR1MOVA,@R0ADDCA,@R1MOV24H,ASJMP$END7.编写程序,把外部RAM中1000H~101FH的内容传送到内部RAM的30H~4FH中。答:ORG0000HMOVDPTR,#1000HMOVR0,#30HMOVR7,#32LOOP:MOVXA,@DPTRMOV@R0,AINCR0INCDPTRDJNZR7,LOOPRET8.编写程序,实现双字节无符号数加法运算,要求(R0R1)+(R6R7)→(60H61H)。答:ORG0000HMOVA,R1-76-ADDA,R7MOV61H,AMOVA,R0ADDCA,R6MOV60H,ASJMP$END9.若80C51的晶振频率为6MHz,试计算延时子程序的延时时间。DELAY:MOVR7,#0F6HLP:MOVR6,#0FAHDJNZR6,$DJNZR7,LPRET答:延时时间:2µs*{[1+((1+2*250+2)*246)+2]+2}=0.247486秒(含调用指令2个机器周期)10.在内部RAM的30H~37H单元存有一组单字节无符号数。要求找出最大数存入BIG单元。试编写程序实现。答:ORG0000HBIGDATA2FHONEDATA2AHTWODATA2BHSTART:MOVR7,#7;比较次数MOVR0,#30HLOOP:MOVA,@R0MOVONE,AINCR0MOVTWO,@R0CLRCSUBBA,@R0JCNEXT;ONE小,TWO大继续比下一对数MOV@R0,ONE;ONE大放后面(交换)DECR0MOV@R0,TWO;TWO小放前面INCR0;NEXT:DJNZR7,LOOP-77-MOVBIG,37HSJMP$END11.编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的50H、51H、52H中。答:单字节二进制数转换为压缩的BCD码仅需要2个字节;在将压缩的BCD码拆分存于3个单元。org0MOV52H,#0MOV51H,#0MOV50H,#0MOVA,#0FDhLCALLDCDTHSJMP$DCDTH:MOVR7,#8MOVR0,A;暂存于R0LOOP:CLRCMOVA,R0RLCAMOVR0,AMOVR1,#51H;MOVA,@R1;ADDCA,@R1;DAA;MOV@R1,A;DECR1MOVA,@R1ADDCA,@R1DAAMOV@R1,ADJNZR7,LOOPINCR1;50H已是结果,R1指向51H,51H单元需拆分MOVA,#00HXCHDA,@R1MOV52H,AMOVA,@R1-78-SWAPAMOV@R1,ARETEND12.编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。答:ORG0MOVR1,#5BHMOVA,R1ANLA,#0F0HSWAPAACALLASCIIMOVR3,AMOVA,R1ANLA,#0FHACALLASCIIMOVR4,ASJMP$ASCII:PUSHACCCLRCSUBBA,#0AHPOPACCJCLOOPADDA,#07HLOOP:ADDA,#30HRETEND13.编写程序,求内部RAM中50H~59H十个单元内容的平均值,并存放在5AH单元。答:ORG0000HMOVR7,#10MOVR0,#50HMOVB,#10CLRCCLRALOOP:ADDCA,@R0INCR0-79-DJNZR7,LOOPDIVABMOV5AH,ASJMP$END14.如图4.10所示,编制程序实现:上电后显示“P”,有键按下时显示相应的键号“0”~“7”。答:实现程序如下:TEMPEQU30HORG0000HJMPSTARTORG0100HSTART:MOVSP,#5FHMOVP0,#8CH;正序显示PMOVP3,#0FFH;输入方式CLRCYNOKEY:MOVA,P3CPLAJZNOKEY;无键按下MOVTEMP,P3;有键按下CALLD10msMOVA,P3CJNEA,TEMP,NOKEY;去抖动MOVR2,#0;键号计数器复位MOVA,TEMPLP:RRCAJNCDONEINCR2SJMPLPDONE:MOVA,R2MOVDPTR,#CODE_P0MOVCA,@A+DPTRMOVP0,AJMPNOKEYD10ms:MOVR5,#10;10MSD1ms:MOVR4,#249DL:NOP-80-NOPDJNZR4,DLDJNZR5,D1msRETCODE_P0:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EHEND
本文标题:李全利版单片机原理及接口技术课后答案(第四章)
链接地址:https://www.777doc.com/doc-2381974 .html