单片机原理及应用习题答案_第1页
单片机原理及应用习题答案_第2页
单片机原理及应用习题答案_第3页
单片机原理及应用习题答案_第4页
单片机原理及应用习题答案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、?单片机原理及应用?习题答案习题1解答1. 填空: 201010014;1100101B10165;1F8H1 1111 1000504; 1个字节由 8 个二进制位组成,每个二进制位只有 2 种状态,可表示为 0 或 1 ; 1K字节就是2的 10 次方字节,即 1024 个字节;1M字节就是2的 20 次方字节,约为 1048567 个字节。2. 在8位二进制中,26、26、127、1的补码用十六进制表示是多少?解:正数的补码等于原码,负数的补码等于它的原码除符号位不变,其余的各位求反加1。26原=0001 10101B=1AH,26补=1AH26原=1001 10101B,26补=111

2、0 0101B+1=1110 0110B=0E6H127原=1111 1111B,127补=1000 0000B+1=1000 0001B=81H1原=1000 0001B,1补=1111 1110B+1=1111 1111B=0FFH3. 用十进制写出以下补码表示的数的真值:FEH、FBH、80H、11H、70H、7FH。解:真值是指日常用“+或“ 号表示的数。机器数是指计算机中用编码表示的数,正数的符号以最高位为0表示,负数的符号以最高位为1表示。根据补码求真值的一个通俗口诀是“正码不变,负码求补,补后勿忘添负号。FEH=1111 1110B,其符号位为“1,属负数,故其原码为1000 0

3、001B+1=1000 0010B,即FEH真值为2;同理FBH属负数,其真值为5;80H的真值为128;11H的真值为+17;70H的真值为+112;7FH的真值为+127。4. 微型计算机主要由哪几局部组成?各局部有何功能?答:一台微型计算机由中央处理单元CPU、存储器、I/O接口及I/O设备等组成,相互之间通过三组总线Bus:即地址总线AB、数据总线DB和控制总线CB来连接。CPU由运算器和控制器组成,运算器能够完成各种算术运算和逻辑运算操作,控制器用于控制计算机进行各种操作。存储器是计算机系统中的“记忆装置,其功能是存放程序和数据。按其功能可分为RAM和ROM。输入/输出I/O接口是C

4、PU与外部设备进行信息交换的部件。总线是将CPU、存储器和I/O接口等相对独立的功能部件连接起来,并传送信息的公共通道。5. 何为存储器单元的地址?答:存储器中存放二进制数的单元称为存储单元。存储器中包含许多存储单元,为了便于信息的存入和取出,每一个存储单元必须有一个固定的编号来标识,称这个编号为存储器单元地址。6 .何谓单片机?单片机有何特点?答:单片机Single Chip Microcomputer是指把CPU、RAM、ROM、定时器/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。单片机在控制应用领域中的特点:面向控制,能针对性地解决从简决从简单到复杂的各类控制任

5、务,因而获得最正确的性能价格比;抗干扰能力强、适应温度范围宽,能在各种恶劣的环境下都能可靠性地工作;能方便地实现多机和分布式控制,从而使整个控制系统的效率和可靠性大大提高;体积小、功耗低、低本钱、控制功能强、易于产品化,能方便地组成各种智能化的控制设备和仪器,做到机、电、仪一体化。7 .单片机内部ROM的配置有几种形式?答:单片机片内ROM的配置状态可分四种:片内掩膜MaskROM型单片机如8051,适合于定型大批量应用产品的生产;片内EPROM型单片机如8751,适合于研制产品样机;片内无ROM型单片机如8031,需外接EPROM,单片机扩展灵活,适用于研制新产品;EEPROM或Flash

6、ROM型单片机如89C51,内部程序存储器电可擦除,使用更方便。习题2解答1.8051单片机内包含哪些主要逻辑功能部件?答:8051单片机是一个完整的单片微型计算机。它包括以下功能部件:一个芯片上,集成了一个微型计算机的根本组成局部。它包括以下功能部件:1个8位CPU;片内4KB的程序存储器ROM;片内128B的数据存储器RAM;可寻址外部程序存储器和数据存储器空间各64KB的控制电路;21个特殊功能存放器SFR;4个8位并行I/O口P0P3,共32根I/O线;1个全双工的串行口;2个16位定时器/计数器;5个中断源,有2个优先级嵌套中断结构;片内振荡器及时钟电路。2.8051单片机的信号有何

7、功能?8031的引脚应如何处理,为什么?答:(1) 是访问外部程序存储器ROM的控制信号。当为低电平接地时,CPU只执行外部程序存储器中的程序。当为高电平且PC值小于0FFFH4K时,CPU执行内部程序存储器的程序,但当PC的值超出4K时对8051/8751/8951将自动转去执行片外程序存储器内的程序。8031单片机无片内ROM的,必须外接程序存储器,因此,8031的必须接地低电平。38051单片机的P0P3口各有什么特点?8051单片机有P0、P1、P2、P3四个双向的8位并行I/O口,每个端口可以按字节输入或输出,每一条I/O线也可以单独用作输入或输出即按位进行输入或输出。每个端口都是由

