单片机原理与应用(C语言版)习题答案.doc

上传人:wux****ua 文档编号:9512246 上传时间:2020-04-06 格式:DOC 页数:83 大小:1.58MB
返回 下载 相关 举报
单片机原理与应用(C语言版)习题答案.doc_第1页
第1页 / 共83页
单片机原理与应用(C语言版)习题答案.doc_第2页
第2页 / 共83页
单片机原理与应用(C语言版)习题答案.doc_第3页
第3页 / 共83页
点击查看更多>>
资源描述
第1章 习题1-1 什么是单片机?单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成在一块芯片上形成的单片计算机。因此被称为单片微型计算机,简称为单片机。1-2 单片机的主要特点是什么?单片机主要特点有:在存储器结构上,单片机的存储器采用哈佛(Harvard)结构;在芯片引脚上,大部分采用分时复用技术;在内部资源访问上,通过采用特殊功能寄存器(SFR);在指令系统上,采用面向控制的指令系统;单片机内部一般都集成有一个全双工的串行接口;单片机有很强的外部扩展能力。1-3 指明单片机的主要应用领域。单片机具有体积小、功耗低、面向控制、可靠性高、价格低廉、可以方便地实现多机和分布式控制等优点,使其广泛的应用于各种控制系统和分布式系统中,主要应用于以下这几个领域:工业测控、智能设备、家用电器、商用产品以及网络与通信智能接口。1-4 C51单片机的分类。C51单片机的分类,就是特指MCS-51系列。那么MCS-51系列的单片机基本上没什么区别,至少内核都是一模一样的。不同的就是功能模块稍有不同。比如说:有些具有AD/DA模块,有些没有;有些有EEPROM(STC89C52),有些没有(AT89S52); 有些ROM有8K(AT89S52),有些只有2K; 有些RAM有256B,而有些只有128BIT; 有些40个管脚(AT89C51、89C52、89S52),有些20个管脚(AT89C2051、89C4051); 有些有内部晶振,有些没有; 但这些都是稍微一点点的区别,基本都还是算一样的。1-5 80C51与8051的区别和联系。MCS-51单片机是指美国INTEL公司生产的一系列单片机的总称,包括有8031,8051,8751,8032,8052,8752等,其中8051是最典型的产品,该系列其它单片机都是在8051的基础上发展来的,人们习惯于用8051来称呼MCS-51系列单片机。INTEL公司将MCS-51的核心技术授权给了其它公司,所以有很多公司以8051为核心对单片机进行开发。其中89C51就是以805为内核开发生产的。联系: 80C51单片机是在8051的基础上发展起来的,8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件完全可以在80C51上应用,反之相同。区别:8051与80C51单片机的主要差别在于芯片的制造工艺上。8051系列单片机采用的是HMOS工艺,高速度、高密度;80C51系列单片机采用的是CHMOS工艺,高速度、高密度、低功耗; 也就是说80C51单片机是一种低功耗单片机。 第2章 习题2-1 C51单片机内部包含哪些主要功能部件,各功能部件主要完成什么功能。 C51单片机片内集成了中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、两个16位的定时器/计数器(T0和T1)、4个8位的并行I/0口(P0、P1、P2和P3)、串行口等组成。2-2 C51单片机的核心器件是什么?它由哪些部分组成?各部分的主要功能是什么? 微处理器CPU包含有运算器和控制器。运算器由算术逻辑单元 ALU、累加器ACC、B寄存器、两个暂存寄存器、程序状态寄存器组成,完成算术运算(加,减,乘,除,乘除运算与寄存器B有关)、逻辑运算及移位运算等。控制器由指令寄存器IR、指令译码器ID、定时及控制逻辑电路、程序计数器PC组成,是单片机的运行控制中心。 片内存储器ROM 和RAM; 四个I/O 端口电路; 定时器/计数器: 2个16位的定时器/计数器 中断控制系统:5个中断源(两个外部中断、两个定时/计数器、1个串行口中断) 串行口:1个全功能异步串行口 时钟电路:为系统工作提供时钟。 总线:通过内部总线把系统的各个部分连成一个有机的整体。2-3 C51单片机有哪些信号需要芯片引脚以第二功能的方式提供。(P3口引脚的第二功能)。P3口的第二功能见P10页的表2.1所示。2-4 C51单片机的存储器有什么特点?如何划分存储空间。数据存储器和程序存储器分开编址,并有各自的寻址方式和寻址单元。对存储器的划分在物理上分为4个空间:片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器,在逻辑上划分为3个空间:偏内外程序存储器、片外数据存储器、片内数据存储器。 题2-4 89C51单片机的存储器结构图2-5片内RAM低128单元划分为哪三部分?各部分主要功能是什么? 数据存储器是由RAM构成的,用来存放随机数据。数据存储器分为内部数据存储器和外部数据存储器两部分。对于89C51型单片机,内部数据存储器共有256个存储单元,通常把这256个存储单元再划分为低128单元(00H7FH)和高128单元(80HFFH),数据存储器的低128单元按用途可划分为3个区域,通用寄存器(00H1FH)、位寻址区(20H2FH)和用户RAM区。2-6堆栈有什么功能?堆栈指示器(SP)的作用是什么?在程序设计中,为什么需要对堆栈进行重新赋值。 在单片机程序设计中,堆栈主要是为子程序的调用和中断操作设立的。其具体功能主要有保护断点和保护现场。 堆栈指针的作用就是指向栈顶元素的,通过它还可以对栈顶元素进行出栈操作当堆栈中的元素进行出栈或入栈操作时,都会使栈顶元素发生变化,堆栈指针sp就需要重新赋值,让其指向新的栈顶元素。 如果嵌套太多,不重新赋值会引起死机的。2-7 单片机时钟电路有何用途? 2-8什么是指令周期、机器周期和时钟周期?如何计算指令周期的准确时间? 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。8051单片机的时钟范围是1.2MHz-12MHz。 机器周期:在计算机中,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。80C51系列单片机的一个机器周期同6个S周期(状态周期)组成。8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。 指令周期:是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。 通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。2-9单片机复位有几种方法?复位后各寄存器的状态如何? 复位方式有上电复位、手动复位、硬件电路复位等。复位后各寄存器的状态与单片机的类型有关,具体参考器件手册。2-10 89C51单片机运行出错或程序“跑飞”时,如何摆脱困境? 软件方面:设置看门狗;检查程序,是否有死循环 硬件方面:在单片机电源输入位置加0.1u电容,最好在电源与地之间加一个100u的电解电容,防止因为电源的波动或干扰信号,引起出错。2-11基于89C51单片机设计一个最小单片机系统。题2-11基于AT89C51的单片机最小系统2-12 引脚功能是什么程序存储器分为片内存储和片外存储两部分,可通过引脚的电平确定。 当引脚为高电平时,程序从片内存储器开始执行,即访问片内存储器,当PC值超过片内存储器的范围时,自动跳转到片外程序存储器空间执行; 当引脚为低电平时,系统全部执行片外程序存储器程序。 使用说明:对于不含片内ROM的单片机,应将引脚固定为低电平。对于含有片内ROM的单片机,在正常运行时,应将引脚置为高电平。当处于调试状态时,可将引脚置为低电平。 第3章 习题3-1 C51单片机有哪几种寻址方式?适用于什么地址空间?C51单片机寻址方式主要有七种,即:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、位寻址、基址寄存器加变址寄存器间接寻址和相对寻址。立即寻址适应于8位立即数对片内RAM地址单元的赋值,也可用于16位的立即数对DPTR赋值;直接寻址方式适应于片内RAM的所有地址空间;寄存器寻址适应于片内00H1FH的32个字节,用R0,R1,R7表示;寄存器间接寻址只能使用寄存器R0或Rl作为地址指针,来寻址内部RAM(00HFFH)中的数据,寄存器间接寻址也适用于访问外部RAM;位操作指令能对内部RAM中的位寻址区(20H2FH)和某些有位地址的特殊功能寄存器进行位操作,实现位状态传送、状态控制、逻辑运算操作;基址寄存器加变址寄存器间接寻址用于访问程序存储器中的数据表格;相对寻址用于相对转移指令中,转移目标地址在当前地址的-128127字节范围内的地址空间。3-2 C51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零?C51单片机的PSW程序状态字中无ZERO(零)标志位, 判断某内部数据单元的内容是否为零,只能通过传递数据到累加器A,再判断A中的每一位是否为零,来确定其值是否为零。3-3 编程查找内部RAM的32H41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则将50H单元清零。设片内RAM指针R0,指向首地址32H,比较R0与#0AAH,若相等,则退出循环,给50H单元赋值0FFH,若不相等,则R0加1,为继续比较下一个字节做准备,直到地址为41H或到计数器设定的计数值,且给50H单元赋值00H。程序1: MOV R0, #32H ;设地址指针的初值CONT: CJNE R0,#0AAH , NEXT ;比较查找值与指针所指单元的值,是否相等 MOV A, #0FFH ;相等,赋值0FFH SJMP DOWN ;跳转到,保存结果NEXT: INC R0 ;修改地址指针 CJNE R0, #42H, CONT ;指针没有超过范围,则继续 MOV A, #00H ;查找失败,将00H存入结果DOWN: MOV 50H, A ;将比较结果存入50H单元 SJMP $ ;暂停 END程序2: MOV R7, #16 ;计数器赋初值,从20H30H共16个字节 MOV R0, #32HCONT: CJNE R0,#0AAH , NEXT MOV A, #0FFH SJMP DOWNNEXT: INC R0 DJNZ R7, CONT ;计数器减1,非零,则继续查找 MOV A, #00HDOWN: MOV 50H, A ;将比较结果存入50H单元 SJMP $ END3-4 内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。程序如下:注;R7 计数,R6保存累加和的高8位,R0作为地址指针。ORG 0000HLJMP MAINORG 1000HSUM EQU 30HDATAA EQU 40HMAIN:MOV R7,#10 ;设置计数器的初值MOV R0,#DATAA ;设片内RAM地址指针的初值CLR AMOV R6,A ; R6 存放高8位数据COUNT:ADD A, R0 ;加RAM中的第一个字节到ACCDA AJNC NEXTINC R6 ;有进位,高8位加1NEXT:INC R0DJNZ R7, COUNTMOV SUM, A ;保存低8位MOV SUM+1, R6 ;保存高8位SJMP $END3-5 MOVX的指令的功能是什么?试编程实现,将外部60H6FH单元的内容搬移到3A0H3AFH单元。MOVX可以实现累加器A与外部数据存储器RAM单元或I/0口间的数据传送。程序如下: ORG 0000H MOV R0, #60H MOV R7, #16 MOV DPTR, 3A0HLOOP:MOVX A, R0 MOVX DPTR, A MOVX R0, #0FFH INC R0 INC DPTR DJNZ R7, LOOP SJMP $ END3-6 MOVC指令的功能是什么?试编程实现,将程序存储器以TABLE为表首地址定义的16个字节,依次搬移至内部RAM中30H3FH单元。MOVC指令的功能可用来查找存放在程序存储器中的常用数据表格。程序如下: ORG 0000H MOV DPTR, #TABLE MOV R7, #16 MOV R2, 30H MOV A, #0 MOV R0, ALOOP: MOVC A, A+DPTR MOV R2, A MOV A, R0 INC A INC R2 DJNZ R7, LOOP SJMP $ ENDTABLE:DB, 3-7 什么是位操作指令,有什么特点?试编程实现:(1) 将从P1.0引脚连续输入的8个状态,按顺序依次存入内部RAM中31H单元,其中第一个输入状态存储在最高位,第8个输入状态存储在最低位;(2) 将内部RAM中31H单元的内容取反后,依次通过P1.0引脚输出,其中最低位D0先输出,最高位D7后输出。位操作指令的操作对象是内部RAM的位寻址区,即字节地址为20H2FH单元中连续的128位(位地址为00H7FH),以及特殊功能寄存器中可进行位寻址的位。位操作指令包括布尔变量的传送、逻辑运算、控制转移等指令,它共有17条指令,助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB和JBC,共11种。(1) 程序如下: ORG 0000H MOV R7, #8 MOV R2, 31H ;读入的位地址 LOOP: MOV C, P1.0 MOV R2,C INC R2 DJNZ R7 LOOP SJMP $ END(2) 程序如下: ORG 0000H MOV R7, #8 MOV R2, 31H ;读入的位地址 MOV A, R2 CPL ALOOP: RRC A MOV P1.0,C DJNZ R7 LOOP SJMP $ END3-8 设在寄存器R3的低4位中存有数码0F中的一个数,试将其转换成ASCII码,并存入片外RAM的2000H单元。程序如下:MOV A, R3 ;取4位二进制数ANL A, #0FH ;屏蔽高4位PUSH A ;保存A内容到堆栈CLR C ;清CSUBB A, #0AH ;(A)-10POP A ;恢复A内容JC LOOP ;若C =1,则数10转到LOOPADD A, #07H ;若C =0,则加37HLOOP: ADD A, #30H ;转换成ASCII码MOV DPTR, #2000HMOVX DPTR, A3-9 设5AH单元中有一变量X,请编写计算下述函数式的程序,结果存入5BH单元。如果X15,Y=41。程序如下:X EQU 5AHY EQU 5BHORG 0000HMOV A, XSUBB A, #10JC LOOP1MOV A, XSUBB A, #15JC LOOP2MOV A, #41MOV Y, AENDLOOP1:MOV A, XSUBB A, #01MOV Y, AENDLOOP2:MOV A, XADD A, #8MOV Y, AEND3-10 试编程把以2000H为首地址的连续50个单元的内容按升序排列,存放到以3000H为首地址的存储区中。程序如下:MOV DPTR, #2000HMOV R0 , #30H ;读到片内的30H开始的单元MOV R7 , #50L1: ;将2000H开始的单元数据存储到30H的内部单元MOVX A,DPTRMOV R0,AINC R0INC DPTRDJNZ R7 L1START: ;排序CLR 00HCLR CMOV R7, #49MOV R0 , #30HMOV A, R0L3:INC R0MOV R2, ASUBB A, R0MOV A, R2JC NEXTSETB 00HXCH A, R0DEC R0MOV R0 , AINC R0NEXT:MOV A, R0DJNZ R7, L3JB 00 STARTMOV DPTR, #3000H ;送到片外3000H开始的单元MOV R0, #20HMOV R7, #50L2:MOV A, R0MOVX DPTR, AINC DPTRINC R0DJNZ R7 L2RET3-11 设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计奇数和偶数的个数。程序如下: ODD EQU 41H ; 奇数的统计EVEN EQU 40H ; 偶数的统计Count EQU 100 ; 个数ORG 0000H LJMP MAIN ORG 0040HData_Filter: PUSH PSW ;函数调用时的现场保护 PUSH ACC MOV ODD, #0 MOV EVEN, #0 MOV R2, #0MOV DPTR, #0x2000 Loop: MOVX A, DPTRANL A, #01HCJNE A, #0, ODD1;偶数INC EVENJMP NEXT ODD1: INC ODDJMP NEXT NEXT: INC DPTR INC R2 CJNE R2, #Count, Loop POP ACC ; 恢复现场 POP PSWRET MAIN:ACALL Data_Filter SJMP $ ;仅用于测试观察 END 第4章 习题4-1简述C51单片机直接支持的数据类型,并加以说明。答:字符型(char):char有有符号字符型signed char和无符号字符型 unsigned char之分,他们的长度都为一个字节。对于signed char,其字节的最高位是符号位,“0”表示正数,“1”表示负数,以补码表示,表示的数值范围是-128127;对于unsigned char,表示的数值范围是0256,可以用来存放无符号的数值,也可存放西文字符。整型(int):int有有符号字整型signed int和无符号整型 unsigned int之分,他们的长度均为双字节。对于signed int,它存放双字节有符号的数值,以补码表示,表示的数值范围是-32769832767;对于unsigned int,它存放双字节无符号的数值,表示的数值范围是065535。长整型(long):long有有符号字整型signed long和无符号整型 unsigned long之分,他们的长度均为4个字节。对于signed long,它存放4字节有符号的数值,以补码表示,表示的数值范围是-21474836482147483647;对于unsigned long,它存放双字节无符号的数值,表示的数值范围是04294967295。浮点型(float):float型数据长度为4个字节,格式符合IEEE-754标准的单精度浮点型数据,包含指数和尾数两部分,最高位为符号位,“0”表示正数,“1”表示负数,其余8位为阶码,最后23位为尾数的有效数位,由于尾数的整数部分隐含为“1”,所以尾数的精度为24位。表示的数值范围是1.175494E-383.402823E+38(加38)。双精度型(double):double型占8 个字节,其数值范围为1.7E-3081.7E+308。4-2简述C51语言对C51单片机特殊功能寄存器的定义方法。答:特殊功能寄存器型是C51扩展的数据类型,用于访问MCS-51单片机中的特殊功能寄存器数据。它分为sfr和sfr16两种类型。sfr为字节型特殊功能寄存器类型,占一个字节单元,利用它可访问单片机内部的所有特殊功能寄存器;sfr16为双字节型特殊功能寄存器类型,占两个字节单元,利用它可访问单片机内部占用两个字节的特殊功能寄存器,如定时器T0和T1。C51中特殊功能寄存器的访问必须先用sfr和sfr16进行声明。例如:sfr P1= 0x90,即:约定P1为P1端口在片内的寄存器,在后面的语句编程中可通过对P1赋值,实现对P1端口的赋值。如用P1=255对P1端口的所有引脚置“1”。4-3简述C51中特有的数据类型有哪些。答:bit型,其值可以是“1”或“0”,bit定义的位变量在C51编译器编译时,在不同的时候位地址可以变化。 sbit型,其值可以是“1”或“0”,sbit定义的位变量必须与MCS-51单片机的一个可以寻址位单元或可寻址的字节单元的某一位联系在一起,在C51编译器编译时,其对应的位地址不能变化。 sfr型, 特殊功能寄存器声明(8位) ,范围就是特殊功能寄存器的范围。sfr16型, 特殊功能寄存器声明(16位) ,范围就是特殊功能寄存器的范围。4-4简述C51中对51单片机位的定义方法。答:位类型bit是C51扩展的数据类型,用于访问MCS-51单片机中可寻址的位单元。它分为bit和sbit两种类型,他们在内存中都只占一个二进制位,其值可以是“1”或“0”。其中用bit定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的,而sbit定义的位变量必须与MCS-51单片机的一个可以寻址位单元或可寻址的字节单元的某一位联系在一起,在C51编译器编译时,其对应的位地址是不能变化的。例如:sfr P1=0x90; /因P1端口的寄存器可位寻址,所以能定义sbit P1_1 = P11; /P1_1为 P1.1引脚同样可用 P1.1的地址去写,如sbit P1_1= 0x91; 这样在以后的程序语句中就能用 P1_1来对P1.1引脚进行读写操作。4-5 C51语言的data、bdata、idata有什么区别?答:data:直接寻址片内数据区的低128字节。bdata:片内数据区的位寻址区0x200x2f,16字节,也可字节访问。idata:间接寻址片内数据区的256字节。4-6在C51中,中断函数与一般函数有什么区别?答:中断函数无参无返回,一般函数参数和返回都是可有可无。中断函数由系统自动调用,一般函数必须手动调用。4-7按照给定存储器类型和数据类型,写出下列变量的说明形式。 在data区定义字符变量val1。 在idata区定义整型变量val2。 在xdata区定义无符号字符数组val3。 定义可寻址的位变量flag。 定义特殊功能寄存器变量SCON。 定义16位特殊功能寄存器变量T0。答:char data val1;int idata val2;unsigned char xdata val3;bit bdata flag;sfr SCON = 0x98;sfr16 T0 = 0x8A;4-8写出下列关系表达式或逻辑表达式的结果,设a=3,b=4,c=5。 a+bb)&!c答: 014-9试编写程序,将内部数据存储器32H、33H单元内容传送到外部数据存储器1002H、1003H单元中。答:#include XBYTE0x1002 = DBYTE0x32; /将片内RAM地址0x32的内容赋给外部RAM地 /址为0x1002的存储单元XBYTE0x1003 = DBYTE0x33; /将片内RAM地址0x33的内容赋给外部RAM地址为 0x1003的存储单元4-10 试编写程序,采用3种循环结构实现数据120的平方和。答:int i,sum;sum=0;for(i=1;i=20;i+) sum=sum+i*i; 4-11试编写程序,将P1口的高5位置1,低3位不变。答:P1=P1|0xf14-12 设8次采样值依次存放在20H27H的连续单元中,用算术平均值滤波法求采样平均值,结果保存在30H单元中,试编写程序实现。答:#include #include #define uchar unsigned charvoid main() uchar i;uchar data *p;/定义指针变量int sum;p=0x20;/指针变量指向地址为20H的内部RAMsum=0;for(i=0;i8;i+) sum=sum+*p; p=p+1; /指针地址加1,实现内部RAM地址加1sum=sum/8;p=0x30;*p=sum;while(1);4-13 输入5名学生的基本信息,包括学号、姓名、成绩。要求查找出成绩最好的学生,并输出成绩最好学生的学号、姓名和成绩,试编程实现。答:#include #define uchar unsigned charvoid main() uchar i; uchar a15=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;/定义学生信息数组 uchar max_score, number,name; number=a0; name=a1; max_score=a2;for(i=1;imax_score) number=a3*i; name=a3*i+1; max_score=a3*i+2; while(1); 第5章 习题5-1 简述中断的相关概念。答:所谓中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因而必须终止原程序的执行,转去完成相应的处理程序,待处理结束之后再返回继续执行被终止原程序的过程。 中断源指向CPU提出中断申请的设备,包括中断请求信号的产生及该信号怎样被CPU有效地识别,要求中断请求信号产生一次,只能被CPU接收处理一次,即不能一次中断申请被CPU多次响应。 中断嵌套是CPU正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,去执行高优先级中断服务程序,待高优先级中断处理完毕后,再返回低优先级中断的服务程序。 中断优先级指在实际应用系统中往往有多个中断源,且中断申请是随机的,有时还可能会有多个中断源同时提出中断申请,但CPU一次只能响应一个中断源发出的中断请求,CPU响应哪个中断请求,就需要用软件或硬件安排一个优先顺序,即中断优先级排队。 5-2 CPU响应中断的条件有哪些?哪些情况下不会响应新的中断?答:1)CPU响应中断的条件:首先单片机响应中断的条件是中断源有请求且CPU开中断(即EA=1)。(1) 无同级或高级中断正在处理。(2) 现行指令执行到最后1个机器周期且已结束。(3) 若现行指令为RETI或访问特殊功能寄存器IE、IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。 在满足以上条件的基础上,若下列任何一种情况存在,则CPU不会响应新的中断: (1)CPU正在执行一个同级或高优先级的中断服务程序; (2)正在执行的指令尚未执行完; (3)正在执行中断返回指令RETI或对专用寄存器IE、IP进行读/写指令。CPU执行完上述指令之后,要再执行下一条指令时,才能响应新的中断请求。5-3 要求80C51五个中断源按下列优先顺序排列,判是否有可能实现?若能,应如何设置中断源的中断优先级别?若不能,试述理由。T0、T1、INT0、INT1、串行口串行口、INT0、T0、INT1、T1INT0、T1、INT1、T0、串行口串行口、T0、INT0、INT1、T1INT0、INT1、T0、串行口、T1解:T0、T1、INT0、INT1、串行口:能。T0、T1为高优先级,其余为低优先级。串行口、INT0、T0、INT1、T1:能。串行口为高优先级,其余为低优先级。INT0、T1、INT1、T0、串行口:不能。80C51只有两个中断优先级。当设置INT0、T1为高优先级时,INT1、T0、串行口 处于同一低优先级,而T0的优先权排在INT1之前,INT1无法优先T0。串行口、T0、INT0、INT1、T1:不能。80C51只有两个中断优先级。当设置串行口为高优先级后,T0、INT0、INT1、T1 处于同一低优先级,而INT0的优先权排在T0前面,T0无法优先INT0。INT0、INT1、T0、串行口、T1:不能。80C51只有两个中断优先级。当设置INT0、INT1为高优先级后,T0、串行口、T1 处于同一低优先级,而T1的优先权排在串行口前面,串行口无法优先T1。5-4 当执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?答:一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断。 5-5 51系列单片机中用于中断允许和中断优先级控制的寄存器分别是什么?写出中断允许控制寄存器的各控制位的符号及含义。答:MCS-51系列单片机用于中断允许和中断优先级控制的寄存器分别是IE和IP;IE(A8H)EA中断允许控制位;ES串行口中断允许控制位;ET1定时器/计数器T1的溢出中断允许位;EX1外部中断1中断允许位;ET0定时器/计数器T0溢出中断允许位; EX0外部中断0中断允许位;当相应的位为“1”时允许中断,为“0”时禁示中断。5-6 编写一段对中断系统初始化的程序,要求允许、T1、串行口中断,且使串行口中断为高优先级。 答: IE=0x9B; IP=0x02;5-7 外部中断触发方式有几种?他们各自特点是什么?答:外部中断源有电平触发和边沿触发两种触发方式。 中断电平触发方式时,中断请求标志IT0=0,CPU在每个机器周期的S5P2期间采样,一旦在P3.2引脚上检测到低电平,则有中断申请,使IE0置位(置1),向CPU申请中断。在电平触发方式中,在中断响应后中断标志位IE0的清0由硬件自动完成,但由于CPU对P3.2 引脚没有控制作用,使中断请求信号的低电平可能继续存在,在以后的机器周期采样时又会把已清0的IE0标志位重新置1,所以,在中断响应后必须采用其它方法撤消该引脚上的低电平,来撤除外部中断请求信号,否则有可能再次中断造成出错。 采用边沿触发方式时,IT0=1,CPU在每个机器的S5P2期间采样,当检测到前一周期为高电平,后一周期为低电平时,使标志IE0置1,向CPU申请中断,此标志位一直保持到CPU响应中断后,才由硬件自动清除。在边沿触发方式中,为保证CPU在两个机器周期内检测到由高到低的负跳变,高电平与低电平的持续时间不得少于一个机器周期的时间。5-8 单片机中中断请求标志位,哪些是由硬件自动复位的?哪些必须通过软件复位?答:由单片机内部硬件自动复位的:对于定时器/计数器T0、T1的溢出中断和采用跳变触发方式的外部中断请求,在CPU响应中断后,由内部硬件自动复位中断标志TF0和TF1、IE0和IE1,而自动撤除中断请求。 需用软件清除相应标志的: 对于串行接收/发送中断请求和80C52中的定时器/计数器T2的溢出和捕获中断请求,在CPU响应中断后,内部无硬件自动复位中断标志RI、TI、TF2和EXF2,必须在中断服务程序中清除这些中断标志,才能撤除中断。 既无硬件也无软件措施的:对于采用电平触发方式的外部中断请求,CPU对、引脚上的中断请求信号既无控制能力,也无应答信号。为保证在CPU响应中断后、执行返回指令前,撤除中断请求,必须考虑另外的措施。5-9 按下列要求设置定时器/计数器的模式控制字(1)T0计数器、方式1,运行与INT0有关;T1定时器、方式2,运行与INT1无关;(2)T0定时器、方式0,运行与INT0有关,T1计数器、方式2运行于INT1有关;(3)T0计数器、方式2,运行与INT0无关;T1计数器、方式1,运行与INT1有关;(4)T0定时器、方式3,运行与INT0无关;T1定时器、方式2,运行与INT1无关;解:(1) TMOD = 0x2D; (2) TMOD = 0x0E8; (3) TMOD = 0x0D6; (4) TMOD = 0x23;5-10 C51单片机内部有几个定时器/计数器,有几种工作方式?最多可连接几个下降沿触发的外部中断信号?答:C51单片机内设有2个可编程的定时/计数器,定时器0有4种工作方式,定时器1有3种工作方式。最多可以连接4个下降沿触发的外部中断信号。5-11 根据定时器/计数器0方式1逻辑结构图,分析门控位GATE取不同值时,启动定时器的工作过程。答:当GATE=0:软件启动定时器,即用指令使TCON中的TR0置1即可启动定时器0。 GATE=1:软件和硬件共同启动定时器,即用指令使TCON中的TR0置1时,只有外部中断INT0引脚输入高电平时才能启动定时器0。5-12 已知TMOD值,试分析T0、T1工作状态 (1)TMOD=93H; (2)TMOD=68H; (3)TMOD=CBH; (4)TMOD=52H解:TMOD=93H=10010011B,T1定时器,方式1,运行与INT1有关;T0定时器,方式3,运行与INT0无关。 TMOD=68H=01101000B,T1计数器,方式2,运行与INT1无关;T0定时器,方式0,运行与INT0有关。 TMOD=CBH=11001011B;T1计数器,方式0,运行与INT1有关;T0定时器,方式3,运行与INT0有关。 TMOD=52H=01010010B;T1定时器,方式1,运行与INT1无关;T0定时器,方式2,运行与INT0无关。5-13 如何判断T0、T1定时器/计数器溢出?答:判断T0、T1定时/计数溢出的方法有两种: 查询方式。不断查询T0、T1溢出标志TF0、TF1:TF0或TF1=0时,未溢出;TF0或TF1=1时,溢出。 中断方式。T0、T1定时/计数溢出时,在CPU、T0、T1中断开放前提下能自动产生中断。5-14 设时钟频率为6MHz,采用定时计数器T1及其中断控制方式,通过P1.7输出周期为20ms的方波。编写程序。答:#include void main() TMOD=0x00; TL1=0x18; TH1=0x63; TR1=1; EA =1; ET1=1; While(1); void serve() interrupt1 TL1=0x18; TH1=0x63; P1_7=!P1_7; 5-15 请采用定时器/计数器实现1s定时,控制晶振频率为12MHz。解:选定时器T0,工作方式的确定:时钟为12MHz时,方式0最长可定时:8.192ms;方式1最长可定时65.536ms;方式2最长可定时256us可见,选方式1,每隔50ms中断一次,中断20次为1s。计数初值:(216-X)110-6=0.05 X=15536=3CB0H TH0 = 3CH, TL0 = 0B0H#include unsignedcharcount=20;/中断次数计数器,初值为0void main() TMOD=0x01; TL0=0x0B0; TH0=0x3C; TR1=1; EA =1; ET0=1; While(1); void serve() interrupt1 TL0=0x0B0; TH0=0x3C;count-; /中断次数减1if(count=0)TR0=0;/中断次数达到10时复位为0 5-16 设89C51单片机晶振为6MHz要求T0定时200s,分别计算采用定时方式0、方式1和方式2时的定时初值。解:方式0:1111 1100 1 1100B; TH0=0x0FC; TL0=0x1C; 方式1:1111111110011100B; TH0=0x0FF; TL0=0x9C; 方式2:10011100B; TL0=0x9C;5-17 设晶振频率为11.0592MHz,串口工作于方式3,数据传输速率为9600b/s,试完成其初始化程序。解: 设SMOD = 1; 根据波特率计算公式计算出定时器初值为0FAH; 当波特率不翻倍即SMOD=0时,计算得初值为0FDH。初始化程序如下:Void ser_initialize(void)SCON = 0x0D0; %写控制字,且TI=RI=0 PCON = 0x80; %波特率加倍 TMOD = 0x20; %T1作波特率发生器,工作在方式2TH1 = 0x0FA; %波特率为9600b/pTL1 = 0X0FA; TR1 = 1; %启动T1 EA = 1; %开中断ES = 1; %开串行口中断5-18 如果采用的晶振频率为3MHz,定时/计数器T0分别工作在方式0、1和2下,其最的定时时间各为多少?答:如果采用的晶振频率为3MHz,机器周期为121/(3*106)=4us,由于定时/计数器TO工作在方式0、1和2时,其最大的计数次数为8192、65536和256所以,其最大定时时间分别是:方式0为81924us32.768ms、方式1为655364us262.144ms、方式2为2564us1024us。5-19 定时/计数器TO作为计数器使用时,其计数频率不能超过晶振频率的多少?答:由于定时/计数器TO作为计数器使用时,是对外部引脚输入的脉冲进行计数,CPU在每个机器周期采样一次引脚,当前一次采样为高电平,后一次采样为低电平,则为一次有效计数脉冲,所以如果晶振频率为fosc,则其采样频率fosc/12,两次采样才能决定一次计数有效,所以计数频率不能超过fosc/24。5-20 定时器工作在方式2时有何特点?适用于什么应用场合?答:定时器工作在方式2时是一个可自动装入时间常数初值的8位定时/计数器,TLx为加1计数器,THx为计数初值寄存器。由于其恢复初值由硬件自动完成,所以当需要反复计数时,用方式2可以方便地实现精确的定时。5-21. 一个定时器的定时时间有限,如何采用两个定时器的串行定时来实现较长时间的定时?答:一个定时器的定时时间有限,可采用两个定时器的串行定时来实现较长时间的定时,比如,当fosc12MHz时,单个定时/计数器采用方式1的最大定时时间为65.536ms,此时若用另一个定时/计数器按方式1进行溢出次数计数,在定时器溢出中断时,给计数器发一个计数脉冲,且两者均为方式一,则两者串行可达到的定时时间为6553665.536ms=4294967.296ms。5-22 设MCS-51单片机的晶振频率为12MHz,请编程使P1.0端输出频率为20kHz的方波。解:fosc = 12MHz,所以机器周期为1us。20kHz的方波周期为1/(201000)=50us, 方波即高电平和低电平和时间相等,所以只需设一个定时器定时25us将P1.0求反一次即可。由于题目没有规定,所以可以用查询方式,也可以用中断方式进 行编程实现。 采用查询方式实现: #include sbit P1_0=P10;/定义输出引脚变量void main() P1_0=0; /输出初值为0 TMOD=0x02; /T0方式2定时 TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0; TR0=1; /启动T0 while(1) /无限循环 if(TF0) /查询T0溢出标志 TF0=0; /溢出标志复位 P1_0=!P1_0; /输出求反 采用中断方式实现: #include sbit P1_0=P10; /定义输出引脚变量 void main() P1_0=0; /输出初值为0 TMOD=0x02; /T0方式2定时 TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0; IE=0x82; /允许CPU响应中断,允许T0发中断请求 TR0=1; /启动T0 for(;) /无限循环等待中断 timer0()interrupt 1 using 1 P1_0=!P1_0; /输出求反5-23 采用定时/计数器TO对外部脉冲进行计数,每计数100个脉冲,T0切换为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定5l单片机的晶体振荡器的频率为6MHz,要求T0工作在方式1状态,请编写出相应程序。解:晶体振荡器的频率为6MHz,则机器周期为121/(6*106)= 2us, 要定时1ms, 需计数次数为1000/2=500次。 #include sbit P1_0=P10; void main() while(1) TMOD=0x05;/T0计数,方式一 TH0=(65536-100)/256;/计数100次 TL0=(65536-100)%256; TR0=1; while(!TF0);/等待计数100次的溢出
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!