1、第 01 章 单片机基 础 习题解答 一、填空 题 1 MCS-51 单 片机有 4 个 存储空间, 它们分别是: 片内程序存储器 、 片外程序存储 器 、 片内数据存储器 、 片外数据存储器 。 2 、MCS-51 单 片机的一个机器周期包括 6 个状态周期, 12 个振荡周期。 设 外接 12MHz 晶 振,则一个机器周期为 1 s 。 3 程序状态 字PSW 由 8 位组成,分别是 CY AC F0 RS1 RS0 OV P 。 4 在MCS-51 单片机内部,其RAM 高端 128 个字 节的地址空间称为 特殊功能寄存区 /SFR 区,但其中仅有 21 个字节有实际意义。 5 通常MC
2、S-51 单片机上电复位时PC= 0000 H 、SP= 07 H 、通用寄存器采用 第 0 组,这一组寄存器的地址范围是 0007 H 。 6 MCS-51 单 片机堆栈遵循 先进后出 的数据存储原则。 7 在MCS-51 单片机中,使用P2、P0 口传送 地址 信号,且使用P0 口 来传送 数据 信号,这里采用的是 复用 技术。 8 MCS-51 单 片机位地址区的起始字节地址为 20H 。 9 对于并行 口在读取端口引脚信号时,必须先对端口写 FFH 。 10PC的内 容是 下一条要执行的指令地址 。 二、 简答题 1 MCS-51 单 片机的引脚按照功能分为几类?并说明各引脚的功能。
3、答:MCS-51 单片机的引脚按照功能分为电源和晶振、I/O 引 线、控制线三类。 (1) 电源和晶 振: Vcc(40) :接+5V 电源正端 。 Vss(20) :接 电源地端。 XTAL1(19) : 接外部石英晶体的一端。 XTAL2(18) : 接外部石英晶体的另一端。 (2) I/O 引 线: MCS-51 单片 机共有 32 条I/O 引线, 分 成 P0-P3 四组 ,4 组端口 除了可以做普通 I/O 口 之外, P0 口既可以 作为 8 位数 据总线还可以分时输出低 8 位地址 ,经锁存器锁存形成 A0-A7;P1 口作为 I/O 用;P2 口还 可以输出作为高 8 位地址
4、 A8-A15 ;P3 口具有第二功能,P3.0-P3.7第二功能分别依次为 RXD、TXD 、/INT0 、/INT1 、T0 、T1 、/WR 、/RD 。 (3 )控制线 : ALE (30 ) : 地址锁存有效信号输出端。 /PSEN (29 ) :片外程序存储器读选通信号输出端,低电平有效。 RST/VPD (9 ) :上电复位或掉电保护端。 /EA (31 ) : 片 外程序存储器选用端。 该引脚低电平时, 只能选用片外程序存储器, 否则单片 机上电或复位后选用片外程序存储器。 2 MCS-51 单 片机的位寻址区的字节地址范围是多少?位地址范围是多少? 答:20H-2FH 00H
5、-7FH 3 MCS-51 单 片机的三总线是由哪些口线构成的。 答:P0 口 提供 8 位数据 总线;P0 口还 可以分时输出低 8 位 地址, 经锁存器锁存形成 A0-A7 , P2 口提供 高8 位地址A8-A15 , 合起来 提供 16 位地 址线。P3 口和 ALE 、/PSEN 、RST/VPD 、/EA 提供控制线。 4 MCS-51 单片机 P0-P3 端口在功能上各有什么用途和区别?当它们作为 I/O 口使 用时, 具有哪些应用特点? 答:51 单片 机共有 P0-P3 四个端口,他们除了可以做普通 I/O 口之外,P0 口既可以作为 8 位数据总线还可以分时输出低 8 位
6、地址, 经锁存器锁存形成 A0-A7 ;P1 口仅作为I/O 用;P2 口还可以输出作为高 8 位地址 A8-A15 ;P3 口具有 第二功能,P3.0-P3.7 第 二功能分别依次 为 RXD 、TXD、/INT0 、/INT1 、T0 、T1、/WR 、/RD。作为 I/O 口使用时的应用特点是: 4 个并行I/O 口均由内部总线控制,端口的功能复用会自动识别,不用用户选择。 P0 是 8 位、 漏极开路的双向 I/O 口 ,可分时复用为数据总线和低 8 位 地址总线,可驱 动 8 个LSTTL 负载。作地 址/ 数据总线 口时,P0 是 一真正双向口,而作通用 I/O 口时, 只是一个准
7、双向口。 P1 是 8 位、 准双向 I/O 口,具有内部上拉电阻,可驱动 4 个 LSTTL 负载 。 P2 是 8 位、 准双向 I/O 口,具有内部上拉电阻,可驱动 4 个 LSTTL 负 载,可用作高 8 位地址总线。 P3 是 8 位、 准双向 I/O 口,具有内部上拉电阻,可驱动 4 个 LSTTL 负载 。P3 口的 所有 口线都具有第二功能。 单片机功能多,引脚数少,因而许多引脚都具有第二功能。 单片机对外呈现三总线形式,由 P2 、P0 口 组成 16 位地址总 线;由 P0 口 分时复用为数 据总线;由 ALE 、/PSEN 、RST 、/EA 与P3 口中的/INT0 、
8、/INT1 、T0、T1、/WR、/RD 共 10 个引脚组 成控制总线。 5 MCS-51 单 片机存储器在结构上有什么特点?在物理上和逻辑上各有那几个地址空间? 答:MCS-51 单片机的存 储器采用的 是程序存储 器与数据存 储器截然分 开的哈佛结 构,即 程 序存储器和数据存储器各有自己的寻址方式、寻址空间和控制系统。 物理上分 为 4 个存储 器空间: 片内程序 存储器、片外程序存储器 片内数据 存储器、片外数据存储器 逻辑上分 为 3 个地址 空间: 片内、片 外统一编址的 64KB 程序 存储器空间 片内 256B 的数据存储 器地址空间 片外 64KB 的数据存储 器空间 6简
9、 述 MCS-51 单 片机 00H-7FH 片内RAM 的功能划 分, 写出它们的名称以及所占用的地址空 间,并说明它们的控制方法和应用特性。 答 :( 1 )工 作寄存器组() 这是一个用寄存器直接寻址的区域, 内部数据区的, 共个单元。 它 是个通用工作寄存器组,每个组包含个位寄存器,编号为。 (2 )位寻址 区() 个字节单元, 共包含位, 这个字节单元既可以进行字节寻址, 又可以实 现位寻址。主要用于位操作。 (3 )堆栈与 数据缓冲区() 用于设置堆栈、存储数据 7 请写出 MCS-51 单片机 的五个中断源的入口地址。 答:MCS-51 单片机的五个中断源的入口地址如下: 名 称
10、 入 口 地 址 外部中断/INTO 0003H 定时器 T0 中断 000BH 外部中断/INT1 0013H 定时器 T1 中断 001BH 串行口接收/ 发送中断 0023H 8 MCS-51 单 片机的片内 RAM 用户区的 字节地址范围是多少?主要用途是什么? 答:30H-7FH, 主要用于 设置堆栈、存储数据 9 单片机的 复位电路有哪几种形式?试画图说明工作原理。 答:MCS-51 单片机通常采用上电自动复位、按键手动复位两种方式。如图所示。 (a) (b) 图 复位电路 图 (a)是常 用的上电复 位电路,利 用电容器充 电来实现复 位。当加电 时,电容C充电, 电路有电流 流
11、过,构成 回路,在电 阻R 上产生压 降,RST引脚为高电平; 当电容C 充满 电后, 电路相当于 开路,RST的电位与地相 同,复位结 束。可见复 位的时间与 充电的时间 有关,充 电时间越长复位时间越长,增大电容或电阻都可以增加复位时间。 图 (b) 是按 键式复位电路。 它的上电复位功能与图2-154(a) 相同, 但它还可以通过按键 实现复位。 按下按键后 ,通过两个 电阻形成回 路,使RST端产生高电平 。按键的时 间决定了 复位的时间。 10试说明MCS-51 单片机 两种低功耗工作方式的异同。 答:MCS-51 单片机两种低功耗工作方式由电源控制寄存器 PCON (97H)中 的
12、 PD、IDL 两位来 控制。 当 PD=1 时, 进入掉电方式,振荡器停止工作,芯片所有功能均停止,但片内 RAM 和 SFR 内 容保持不变。退出掉电方式的唯一方式是硬件复位。 当 IDL=1 时 , 进入待机方式,CPU 时 钟被切断, 但中断系统、 定时器和串行口的时钟信号继 续保持, 所有 SFR 保持 进入空闲工作方式前的状态。 退出待机方式的方式有中断退出和硬件 复位退出。 三、Proteus仿真 在Proteus 下 ,改进、丰富1.3 节内容 。 答: 流水灯的流水方式、 每个 LED 的闪烁方式、 闪烁时间等都可以改变。 如果加上按键, 可 以实现按键控制。 第 02 章
13、单 片机指令 系 统与汇编 语 言程序设 计 习题解答 一、填 空题 1. MCS-51 单 片机 指令系统中有 111 条指令。 2. MCS-51 单 片机 指令中,Rn 表示 R0 、R1、R2、R3 、R4 、R5 、R6、R7 中的 一个 。 3. MCS-51 单 片机 指令中, 表示 间接 寻址 。 4. MCS-51 单 片机 指令中,$ 表示 当前 指令的首地址 。 5. MCS-51 单 片机 寻址方式有 立即数 、直接地址、寄存器、寄存器间接、变址、相对、 位寻址等七种寻址方式 。 6. 指令MOVC A , A+PC的 功能是 将A 的内容与PC当前值相加 作为程序存
14、储器地址, 再 将该地址单元的内容传送到A 。 7. 指令JBC CY, LOOP 是 3 字节、 2 个机器周期指令。 8. 指令DA A 的 功能是 对A 中当前值进 行十进制调整 。 9. 调用子程序时,将PC当 前值保存到 堆栈 。 10. MCS-51 单片 机堆栈操作的基本原则是 先进 后出 。 二、简答 题 1. MCS-51 单片 机指令一般由哪几个部分组成?各部分的功能是什么? 答:MCS-51 单片机指令一般由标号、操作码助记符、操作数、注释四部分组成。 标号是一条指令的标志, 是可选字段, 与操作码之间用“:” 隔开; 设置标号的目的是 为了方便调用或转移。标号的选择应遵
15、从下列规定: 标号由 1 8 个字母或数字组成,也可以使用一个下划线符号“_”。 第一个字符必须是字母。 指令助记符或系统中保留使用的字符串不能作为标号。 标号后面需要有一个冒号。 一条语句可以有标号, 也可以没有标号, 取决于程序中其它语句是否需要访问这条语 句。 操作码规定指令的功能, 是一条指令的必备字段, 如果没有操作码, 就不能成为指令。 它与操作数之间用“空格”隔开。 操作数是指令操作的对象。 分为目的操作数和源操作数两类, 它们之间用“, ”分隔。 操作数是可选字段。一条指令可以有 0 、1 、2 、3 个操作数。 注释是对指令功能的说明解释。以“;”开始。 2. 程序中,伪指令
16、 ORG 和END 的作用是 什么? 答:ORG 用于定义汇编语言源程序或数据块存储的起始地址。 END 用于指示源程序到此全部结束。 在汇编时, 对 END 后面的指令不予汇编。 因此,END 语句必须放在整个程序的末尾,有且只能有一个。 3. 简述堆栈指令 PUSH 和 POP 的操作过程 。 答: 执行 PUSH 指令时, 先将 SP 的内容 加 1 , 指向新的堆栈栈顶单元, 然后将指定地址单元 的内容送到堆栈栈顶单元。 执行 POP 指 令时, 先将 SP 指向的堆栈 栈顶单元内容送到指定地址单元, 然后将 SP 的内 容减 1 ,修改 堆栈栈顶单元。 4. 若 若 S SP P=
17、=2 25 5H H , , 标 标 号 号 L LA AB BE EL L 的 的 值 值 为 为 3 34 45 56 6H H 。 。 指 指 令 令“ “L LC CA AL LL L L LA AB BE EL L” ” 的 的 首 首 地 地 址 址 为 为 2 23 34 45 5H H, , 问 问 执 执 行 行 长 长 调 调 用 用 指 指 令 令“ “L LC CA AL LL L L LA AB BE EL L” ” 后 后 , , 堆 堆 栈 栈 指 指 针 针 和 和 堆 堆 栈 栈 的 的 内 内 容 容 发 发 生 生 什 什 么 么 变 变 化 化 ? ?P
18、 PC C 的 的 值 值 等 等 于 于 什 什 么 么 ? ? 答 答 : :PC 当前 值压入堆栈,并转向子程序,SP=27H, (26H)=48H,(27)=23H,PC=3456H 5. 已 已 知 知 S SP P= =2 25 5H H , ,P PC C= =2 23 34 45 5H H , , ( (2 24 4H H ) )= =1 12 2H H , , ( (2 25 5H H ) )= =3 34 4H H , , ( (2 26 6H H ) )= =5 56 6H H 。 。 问 问 执 执 行 行“ “R RE ET T” ” 指 指 令 令 以 以 后 后
19、, , S SP P= = ? ? P PC C= = ? ? 答 答 : :SP=23H, PC=3412H 6. 以下程序段执行后,A= , (30H )= 。 MOV 30H ,#0AH MOV A ,#0D6H MOV R0 ,#30H MOV R2 ,#5EH ANL A ,R2 ORL A ,R0 SWAP A CPL A XRL A , #0FEH ORL 30H , A 答:答:A=E4H (30H )=EEH 7. 比较内部 RAM 中30H 和40H 单元的二 个无符号数的大小, 将大数存入 20H 单元, 小数存 入 21H 单元 ,若二数相等,则使位空间的 7FH 位置
20、 1 。 答: ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV A ,30H CJNE A ,40H ,LOOP1 SETB 7FH SJMP LOOP3 LOOP1: JC LOOP2 MOV 20H ,A MOV 21H ,40H SJMP LOOP3 LOOP2: MOV 20H ,40H MOV 21H ,A LOOP3: SJMP $ END 8. 设变量 X 存 在内部 RAM 的 20H 单元 中, 其取值范围为 0 5 , 编一查表程序求其平方值, 并将结果存放在内部RAM 21H 单元。 答: ORG 0000H LJMP START ORG 1
21、000H START: MOV DPTR, #TABLE MOV A,20H MOVC A ,A+DPTR MOV 21H, A SJMP $ ORG 2000H TABLE: DB 0,1,4,9,16,25 END 9. 编写程序将内部 RAM 中起始地址为 data 的字节数据串送到外部 RAM 中起始地址为 buffer 的存 储区域中,直到发现$字符为止。 答: ORG 0000H LJMP START ORG 0100H START: MOV R0,#data MOV DPTR, #buffer LOOP1: MOV A,R0 CJNE A,#24H,LOOP2 ; 判断 是否为字
22、符 SJMP LOOP3 ; 是, 转结束 LOOP2: MOVX DPTR,A ; 不是 ,传送数据 INC R0 INC DPTR SJMP LOOP1 ;传 送下一数据 LOOP3: SJMP $ END 10. 将一个字节的二进制数转换成 3 位 非压缩型 BCD 码。设该二进制数在内部 RAM 40H 单 元, 转换结果 放入内部 RAM50H,51H,52H 单元中 (百位在 50H,十 位 在 51H,个位 在 52H)。 答: ORG 0000H LJMP HEXBCD ORG 0100H HEXBCD: MOV A, 40H MOV B, 100 DIV AB MOV 50H
23、, A MOV A, 10 XCH A, B DIV AB MOV 51H, A MOV 52H, B SJMP $ END 三、Proteus 仿真 利用 Proteus 仿真实现2.3 节中的内 容。 答:全自动洗衣机按键与指示灯 Proteus 仿真 设全自动洗衣机控制面板上有 8 个 控制按键,8 个指示灯。 按下一个按键, 对应的 指 示灯点亮。电路如图所示。 参考程序如下。 ORG 0000H ; 上电后 PC=00000H ,故 在 0000H 单 元存放转移指令 LJMP START ; 转移到应用程序 ORG 0030H ; 应用程序 从 0030H 开 始存放 START:
24、 MOV P1, #0FFH ; 置输入状态 LOOP1:MOV A, P1 ; 输入开关状态信息 MOV P2, A ; 输出开关状态驱动 LED DELAY: MOV R5, #255 ; 延时子程序外循环变量 DEL0: MOV R6,#255 ; 内循环变量 DEL1: DJNZ R6,DEL1 ; 内循环体 DJNZ R5,DEL0 ; 外循环体 SJMP LOOP1 ; 循环 END ; 汇编结束 第 03 章 单片机 C 语言程序 设计 习题解答 一、填空 题 1 程序的基本结构有 顺序结构、分支结构、循环结构 。 2 C51 的存 储器模式有 SMALL 、COMPACT 、L
25、ARGE 。 3 C51 中int 型变量的长度为 16 位 ,其值域为 0-65535 。 4 C51 中关 键字sfr的作 用 定义 51 单片机内部 一个字节的特殊功能寄存器 , sbit 的作用 定义 51 单片 机片内可位寻址位 。 5 函数定义由 函数头 和 函数 体 两部分组成。 6 C51 的表 达式由 运算 符 、运算对象 组成。 7 C51 表达 式语句由表达式和 分号 组成。 8 C51 中“ !” 运算符的作用是 逻辑 非 。 9 若函数无返回值,用 void 关键字指定。 10 若 局部变量未初始化,其初值为 不确定 。 二、 简 答题 1 举例说明 b = 2; 如
26、果执行 a 如果执 行 x = i+; 则 x = 3,i = 4 。 执行x = +i; 则i = 4 ,x = 4。 5 、 何为 函数声明?如何进行函数声明? 答 :( 1 ) 函数声明即是声明被调函数的原型, 包括被调函数名、 函数类型 (即返回值类型) 、 形参表(包括形参个数及其数据类型) 。 (2 )声明函 数原型可以按照写函数定义时的函数头,再加上分号即可。 三、Proteus 仿真 1.在Proteus 下,仿真实 现 3.6 节内 容。 答:设在存储区,有 10 个数据:99 ,15,30,13 ,27 ,28 ,7 ,0 ,33,67 。编写程序 , 将 其按照从大到小的
27、次序排列。 并按次序在数码管上显示。 为了简化硬件电路, 选用译码、 显 示一体化显示模块。仿真电路如图 3-8 所示。 图 3-8 数据 排序仿真电路 C 语言参考 程序如下。 #include /定义头文件 #define uchar unsigned char /定义常量 uchar A10= 99,15,30,13,27,28,7,0,33,67 ; /定义数组, 为了显示直观,对 0-99 之间的十进制数进行排序 int DIS10 = 252,96,218,242,102,182,190,224,254,246; /定义数码管 显示 0-9 的引 脚值 sbit pos_1 = P
28、20; /定义 4 位数 码管第 1 位 使能引脚 sbit pos_2 = P21; /定义 4 位数 码管第 2 位 使能引脚 sbit pos_3 = P22; /定义 4 位数码管第 3 位使能引脚 sbit pos_4 = P23; /定义 4 位数码管第 4 位使能引脚 void taxisfun () /排序函数 uchar i,j,Temp; /定义局部变 量 for (i=0; iAj) /当后一个数 大于前一个数 Temp = Aj; /前后 2 数 交换,前数送零时变量 Aj = Aj+1; /后数送前数 Aj+1 = Temp; /零时变量送 后数 void delay
29、() /延迟函数 int i,j; /定义两个内 部循环变量 for ( i = 0;i = 3; i+) /设置外部循 环 for ( j = 0; j = 200; j+); /设置内部循 环 void off() /数 码管 4 位全灭函数 pos_1 = 1; /数码管第 1 位灭 pos_2 = 1; /数码管第 2 位灭 pos_3 = 1; /数码管第 3 位灭 pos_4 = 1; /数码管第 4 位灭 void main(void) /主程序 int now_pos, now_num; /定义程序全 局变量,now_pos 为排序 后的 10 个数 字的排序序号,now_nu
30、m 记录显示 结果循环次数 taxisfun (); /调用排序函 数,对 10 个 乱序数值进行从大到小排序 off(); /数码管全灭 ,等待进入循环显示 while(1) /程序进入循 环阶段 for (now_pos = 0; now_pos 10; now_pos+) /10 个从大到 小排序后结果显示 for (now_num = 0; now_num 100; now_num+) /每个数值显 示 100 次后 ,才显示下一个数值 P1 = DISnow_pos; /P1 口输出 当前显示数值的排序结果 pos_1 = 0; /数码管第 1 位亮起 delay(); /显示延迟
31、off(); /数 码管 4 位全灭 P1 = DISAnow_pos / 10; /P1 口显示 排序后数值的十位 pos_3 = 0; /数码管第 3 位亮起 delay(); /显示延迟 off(); /数码管 4 位全 灭 P1 = DISAnow_pos % 10; /P1 口显示 排序后数值的个位 pos_4 = 0; /数码管第 4 位亮起 delay(); /显示延迟 off(); /数 码管 4 位全灭 ; 2. 在 Proteus 下,用汇编 语言程序实现数据排序,并将排序结果通过数码管显示。 答: 设有 N 个数存放在 LIST 地址开始的内部 RAM 存储区中 , 编写
32、程序将 N 个数按由 小到大次序存放在原来的存储区内。仿真电路如图 3-8 所 示。 数据排序的方法有很多种,常用的是“冒泡法” ,基本思想是:将相邻两个数作比较, 即第一个数和第二个数比较, 第二个数和第三个数比较, 依次类推。 若符合从小到大顺序的, 则不改变它们在内存中的位置;否则交换它们的位置。如此反复,直至完成排序。 按 “冒泡法” 对 N 个数排序时, 最多需要 N-1 次双重循环。 但在多数情况下, 不用 N-1 次循环, 数据就排好了。 为了提高排序效率, 程序中可设一交换标志位, 每次循环中, 若 有 交换则设置该标志, 表明排序未完成; 若无交换, 则清除该标志, 表明排序
33、已经完成。 每 次 循环结束时,检查交换标志位,判断排序是否结束。 参考程序如下: ORG 0000H ; 上电后 PC=00000H ,故 在 0000H 单 元存放转移指令 AJMP SORT ; 转向主程序 N EQU 07H ; 定义常 量 N=07H ORG 0100H ; 主程序从 0100H 开始 SORT: MOV R2, #N-1 ; 设置比较次数 MOV R0, #LIST ; 数 据块起始地址 LOOP1:MOV A, R2 ; 外循环计数值 MOV R3, A ; 内循环计数值 MOV R1,#01 ; 交换标志初值 LOOP2: MOV A, R0 ; 取数据 MOV
34、 B, A ; 暂存 B INC R0 ; 数据地址加 1 CLR C ; 清借位标志 SUBB A, R0 ; 两数比较 JC LESS ;XjXj-1 转 LESS MOV A,B ; 取大数 XCH A,R0 ; 两数交换位置 DEC R0 ; 修改地址 MOV R0, A ; 保存小数 INC R0 ; 恢复数据指针 MOV R1,#02 ; 置交换标志为 2 LESS: DJNZ R3, LOOP2 ; 内循环计数减 1 ,判一遍 比较完成? DJNZ R2 ,LOOP3 ; 外循环计数减 1 ,判排序 结束? STOP: SJMP $ ; 循环等待 LOOP3: DJNZ R1,
35、LOOP1 ; 发生交换时,R1 的内容 为 2 ,减 1 后不 为 0 ,转移 ORG 0050H ; 定义数据块从 0050H 开始 LIST: DB 0,13,3,90,27,32,11 ; 定义字节数据块 END ; 汇编结束 第 4 章 单片机中 断系统 习题解答 一、填 空题 1 MCS-51 单 片机有 5 个中断源。 上电复位时, 同级中断的自然优先级从高至 低依次为 外中断 0 、定时器/计数 器 0 、外中断 1 、定时器/ 计数器 1 、串行口 ,若 IP=00010100B ,优先级别最高者为 外中断 1 、最低者为 定时器/ 计数器 1 。 2 外部中断 请求有 低电
36、平 触发和 下降沿 触发两种触发方式。 3 MCS-51 单片 机 5 个中 断源的中断入口地址为: 0003H 、000BH 、0013H 、001BH 、 0023H 。 4 当定时器/ 计数器 1 申 请中断时,TF1 为 1 ,当中断响应后,TF1 为 0 。当串口 完成一帧字符接收时,RI 为 1 ,当中断响应后,RI为 1 ,需要 软件 清零。 5 中断源扩展有三种方式, 分别是 定时器/ 计 数器扩展、 查询方式扩展、 中断控制芯片 扩展 。 二 简答题 1.MCS-51 单 片机有几个中断源?各中断标志是如何产生的?如何撤销的?各中断源的中断 矢量分别是什么? 答:MCS-51
37、 单片机有 5 个中断源。外中断 0/1 电 平触发方式,在对应引脚上检测到低电平 将中断标志位 IE0/1 置 1 向 CPU 申请中断,边沿触发方式,在对应引脚上检测到负跳变将 中断标志位 IE0/1 置 1 向 CPU 申请中 断;定时器/ 计数器 0/1 在 计数溢出时将 TF0/1 置 1 向 CPU 申请中 断; 串行口发 送 1 帧结束将 TI 置 1 或 接收 1 帧数据将 RI 置 1 向 CPU 申请 中断 。 对于 T0/T1 和边沿触发的 INT0/INT1 中断标志在进入中断服务程序后自动撤销;对于电平 触发的 INT0/INT1 需在中断申请引脚处加硬件撤销电路;
38、对于串行口中断标志 TI/RI 需在 进 入中断服务程序后用软件 CLR RI 或 CLR TI , 撤销。 它们的中断矢量分别是: 0003H 、 000BH 、 0013H 、001BH 、0023H 。 2. 简述MCS-51 中断过程 答:中断过程分中断申请、中断响应、中断处理、中断返回 4 个阶段 。 中断请求:各中断源根据自身特点施加合适的信号,将对应的中断标志位置 1 向 CPU 申请 中断。 中断响应:CPU 对中断请求进行判断,形成中断矢量,转入响应的中断服务程序。 中断处理:根据各中断源要求执行响应中断服务程序。 中断返回:中断服务程序结束后,返回主程序。 3. 简述外中
39、断 0 INT 和 1 INT 的 2 种 触发方式(电平、边沿)的异同。 答:相同点:都是在检测到有效信号后将中断标志位置 1,向 CPU 申请中断。 不同点: 电平触发的有效信号是低电平; 边沿触发的有效信号是负跳变, 前一次检测到高电 平,后一次检测到低电平。 4.MCS-51 单 片机响应中断时,如何保护断点?如何转移到中断服务应用程序? 答:保护断点:单片机在进入中断服务程序前先将当前 PC 以及其它响应寄存器压入堆栈 。 转入中断服务程序: 单片机将当前中断源的中断矢量赋给 PC , 相当于一条长跳转指令。 5. 电路如图4-7 所示。编 写程序,用两级中断实现如下功能。电路正常工
40、作时,两个 LED 同时点亮; 若先按下按键 K0 后,LED1 熄灭,LED0 闪烁10 次 ;若 在 LED0 闪烁期间按下按键 K1,则 LED0 熄灭,LED1 闪烁, 闪烁 10 次后,LED1 熄灭,LED0 继续闪烁。 若先按下按键 K1 , 则 LED1 闪烁 ,闪烁 10 次后 ,LED1 熄 灭。若在 LED1 闪烁其间, 按下 K0,不 能中断 LED1 的 闪烁;等到 LED1 闪烁结束 后,LED0 闪烁 10 次。闪 烁结束后,恢复正常工作。 答:参考程序如下 #include #define uint unsigned int #define uchar unsi
41、gned char sbit LED0 = P10; sbit LED1 = P11; void flashled0(); void flashled1(); void delayms(uint i); main() PX1=1;IT0=1;IT1=1; EX0=1;EX1=1;EA=1; while(1); void serint0() interrupt 0 uchar i; LED1 = 0; for(i=0;i10;i+) R LED1 LED0 P1.0 P1.1 P3.2 P3.3 8051 Vcc R K0 K1 flashled0(); void serint1() inter
42、rupt 2 uchar i; LED0 = 0; for(i=0;i10;i+) flashled1(); void flashled0() LED0 = 1; delayms(250); LED0 = 0; void flashled1() LED1 = 1; delayms(250); LED1 = 0; void delayms(uint i) uint j; while(i-) for (j=0;j125;j+); 三、Proteus 仿真 1. 在 Proteus 下,仿真实现 4.5 节内容 。 答:全自动洗衣机“启动/ 暂停”控制 Ptoteus 仿真 在全自动洗衣机工作过程中
43、, 当遇到意外事件发生, 如衣物缠绕, 或需要干预洗衣进程 时, 如需要添加消毒液, 就需要暂停当前洗衣进程, 处理这些事件。 用图4-6 电 路模拟全 自 动洗衣机中断过程。 假设全自动洗衣机有 8 个 流程, 用 8 个指示灯表示; 用 8 个 按键进行选 择控制。 当某个流程工作时, 对应的指示灯点亮。 当按下按键 SW1 时, 中断正 在进行的流程, 对应的流程指示灯闪烁, 洗衣机进入等待状态; 再次按下 SW1 时, 指示 灯停止闪烁, 变成点 亮状态,表示洗衣机恢复原来被中断的洗衣流程。Proteus 仿真电路及程序如下。 图4-6 全自动洗衣机“启动/暂停”中断控制过程Prote
44、us 仿真 汇编语言参考程序如下: ORG 0000H ;在 0000H 单元存放转移指令 AJMP MAIN ;转移至主程序 ORG 0003H ;INT0 中断入口 AJMP WBI ;转中断服务程序 ORG 0030H ;主程序 MAIN: MOV P2 ,#00H ;全灯灭 SETB IT0 ;边沿触发中断 SETB EX0 ;允许外中断 0 中断 SETB EA ;开中断开关 LOOP: MOV A, P1 ;输入洗衣流程控制按键状态 CPL A ;A 的内容求反 MOV P2, A ;输出驱动指示灯亮 CALL DELAY20MS ;延时 SJMP LOOP ;主循环 SJMP $
45、 ;循环等待 DELAY20MS: ;延时子程序程序入口 MOV R6,#200 ;设置延时外循环数 LOOP1: MOV R7,#200 ;设置延时内循环数 LOOP2: NOP ;延时指令 NOP ;延时指令 NOP ;延时指令 DJNZ R7,LOOP2 ;判断延时内循环是否结束 DJNZ R6,LOOP1 ;判断延时外循环是否结束 RET ;延时子程序返回 WBI : ;中断服务程序入口 CLR EA ;关中断 MOV P2 ,#00H ;关闭 LED CALL DELAY20MS ;延 时 MOV A ,P1 ;读按键状况 CPL A ;取反 MOV P2, A ;送 LED 显示
46、CALL DELAY20MS ;延 时 JB P3.2, WBI ;循环闪烁 SETB EA ;开中断 RETI ;中断返回 END ;汇编结束 C 语言参考 程序如下: #include /包含头文件 void delayMs(unsigned int i) /定义延时程 序 unsigned int j; /定义延时变 量 while(i-) /延时外循环 for(j = 0; j 125; j+); /延时外循环 main() /主程序 P2=0; /关闭 LED IT0=1; /设置中断 0 边沿触发 EX0=1; /打开中断 0 允许 EA=1; /打开 CPU 中断允许 while(1) /设置主循环 P2=P1; /读取按键状 态送 LED 显示 delayMs(20); /延时 exint0() interrupt 0 /外中断 0 服 务程序 do /中断循环 EA=0; /关中断 P2=0; /关闭 LED delayMs(20); /延时 P2=P1; /读取按键状 态送 LED 显示 delayMs(20); /延时 while(P32=1); /循环闪烁 EA=1; /开中断