8、一个锁存器即特殊功能存放器P0P3,一个输出驱动器和两个P3口为3个输入缓冲器组成。并行I/O口作输出时数据可以锁存,作输入时数据可以缓冲,但它们又各具特点。P0口和P2口构成MCS51单片机的16位地址总线,P0口还是8位的数据总线。P3口多用于第二功能输入或输出,。通常只有P1口用于一般输入/输出。P3口各位的第二功能P3口引脚第二功能P3口引脚第二功能P3.0RXD串行输入端P3.4T0定时器0的外部输入P3.1TXD串行输出端P3.5T1定时器1的外部输入P3.2外部中断0输入P3.6片外数据存储器写选通控制输出P3.3外部中断1输入P3.7片外数据存储器读选通控制输出系统复位后,P0

9、P3口的32个管脚均输出高电平,因此在系统的设计过程中,应保证这些管脚控制的外设不会因为系统复位而发生误动作。P0P3口输出级的电路结构有所不同。P0口是三态输出,其每个管脚均可以驱动8个LSTTL输入,而P1P3口的输出级均有上拉电阻,每个管脚可驱动4个LSTTL输入。每个并行口,可定义一局部管脚为输入脚,另一局部管脚为输出脚,没有使用的管脚可以悬空。4.简述8051单片机存储器的组织结构和片内RAM的空间分配。答:8051单片机的存储器包括程序存储器和数据存储器,从用户使用的角度可分为三个逻辑地址空间:片内、片外统一编址的64KB程序存储器地址空间0000HFFFFH;64KB的外部数据存

10、储器或扩展I/O口地址空间0000HFFFFH;256B的片内数据存储器地址空间00HFFH包括低128B的内部RAM地址00H7FH和高128B的特殊功能存放器地址空间,21个SFR离散地分布在这个区域。内部RAM共有128个单元,根据用途可划分为工作存放器区、位寻址区和通用RAM区,各区域的特性如下:工作存放器区00H1FH 存放器区32个单元共分4个组,每个组有8个8位的存放器R0R7。在任何时刻,四个组中只能有一组可以成为当前工作存放器组使用,其他三组作为一般的内部RAM使用。当前工作存放器组由程序状态字存放器PSW的RS0和RS1两位的状态来决定。 位寻址区 20H2FH共16个单元

11、,每个单元有8个位,每个位都有一个位地址,编号为00H7FH,位寻址区的16个单元也可以按字节寻址,作为一般的内部RAM使用。 通用RAM区30H7FH 这局部存储空间作为一般的内部RAM区或堆栈区,CPU只能按字节方式寻址。5. 8051单片机有哪些特殊功能存放器?各在单片机中的哪些功能部件中?答: 8051单片机有21个8位的特殊功能存放器SFR,它们的地址离散地分部在内部数据存储器的80HFFH地址空间。在8051单片机结构中,21个SFR在物理上是分散在片内各功能部件中: CPU的中SFR:Acc、B、PSW、SP和DPTR16位存放器,由DPH和DPL组成; 定时/计数器单元中的存放

12、器:TMOD、TCON、T016位存放器,由TH0和TL0组成和T116位存放器,由TH1和TL1组成; 并行I/O口存放器:P0、P1、P2和P3; 中断系统内的存放器:IE和IP; 串行端口中的存放器:SCON、SBUF和PCON。6程序计数器PC有何作用?是否属于SFR,为什么?答:程序计数器PC是一个16位的专用存放器,用来存放即将要执行的指令地址,可对64KB的程序存储器直接寻址。它具有自动加1功能,当CPU要取指令时,PC的内容送地址总线上,从存储器中取出指令后,PC内容那么自动加1,指向下一条指令,从而保证程序按顺序执行。PC虽然也是CPU内部的一个存放器,但它在物理结构上是独立

13、的,没有地址,是不可寻址的,用户无法对它进行直接读写,不属特殊功能存放器。7什么叫堆栈?堆栈指针SP的作用是什么?8051单片机堆栈的最大容量是多少字节?答:堆栈是按照“先进后出,后进先出的原那么来存取数据的一个内部RAM区域,这个存储器区域的一端是固定的栈底,另一端是活动的栈顶,每个存储单元是不能按字节任意访问的。堆栈指针SP始终指向栈顶单元,栈顶随着数据入栈和出栈上下浮动。8051单片机堆栈的最大容量是128字节88051单片机的程序存储器和数据存储器可以有相同的地址,而单片机在对这两个存储区的数据进行操作时,不会发生错误,为什么?答:对于不同的存储地址空间,8051单片机采用不同的存取指

14、令和控制信号: CPU访问片内、外ROM时,采用“MOVC指令,外部ROM用选通;访问外部RAM或扩展I/O口时,采用“MOVX指令,由读信号和写信号选通;访问片内RAM和特殊功能存放器时,采用“MOV指令。因此,尽管程序存储器地址和数据存储器地址空间重叠,但不会发生混乱。98051单片机是如何确定和改变当前工作存放器组?答:在任何时刻,8051单片机的四个工作存放器组中只能有一组可以成为当前工作存放器组使用,其他三组作为一般的内部RAM使用。当前工作存放器组由程序状态字存放器PSW的RS0和RS1两位的状态来决定,如表所示。当前工作存放器组的选择RS1RS0被选存放器组存放器R0R7的地址0

