微机原理习题答案(完整版)_第1页
微机原理习题答案(完整版)_第2页
微机原理习题答案(完整版)_第3页
微机原理习题答案(完整版)_第4页
微机原理习题答案(完整版)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上第一章习题答案1-1 请说明CPU的功能以及CPU是如何执行指令和程序的。答:CPU的功能是执行程序和统筹处理计算机系统中各类事务。CPU执行指令分为3步:取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。1-2 请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。答:CPU:由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。存储器:存储计算机工作时使用的信息,即指令代码和数据代码。I/O接

2、口电路:具有数据缓冲、数据隔离及数据转换的功能。1-3 请问对于容量位8K的存储器芯片,它的地址线是多少根?答:8K=8192=213,故地址线为13根。另附:存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。1-4 将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。答:(78)D=()B=(4E)H=()8421BCD(134)D=()B=(86)H=(0)8421BCD注:8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。

3、 1-5 将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。X=;X8位原=X8位反=X8位补=;X16位原=X16位反=X16位补=00100X= -X8位原=,X8位反=,X8位补=;X16位原=00100,X16位反=11011,X16位补=11100;X= -X8位原=,X8位反=,X8位补=;X16位原=11111,X16位反=00000,X16位补=00001;1-6 将下列补码转化成二进制数的真值。X补=;X=X补=;X= -1X补=;X= -1-7 已知下列补码X补和Y补,分别求X+Y补、X-Y补。并判断运算结果是否出现溢出。X补=, Y补=;-Y补=, X+Y

4、补=X补+Y补=不溢出;X-Y补=X补+-Y补=X补-Y补=溢出;X补=, Y补=;-Y9位补=, X+Y补=X补+Y补=溢出;X-Y补=X补+-Y补=X补-Y补=不溢出;X补=, Y补=;-Y补=, X+Y补=X补+Y补=不溢出;X-Y补=X补+-Y补=X补-Y补=不溢出;X补=, Y补=;-Y补=, X+Y补=X补+Y补=溢出;X-Y补=X补+-Y补=X补-Y补=不溢出;方法提示:由于补码是按序列排列的,所以可以直接进行加和减,即X+Y补=X补+Y补;X-Y补=X补-Y补另补码减法也可用加法实现X-Y补=X补+-Y补。上题的第2小题,由于Y8位补=28,Y=-28,所以(-Y)= 28,已

5、不能用8位补码表示,可以先扩补位9位补码,然后进行运算,或直接用X-Y补= X补-Y补进行计算。判断结果是否溢出,可按下列方法:加法时,如果正负数相加(即两数的符号位不同),则结果肯定不溢出;如果同号数相加,结果与被加数和加数异号的则溢出(即正正相加结果为负或负负相加结果为正时)。减法时,如果同号数相减(即两数的符号位相同),则结果肯定不溢出;如果异号数相减,结果与被加数异号的则溢出(即正负相减结果为负或负正相减结果为正时)。此法比用变形补码直观,加和减都适用。第二章习题答案2-1 请说明单片机89C52内部有哪些资源。答:1个8位CPU、8KB的FLASH程序存储器、256B的SRAM数据存

6、储器、4个8位的并行I/O口(P0,P1,P2,P3)、1个全双工串行口、中断系统(5个中断源、2个中断优先级)、3个16位的定时/计数器(T0,T1,T2)、时钟电路(时钟频率624MHZ)。2-2 为什么51系列单片机的存储器系统采用哈佛结构。答:哈佛结构指的是指令代码和数据分别存放在程序存储器和数据存储器中,两部分存储器分别采用不同的地址总线系统。单片机在工作时一般执行固定不变的应用程序代码,而作为嵌入式控制系统的核心,受限于体积要求,单片机系统一般不会带有辅助存储器(例如硬盘等),为了在断电时也能保存用户的应用程序,故需将程序固化在只读存储器中,而单片机工作时程序运行过程中的数据是变化

