单片机原理与应用第三版赵德安课后习题答案_第1页
单片机原理与应用第三版赵德安课后习题答案_第2页
单片机原理与应用第三版赵德安课后习题答案_第3页
单片机原理与应用第三版赵德安课后习题答案_第4页
单片机原理与应用第三版赵德安课后习题答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章1. 单片机内部至少包含哪些部件?答:中央处理器 CPU I/O 口、随机存储器 RAM只读存储器 ROM2. 根据程序存储器的差别,单片机可以分为哪几种类型?答:MCS-51系列单片机按片内不同程序存储器的配置来分,可以分为以下3种类型:1、片内带 Mask ROM掩膜ROM型:例如8051、80C51、8052、80C52。此类芯片是由半 导体厂家在芯片生产过程中, 将用户的应用程序代码通过掩膜工艺制作到 ROM中。其应用程 序只能委托半导体厂家“写入”,一旦写入后不能修改。此类单片机适合大批量使用。2、片内带EPROMS:例如8751、87C51、8752。此类芯片带有透明窗口,可

2、通过紫外 线擦除存储器中的程序代码, 应用程序可通过专门的编程器写入到单片机中, 需要更改时可 擦除重新写入。此类单片机价格较贵,不宜于大批量使用。3、片内带EEPROM电可擦可编程只读存储器 )型:例如8951、89C51、8952。此类芯片 可以在电脑上或专用设备上擦除已有信息,重新编程。此类单片机目前应用很广。4、片内无ROM(ROMLes型:例如8031、80C31、8032。此类芯片的片内没有程序存储 器,使用时必须在外部并行扩展程序存储器存储芯片。 此类单片机由于必须在外部并行扩展 程序存储器存储芯片,造成系统电路复杂,目前较少使用。3. 单片机的主要特点是什么?它适宜构成通用微机

3、系统还是专用微机系统?为什么? 答:单片机是一种集成电路芯片, 是采用超大规模集成电路技术把具有数据处理能力的 中央处理器CPU随机存储器 RAM只读存储器 ROM多种I/O 口和中断系统、定时器/计时 器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。其主要特点如下:1 、价格便宜。2、功能不大。只能专用在适用的领域,但在适用的领域中,性价比却是最佳。3、可靠性高,抗干扰能力强。4、功耗比较低。对电源要求低,适用面广。5、外围扩展能力强。可以应用到不同的控制系统中。根据其特点可知, 单片机功能不大, 不适宜构成

4、通用微机系统, 只适宜构成专用微机系 统。4. 研制微机应用系统时,应如何选择单片机的型号?答:在单片机应用研究系统开发中, 单片机是整个设计的核心。 在进行正式的单片机应 用研究系统开发之前,需要根据不同单片机的特性,从中作出合理的选择。1. 仔细调查市场,尽量选用主流的、货源充足的单片机型号,这些器件使用比较广泛, 有许多设计资料供学习或参考。2. 尽量选择所需硬件集成在单片机内部的型号,例如ADC DAC I2C、SPI和USB等。这样便于整个控制系统的软件管理, 减少外部硬件的投入, 缩小整体电路板的面积, 从而减 少总体投资等。3. 对于手持设备, 移动设备或者其他需要低功耗的设备,

5、 尽量选择低电压、 低功耗的单 片机型号,这样可以减少能量的消耗,延长设备的使用寿命。4. 在资金等条件允许的情况下, 尽量选择功能丰富, 扩展能力强的单片机, 这样便于以 后的功能升级和扩展。5. 对于体积有限制的产品, 尽量选择贴片封装的单片机型号, 这样可以减少电路板面积, 从而降低硬件成本,同时也有助于电磁兼容设计。第二章1、分别写出一个 MCS-51中ROM EPROM无ROM型单片机的型号和内部资源。其中哪个产品内部具有固化的软件?该软件能否被所有用户所使用?怎样使用该种产品?答:1、8051、80C51、8052、80C52。此类芯片带有 4K字节的掩膜 ROM由半导体厂家 在芯

6、片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM中。其应用程序只能委托半导体厂家“写入”,一旦写入后不能修改。2、 8751、87C51、8752。此类芯片带有 4K字节的EPROM带有透明窗口,可通过紫外 线擦除存储器中的程序代码, 应用程序可通过专门的编程器写入到单片机中, 需要更改时可 擦除重新写入。3、8031、80C31、8032。此类芯片片内无 ROM使用时必须在外部并行扩展程序存储器 芯片。其中8051、80C51、8052、80C52等产品具有固化软件, 该软件不能被所有用户所使用, 应用程序只能委托半导体厂家“写入”。2. MCS-51中无ROMS单片机在应用中 P

7、2 口和P0 口能否直接作为输入/输出口连接开关、 指示灯之类的外围设备?为什么?答:不能。因为无 ROM型单片机在应用中必须扩展程序存储器,P0 口必须作为地址总线的低8位及数据总线复用,P2 口必须作为高8位地址总线送出高 8位地址,因此 P2 口和P0 口的输出信号都是不稳定的,不能直接作为输入/输出口连接开关、指示灯之类的外围设备。3. 什么是堆栈? 8032 的堆栈区可以设在什么地方?一般应设在什么区域 ?如何实现? 试举例说明。答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以”后进先出”的结构方式处理的。实质上,堆栈就是一个按照 "后进先出 "原则

8、组织的一段内存区域。堆栈操作指令PUSH direct、POP direct只能采用直接寻址方式,8032的片内RAM中只有低128字节可以采用直接寻址方式访问,因此,尽管8032片内RAM的地址范围是00H-0FFH,但堆栈区只可以设在内部RAM中的00H-7FH的区域内,一般应设在30H-7FH的范围内。可以通过赋值的方式设置堆栈区,如:MOV SP, #60H。4. 8031的内部RAM中 哪些可以作为数据缓冲区?答:8031内部RAM的128字节均可以作为数据缓冲区,但00H1FH通常作为工作寄存器区使用,20H2FH通常作为位寻址区使用。5. 对于 8052 单片机,地址为 90H

9、的物理单元有哪些?答:一个是P1 口,P1 口的物理地址就是 90H,使用直接寻址方式访问; 还有一个是 RAM 单元,必须使用寄存器间接寻址方式访问。6. MCS-51单片机构成系统时,程序存储器的容量最大是多少?答:MCS-51单片机构成系统时,程序存储器的容量最大是64KB7. 当单片机系统的程序存储器的容量为8KB时,程序存储器的开始地址为多少?答:因为单片机复位时,PC=OOOOH程序都是从0000H开始执行,所以无论何种情况, 程序存储器的开始地址都必须是0000H。8. MCS-51单片机构成系统时,外部数据存储器的容量最大是多少?答:MCS-51单片机构成系统时,外部存储器的容

10、量最大是64KB9. 当单片机系统外部数据存储器的容量为8KB时,数据存储器的开始地址一定要是0000H 吗?答:不一定。10. 什么是单片机的的节电方式?答:MCS-51系列运行时耗电小,还提供两种节电工作方式空闲方式和掉电方式。在单片机空闲时程序停止运行,进入待机状态,在接收到一个中断时退出空闲方式,处理完后继续进入空闲方式,就这样断断续续的工作以达到节电目的。11. CHMOS型单片机,进入掉电方式时,单片机的振荡器是否工作?采用什么办法能使 单片机退出掉电方式?答:不工作。在掉电方式中,振荡器停止工作,单片机内部所以功能部件停止工作。在 掉电方式期间,内部 RAM和寄存器的内容维持不变

11、。退出掉电方式的唯一方法是硬件复位。12. CHMO型单片机,进入空闲方式时,单片机的振荡器是否工作?采用什么办法能使 单片机退出空闲方式?答:工作。进入空闲方式中,中断、串行口和定时器继续工作。CPU现场、内部RAM和其他特殊功能寄存器内容维持不变。有两种方法退出空闲方式,一是采用被允许的中断源请求中断;二是硬件复位,因为空 闲方式中,振荡器在工作,所以仅需两个机器周期便完成复位。第三章1. 指出下列指令中划线操作数的寻址方式和指令的操作功能。答:MOV A, #78H;立即寻址,将立即数送入累加器AMOV A, 78H ;直接寻址,将内部 RAM 78H单元内容送累加器 AMOV A, R

12、6;寄存器寻址,将 R6内容送累加器 AINC R;寄存器间接寻址,将指针 R0指向的内部RAM单元内容加1PUSH ACC直接寻址,将累加器 A的内容入栈RL A ;寄存器寻址,将累加器 A的内容左移1位CPL 30H ;位寻址,将位变量 30H的内容取反SJMP $相对寻址,原地等待MOV(A, A+PC基寄存器加变址寄存器间接寻址,程序存储器PC和累加器A中内容相加形成ROM地址,取数送到累加器 A。2. 指出下列指令中哪些是非法的?INC R1DEC DPTRMOV A, R2MOV R1, R0MOV P1.1, 30HMOV #30H, AMOV 20H,21HMOV OV, 30

13、HMOV A, A+DPTRRRC 30HRL BANL 20H,#30HXRL C, 30H答:DEC DPTRDEC DPLMOV A, R2 MOV A, R1MOV R1, R0 MOV A, R0MOV P1.1, 30H MOV C, 30H 和 MOV P1.1, CMOV #30H, AMOV A, #30HMOV OV, 30H MOV C, 30H 和 MOV OV, CMOV A, A+DPTR MOVC A, A+DPTRRRC 30HRRC A因为所有的移位指令均是对累积器A进行的RL BRL AXRL C, 30H错,因为位操作指令中,没有位的异或运算3.如何将1个

14、立即数30H送入内部RAM90H单元?如何将立即数送特殊功能寄存器P1 ?答:(1) MOV R0, #90HMOV R0, #30H(2)MOV P1, #30H4. 执行下列一段程序后,试分析有关单元内容。答:MOV PSW, #0;(PSW)=00HMOV R0, #30H;(R0)=30HMOV 30H, #40H(30H)=40HMOV 40H, #50(40H)=32HMOV A, R0(A)=40HADDC A, #0CEH (A)=40H+0CEH+0=0EHPSW=10000001B=81HINC R0(R0)=31H最后的执行结果: (R0)=31H, (30H)=40H,

15、 (40H)=32H, (A)=0EH, (PSW)=81HPSW.7IPSW.6IPSW.5PSW4PSW.3PSW.2 PSW.1PSW.OcyACt-'ORSIRSOovp5. 试编写一段程序,将内部 RAM 40H 41H单元内容传送到外部 RAM 2000H 2001H单 元中去。答:MOV DPTR, #2000HMOV R0,#40HMOV A, R0MOVX DPTR, AINC ROINC DPTRMOV A, R0MOVX DPTR, A6. 试编写一段程序,根据累加器A的内容,到程序存储器 1000H起始的表格中取一双字节数,送内部 RAM 50H 51H单元。答

16、:MOV DPTR, #1000HPUSH ACCMOVC A, A+DPTRMOV 50H, APOP ACCINC DPTRMOVC A, A+DPTRMOV 51H, A7. 试编写一段程序,进行两个16位数的相减运算:6483H-56E2H。结果高8位存内部RAM 40H 低 8 位存 41H。答:CLRCMOV A, #83HSUBB A, #0E2HMOV 41H, AMOV A, #64HSUBB A, #56HMOV 40H, A8. 试编写一段程序,将 30H、31H单元中存放的BCD数,压缩成一个字节(原 30H单元 内容为高位),并放入30H单元。答:MOV A, 30H

17、SWAP AORL A, 31HMOV 30H, A9. 试编写一段程序,将30H32H单元中的压缩 BCD拆成6个单字节BCD数,并放入33H 到38H单元。答: MOV A, 30HMOV R0, #33HACALL LPMOV A, 31HACALL LPMOV A, 32HACALL LPSJMP $LP: MOV B, AANL A, #0FHMOV R0, AINC R0MOV A, BSWAP AANL A, #0FHMOV R0, AINC R0RET10. 设晶振频率为6MHz试编写一个延时1ms的子程序,并利用该子程序, 编写一段主 程序,在P1.0引脚上输出高电平宽 2m

18、s、低电平宽1ms的方波信号。答:机器周期T=2卩s,延时1ms的子程序应运行500T,子程序为:DELAY: MOV R0, #248; 1TDJNZ R0, $; 2TNOP;1TRET2T子程序运行机器周期数为 :1T+248*2T+1T+2T=500T, 500T=1ms主程序为 :MOV PSW, #00HLOOP: SETB P1.0ACALL DELAYACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP第四章1. 试根据P1 口和P3 口的结构特性,指出它们作为输入口或第二功能输入/输出的条件。答:P1 口作为输入口时,相应的口锁存器必须先置“1”,使

19、输出场效应管 T截止,CPU读 P1 时才能准确读取外部电路的输入信息。同理,P3 口作为第二功能I/O 口时,相应的口锁存器也必须先置“1”。2. MCS-51中无ROM型单片机,在应用中P0 口和P2 口能否直接作为输入/输出口连接开 关、指示灯之类的外围设备?为什么?答:不能。因为无 ROM型单片机在应用中必须扩展程序存储器,P0 口必须作为地址总线的低8位及数据总线复用,P2 口必须作为高8位地址总线送出高 8位地址,因此 P2 口和P0 口的输出信号都是不稳定的,不能直接作为输入/输出口连接开关、指示灯之类的外围设备。3. 什么是堆栈?堆栈的作用有哪些?答:堆栈是在片内RAM中专门开

20、辟出来的一个区域,数据的存取是以”后进先出”的结构方式处理的。实质上,堆栈就是一个按照 "后进先出 "原则组织的一段内存区域。作用:(1)子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将 PC值弹出堆栈。( 2)保护现场 / 恢复现场( 3)数据传输4. MCS-51 的 T0、 T1 的定时器和计数器的方式差别是什么?试举例说明这两种方式的用 途。答:MCS-51的TO、T1的定时器和计数器本质上都是计数器,定时器方式是对单片机内部的机器周期数进行计数 , 计数器方式是对 T0、 T1 引脚上输入的外部脉冲 (方波 )信号进行 计数。定时器方式用来产生定

21、时信号,可用于串行通信,也可以通过口输出脉冲和方波信号; 计数器方式可以用来检测外部信号的频率和脉宽。5. 晶振为12MHz用TO产生1ms的定时,可以选择哪几种方式?分别写出定时器的方 式字和计数初值。如需要 1s 的定时,应如何实现?答:由于定时器工作在方式 2和方式3下时的最大定时时间只有 0.256ms,因此要想获 得1ms的定时时间,定时器必须工作在方式 0或方式1。机器周期T =12X 1/12 x 10-6s=1卩s, 计数值 T 计数=1ms/1 卩 m=10001、采用方式0,定时器的方式字 TMOD=00H定时器的计数初值为 TC= M T/ T计数 =213 1*103/

22、仁7192=1C18H , TH0 应装 # 1CH ; TL0 应装 #18H。2、采用方式1,定时器的方式字 TMOD=01H定时器的计数初值为 TC= M T/ T计数 =216 1*103/1=64536=FC18H , TH0 应装 # 0FCH ; TL0 应装 #18H。如需要1s的定时,可以采用查询相应溢出标志位,结合软件计数100循环,即可实现1s的定时。6. 晶振为 12MHz ,如何用 T0 来测试 20Hz1000Hz 之间的方波信号(设高低电平宽度 相同)的周期?又如何测试频率为 0.5MHz 左右的脉冲频率?答: 1 、使用定时器方式, 利用方波的边沿触发定时器的开

23、始与结束,比如使用上升沿 来启动定时器计数,机器周期T为1卩s,下降沿停止计数。依据计数值N计算周期,周期=2N*T 。2、T0 工作在计数器方式,待测试的脉冲信号引入 T0 引脚计数,同时 T1 工作在定时 器方式,定时1ms, 1ms定时结束时取T0计数值,脉冲频率=1000* T0计数值。7. 若晶振为11.0592MHz,串行口工作于方式 1、波特率为4800bit/s ,分别写出用T1、 T2 作为波特率发生器的方式字和计数初值。答:T1作为波特率发生器。由:波特率=2SMOd振荡器频率/32*12*(256-X)设 SMOD=0 可得,4800=2°*11059200/3

24、2/12/ (256-X),可得的计数初值 X=250=0FAH 将X值装入TH1中,TMOD=20HMOV TMOD,#20H; T1 方式 2MOV TH1,#0FAHT2 作为波特率发生器,需对 T2CON(置 “1” TCLK RCL)TH2 TL2、RCAP2H RCAP2L 初始化编程,再置“ 1” TR2,具体略。8. 串行口方式0能否外接多个74LS164?若不可以,说明原因;若可以,画出逻辑框图 并说明数据输出方法。答:串口工作方式0时,可以外接多个74LS164。此时TXD用于发送同步脉冲接 74LS164 的CLK端,RXD用于发送数据接第一片74LS164的数据输入端

25、DSA和DSB 74LS164的/CR和Vcc端接+5V, Vss端接地,后一片 74LS164的数据输入端 DSA和DSB接前一片74LS164 的Q7。只要将数据载入 SUBF之后,时钟脉冲和数据就会自动出现在单片机的I/O端口,程序不需要对I/O 口再进行干预。出现在74LS164的数据低位在右,高位在左。将数据多次载 入SUBF就可以在多个74LS164的输出端得到稳定的数据。逻辑框图略,可参考教材的例 4-8.9. MCS-51 的中断处理程序能否存储在 64KB 程序存储器的任意区域?若可以,如何实 现?答:可以。因为每个中断源的中断入口地址处均预留了 8个单元的空间, 8个单元足

26、够 存放一条跳转指令,使程序转向64KB程序存储区的任意区域。在相应的中断入口使用JMP指令进行跳转就可以实现。10. 在一个8031系统中,晶振为 12MHz 一个外部中断请求信号是一个宽度为500ms的负脉冲,则应该采用哪种中断触发方式,如何实现?答:应该采用边沿触发方式,采用 SETBIT0 或 SETB IT1 即可。若采用电平触发方式, 由于外部中断请求信号长期存在,可能会引起重复中断。11. 若外部中断请求信号是一个低电平有效的信号,是否一定要选择电平触发方式?为 什么?答:不一定。因为采用边沿触发,能自动锁存中断信号,是一种可靠的中断管理方式。第五章1. 若晶振为6MHz试编写一

27、个2ms延时子程序。答:晶振为6MHz机器周期T为2卩s,应计满1000个T。DELAY: MOV R7, #10DLY0: MOV R6, #49DLY1: DJNZ R6, DLY1 ; 2TDJNZ R7, DLY0 ; 2TRET1 ,波特率 1200bit/s( 晶振2. 试编制一个子程序,对串行口初始化,使串行口以方式为 11.059MHz)发送字符串“ MCS-51'。答:ORG 0000HAJMP MAINORG 0100HMAIN: MOV TMOD,#20HMOV TL1,#0E8HMOV TH1,#0E8HSETB TR1MOV SCON,#42HMOV R4,#

28、0MOV DPTR,#TABFS1: MOV A,R4MOVC A,A+DPTRCJNE R4,#6,FS2SJMP FSJSFS2: JBC TI,FS3SJMP FS2FS3: MOV SBUF,AINC R4SJMP FS1FSJS: SJMP $TAB: 'M , 'C' , 'S' , ' - ' , '5' , 'TEND第9位数据为奇校10个字符存入3. 晶振为11.059MHz,串行口工作与方式 3,波特率为2400bit/s 验位。编制一个程序,对串行口初始化,并用查询方式接受串行口上输入的 内部

29、RAM中 30H开始的区域。答:RECS MOVSCON #0D0H;串行口方式3允许接收MOVTMOD #20H;T1方式2定时MOVTL1, #0F4H;写入T1时间常数MOVTH1, #0F4HSETBTR1;启动T1MOVR0,#30H;设数据指针MOVR7,#10;接收数据长度WAIT:JBCRI,NEXT;等待串行口接收SJMP WAITNEXT:MOVA,SBUF;取一个接收字符JNBP, COMP;奇偶校验JNBRB8, ERR;PM RB8数据出错SJMPRIGHT;P=RB8数据正确COMP:JBRB8, ERRRIGHT:MOVR 0 A;保存一个字符INCR0;修改指针

30、DJNZR7 , WAIT;全部字符接收完 ?CLRF0;F0 =0,接收数据全部正确ERR: SETBF0;F0 =1 ,接收数据出错RET4. 写一个子程序,其功能是将(R0)指出的两个 RAMI单元中的数转化为 ASCII字符,并用查询方式从串行口上发送出去。答:设串行口以方式 1 工作,波特率为 1200bit/s ,晶振为 11.059MHz。ORG 0000HAJMP MAINORG 0100HMAIN: MOV TMOD,#20HMOV TL1,#0E8HMOV TH1,#0E8HSETB TR1MOV SCON,#42HMOV R4,#2FS1: MOV A,R0ANL A,#

31、0FHMOV DPTR,#TABMOVC A,A+DPTRFS2: JBC TI,FS3SJMP FS2FS3: MOV SBUF,AINC R0DJNZ R4,FS1 FSJS: SJMP $ TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,41H,43H,44H,45H,46HEND5. 试编写一个子程序将字符串“MCS-51 Microcomputer ”装入外部 RAM 8000H开始的显示缓冲区。答: ORG 0000HAJMP 0030HMIAN: MOV DPTR,#8000HMOV R1,#0MOV R0, #20LOOP

32、: MOV A,R1ADD A,#6MOVC A,A+PCMOVX DPTR,AINC DPTRINC R1DJNZ R0,LOOPSJMP $TAB:DB MCS-51 Microcomputer 'END6. 试设计一个n字节的无符号十进制数加法子程序,其功能为将(只0)和(R1)指出的内部RAM中两个n字节压缩BCD码无符号十进制数相加,结果存放于被加数单元中。子 程序入口时,RO, R1分别指向被加数和加数的低位字节,字节数n存于R2,出口时R0指向和的最高位字节, CY为进位位。答: LEN EQU nORG OOOOHAJMP MAINORG OO3OHMAIN: MOV

33、SP. #6OHMOV R2, #LENACALL ADD_NBYTESJMP $ADD_NBYTE: CLR CLOOP: MOV A, ROADDC A, R1DA AMOV RO, AINC ROINC R1DJNZ R2, LOOPRETEND7. 试设计一个n字节的无符号十进制数减法子程序,其功能是将R0指出的内部RAM中n字节无符号压缩 BCD码减去(R1)指出的内部RAM中 n字节无符号压缩 BCD码,结果存放在 被减数单元中。子程序入口时, RO, R1分别指向被减数和减数的低位字节,字节数n存于R2,出口 R0指向差的高位字节,CY=1为正,CY=O为负,结果为补码。答:以

34、n=2 为例。1. 将2字节无符号压缩 BCD码被减数转换4位BCD码,存入60H63H,再转换为二进制数, 存 R3R4。MOV A,ROANL A,#OFHMOV 63H,AMOV A,ROSWAP AANL A,#OFHMOV 62H,AINC ROMOV A,ROANL A,#0FHMOV 63H,AMOV A,R0SWAP AANL A,#0FHMOV 62H,ADTB:MOV R0,#60HMOV R3,#3MOV R3,#0MOV A,R0MOV R4,ALOOP:MOV A,R4MOV B,#10MUL ABMOV R4,AMOV A,BXCH A,R3MOV B,#10MUL

35、 ABADD A,R3MOV R3,AINC R0MOV A,R4ADD A,R0MOV R4,AMOV A,R3ADDC A,#0MOV R3,ADJNZ R2,LOOP2. 用相同程序可将2字节无符号压缩BCD码减数转换4位BCD码,存入60H63H,再转换 为二进制数,存 R5R6。3. 双字节无符号数减法程序 , 差存入 R7R1NSUB1:MOV A,R4CLR CSUBB A,R6MOV R1,AMOV A,R3SUBB A,R5MOV R7,AJBC POUTCMPT:MOV A,R1负数求补CPL AADD A,#1MOV R1,AMOV A,R7CPL AADDC A,#0M

36、OV R0,ADEC R0MOV R0,R1INC R0RET8. 试设计一个子程序, 其功能为判断 R2R3R4R沖的压缩BCD码十进制数最高位是否为 0,若最高位为 0,且该十进制数不为 0,则通过左移使最高位不为0。略其功能将R3R2 和 R5R4 相乘,积存于9. 试设计一个双字节无符号整数乘法子程序, 30H-33H 单元。答: MULTB: CLR AMOV 30H, AMOV 31H, A MOV 32H, A MOV 33H, A MOV R0,#30H MOV A,R2MOV B,R4 MUL AB ACALL RADD MOV A,R2 MOV B,R5 MUL AB DE

37、C R0 ACALL RADD MOV A,R4 MOV B,R3 MUL AB DEC R0 DEC R0 ACALL RADD MOV A,R5 MOV B,R3 MUL AB DEC R0ACALL RADD SJMP $RADD: ADD A,R0MOV R0,AMOV A,BINC R0ADDC A,R0MOV R0,AINC R0MOV A,R0ADDC A,#00H MOV R0,A RET10. 试设计一个子程序,其功能将无符号二进制整数R2R3R4R5除以R6R7,其商存放于30H,31H 单元,余数存于 R2R3。略11. 试设计一个子程序,其功能为将R0指出的内部RAM中

38、6个单字节正整数按从小到大的次序重新排列。答:ORG 0200HMOV 30H,#6SUM1 EQU 30HSUM2 EQU 31H LOOP1: MOV A,R0INC AMOV R1,AMOV SUM2,SUM1DJNZ SUM1,LOOP2SJMP DONELOOP2: DJNZ SUM2,LOOP3SJMP LOOP1LOOP3: MOV A,R0CLR CSUBB A,R1JC NEXTXCH A,R1MOV R0,ANEXT: INC R0INC R1SJMP LOOP2DONE: END12. 试设计一个子程序,其功能为应用查表指令:MOVC A,A+PC求累加器 A的平方值,结

39、果送入A入口时A<15。答: MEMO:INC AMOVC A,A+PCRETTAB: DB 0,1,4,9,16,25,36,49DB 64,81,100,121,144,169,196,22513. 试设计一个子程序,其功能将R0指出的内部 RAM中双字节压缩 BCD码转化为二进制数存放于R1指出的内部RAM中,并将结果再转化为BCD码存放于30H开始的单元中。答:先将压缩BCD码转化为BCD码存放于30H开始的单元中MOV R2,R0MOV A,R0PUSH ACCANL A,#0FHMOV 30H,APOP ACCSWAP AANL A,#0FHMOV 31H,AINC R0MO

40、V A,R0PUSH ACCANL A,#0FHMOV 32H,APOP ACCSWAP AANL A,#0FHMOV 33H,AMOV A,31H; ( R1)=(31H)*10+(30H)MOV B,#10MUL ABADD A,30HMOV R1,AMOV A,32H; (R1)+1)( R1)=(32H)*100+( R1)MOV B,#100MUL ABADD A,R1MOV R1,AINC R1MOV A,BADDC A,R1MOV R1,AMOV A,33H; (R1)+1)( R1)= (33H)*1000+(R1)+1)( R1)MOV B,#232MUL ABDEC R1A

41、DD A,R1 PUSH PSWMOV R1,A INC R1MOV R1,BMOV A,33HMOV B,#3MUL ABPOP PSW ADDC A,R1MOV R1,A14. 若晶振为6MHz用TO产生500us的定时中断,试编写有关的初始化程序和对时钟 进行计数的TO中断服务程序。时钟计数单元为:30H, 31H, 32H,分别存放压缩 BCD码的时分秒参数。答:晶振为6MHz机器周期T为2卩s, 500us=250T, TO可以工作在方式 2。有关的初始化 程序和对时钟进行计数的 TO中断服务程序如下:ORG OOOOHSJMP MAINORG OOOBHSJMP PTOORG OO

42、3OHMAIN: MOV TMOD,#O2HMOV THO,#6MOV IE,82HSETB TROCLR AMOV 3OH,AMOV 31H,AMOV 32H,AMOV 33H,AMOV 34H,AMOV 35H,AMOV R7,#4OMOV R6,#5OSJMP $PTO: DJNZ R7,A1MOV R7,#4ODJNZ R6,A1MOV R6,#5OINC 33HCJNE 33H,#6O,A2MOV 33H,#OMOV 30H,#0INC 34HCJNE 34H,#60,A3MOV 34H,#0MOV 31H,#0INC 35HCJNE 35H,#24,A4MOV 35H,#0MOV 32H,#0A1: RETIA2:

温馨提示

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

评论

0/150

提交评论