15、00组00H07H011组08H0FH102组10H17H113组18H1FH根据需要,用户可以利用传送指令或位操作指令改变RS1和RS0的内容来选择不同的工作存放器组。10单片机复位后,CPU使用了哪一组工作存放器?工作存放器R0R7对应的单元地址是什么?答:单片机复位后,RS1和RS0都为0,CPU选中第0组作为当前工作存放器组,工作存放器R0R7对应的单元地址是00H07H。11程序状态字存放器PSW的作用是什么?常用标志位有哪些位?作用是什么?答:PSW是一个8位的特殊功能存放器,由一些标志位组成,用于存放程序运行中的各种状态信息。它可以进行位寻址,各位的定义如下:位D7D6D5D4D

16、3D2D1D0位名称CyACF0RS1RS0OVPCy:进位标志位。在进行加或减法运算时,假设操作结果的最高位D7位有进位或借位时,Cy由硬件置1,否那么Cy清0。在进行位操作时,Cy又是位累加器,指令助记符用C表示。AC:辅助进位标志位。在进行加或减运算时,假设操作结果的低半字节D3位向高半字节产生进位或借位时,AC位将由硬件自动置1,否那么AC位清0。F0:用户标志位。用户根据需要对F0置位或复位,作为软件标志。RS1和RS0:工作存放器组选择控制位。由用户用软件改变RS1和RS0的状态,以选择内RAM中的哪组工作存放器为当前工作存放器组。OV:溢出标志位。当进行补码运算时,运算结果超出1

17、28127范围时,产生溢出,那么OV自动置1,否那么OV清0。PSW.1:保存位。8051中未定义。P:奇偶校验标志位。每条指令执行完后,该位始终跟踪累加器A中1的数目的奇偶性。如果A中有奇数个1,那么P1;否那么P0。128051单片机的晶体振荡器频率为6MHz,那么它一个机器周期为多少微秒?答:机器周期是指CPU完成某一个规定操作所需的时间,8051单片机的一个机器周期包含6个状态,并依次表示为S1S6,每个状态分为2个节拍。因此一个机器周期包含12个时钟周期振荡周期,依次表示为:S1P1、S1P2、S2P1、S6P1、S6P2。当fosc=6MHz时,机器周期T=121/6MHz=2s1

18、38051单片机复位后存放器PC、A、PSW、SP 、P0P3的状态各是什么?复位后内部RAM中的数据有何影响?答:8051单片机复位后PC、A、PSW、SP 、P0P3的状态如下:PC:0000H;A、PSW:00HSP:07H;P0P3:FFH单片机的复位不影响内部RAM的状态包括工作存放器Rn 。习题3解答1假设访问工作存放器、特殊功能存放器、片外数据存储器、程序存储器分别可使用哪些寻址方式?答:访问工作存放器采用存放器寻址,特殊功能存放器采用直接寻址,片外数据存储器采用存放器间接寻址,程序存储器的寻址方式有立即寻、变址寻址、相对寻址。2写出以下源操作数的寻址方式。JZ 20HMOV A

19、,R2MOV A,BMOV DPTR,#4012HMOVX A,DPTRMOVC A,APCPUSH BPOP ACCMOV C,20H10MOV A,20H答:各指令的源操作数的寻址方式是 相对寻址; 存放器寻址; 存放器寻址; 立即寻址; 存放器间接寻址; 变址寻址 ; 直接寻址; 直接寻址; 位寻址; 直接寻址3设片内RAM的30H单元的内容为40H,即30H40H,40H10H,10H00H,端口P1CAH,执行以下程序段填结果。MOV R0,#30H;R0=30HMOV A,R0;A=R0=30H=40HMOV R1,A;R1=40HMOV B,R1;B=40H=10HMOV R1,

20、P1;40H=0CAHMOV A,P1;A=0CAHMOV 10H,#20H;10H=20HMOV 30H,10H;30H=20H结果:R0 ,R1 ,A ,B ,P1 ,40H ,30H ,10H 。解:每一条指令执行后的结果如注释字段所标。最后的结果为R030H,R140H,A0CAH,B10H,P10CAH,40H0CAH,30H20H,10H20H。4设A94H,R237H,40H6EH,R140H,RS1RS000 执行程序段填结果。MOV P2,AMOV A0H,R2MOV D0H,R1MOV 02H,#98H结果:A ,(02H) ,(40H) , (01H) , P2 ,PSW

21、 。解:结果:A94H,(02H)98H,(40H)6EH, (01H)40H, P237H,PSW6EH。5A83H,R017H,17H34H , 执行以下指令后A?ANL A,#17H;A=03HORL 17H,A;(17H)=37HXRL A,R0;A=34HCPL A;A=0CBH解:每一条指令执行后的结果如注释字段所标。所以执行以下指令后A0CBH。6假设要完成以下数据传送,应如何用MCS51的指令来实现。 A的内容送到P1。解:MOVA,P1 R1的内容传送到R0。解:MOVA,R1MOVR0,A 片内RAM 20H单元的内容送片内RAM 30H单元。解:MOV31H,20H 片外

22、RAM 20H单元的内容送片内RAM 30H单元。解:MOVR0,#20HMOVXA,R0MOV30H,A 片外RAM 20H单元的内容送片外RAM 30H单元。解:MOVR0,#20HMOVXA,R0MOVR1,#30HMOVXR1,A 用两种方法将程序存储器ROM 3040H中的常数送到A中,PC当前值为3000H。解:MOVA,#00HMOVDPTR,#3040HMOVCA,A+DPTRMOVA,#40HMOVCA,A+PC3000H:3040H: ROM 2000H单元的内容送到片外RAM 1000H单元中。解:CLR AMOVDPTR,#2000HMOVA,A+ DPTRMOVDPT