7、的,所以需要放在随机访问存储器中。2-3 51单片机中的工作寄存器分布在存储器的哪个区域?答:分布在内部数据存储器的00H1FH区域。2-4 在51系列单片机中,工作寄存器分几个区?如何改变工作寄存器区? 答:分为0、1、2、3四个区。修改特殊功能寄存器PSW的RS1和RS0位可改变当前工作寄存器区。2-5 特殊功能寄存器和工作寄存器在存放信息方面有和区别?答:特殊功能寄存器(SFR)中存放的是一些专用信息,这些信息与下列内容有关:计算机指令的执行条件及状态标志,定时/计数器的使用控制、中断系统的使用、并行I/O及串行I/O接口的使用。工作寄存器只是用于暂时存放指令执行过程中一般的被操作数据。

8、2-6 特殊功能寄存器的地址空间如何?答:特殊功能寄存器(SFR)的地址为8为二进制编码,地址范围为80H0FFH,但各特殊功能寄存器的地址并非连续分布的。指令通过直接寻址的方式才能访问到。2-7 51单片机中的位寻址区在哪里?它们的地址空间如何?答:51单片机的位寻址区分布在两个地方。一部分位于内部数据存储器中字节地址为20H2FH的16个单元中,这部分包括128个位,位地址空间为00H7FH;另一部分位于字节地址能被8整除的特殊功能寄存器中, 位地址空间为80H0FFH。2-8 请指出下列位地址所在的内部数据存储器单元的字节地址或SFR名称。答:00H内部RAM的20H单元;(20H).0

9、20H内部RAM的24H单元;(24H).00A0HP2;P2.00B0HP3;P3.064H内部RAM的2CH单元;(2CH).4E6H累加器ACC; ACC.6。提示:1) 内部数据存储器内的可寻址位,其位地址(00H7FH)与所在单元的字节地址(20H2FH)间的关系如下:位地址(字节地址20H)×8DX, DX该位在字节单元中的位置(D0D7)位地址÷8,商20H字节地址,余数DX2) SFR中的可位寻址(位地址80H0FFH)的寄存器,其最低位的位地址与其字节地址相同。关系如下:位地址÷8,商*8SFR的字节地址,余数DX,DX该位在SFR中的位置(D0

10、D7)2-9 若某51单片机应用系统将F000HFFFFH地址空间分配给它外部的I/O接口,那么该单片机应用系统最多给外部数据存储器分配多少单元?地址空间如何?答:51单片机的外部I/O接口和外部数据存储器是统一编制的,占用同一个地址空间,地址空间的容量为64KB,地址范围为0000HFFFFH。据题意,系统已将F000HFFFFH地址空间分配给它外部的I/O接口,则只剩下0000HEFFFH可分配给外部数据存储器,容量为60KB。2-10 在图2-9中的电容C,如果它取值太小,对复位电路有何影响?答:51单片机上电复位,需要在RST引脚上保持10ms以上的高电平。如果C太小,则其充电时间变短

11、,上电后,RST引脚上高电平保持的时间太短,则单片机内部复位将不能完全完成,有些寄存器内容将变得不确定。2-11 上电复位和人工按钮复位后对内部数据存储器具有什么不同的影响?答:上电复位后,内部数据存储器中的内容为不确定的状态。人工按钮复位后,内部数据存储器中的内容不变(因为没有断电)。2-12 51应用系统中,为何要对堆栈指针SP重新设置?答:复位后(SP)=07H,则堆栈是从08H开始存放数据的。而内部数据存储器中00H1FH单元为工作寄存器区,而20H2FH单元为位寻址区,在实际的应用系统中,这些区域都可能使用到。故一般将堆栈设置在地址30H以后的单元中,所以需要对堆栈指针SP重新设置。

