单片机分析程序
单片机c语言实例程序300篇

单片机c语言实例程序300篇单片机C语言【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){inti,j,k;printf("\n");for(i=1;i<5;i++)/某以下为三重循环某/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/某确保i、j、k三位互不相同某/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main()单片机C语言{longinti;intbonu1,bonu2,bonu4,bonu6,bonu10,bonu;canf("%ld",&i);bonu1=100000某0.1;bonu2=bonu1+100000某0.75;bonu4=bonu2+200000某0.5;bonu6=bonu4+200000某0.3;bonu10=bonu6+400000某0.15;if(i<=100000)bonu=i某0.1;eleif(i<=200000)bonu=bonu1+(i-100000)某0.075;eleif(i<=400000)bonu=bonu2+(i-200000)某0.05;eleif(i<=600000)bonu=bonu4+(i-400000)某0.03;eleif(i<=1000000)bonu=bonu6+(i-600000)某0.015;elebonu=bonu10+(i-1000000)某0.01;printf("bonu=%d",bonu);}============================================================ ==【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
简述单片机的开发过程

简述单片机的开发过程
单片机是一种高度集成的微处理器,它能完成各种控制和处理任务。
单片机开发的过程可以分为五个阶段:需求分析、系统设计、电路设计、软件设计和调试测试。
1.需求分析
首先需要明确开发需要实现的目标,对控制系统所需的输入输出进行分析,确定系统要具备的功能。
这个阶段需要了解物理特性和工程参数等等。
2.系统设计
系统设计阶段是在需求分析的基础上,制订出具体的设计方案。
确定单片机选型,确定合适的外设。
系统设计考虑电源电路、外设接口、通信接口等等。
3.电路设计
电路设计阶段需要根据系统设计,画出原理图和PCB图,设计单片机控制电路和外设驱动电路等电路板。
电路设计中需要注意各个信号线的阻抗匹配,布线和毫米波滤波器的设置等等。
4.软件设计
软件设计阶段需要对单片机程序模块化设计,程序模块划分、模块间调用关系确定、程序语言选择等等。
该阶段需要十分精细化,由于单片机空间、运算能力都较小,所以设计时需要注意代码的复杂度和程序效率。
5.调试测试
调试测试阶段通常包括软件调试和硬件调试两个部分。
软件调试需要先编译程序,上传到单片机上,通过仿真器或者硬件调试器进行程序测试。
硬件调试则需要根据设计图信号测试点,用仪器等方法连通单片机和外设进行硬件调试。
综上所述,单片机开发是一个系统,复杂性较高的工作,需要在每一步细致、精准和认真。
到了调试测试阶段时,我们应该重视问题发现和排查问题问题能力。
只有在每个阶段都付出最大的努力,才能保证开发出高质量的产品。
单片机程序设计ppt课件

;为正数,求X+2
AJMP SAVE
;转到SAVE,保存数据
ZER0:MOV A,# 64H ;数据为零,Y=100
AJMP SAVE
;转到SAVE,保存数据
NEG:DEC A
CPL A
;求∣X∣
SAVE: MOV 31H,A
;保存数据
SJMP $ ;暂停
精选ppt课件
13
2.多分支选择结构 当程序的判别输出有两个以上的出口流向时,称为多分支选 择结构。8051的多分支结构程序还允许嵌套,即分支程序中 又有另一个分支程序。汇编语言本身并不限制这种嵌套的层 次数,但过多的嵌套层次将使程序的结构变得十分复杂和臃 肿,以致造成逻辑上的混乱。多分支选择结构通常有两种形 式,如图4-4所示。
LJMP END1
MEMSP2:MOV A,R0
;乘法分支
MOV B,R1
CLR C
MUL AB
MOV RESULT,A
MOV RESULT+1,B
LJMP END1
精选ppt课件
18
MEMSP3:MOV A,R0 MOV B,R1
CLR C DIV AB MOV RESULT,A MOV RESULT+1,B
精选ppt课件
24
【例】50 ms软件延时程序。
软件延时程序一般都是由DJNZ Rn,rel指令构成。执行一条 DJNZ指令需要两个机器周期。软件延时程序的延时时间主要与机 器周期和延时程序中的循环次数有关,在使用12 MHz晶振时,一 个机器周期为1μs,执行一条DJNZ指令需要两个机器周期,即 2μs。适当设置循环次数,即可实现延时功能。
精选ppt课件
9
【例】设a存放在累加器A中,b存放在寄存器B中,若a≥0,
简述单片机系统的开发流程

简述单片机系统的开发流程单片机系统是指由单片机芯片、外围电路和软件程序组成的一种嵌入式系统。
单片机系统的开发流程包括硬件设计、软件开发和系统调试等多个阶段。
1. 硬件设计阶段硬件设计是单片机系统开发的第一步,主要包括电路设计和PCB设计两个部分。
(1) 电路设计:根据系统需求,选择合适的单片机芯片和外围器件,设计电路原理图。
在电路设计过程中,需要考虑功耗、时钟频率、IO口数量、通信接口等因素,并根据需求进行电源供应、时钟电路、外设接口电路等设计。
(2) PCB设计:根据电路原理图,进行PCB的布线设计。
通过布线设计,将电路原理图中的元器件进行合理的布局和连接,以满足信号传输、电源供应等要求。
在PCB设计过程中,需要注意信号完整性、电源稳定性、阻抗匹配等问题。
2. 软件开发阶段软件开发是单片机系统开发的核心部分,主要包括编写程序和调试两个环节。
(1) 编写程序:根据系统需求和硬件设计,选择合适的开发工具和编程语言,编写单片机的软件程序。
在编写程序过程中,需要了解单片机的指令集、寄存器配置、中断处理等相关知识,并根据需求实现系统的各项功能。
(2) 调试:将编写好的软件程序下载到单片机芯片中,通过调试工具进行调试。
调试过程中,可以通过单步执行、断点调试等方式,逐步检查程序的运行情况,发现并解决程序中的错误和问题。
调试完成后,可以对系统的功能进行验证和优化。
3. 系统调试阶段系统调试是单片机系统开发的最后一步,主要包括硬件调试和软件调试两个环节。
(1) 硬件调试:通过仪器设备和测试工具,对硬件电路进行测试和验证。
主要包括电源稳定性、信号传输、外设功能等方面的测试。
在硬件调试过程中,可以使用示波器、逻辑分析仪等工具对信号进行观测和分析,发现并解决硬件电路中的问题。
(2) 软件调试:在硬件调试完成后,对软件程序进行全面的功能测试。
通过输入不同的参数和数据,验证系统的各项功能是否正常运行。
在软件调试过程中,可以使用调试工具和仿真器对程序进行调试和测试,以确保系统的稳定性和可靠性。
单片机程序调试步骤(一)

单片机程序调试步骤(一)引言概述:单片机程序调试是嵌入式开发中重要的一环,它确保了程序在硬件上的正确运行。
本文将介绍单片机程序调试的一般步骤,以帮助开发人员快速排查和修复程序中的问题。
1. 确认程序问题:- 观察现象:仔细观察单片机的运行状况,是否存在明显的问题,如无反应、死机等。
- 分析代码:检查程序代码,确定是否存在逻辑错误、语法错误、变量定义错误等。
2. 配置开发环境:- 安装软件:确保所需的开发软件已正确安装并配置好相关的开发环境。
- 连接硬件:将单片机与编程器、开发板等硬件设备正确连接,并确保连接稳定。
3. 编译程序:- 检查编译选项:确保编译选项设置正确,包括引用的库文件、头文件路径等。
- 编译代码:使用编译器编译程序,并查看编译输出结果,检查是否存在语法错误、警告等。
4. 下载程序:- 配置下载器:检查下载器的设置,确保下载器与目标单片机的型号、通讯方式等匹配。
- 下载程序:使用下载器将编译好的程序下载到目标单片机,并确保下载完成且成功。
5. 调试程序:- 断点调试:在代码中设置断点,通过单步执行、变量查看等功能逐步调试程序,定位问题所在。
- 调试工具:使用调试工具,如逻辑分析仪、示波器等,对信号进行监测和分析,定位硬件问题。
总结:单片机程序调试是确保程序正确运行的关键步骤,通过确认程序问题、配置开发环境、编译程序、下载程序以及调试程序,开发人员可以有效地排查和修复程序中的问题。
调试过程中需要仔细观察现象、分析代码、设置断点和使用调试工具等,从而找到问题所在,并解决它们。
只有经过充分的调试,单片机程序才能在硬件上稳定运行。
单片机外部中断详解及程序

单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。
比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。
在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。
如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。
但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。
因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。
下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。
电路结构和接线不变,仅把程序改为下面的形式。
#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。
单片机程序的流程

单片机程序的流程单片机程序的流程是指如何设计和编写一个单片机程序的过程,它的目的是为了实现某种功能,比如控制外部设备,完成测量任务等。
单片机程序的流程可以分为以下几个部分:一、需求分析在开始编写单片机程序之前,我们需要明确实现的功能和要达到的目标以及使用的单片机型号和外部设备,这些信息被称为需求分析。
需求分析通常通过讨论和研究来得到,它为程序的设计和编写提供了必要的指导。
二、设计程序结构和算法根据需求分析的结果,我们可以确定程序的基本结构和算法,其中包括程序的输入输出、变量和常量的定义、伪代码框图以及代码优化等。
在设计过程中,我们需要结合单片机的指令集来编写程序,同时考虑代码的可读性、可维护性和可扩展性等。
三、编写代码在程序结构和算法设计的基础上,我们可以开始编写代码。
单片机程序通常使用汇编语言或C语言进行编写。
在编写代码时,需要注意以下几个方面:1.语法规范:编写的代码必须符合编程语言的语法规范,否则会出现编译错误。
2.变量命名:变量命名要具有可读性和可理解性,可以采用驼峰式命名等较为常见的方式。
3.代码注释:编写注释可以提高代码的可读性和可维护性,同时也方便后续代码的扩展和修改。
四、调试程序调试程序是指在编写完成后对程序进行测试,查找并解决程序中的问题和错误,确保程序能够按照预期运行。
通常通过单步调试、断点调试、仿真模拟等方式进行调试。
五、代码优化在调试完成后,可以对程序进行代码优化,以提高程序的效率和性能。
代码优化包括代码压缩、变量合并、算法优化等。
通过代码优化,可以减少程序的体积和运行时间,提高程序的可靠性和稳定性。
综上所述,单片机程序的流程包括需求分析、程序结构和算法设计、编写代码、调试程序和代码优化等多个部分。
在这个过程中,需要结合单片机的特点和编程语言的规范来编写程序,最终实现所需的功能。
单片机程序分析(绝对经典)

一、读程序题(每小题4分,共20分)1.执行下列程序段后,(P1)=_______。
MOV P1,#5DHCPL P1.1CPL P1.2CLR P1.6SETB P1.72.执行下列程序段后,(A)=_______,(CY)=____。
MOV A,#C5HRL A3.下列程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。
MOV R0,#7EHMOV 7EH,#0FFHMOV 7FH,#40H1NC @R01NC R01NC @R04.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALL SUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)= ____。
5.阅读下列程序,说明其功能。
MOV R0,#dataMOV A,@R0RL AMOV R1,ARL ARL AADD A,R1MOV @R0,ARET读程序题(每小题4分,共20分)1.(P1)=9BH2.(A)=8BH(或10001011B)(CY)=不影响3.(R0)=7FH(7EH)=00H(7FH)=41H4.(PC)=0345H(61H)=25H(62H)=01H5.(data)×10操作二、使用简单指令序列完成以下操作(12分)1.请将片外RAM20H—25H单元清零2.请将ROM3000H单元内容送R7使用简单指令序列完成以下操作(12分,每小题6分)1.MOV R0,#20HCLR ALOOP:MOVX @R0,AINC R0DJNZ R7,LOOP2.MOV DPTR,#3000HCLR AMOVC A,@A+DPTRMOV R7,A三、使用简单指令序列完成以下操作(12分)1、将20H单元清零MOV 20H,#00H 或CLR AMOV 20H, A2、将片外RAM2000H中的低字节与片内20H中的低字节交换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、分析程序并填空()1.执行下列程序段后,(P1)=___9BH____。
MOV P1,#5DHCPL P1.1CPL P1.2CLR P1.6SETB P1.72.执行下列程序段后,(A)=__8BH_____,(C Y)=__不影响__。
MOV A,#C5HRL A3.下列程序段执行后,(R0)=___7FH____,(7EH)=__00H__,(7FH)=_41H______。
MOV R0,#7EHMOV 7EH,#0FFHMOV 7FH,#40HINC @R0INC R0INC @R04.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALLSUBTRN双字节指令后,(PC)=__0345H_,(61H)=___25H____,(62H)= __01H__。
5.阅读下列程序,说明其功能。
MOV R0,#dataMOV A,@R0RL AMOV R1,ARL ARL AADD A,R1MOV @R0,ARET ; (data)×10操作6.改错1.MUL RoRl 乘法指令应使用A、B寄存器操作2.MOV A,@R7 间接寄存器使用R7有误,间址寄存器只能使用R0、R13.MOV A,#3000H 8位累加器A不能接受16位数据4.MOVC @A+DPTR,A MOVC指令为对程序存储区操作指令,累加器的内容不可通过变址方式送入程序存储器,两操作数写反了。
5.UMP #1000H 长转移指令中的操作数为16位转移地址,不能用立即数的形式来表达。
7. 说明MCS—51单片机的下列各条指令中源操作数的寻址方式(可直接在每条指令后面书写)1.ANL A,20H 直接寻址2.ADDC A,#20H 立即寻址3.JZ rel 相对寻址4.CLR C 位寻址5.RRA 寄存器寻址8.下列各条指令其源操作数的寻址方式是什么?各条指令单独执行后,A中的结果是什么?(5分)设(60H)=35H,((A)=19H,(R0)=30H,(30H)=0FH。
(1)MOV A,#48H ;寻址方式:立即寻址((A)= 48H(2)ADD A,60H ;寻址方式:直接寻址;((A)= 4EH(3)ANL A,@R0 ;寻址方式:寄存器间接寻址;((A)= 09H9.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?(15分)MOV R1,#30H ;(R1)= 30HMOV A,#64H ;((A)= 64HADD A,#47H ;((A)= ABH (CY)= 0(A(C)= 0DA A ;((A)= 11H ,(CY)= 1(A(C)= 1MOV @R1,A ;(R1)= 30H ,(30H)= 11H此程序段完成的功能:(5分)求两个BCD码数(64H和47H)的和,并将结果放在内部RAM的30H单元。
10.已知(R0)=20H, (20H ) =10H, (P0) =30H, (R2) =20H, 执行如下程序段后( 40H ) =MOV @R0 , #11HMOV A , R2ADD A , 20HMOV PSW , #80HSUBB A , P0XRL A , #45HMOV 40H , A答:(20H)←11H((A)←20H((A)←((A)+(20)(CY)=1((A)-(P0)-(CY)→((A)即((A)←00H((A)+45H→((A)即((A)←45H(40H)←45H11.已知( R0 )=20H, (20H )=36H, (21H) =17H, (36H) =34H, 执行过程如下:MOV A , @R0MOV R0 , AMOV A , @R0ADD A , 21HORL A , #21HRL AMOV R2 , ARET则执行结束(R0)= (R2)=答:((A)←((R0))((A)=36H(R0)←((A)(R0)←36H((A)←((R0))((A)←34H((A)←((A)+(21H) 34H+17H=4BH((A)←((A)∨21H 4BH∨21H=6BH((A)←D6H(R2)←D6H(R0)=36H (R2)=D6H12. 执行下面一段程序;MOV SP, #60HMOV A, #10HMOV B, #01HPUSH APUSH BPOP APOP BA , B的内容是:(A)= (B)=答:((A)=01H ((B)=10H13.设在31H单元存有#23H,执行下面程序:MOV A, 31HANL A, #0FHMOV 41H, AMOV A, 31HANL A, #0F0HSW AP AMOV 42H, A则(41H)= (42H)=答:(41H)=03H (42H)=02H三.计算题(22分)14.((A)=3BH,执行ANL A,#9EH指令后,((A)= 1AH (CY)=不受影响15.JNZ REL为2B指令,放于1308H,转移目标地址是134AH,求偏移量REL=40H 16.若((A)=C3H,(R0)=AAH,执行ADD A,R0后,((A)= 6DH (CY)= 1 (OV)= 1 (A(C)= 0177.若((A)=50H,((B)=A0H,执行MUL AB后,((A)=00H ((B)=32H (CY)= 总为0 (OV)=118.SJMP 0E7H为2B指令,放于F010H,目标地址=EFF9H四.阅读并分析程序(28分)19.2506H M5:MOV SP,#58H2509H MOV 10H,#0FH250CH MOV 11H,#0BH250FH ACALL XHD ;PC+2→PC ,7~015~810~01,1,SP SP PC SP SP SP PC SP addr PC+→→⎧⎫⎪⎪+→→⎨⎬⎪⎪→⎩⎭MOV 20H,11H2514H M5A:SJMP M5AXHD:PUSH 10HPUSH 11HPOP 10HPOP 11HRET问:(1)执行POP 10H后堆栈内容?(SP)=5AH(2)执行M5A:SJMP M5A后,(SP)= 58H (20H)= 0FH20.A程序存储空间表格如下:地址2000H 2001H 2002H 2003H 。
内容3FH 06H 5BH 4FH 。
已知:片内RAM的20H中为01H,执行下列程序后(30H)=5BHMOV A,20HINC AMOV DPTR,#2000HMOVC A,@A+DPTRCPL AMOV 30H,ASJMP $21.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20HMOV A,@R0MOV @R0,40HMOV 40H,AMOV R0,#35H问执行程序后,R0= 35H A= 7FH 4BH= 20H 40H= 7FH22.若PSW=00, 执行下列程序后,PSW的各位状态如何?MOV A,#0FBHMOV PSW,#10HADD A,#7FHCY AC OV P OF RS11 1 0 1 0 1五.程序填空(10分)23.数据块传送,将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H开始的连续32个单元。
#20H R1 LOOPORG 1000HMOV R7,_____MOV R0, #30HMOV R1,#60HLOOP:MOV A,@R0MOV _____,AINC R0INC R1DJNZ R7, _____SJMP $END24. 将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。
41H R0ORG 1000HMOV R7,#04HMOV R0,30HCLR AMOV 41H,ALOOP:ADD A,@R0JNC NEXTINC _____NEXT:INC _____DJNZ R7,LOOPMOV 40H,ASJMP $END25. RAM中40H单元内存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD 码的十位和个位放在累加器A中,百位放在R2中。
40H #0AH A ORG 2200HMOV A,_____MOV B,#64HDIV ABMOV R2,AMOV A,_____XCH A,BDIV ABSWAP _____ORL A,BSJMP $END26.编程序将片内40H-46H单元内容的高4位清零,保持低4位不变。
#40H #0FHORG 1000HMOV R7,#07HMOV R0,_____LOOP:MOV A,@R0ANL A,_____MOV @R0,AINC R0DJNZ R7,LOOPSJMP $END一、程序分析题(共20分,每题10分)27、位地址为M、N、Y,程序如下:MOVC,M;(M) ➞CANL C, ;(M)MOV Y,C ;(Y)=(M)MOV C,M ;(M) ➞CANL C,N ;(M)ORL CY ;MOV Y,C程序功能表达式:(Y)=(M)*(/N)+(M)*(N)28、阅读下列程序并回答问题CLR CMOV A,#9AHSUBB A,60HADD A,61H,DA AMOV 62H,A(1)请问该程序执行何种操作?(2)已知初值:(60H)=23H,(61H)=61H,请问运行程序后:(62H)=()?解(1)操作是单字节BCD码运算,是将(61H)-(60H)➞62H(2)(62H)=38H29、程序如下2506H M5: MOV SP,#58H;2509HMOV 10H,0FH;250CH MOV 11H,#0BH;250FH ACALL XHD;2511H MOV 20H,11H2514H M5A: SJMP M5AXHD: PUSH 10HPUSH 11HPOP 10HPOP 11HRET问:(1)执行POP10H后堆栈内容?(2)执行M5A:SJMPM5A后,(SP)=?(20H)=?解1)执行ACALL指令时:PC+2➞PC:(SP)+1➞SPPC0~PC7➞(SP)(SP)+1➞SPPC8~PC15➞(SP)2)子程序返回时,点地址弹出,SP=58H所以(1)执行POP10H后,堆栈内容如左图所示.5C 0B5B 0F5A 2559 1158(2)执行M5A:SJMPM5A后,(SP)=58H,(20H)=0FH30、解读下列程序,然后填写有关寄存器内容(1)MOV R1,#48HMOV 48H,#51HCJNE @R1,#51H,00HJNC NEXT1MOV A,#0FFHSJMP NEXT2NEXT: MOV A,#0AAHNEXT2: SJMP NEXT2累加器A=( )(2) MOV A,#0FBHMOV PSW,#10HADD A,#7FH解(1)MOV R1,#48H ;48H 送R1MOV 48H,#51H ;51H送➞(48H)CJNE @R1,#51H,00H ;(R1)GN #51相比,相等,顺序执行JNC NEXT1 ;没借位转,NEXT1MOV A,#0FFH ;有借位,FFH送ASJMP NEXT2NEXT1 MOV A,#0AAH ;0AAH送ANEXT2 SJMP NEXT2累加器A=(0AAH)(2)MOV A,#0FBHMOV PSW,#10H 00010000送PSWADD A,#7FH由11111011+ 01111111____________1 01111010=1♁1=0,OV=0; A中有奇所以,有进位CY=1,C6♁C7数个1,P=1;有辅助进位位AC=1若PSW=00,当执行完上述程序段后,将PSW各位状态填入下表:PSWCYACF0RS1RS0OVF1P1101000131、程序存储器空间表格如下:地址2000H2001H2002H2003H...内容3FH06H5BH4FH...已知:片内RAM的20H中为01H,执行下列程序后(30H)=?MOVA,20H;01H➞AINCA;01H+1=02H➞AMOVDPTR,#2000H;2000H➞DPTRMOVCA,@A+DPTR;(2000H+2)=5BH➞ACPLA;5BH求反等于A4HMOV 30H,A ;A4H➞(30H)END: SJMP END答执行程序后,(30H)=A432、分析程序段:CLRCMOVA,#91HSUBBA,61H;求60H内的BCD数的补数,9AH-24H=76HADDA,61H;76H+72H=E8HDAA;CY=1、A=48HMOV62H,A解根据9AH=99=1的特殊性,该程序功能为单字节BCD数减法运算,即完成的是(61H)-(60H)➞(62H)。