23、R,#1000HMOV DPTR,A 将A中的内容与存放器B中的内容交换。解:XCHA,B 将片内RAM 30H单元内容与片外 40H单元的内容交换。解:MOVR0,#40HMOVXA,R0XCHA,30HMOVXR0,A 将片外RAM 30H单元内容与片外 40H单元的内容交换。解:MOVR0,#30HMOVXA,R0MOVR7,A;暂存外部RAM 30H单元的内容MOVR1,#40HMOVXA,R1MOVXR0,A;外部RAM 40H单元的内容送外部RAM 30H单元MOVA,R7MOVXR1,A;外部RAM 30H单元的内容送外部RAM 40H单元7设位单元00H、01H中的内容为0,以

24、下程序段执行后P1口的8条I/O线为何状态?位单元00H、01H的值。 START:CLR C;Cy=0 MOV A,#56H;A=56H=0101 0110B JC LP1 CPL C;Cy=1 SETB 01H;(01H)=1LP1: MOV ACC.0,C; ACC.0=1 JB ACC.2 ,;因ACC.2=1,转向LP2SETB 00H;该指令不执行LP2: MOV P1,A;P1=A=0101 0111BRET解:每一条指令执行后的结果如注释字段所标。P1=0101 0111B,即P1口的8条I/O线中P0.0、P0.1、P0.2、P0.4、P0.6为高电平状态,P0.3、 P0.

25、5、 P0.7为低电平状态,8以下指令哪些是非法指令?(1) CPL B(2) ADDC B,#20H(3) SETB 30H,0(4)MOV R1,R2(5) SUBB A,R2(6) CJNE R0,#64H,LABEL(7) MOVX R0,20H(8) DJNZ R0,LABEL(9) PUSH B(10) POP R1(11) RL B(12)MOV R7, R0(13) RLC A(14) MOV R1,#1234H(15) ANL R0,A(16) ORL C,/ACC.5(17) XRL C,ACC.5(18) DEC DPTR(19) XCHD A ,R1(20) SWAP

26、B(21) MOVX A,ADPTR(22) MOVC A,ADPTR(23) XCH A,R1(24) SUB A,#12H(25) MUL A,B(26) DIV AB(27)DA A(28) JMP LABEL(29) LJMP LABEL(30) RETI解:(1);(2);(3);(4);(5);(6);(7);(8);(9);(10);(11);(12);(13);(14);(15);(16);(17);(18);(19);(20);(21);(22);(23); (24) ;(25);(26); (27); (28); (29);(30)。9执行以下程序填结果。MOV SP,#2

27、FH;SP=2FHMOV A,#50H;A=50HMOV B,#51H;B=51HPUSH ACC;SP=30H,(30H)=50HPUSH B;SP=31H,(31H)=51HPOP ACC;A=51H,SP=30HPOP B;B=50H.SP=2FH结果:SP ,A ,B ,30H ,31H 。解:结果:SP2FH ,A51H,B50H,30H50H,31H51H。10SP70H,MA1000H,SUBPR4060H。试问以下程序中哪些是正确的?为什么?哪些程序最好,为什么?假设SUBPR1060H,那么哪个程序最好,为什么?1MA:ACALL SUBPR2MA:LCALL SUBPR3M

28、A:LJMP 4000H 4000H:ACALL SUBPR LJMP 1003H解:因为ACALL指令转去子程序的入口地址与ACALL的下一条指令必须在同一个2k范围,而LCALL指令转去子程序的入口地址与LCALL的下一条指令范围为64k。所以当SUBPR4060H时,程序2和3是正确的,1的程序是错误的,程序2较3快捷;当SUBPR1060H时,程序1和2是正确的,程序3是错误的,程序1较程序2节省一个存储单元。11设A53H,PSW81H,转移指令所在地址为3090H,执行以下各条指令后,PC?1JNZ 12H2JNC 34H3JNB P,56H4JBC AC,78H5CJNE A,#

29、50H,9AH6DJNZ PSW,0BCH7SJMP 0B4H解:1因A0,所以转移,故PC=(3090H+2)+12H=30A4H;2因Cy=1,所以不转移,故PC=3090H+2=3092H;3因P=1,所以不转移,故PC=3090H+3=3093H;4因AC=0,所以不转移,故PC=3090H+3=3093H;5因A50H,所以转移,故PC=(3090H+3)+9AH=3093H-66H=302DH(注意:补码数9AH的最高位为1属负数,故应先求得其真值为-66H)6因PSW=PSW-1=80H0,所以转移,故PC=(3090H+3)+0BCH=3093H-44H=304FH7无条件转移

30、,PC=(3090H+2)+0B4H=3092H-4CH=3046H。12阅读以下程序,说明其功能。MOV R1,#40H;设40H=xMOV A,R1;A= xRL A;A2MOV R0,A;R0=2RLA;A2*2=4RLA;A4*2=8ADD A,R0;A8+2=10MOV R1,A ;40H=10 x解:各指令的注释如程序所标,程序的功能为40H单元的内容乘10。13执行程序填结果1MOV A,#19H;A=19HADD A,#72H;A=8BHDA A;A=91H结果:A解:A=91H2 CLR C ;Cy=0MOV A,#9AH;A=9AHSUBB A,#19H ;A=81HADD