12、2-13 51单片机中的I/O接口中,那个接口在作为准双向口时需要外接电阻?若对某一接口进行读引脚的操作,必须事先对该接口做什么操作?答:P0口需外接上拉电阻(因为P0是集电极开路结构)。若需对某个接口读引脚(即读取外部输入信号的状态),需要对该接口的口锁存器写入1(例如:若需要读取P1.0、P1.1、P1.2、P1.3的引脚状态时,需要先执行MOV P1, #0FH。这也是为什么复位后(P0)= (P1)=(P2)=(P3)=0FFH的道理。)第三章习题答案3-1 指令的格式是由哪些部分组成的?每部分的含义是什么?答:指令由操作码和操作数组成。在形式上操作码和操作数都是二进制代码。操作码用来

13、表示指令的种类和功能,经由控制器中的指令译码器译码后产生控制信号。操作数是指令的操作对象,表示被操作数据或数据所在的存储单元地址。3-2什么是寻址方式?51系列指令系统有哪些寻址方式?答:指令中给出操作数的方式叫做寻址方式。51系列机给出的寻址方式一般有7中:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址(直接寻址的一个特例地址指向位单元)。3-3对于内部数据存储器00H1FH区域的访问有哪些寻址方式?对于外部数据存储器的访问有哪些寻址方式?对于特殊功能寄存器的访问有哪些寻址方式?答:对于内部数据存储器00H1FH区域的访问有直接寻址、寄存器寻址、寄存器间接寻址三种

14、方式。对于外部数据存储器的访问只有寄存器间接寻址一种方式(以DPTR或R0、R1为指针)。对于特殊功能寄存器的访问只有直接寻址一种方式。同时对于内部数据存储器80H0FFH的128个单元的访问只有寄存器间接寻址一种方式(以R0、R1或SP为指针);借助于两种不同的寻址方式,可以将在地址上重合(80H0FFH)的SFR和内部RAM高128字节单元的两部分空间加以区分。3-451系列单片机有哪些标志位?这些标志位存放在哪里?答:51单片机在程序运行时通常需要一下标志位:Cy,AC,OV,P,RS1,RS0,它们都存放在特殊功能寄存器PSW(程序状态字寄存器)中。3-5 分析下列各指令的操作数,指出

15、它们的寻址方式。MOV R4, 38H;寄存器寻址,直接寻址ADD A, R1;寄存器寻址,寄存器间接寻址MOVC A, A+DPTR;寄存器寻址,变址寻址(又称基址寄存器加变址寄存器间接寻址)MOVX A, DPTR;寄存器寻址,寄存器间接寻址DEC B;直接寻址SETB 24H;位寻址(直接寻址的一种,只是给出的直接地址是位地址)CJNE A, #100, NEXT;寄存器寻址,立即寻址,相对寻址ANL 30H, #00H;直接寻址,立即寻址PUSH P1;寄存器间接寻址(指针为SP,只是在堆栈操作指令中省略了),直接寻址堆栈操作除了用PUSH和POP指令,完全可以用其它指令来完成,举例如

16、下:PUSH P1可用下列程序段完成INC SPMOV R0, SPMOV R0, P1 POP P1可用下列程序段完成MOV R0, SPMOV P1, R0DEC SP提示:上题答案中按操作数先后顺序给出其对应的寻址方式。3-6 下列各指令或指令组执行前有关寄存器和存储器的状态如下表,要求分析各指令或指令组执行后有关寄存器、存储器和标志位的状态。内部数据存储器和特殊功能寄存器外部数据存储器程序存储器寄存器名内容单元地址内容单元地址内容单元地址内容程序计数器内容B64H73H10H900BH12H1206H35H(PC)=1200HACC03H72H11H900AH83H1205H34HPS

17、W80H71H00H9009HD1H1204H33H标号及标号值DPL05H70H80H9008H79H1203H32HNEXT1=0800HDPH90H9007H0CH1201H31HNEXT2=0900HSP71H36HF8H9006H23H1200H30HNEXT3=1280HR000H35H2BH9005H13HLOOP=1148HR136H34H36H9004H4DHR235H33H74H9003H2EHR3B7H32H59H9002H7FHR403H9001H54HR5F6H26H66H9000H38HR6E4H25H55HR721H24H44HP07CHP290H提示:在上表中需

18、注意几点:(PSW)=80H,即Cy=1, AC=0, RS1=RS0=0(故当前工作寄存器区为0区)。工作寄存器区为0区时,R0R7指向内部数据存储器的00H07H,所以当指令中出现直接地址00H07H中的某个时,其初始条件即为R0R7中某个对应的寄存器的值。另,因为(DPH)=90H, (DPL)=05H, 所以(DPTR)=9005H。标号值实质上是代表标号所在处的指令在程序存储器中的地址,标号往往出现在程序转移指令中,指出转移指令的目标地址。1) MOV R0,#32;(R0)=32=20H2) MOV 25H,R1;(25H)= 0F8H3) MOVX A,DPTR;(A)=13HP