31、 A,#72H;A=0F3HDA A;A=53H,Cy=1结果:A 解:A=53H14设SP50H,MA0123H,SUB0345H。执行指令“MA: ACALL SUB后PC?,SP?,51H?,52H?。解:PC=0345H,SP=52H,51H=25H,52H=01H15SP4BH,49H12H,4AH5AH,4BH68H。执行指令“RET后PC?,SP?。解:PC=685AH,SP=48H习题 4解答1按下面要求编程。51H 0 ;假设50H为奇数 1 ;假设50H为偶数解:MOV A,50HMOVB,#2DIVAB;偶数除以2的余数为0MOVA,BJNZL1;判余数是否为0MOV51

32、H,#01H;为偶数,1送51H单元SJMPNEXTL1:MOV51H,#00H;为奇数,0送51H单元NEXT:SJMPNEXT2按下面要求编程。 1;假设 50H2051H 0;假设 2050H40 1;假设 50H40解:MOVA, 50H;设50H单元的内容为XCJNEA,#20,L1;X20时,转向L1SJMPL4;X=20时,转向L4L1:JCL4;X20时,转向L4L2:CJNEA,#40,L3;X20且X40时,转向L3SJMPL4;X=40时,转向L4L3:JNCL4;X4 0时,转向L4MOV51H,#00H;20X40时,送0到51H单元SJMPNEXTL4:MOV51H

33、,#0FFH;X20或X40时,送1 到51H单元NEXT:SJMPNEXT3试编写程序,将片外8000H开始的16个连续单元清0。解:方法一:MOVDPTR,#8000H;数据块首址CLRALOOP:MOVXDPTR,A;单元清0INCDPTRMOVR7,DPLCJNER7,#10H,LOOPSJMP$方法二MOVDPTR,#8000HMOVR7,#10H;数据块长度16CLRALOOP:MOVXDPTR ,AINCDPTRDJNZR7,LOOPSJMP$4在片内50H开始的单元中存有8个无符号数,找出其中最大数存于70H单元中。解:MOVR0,#50H;数据块首址MOVR2,#8;长度计数

34、器赋初值MOVA,R0;取第一个数LOOP:INCR0;取下一个数MOVB,R0CJNEA,B,NEXTNEXT:JNCNEXT1;两数比拟,假设AB时,A中放当前数MOVA,R0;假设AB时,送大数到A中NEXT1:DJNZR2,LOOP;数据块比拟完否?MOV70H,A;最大值送入70H单元中HERE:SJMPHERE5试编写程序,求出片内RAM 30H单元中的数据含“1的个数,将结果存入31H单元。解:要统计一个8位二进制数中“1的个数,可以把这个数一位一位地移到Cy中,然后加以判断和统计。程序设计如下:MOVR2,#8;移位次数MOVR1,#10;R1作为统计“1的个数的计数器MOVA

35、,30H;取数LOOP:RLCA;数的最高位移入CyJNCNEXTINCR1;假设Cy=1,那么计数器加1NEXT:DJNZR2,LOOPMOV31H,R1;存结果HERE:SJMPHERE6编制用软件延时1秒的子程序,控制P1脚上所接的8个发光二极管交叉灯亮一秒。解:设晶体振荡器的频率为6MHz.MOV A,#0AAHLOOP:MOVP1,A;交叉亮LCALLDEY1S;调延时1S子程序CPLASJMPLOOPDEY1S: MOV R5,#2;延时1S子程序LOOP3: MOVR6,#200LOOP2: MOVR7,#250LOOP1: NOP NOP NOP DJNZR7,LOOP1 DJ

36、NZR6,LOOP2 DJNZR5,LOOP3 RET7设计灯移位程序,要求P1脚上所接的8只发光二极管每次点亮一个,点亮时间为0.5秒。顺序从低位到高位循环点亮。解:MOVA,#01HLOOP: MOV P1,A LCALL DEY05S RL ASJMP LOOPDEY1S: MOV R5,#1;延时0.5S子程序LOOP3: MOVR6,#200LOOP2: MOVR7,#250LOOP1: NOP NOP NOP DJNZR7,LOOP1 DJNZR6,LOOP2 DJNZR5,LOOP3 RET8将累加器A中的2位十六进制数,转换为ASCII码,存放在片内RAM 30H和31H单元中

37、。解:MOVR0,A;暂存A中的数在R0中ANLA,#0FH;屏蔽高位MOVDPTR,#ASCTABMOVCA,A+DPTR;低位转换成ASCII码MOV31H,A;存低位MOVA,R0SWAPA;将高位交换到低位ANLA,#0FHMOVCA,A+DPTRMOV30H,A;存高位ASCII:DB 30H,31H,32H,33H,34H,35H,36HDB 37H,38H,39H,41H,42H,43H,44HDB 45H,46H9将两字节ASCII码,转换为二进制数,编成子程序形式。解:子程序为AASCH如下:;功能:将两字节ASCII码,转换为一个字节二进制数即十六进制;入口参数:R0为AS

38、CII码的首地址;出口参数:R1为转换后的二进制数的地址AASCH:MOVA,R0;取ASCII码的高位ACALLASCH;调用子程序ACHSWAPA;将十六进制数放在A的高位MOVR1,A;存十六进制数到高4位INCR0;指向下一个ASCII码数MOVA,R0ACALLASCHXCHDA,R1;存十六进制数到低4位RETACH:CLRC;将A中的ASCII码数转换成十六进制数并存放在A中的子程序SUBBA,#30HCJNEA,#0AH,NEXT;判ASCII码数是数字还是字母?NEXT:JCAH;假设为数字09,转移SUBBA,#07H;十六进制数为字母是减7AH:RET10将两字节ASCI

39、I码,转换为BCD码,编成子程序形式。解:两字节ASCII码转换为BCD码,用压缩BCD码的形式表示正好占用一个字节。子程序ASCBCD如下:;功能:将两字节ASCII码,转换为BCD码,假设ASCII码数为非法BCD码即AF,那么在相应半字中置入“$符号,以示区别;入口参数:R1为ASCII码的首地址;出口参数:R0为转换后的BCD码的地址ASCBCD:MOVA, R1;取一个ASCII码ACALLACB;调用ACB子程序SWAPA;BCD码的放在A的高4位MOVAR0,A;存BCD码到高4位INCR1MOVA,R1ACALLACBXCHDA,R0RETACB:CLRC;将A中的ASCII码

40、转换为BCD码的子程序SUBBA,#30HCJNEA,#0AH,L1L1:JCL2;是BCD码数那么转L2MOVA,#24H;非法BCD码数,那么送入“$符号L2:RET11将两位十进制数的BCD码,转换为ASCII,编成子程序形式。解:子程序BCAC如下:;功能:将两位十进制数的BCD码,转换为ASCII;入口参数:R1存放BCD码数的地址;出口参数:R0和R0+1存放结果的地址BCAS:MOVA,R1;取BCD码数MOVR2,A;暂存BCD码数在R2中ANLA,#0FH;屏蔽高4位ADDA,#30H;低4位BCD码转换成为ASCII码MOVR0,A;存入第一个ASCII码MOVA,R2SW

41、APA;取原BCD码,把高4位交换到低4位ANLA,#0FH;屏蔽高4位INCR0MOVR0,A;存入第二个ASCII码RET12将20H单元中的8位无符号二进制数转换为BCD码,存入21H、22H。解:程序设计如下:;功能:将20H单元中的8位无符号二进制数转换为BCD码 ;入口参数:20H单元中存放要转换的二进制数 ;出口参数:21H单元存放的是百位BCD码,22H单元存放的是十位和个位BCD码,高半字节放十位,低半字节放个位。 ;占用存放器:A,B BINBCD: MOV A,20H;取数MOV B,#64HDIV AB;除以100,A为百位数MOV 21H,A;存入21H单元MOV A

42、,#0AHXCH A,B;余数B送ADIV AB;除以10,得十位和个位SWAP A;十位数放于高半字节ADD A,B;个位数放于低半字节MOV 22H,A;十位、个位存22H单元RET13用查表程序求08之间整数的平方。解:设08之间的整数存放在R0单元中,查表结果存在R1中MOVR0,#DATAMOVA,R0MOVDPTR,#TABMOVCA,A+DPTRMOVR1,ATAB:DB 0,1,4,9,16,25,36,49,6414编写程序,实现以下逻辑函数的功能。其中X、Y、Z、F都是位单元地址。F XY+解:XBIT20H.0YBIT20H.1ZBIT20H.2FBIT20H.3TEMP

43、BIT20H.4MOVC,XANLC,Y;C=XYMOVF,C;存XY在F 中MOVC,YANLC,/Z;C=YMOVTEMP,C;暂存Y在TEMP中MOVC,ZANLC,/Y;C= ZORLC,TEMPCPLCORLC,FMOVF,C15有一16位二进制数存放于50H、51H单元,50H存高位,编程实现全部左移一位。解:CLRCMOVA,51HRLCAMOV51H,AMOVA,50HRLCAMOV50H,ASJMP$16完成两字节压缩BCD码的加法。30H 31H+40H 41H30H 31H解:MOVA,31HADDA,41H;低字节相加DAA;十进制调整MOV31H,A;存结果低字节MO

44、VA,30HADDCA,40HDAAMOV30H,ASJMP$17编程实现R3 R2*10R3 R2解:此题可以采用乘法指令或者用循环移位指令实现,此处采用用乘法指令。MOVA,R2MOVB,#0AHMULAB;被乘数低8位乘以10,即R210MOVR2,A;MOVR4,B;R210的高8位暂存于R4中MOVA,R3;MOVB,#0AHMULAB;被乘数高8位乘以10,即R310ADDA,R4;R310的低8位与R210的高8位之和送R3MOVR3,AMOVR4,BSJMP$习题5解答5.1MCS51型单片机有几个中断源?有几级中断优先级?各中断源中断标志是怎样产生的?答:MCS51单片机的有

45、5个中断源:2个外部中断源,即和;3个内部中断源,两个片内定时器/计数器溢出中断T0和T1,1个片内全双工串行口中断源。有两级中断优先级:即高优先级和低先级,实现两级中断效劳程序嵌套,同一优先级的中断源,由硬件查询来确定优先序列,从高到低依次为外部中断、定时器T0溢出中断、外部中断定时器、T1溢出中断、串行口中断。各中断源请求的中断的标志分别由特殊功能存放器TCON和SCON的相应位锁存,这些标志位的产生如下:TF1:定时器T1的溢出中断请求标志位。当计数器T1产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。TF0:定时器T0的溢出中断请求标志位。含义与TF1相同。IE1:外部中断1即