19、=14) MOVX A,R0;(A)=38HP=15) MOVC A,A+PC;(A)=33HP=06) MOV A,04H;(A)=03HP=07) XCH A,34H;(A)=36H(34H)= 03H8) XCHD A,R1;(A)=08H(36H)=0F3H9) PUSH DPL;(SP)=72H(72H)=05H10) POP DPH; (DPH)=00H(SP)=70H11) SUBB A,R1; (A)=0CCHCy=1P=0AC=1OV=012) ADD A,R6; (A)=0E7HCy=0P=0AC=0OV=013) ADDC A,36H; (A)=0FCHCy=0P=0AC

20、=0OV=014) MUL AB; (A)=2CH(B)=01H15) INC R0; (R0)= 01H16) DEC A; (A)=02HP=117) ADD A,#49H;DA A; (A)=52HCy=0P=118) ANL A, R1; (A)=02H(R1)=36HP=119) ORL A,32H; (A)=5BHP=120) ORL 26H,#35H; (26H)=77HP=021) XRL A,R0; (A)=03HP=022) XRL A, ACC; (A)=0P=023) XRL A,#0FFH; (A)=0FCHP=024) CPL A; (A)=0FCHP=025) R

21、L A; (A)=06HCy=126) RRC A; (A)=81HCy=127) MOV C,(25H).2;Cy=128) MOV F0,C;(PSW)=0A0H29) SETB RS0; (PSW)=88H30) CLR C; (PSW)=031) ANL C,(24H).0 Cy=032) JZ NEXT1; (PC)=1202H33) JC NEXT2; (PC)= 0900H34) CJNE A, 25H, NEXT3; (PC)= 1280HCy=135) DJNZ R7,LOOP; (PC)= 1148H(R7)=20H36) LCALL 1800H; (PC)=1800H(S

22、P)=73H(72H)=03H(73H)=12H37) RET; (PC)=0080H(SP)=6FH38) ANL C, /32H;Cy=0(32H)=1 ,提示此处32H为位存储器39) STOP: JBC P0.3, STOP;(PC)=1200H(P0)=74H40) JNB P0.4, NEXT1;(PC)=1203H红色部分为附加题,答案就在本期内找_,看看你们的本事了,哈哈哈哈3-7 分析下列程序段的功能。1) MOV A, R3MOV R4, A功能:将R3中的内容送入R4,即(R3)R42) MOV A, R5CPL AMOV R5, A功能:R5中的数据按位取反后送回R53

23、) MOV A, R4MOV B, R5DIV ABMOV R4, BMOV R5, A功能:R4中的数除以R5中的数,结果商送入R5,余数送入R44) MOV C, P1.1ANL C, P1.2ANL C, /P1.3MOV P1.6, C功能:P1.1P1.2P1.3P1.65) MOV C, 0ORL C, 1MOV F0, CMOV C, 2ORL C, 3ANL C, F0MOV P1.7, C功能:(20H).0(20H).1) (20H).2(20H).3) P1.7 6) CLR CMOV A, R4RLC AMOV R4, AMOV A, R3RLC AMOV R3, A功

24、能:R3、R4中的内容左移一位,R4最低位移入0,R4最高位移入R3最低位,R3最高位移出至Cy。7) CLR CMOV A, R5RLC AADD A, R5MOV R5, A功能:(R5)×3R58) CLR AMOV R0, AMOV R7, ALOOP: MOV R0, AINC R0DJNZ R7, LOOPSTOP: SJMP STOP功能:将内部数据存储器00H0FFH 256个单元全部清零。9) PUSH ACCPUSH BPOP ACCPOP B功能:利用堆栈将ACC与B中的内容互换,即(ACC)(B)10) MOV R0, #30HXCHD A, R0SWAP A

25、INC R0XCHD A, R0SWAP AMOV 40H , A功能:将ACC的低四位送入30H单元低四位,ACC的高四位送入31H的低四位,而原先30H单元的低四位送入40H单元的低四位,原31H单元的低四位送入40H单元的高四位。举例说明如下,设程序段运行前有(ACC)=12H,(30H)=34H,(31H)=56H;则程序段运行后有(30H)=32H,(31H)=51H, (ACC)= (40H)=64H3-8 指出下列指令中哪些是合法指令,哪些是非法指令。MOV P1, R4;合法MOV R2,R4;非法CLR R3;非法RLC R5;非法MOV 30H, 31H;合法MOV 00H

26、, P;非法ORL 40H, R7;非法PUSH R6;非法POP R0;非法INC DPTR;合法注:常见的错误还有类似:MOV R0, C; ADD 30H,31H; MOV A, R5; DEC DPTR等,编程时切记勿错!3-9 按要求编制下列各程序段。将内部数据存储器30H和31H单元的内容互换。法一:MOV A, 30HXCH A ,31HMOV 30H, A 法二:XCH A, 30HXCH A ,31HXCH A, 30H比较法一、法二的优缺点,你认为哪个方法更好?将寄存器R7的内容向右循环移位一次。XCH A, R7RR AXCH A, R7将寄存器R3的内容乘以4(结果不超

27、出8为二进制数的范围)。法一:MOV A, R3MOV B, #4MUL ABMOV R3, A法二:XCH A, R3RL ARL AXCH A, R3将寄存器DPTR的内容减1。法一:判断DPL=0否?如是, DPL减1后,DPH也减1;否则,DPH不变。XCH A, DPLJNZ NOBDEC DPHNBO: XCH A, DPL DEC DPL法二:(DPH)(DPL) -1DPH,DPL(即DPTR)CLR CXCH A, DPLSUBB A, #1XCH A, DPL XCH A, DPHSUBB A, #0XCH A, DPH法三:(DPH)(DPL)+0FFFFHDPTRXCH

28、 A, DPLADD A, #0FFHXCH A, DPL XCH A, DPHADDC A, #0FFHXCH A, DPH比较以上各方法,其中法三利用了-1的补码是0FFFFH的原理,将减法改为了加法。将寄存器R6的内容压入堆栈(设寄存器工作在3区)PUSH 1EH将R4, R5寄存器连接起来循环右移一位。(设R4为高8位,R5为低8位;执行完后R4R5中的内容右移一位,R4的最低位移入R5的最高位,同时R5的最低位移入R4的最高位)XCH A, R4;将R4中的内容送入ACC,同时将ACC的内容放入R4中暂存。RRC A;ACC中原先R4的内容右移一位,同时Cy移入最高位,而原先R4的最

29、低位移入Cy位XCH A, R5;R5中的内容送入ACC,上一步中产生的ACC的内容送入R5暂存RRC A;ACC中原先R5的内容右移一位,Cy(即原R4的最低位)移入最高位,而原R5的最低位移入Cy位XCH A, R5;将结果送入R5(R5移位已完成),同时将第三步暂存在R5中的内容取出。MOV ACC.7, C;将Cy位中存放的原R5的最低位送入ACC的最高位(即送入R4的最高位)XCH A, R4;将结果送入R4,同时取出ACC原来的值第四章习题答案4-1 用伪指令将下列常数依次定义在1600H为首地址的程序存储器中。0,1,4,9,16,25,36,49,64,81答:ORG1600H

30、DB 0,1,4,9,16,25,36,49,64,814-2 用伪指令将下列常数依次定义在1700H为首地址的程序存储器中,要求数据类型一致。0,1,8,27,64,125,216,343,512,729答:提示:因为343,512,729为双字节数据(>255),所以所有数据均应以双字节存入。ORG1700HDW 0,1,8,27,64,125,216,343,512,7294-3 用伪指令将字节型变量X1、X2定义在内部数据存储器30H、31H单元中,将字节型变量Y1、Y2定义在外部数据存储器2000H、2001H单元中。答:X1 DATA30HX2DATA31HY1XDATA20

31、00HY2XDATA2001H4-4 用伪指令将ASCII码字符串“Beijing,tjjtds!”定义在1200H为首地址的程序存储器中。答:ORG1200HDB Beijing,tjjtds!4-5 用伪指令将逻辑变量A1、A2定义在00H、01H位单元中答:A1 BIT00HA2BIT01H4-6 编一程序段,将1400H为首地址的外部数据存储器中200个单字节数据转移至1500H为首地址的外部数据存储器中。MOVDPTR, #1400H;用DRTR指向源数据块单元地址MOV P2, #15H;用P2,R0指向目标地址MOVR0, #00HMOVR7, #200;数据个数送入R7LOOP