46、的中断请求标志位。当检测到外部中断引脚P3.2上存在有效的中断请求信号时,由硬件使IE1置1。IE0:外部中断的中断请求标志位,其含义与IE1类同TI:串行口发送中断请求标志位。CPU将一个数据写入发送缓冲器SBUF时,每发送完一帧串行数据后,硬件置位TITI1。RI:串行口接收中断请求标志位。在串行口允许接收时,每接收完一个串行帧,硬件置位RI。5.2编写程序将设为脉冲下降沿触发的高优先级中断源。解:用位操作:SETBIT1;设为边沿触发方式SETBPX1;设高优先级中断源用字节操作:MOVTCON,#04H;设为边沿触发方式MOVIP,#04H;设高优先级中断源5.3试编程实现将设为高优先

47、级中断,且为电平触发方式,T0设为低优先级中断计数器,串行口中断为高优先级中断,其余中断源设为禁止状态。解:MOVTMOD,#04H;设T0为计数器状态MOVTCON,#00H;设外部中断1为电平触发方式MOVIE,#96H;开放外部中断1、T0和串行口中断MOVIP,#14H;设和串行口为高优先级,T0设为低优先级5.4在MCS51型单片机中,哪些中断标志可以在响应后自动撤除?哪些需要用户撤除?如何撤除?答: CPU在响应中断请求后会自动去除的中断标志的有:定时器T0、T1的溢出中断请求标志TF0、TF1;边沿触发方式下的外部、的中断请求标志IE0、IE1。 CPU响应中断后不会自动去除,只

48、能在中断效劳程序中用软件去除的有:串行口的接收、发送中断标志RI、TI,用“CLR 中断请求标志位指令去除;在电平触发方式下的外部中断标志IE0和IE1,那么是根据引脚和的电平而变化的,CPU无法直接干预,需在引脚外加硬件如D触发器使其自动撤消外部中断请求。5.5MCS51型单片机响应中断后,各中断源的中断入口地址是什么?答: 中断源中断入口地址外部中断00003H定时器T0中断000BH外部中断10013H定时器T1中断001BH串行口中断0023H5.6简述MCS51型单片机中断响应全过程。答:当有中断源发出中断请求、允许中断位开放、无同级或更高级中断正在被效劳、当前的指令周期已经结束时,

49、CPU按优先级顺序查询中断标志,如查询到某个中断标志为1CPU响应中断请求,CPU响应中断后即转至中断效劳程序的入口,执行中断效劳程序。5.7试比拟用单片机的可编程定时器实现时钟计时与用硬件电路实现时钟计时有什么不同。答:不可编程的硬件定时:对于时间较长的定时,常使用硬件电路完成。硬件定时方法的特点是:定时功能全部由硬件电路完成,不占用CPU时间。但需通过改变电路中的元件参数来调节定时时间,在使用上不够灵活方便。单片机的可编程定时器定时:这种定时方法是通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活又方便。此外,由于采用计数方法实现定时,因此

50、可编程序定时器都兼有计数功能,可以对外来脉冲进行计数。5.8简述MCS51型单片机定时/计数器的4种工作方式及其特点。答:MCS51单片机有T0和T1两个定时/计数器,T0有4种工作方式,T1有3种工作方式,如下表:工作方式适用定时器功能说明方式0T0、T113位定时器/计数器方式1T0、T116位定时器/计数器方式2T0、T1自动重装初值的8位定时器/计数器方式3T0仅适用于T0,分为2个8位计数器TL0和TH0,TL0可工作于定时或计数状态,而TH0那么固定为定时状态。方式3对T1那么停止计数假设MCS51型单片机的时钟频率为12MHz,试计算用4种工作方式定时300s所需的初始值。解:机

51、器周期T=121/fosc=121/12=1s,以定时器T0为例。定时时间t=(2x-T0初值) T方式0:x=13,那么T0初值=213-300s/1s=8192-300=7892D=11110110 10100B所以TH0=0F6H,TL0=14H方式1:x=16,那么T0初值=216-300s/1s=65536-300=65236D=0FED4H所以TH0=0FEH,TL0=0D4H方式2和方式3:x=8,最长定时时间tMAX=(28-0) 1s=256s300s所以方式2和方式3不能实现510 当T0工作在方式3下,TR1和TF1已被T0占用,如何控制T1的开启和关闭?解:T0设置为工

52、作方式3,T0被分成两个独立的8位计数器TH0和TL0。其中TH0被固定为定时方式,并占用T1的状态控制位TR1、TF1。在这种情况下,T1可工作于方式0、1、2,作为串行口的波特率发生器。这时控制T1的启停由设置工作方式02自动启动T1计数和写入T1的方式字为方式3停止计数来实现。5.118051型单片机的系统时钟频率为6MHz,试利用定时器T0在P1.1输出周期为300s的正方波。解:设T0工作在方式0, 欲产生300 s的等宽正方波脉冲,只需在P1.0端以150 s为周期交替输出上下电平即可实现,为此定时时间应为150 s。使用6MHz晶振,那么一个机器周期为2s。设待求的计数初值为X,