32、:MOVXA, DPTRMOVXR0, AINCDPTR;修改源数据块指针INCR0;修改目标单元地址指针DJNZR7, LOOPSJMP4-7 编一程序段,将30H为首地址的内部数据存储器中20个单字节补码数据中的负数传送至2400H为首地址的外部数据存储器中。MOVR0, #30H;用R0指向源数据块首地址MOVDPTR, #2400H;用DRTR指向目标区首地址MOVR7, #20;数据个数送入R7LOOP:MOVA, R0;取出源数据JNBACC.7, NEXT;若源数据最高位=0,则表示数据为非负数,无需传送,可直接取下个数据MOVXDPTR, A;若取出的数据为负数,则传送到外部R

33、AM,同时修改DPTRINCDPTRNEXT:INCR0DJNZR7, LOOPSJMP4-8 编一程序段,将40H为首地址的内部数据存储器中25个单字节数据,依次下移一个单元。提示:根据题意即将40H58H中的数据依次送入41H59H中XCHA, 40H;ACC内容送入40H暂存保护,同时取出40H单元中内容MOVR0, #41H;R0指向目标单元首地址MOVR7, #25;数据长度送R7LOOP:XCHA, R0;前一个单元数送后一个单元,同时取出后一个单元原先的数据暂存入ACCINCR0DJNZR7, LOOPMOVA, 40H;恢复ACC原来的内容STOP:SJMPSTOP4-9 编一

34、程序段,完成函数y=x2+5x+6的计算。设0x10。提示:据题意6y156,即结果为单字节数据。XDATA30HYDATA31HMOVA, XMOVB, XMULABMOVY, A;X2YMOVA, XMOVB, #5MULABADDA, Y; X2+5X ACCADDA, #6; X2+5X+6 ACCMOVY, A; X2+5X+6 YSTOP:SJMPSTOP讨论:有时仔细分析问题,可以将程序变得更简单,如上题中y=x2+5x+6=(x+2)(x+3),则程序为XDATA30HYDATA31HMOVA, XADDA, #2MOVB, A; (x+2)INCA; (x+3)MULABMO

35、VY, A; X2+5X+6 YSTOP:SJMPSTOP4-10 编一程序段,完成逻辑函数L=XYZ 的计算。提示:此程序按照51汇编程序标准格式编写,整个程序构成一个完整结构,单片机运行时将反复执行该程序,即当输入变量发生变化时,输出逻辑函数L将立刻发生相应的变化。XBITP1.0YBITP1.1ZBITP1.2;分别定义变量X,Y,Z由P1口的低三位(P1.0,P1.1,P1.2)输入LBITP1.7;定义函数L由P1.7输出ORG0;用户程序第一条指令必须放在程序存储器0000H单元中LJMPMAIN;此处安排一条长调换指令,跳到主程序处,目的:避开03H开始的中断入口ORG200H;

36、主程序安排在程序存储器200H单元开始MAIN:MOVC, XANLC, /YANLC, ZCPLCMOVL, CSJMPMAIN;真正的实用程序必须构成一个死循环结构,使得单片机可以反复地执行;用户设定的功能讨论一:若上列函数改为L=XY+XZ+YZ,如何编程,给两个答案,自己比较体会!MOVC, XANLC, YMOVF0, CMOVC, XANLC, ZORLC, F0MOVF0, CMOVC, YANLC, ZORLC, F0MOVL, C MOVC, XANLC, YJCOUTMOVC, XANLC, ZJCOUTMOVC, YANLC, ZOUT: MOVL, C讨论二:若上列函数

37、改为L=(X+Y)(X+Z)(Y+Z),如何编程,给两个答案,结合讨论一自己比较体会!MOVC, XORLC, YMOVF0, CMOVC, XORLC, ZANLC, F0MOVF0, CMOVC, YORLC, ZANLC, F0MOVL, C MOVC, XORLC, YJNCOUTMOVC, XORLC, ZJNCOUTMOVC, YORLC, ZOUT: MOVL, C4-11 阅读下列各程序段,并说明其功能。START:MOV DPTR, #1000HMOV R7, #10MOVX A,DPTRMOV B, A;取出外部RAM单元1000H单元中的数送入BLOOP:INC DPTR

38、;每次循环逐个取出外部RAM单元1001H开始的单元中的内容MOVX A, DPTRCJNE A, B, COMP;比较(A)和(B),无论是否相等,均转向下条指令,判断Cy位COMP:JC NEXT;Cy=1,则(A)(B),不作处理,直接进下个循环,取下个数据判断MOV B, A;若Cy=0,则(A)(B),将(A)BNEXT:DJNZ R7, LOOPSTOP:SJMP STOP功能:判断外部数据寄存器1000H开始的11个单元中的最大值,将最大值送入寄存器B。START:MOV R2, #0MOV R7, #8MOV A, R3;(R3) ACCLOOP:RLC A;8次循环,每次循环

39、,将R3中的内容由最低位开始,逐位移入CyJNC NEXT;Cy=0,则不做任何操作,直接进入下个循环INC R2;若上句条件不成立,即R3中移出的位=1, 则(R2)+1 R2NEXT:DJNZ R7, LOOPSTOP:SJMP STOP功能:统计R3中1的个数,并将统计结果送入R2。START:MOV 30H, #0MOV R0, #50HLOOP:MOV A, R0CJNE A, #0FFH, NEXTSJMP STOPNEXT:INC 30HINC R0SJMP LOOPSTOP:SJMP STOP功能:统计存放在内部数据存储器50H开始的数据块的长度(即数据块占多少个字节),数据块

40、以0FFH为结束标志。4-12 编一子程序,将一个非压缩8421BCD码(即单字节BCD码)转换成七段显示码。设09的BCD码对应的七段显示码分别为3FH、06H、6BH、4FH、66H、6DH、7DH、07H、7FH、6FH。进子程序前,BCD码被放在累加器ACC中;子程序运行后,相应的七段码也放在ACC中。(即入口参数和出口参数均在ACC中)。;BCD码转换成显示码;入口参数:子程序名CHSEG,单字节BCD码放在累加器ACC中;出口参数:七段显示码放在ACC中CHSEG:ADDA, #1;加上偏移量,偏移量为MOVCA, A+PC指令与数据表首间的字节数MOVCA, A+PCRET;单字

41、节指令DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH;数据表一般紧跟着RET指令有另一法,不需计算偏移量CHSEG:ADDA, #SEGTB-SSG;用标号表达式,让编译程序计算偏移量MOVCA, A+PCSSG:RETSEGTB:DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH4-13 编一子程序,将一个09的七段显示码转换成对应的格雷码。09的格雷码请参阅本书表1-2。设进子程序前,七段显示码被放在内部数据存储器40H中;子程序运行后,相应的格雷码放在内部数据存储器50H中。(即入口参

42、数为40H,出口参数为50H)。算法一提示:根据09的序号依次查出对应的显示码,然后与40H中的内容比较,如果相等,则根据当前序号查表得到对应的格雷码。; 显示码转换成格雷码;入口参数:子程序名CHGRY,七段显示码被放在内部数据存储器40H中,影响ACC,B,Cy位;出口参数:格雷码放在内部数据存储器50H中CHGRY:PUSHACC;保护现场PUSHBPUSHPSWMOVB, #0;用B记录09的序号NEXT:MOVA, B;ADDA, #SEGTB-SSG;用标号表达式,让编译程序计算偏移量MOVCA, A+PC;根据当前序号,查取对应的显示码SSG:CJNEA, 40H, NEQ;比较

43、取得的显示码与源单元中的显示码MOVA, B;如果相等,则根据当前序号,查取对应的格雷码ADDA, #GRYTB-SGRMOVCA, A+PCSGR:MOV50H, A;将查取的格雷码送入目标单元POPPSW;恢复现场POPBPOPACCRET;返回NEQ:INCB;如果不想等,则将序号增1,查取下个显示码作比较SJMPNEXTSEGTB:DB3FH, 06H, 6BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH;显示码表GRYTB:DB00H, 01H, 03H, 02H, 04H, 05H, 07H, 06H, 08H, 09H;格雷码表算法二提示:直接将显示码转