53、那么:213X2s 150 s求解得:X8117D11111101 10101B。十六进制表示,高8位为0FDH,低5位为15H。其中高8位放入TH0,即TH00FDH;低5位放入TL0,即TL015H。TMOD存放器初始化:把T0设定为方式0,那么M1M000;为实现定时功能,应使C/0;为实现用TR0控制T0的运行,GATE0。因此TMOD存放器应初始化为00H。采用软件查询方式程序如下:程序如下:ORG0000HLJMPMAINORG1000HMAIN:MOVTMOD,00H;设置T0为工作方式0MOVIE,00H;禁止中断SETBTR0;启动定时LOOP:MOVTH0,0FDH;设置计

54、数初值 MOVTL0,15HJNBTF0,$;查询计数溢出?CLRTF0;计数溢出标志位清“0CPLP1.1 ;输出取反AJMPLOOP;重复循环END此题也可用中断方式,读者可参考例5.8自己完成。5.12设单片机的系统时钟频率为12MHz,试编程输出频率为100KHZ,占空比为2:10的矩形波。解:信号频率为100KHz,那么周期为1/100kHz=10 s,占空比为2:10即高电平为2 s,低电平为8 s的方波,设采用定时器T0工作在方式2,P1.0输出该矩形波。定时2s:28-x12/12=2,x=254=0FEH定时8s:28-x12/12=8,x=248=0F8H程序如下:ORG0

55、000HLJMPMAINORG000BHLJMPPULSEMAIN:MOVTOMD,#02H;T0方式2MOVTH0,#0F8H;定时8sMOVTL0,#0F8HSETBET0;开中断SETBEACLRP1.0;输出低电平CLRF0;F0=0,输出低电平标志SETBTR0;启动定时器SJMP$;等待中断PULSE:JNBF0,NEXT1;中断效劳程序MOVTH0,#0FEH;定时2sMOVFL0,#0FEHSJMPNEXT2NEXT1:MOVTH0,#0F8H;定时8sMOVTL0,#0F8HNEXT2:CPLF0CPLP1.0END5.13 设8031型单片机的时钟频率为6MHz,请编写程序

56、在P1.0输出周期为2s的方波的程序。解:1、输出周期为2s的方波,采用T0定时时间应为1s。因定时时间较长,先求T0各种工作方式的最长定时时间tmax:方式0时,计数器为13位,tmax=213121/6MHz=16.384ms方式1时,计数器为16位,tmax=216121/6MHz=131.072ms方式2时,计数器为8位,tmax=28121/6MHz=512s此题定时为1s,可选方式1,每隔100ms中断一次,中断10次为1s。2、求计数初值x为:216x12/6100103所以x15536D3CB0H故TH0=3CH,TL0=0B0H3、对于中断10次,可采用T1工作于计数方式,也

57、可采用循环程序的方法实现,此题采用循环程序法。4、确定方式控制字T0工作于方式1TMOD=01H5、程序如下:ORG 0000HAJMP MAIN;转向主程序ORG 000BH;定时器T0的中断入口地址AJMP TSER;转向中断效劳程序主程序:ORG 1000HMAIN:MOVSP,#60H;设堆栈指针MOVR0,#0AH;设循环次数MOVTMOD,#01H;设置T0为工作方式1MOV TH0,#3CH;设置计数初值MOV TL0,#0B0HSETB EA;开中断SETB ET0;T0允许中断SETB TR0;启动定时器1HERE:SJMP HERE;等待中断中断效劳程序:TSER:MOV

58、TH0,#03CH;重新设置计数初值MOV TL0,#0B0HDJNZR0,LOOPCPL P1.0; 输出取反LOOP:RETI;中断返回END5.14 利用8051型单片机的定时器测量某正单脉冲宽度,采用何种工作方式可以获得最大的量程?假设系统时钟频率为6MHz,那么最大允许的脉冲宽度是多少?答:门控位GATE=1时,仅当(x=0、1)为高电平时,计数器才对计数。利用这一特性,可测量输入到引脚的脉冲宽度机器周期数。采用方式116位计数器可获得最大的量程,且要求脉冲宽应小于65 536个机器周期。当=6MHz时,允许测量的最大脉宽为65 53612/6=s=131.07ms。5.15 试编写

59、程序将内部RAM以30H为起点地址的X个数传送到外RAM以BUF为起点地址的区域,要求每隔500ms传送一个数据,设8031型单片机的时钟频率为6MHz。解:设用T0方式1来定时100ms,循环5次为500ms。定时100ms的初值x为:216-x12/6=100103那么 x=15 536=3CB0H即:TH0=3C,TL0=0B0H参考程序如下:ORG1000HMOVR0,#30H;源数据块首址MOVR1,#X;数据块长度MOVDPTR,#BUF;目标数据块首址LOOP:MOVA,R0MOVXDPTR,ALCALLDEY500;调500ms延时子程序INCR0;修改源地址指针INCDPTR

60、;修改目标地址指针DJNZR1,LOOP;未传送完那么继续DEY500:MOVR2,#5;500ms延时子程序MOVTMOD,#01HSETBTR0LL:MOVTL0,#0B0HMOVTH0,#3CHJNBTF0,$CLRTF0DJNZR2,LLRETEND习题6解答6.1. 在MCS51单片机系统中,外接程序存储器和数据存储器共用16位地址线和8位数据线,为什么不会发生冲突?答: MCS51单片机采用不同控制信号: CPU访问片外ROM时,外部ROM用选通;访问外部RAM或扩展I/O口时,由读信号和写信号选通。因此,尽管程序存储器地址和数据存储器地址空间重叠,但不会发生混乱。6.2. 用两片

温馨提示

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

评论

0/150

提交评论