44、化成格雷码,程序烦了些,但方法很简单。; 显示码转换成格雷码;入口参数:子程序名CHGRY,七段显示码被放在内部数据存储器40H中,影响ACC,Cy位;出口参数:格雷码放在内部数据存储器50H中CHGRY:PUSHACC;保护现场PUSHPSWMOVA, 40HCJNEA, #3FH, NEQ0MOV50H, #00H;40H单元中的内容=0的显示码,则将0的格雷码送入50HNEQ0:CJNEA, #06H, NEQ1MOV50H, #01H;40H单元中的内容=1的显示码,则将1的格雷码送入50HNEQ1:CJNEA, #6BH, NEQ2MOV50H, #03H;40H单元中的内容=2的显

45、示码,则将2的格雷码送入50HNEQ2:CJNEA, #4FH, NEQ3MOV50H, #02H;40H单元中的内容=3的显示码,则将3的格雷码送入50HNEQ3:CJNEA, #66H, NEQ4MOV50H, #04H;40H单元中的内容=4的显示码,则将4的格雷码送入50HNEQ4:CJNEA, #6DH, NEQ5MOV50H, #05H;40H单元中的内容=5的显示码,则将5的格雷码送入50HNEQ5:CJNEA, #7DH, NEQ6MOV50H, #07H;40H单元中的内容=6的显示码,则将6的格雷码送入50HNEQ6:CJNEA, #07H, NEQ7MOV50H, #06

46、H;40H单元中的内容=7的显示码,则将7的格雷码送入50HNEQ7:CJNEA, #7FH, NEQ8MOV50H, #08H;40H单元中的内容=8的显示码,则将8的格雷码送入50HNEQ8:CJNEA, #6FH, QUITMOV50H, #09H;40H单元中的内容=9的显示码,则将9的格雷码送入50HQUIT:POPPSW;恢复现场POPACCRET4-14 编一子程序,完成两双字节无符号数相加。设加数和被加数分别放在0区寄存器R2、R3和R4、R5中,运算结果存放在0区寄存器R6、R7中。若运算结果发生进位,使00H位单元=1;反之,使00H位单元=0。;双字节无符号数相加;入口参

47、数:子程序名NADD,加数和被加数分别放在0区寄存器R2、R3和R4、R5中,影响ACC, 位Cy;出口参数:运算结果存放在0区寄存器R6、R7中,00H位单元存放双字节相加的进位标志NADD:PUSHACC;保护现场PUSHPSWMOVA, R2;(R2)+(R4)R6ADDA, R4MOVR6, AMOVA, R3;(R3)+(R5)R7ADDCA, R5MOVR7, AMOV00H, C;Cy00HPOPPSWPOPACC;恢复现场RET 4-15 编制一子程序,完成10ms较精确延时功能。设系统时钟频率为24MHz。提示:时钟频率为24MHz,则每个机器周期T0.5us,10ms延时即

48、需要10000us /0.5us =20000=500×40个机器周期T。软件延时子程序,就是用循环结构反复执行一些指令,而指令执行时都需要时间,所以执行完该子程序后,即完成了延时功能。;软件延时10ms;入口参数:子程序名DELAY,影响2区寄存器R0, R1;出口参数:无DELAY:PUSHPSW;1TMOVPSW, #18H;1TMOVR0, #40;1TDL:MOVR1, #248;1T*40DL1:DJNZR1, DL1;2T*248*40=19840TNOP;1T*40DJNZR0, DL;2T*40POPPSW;1TRET;2T,总延时3T+40T+19840T+40T

49、+80T+3T=20006T,误差6T=3 us,相当准了4-16 编制一子程序,将10个非压缩BCD码转换成5个压缩BCD码。设进子程序前,非压缩BCD码被放在40H为首地址的内部数据存储器中;子程序运行后,压缩BCD码放在50H为首地址的内部数据存储器中。功能说明:若进子程序前40H49H单元中的内容为01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,则子程序运行后50H54H中的内容为12H,34H,56H,78H,90H;BCD码压缩;入口参数:子程序名BCDCH,非压缩BCD码被放在40H为首地址的内部数据存储器中;影响ACC,2区寄存器R0, R1, R7;出口参数:压缩BCD码放在50H为首地址的内部数据存储器BCDCH:PUSHACC;保护现场PUSHPSWMOVPSW, #10H;设定当前工作寄存器区为2区MOVR0, #40H;R0指向源数据块首地址MOVR1, #50H;R1指向目标数据块首地址MOVR7, #5;转换5次LO

温馨提示

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

评论

0/150

提交评论