单片机原理与应用课后答案李林功.pdf_第1页
单片机原理与应用课后答案李林功.pdf_第2页
单片机原理与应用课后答案李林功.pdf_第3页
单片机原理与应用课后答案李林功.pdf_第4页
单片机原理与应用课后答案李林功.pdf_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

第第 0101 章章 单片机基础单片机基础 习题解答习题解答 一 填空题一 填空题 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 通常MCS 51 单片机上电复位时PC 0000 H SP 07 H 通用寄存器采用 第 0 组 这一组寄存器的地址范围是 00 07 H 6 MCS 51 单片机堆栈遵循 先进后出 的数据存储原则 7 在MCS 51 单片机中 使用P2 P0 口传送 地址 信号 且使用P0 口 来传送 数据 信号 这里采用的是 复用 技术 8 MCS 51 单片机位地址区的起始字节地址为 20H 9 对于并行口在读取端口引脚信号时 必须先对端口写 FFH 10 PC的内容是 下一条要执行的指令地址 二 二 简答题简答题 1 MCS 51 单片机的引脚按照功能分为几类 并说明各引脚的功能 答 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 位地址 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 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 位地址 经锁存器锁存形成 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 口时 只是一个准双向口 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 INT1 T0 T1 WR RD 共 10 个引脚组成控制总线 5 MCS 51 单片机存储器在结构上有什么特点 在物理上和逻辑上各有那几个地址空间 答 MCS 51 单片机的存储器采用的是程序存储器与数据存储器截然分开的哈佛结构 即程 序存储器和数据存储器各有自己的寻址方式 寻址空间和控制系统 物理上分为 4 个存储器空间 片内程序存储器 片外程序存储器 片内数据存储器 片外数据存储器 逻辑上分为 3 个地址空间 片内 片外统一编址的 64KB 程序存储器空间 片内 256B 的数据存储器地址空间 片外 64KB 的数据存储器空间 6 简述 MCS 51 单片机 00H 7FH 片内 RAM 的功能划分 写出它们的名称以及所占用的地址空 间 并说明它们的控制方法和应用特性 答 1 工作寄存器组 这是一个用寄存器直接寻址的区域 内部数据 区的 共 个单元 它 是 个通用工作寄存器组 每个组包含 个 位寄存器 编号为 2 位寻址区 个字节单元 共包含 位 这 个字节单元既可以进行字节寻址 又可以实 现位寻址 主要用于位操作 3 堆栈与数据缓冲区 用于设置堆栈 存储数据 7 请写出 MCS 51 单片机的五个中断源的入口地址 答 MCS 51 单片机的五个中断源的入口地址如下 名 称 入 口 地 址 外部中断 INTO 0003H 定时器 T0 中断 000BH 外部中断 INT1 0013H 定时器 T1 中断 001BH 串行口接收 发送中断 0023H 8 MCS 51 单片机的片内 RAM 用户区的字节地址范围是多少 主要用途是什么 答 30H 7FH 主要用于设置堆栈 存储数据 9 单片机的复位电路有哪几种形式 试画图说明工作原理 答 MCS 51 单片机通常采用上电自动复位 按键手动复位两种方式 如图所示 a b 图 复位电路 图 a 是常用的上电复位电路 利用电容器充电来实现复位 当加电时 电容C充电 电路有电流流过 构成回路 在电阻R上产生压降 RST引脚为高电平 当电容C充满电后 电路相当于开路 RST的电位与地相同 复位结束 可见复位的时间与充电的时间有关 充 电时间越长复位时间越长 增大电容或电阻都可以增加复位时间 图 b 是按键式复位电路 它的上电复位功能与图2 154 a 相同 但它还可以通过按键 实现复位 按下按键后 通过两个电阻形成回路 使RST端产生高电平 按键的时间决定了 复位的时间 10 试说明MCS 51单片机两种低功耗工作方式的异同 答 MCS 51 单片机两种低功耗工作方式由电源控制寄存器 PCON 97H 中的 PD IDL 两位来 控制 当 PD 1 时 进入掉电方式 振荡器停止工作 芯片所有功能均停止 但片内 RAM 和 SFR 内 容保持不变 退出掉电方式的唯一方式是硬件复位 当 IDL 1 时 进入待机方式 CPU 时钟被切断 但中断系统 定时器和串行口的时钟信号继 续保持 所有 SFR 保持进入空闲工作方式前的状态 退出待机方式的方式有中断退出和硬件 复位退出 三 三 ProteusProteus仿真仿真 在Proteus下 改进 丰富1 3节内容 答 流水灯的流水方式 每个 LED 的闪烁方式 闪烁时间等都可以改变 如果加上按键 可 以实现按键控制 第第 0202 章章 单片机指令系统与汇编语言程序设计单片机指令系统与汇编语言程序设计 习题解答习题解答 一 填一 填 空题空题 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当前值相加作为程序存储器地址 再 将该地址单元的内容传送到A 7 指令JBC CY LOOP是 3 字节 2 个机器周期指令 8 指令DA A的功能是 对A中当前值进行十进制调整 9 调用子程序时 将PC当前值保存到 堆栈 10 MCS 51 单片机堆栈操作的基本原则是 先进后出 二 简答题二 简答题 1 MCS 51 单片机指令一般由哪几个部分组成 各部分的功能是什么 答 MCS 51 单片机指令一般由标号 操作码助记符 操作数 注释四部分组成 标号是一条指令的标志 是可选字段 与操作码之间用 隔开 设置标号的目的是 为了方便调用或转移 标号的选择应遵从下列规定 标号由 1 8 个字母或数字组成 也可以使用一个下划线符号 第一个字符必须是字母 指令助记符或系统中保留使用的字符串不能作为标号 标号后面需要有一个冒号 一条语句可以有标号 也可以没有标号 取决于程序中其它语句是否需要访问这条语 句 操作码规定指令的功能 是一条指令的必备字段 如果没有操作码 就不能成为指令 它与操作数之间用 空格 隔开 操作数是指令操作的对象 分为目的操作数和源操作数两类 它们之间用 分隔 操作数是可选字段 一条指令可以有 0 1 2 3 个操作数 注释是对指令功能的说明解释 以 开始 2 程序中 伪指令 ORG 和 END 的作用是什么 答 ORG 用于定义汇编语言源程序或数据块存储的起始地址 END 用于指示源程序到此全部结束 在汇编时 对 END 后面的指令不予汇编 因此 END 语句必须放在整个程序的末尾 有且只能有一个 3 简述堆栈指令 PUSH 和 POP 的操作过程 答 执行 PUSH 指令时 先将 SP 的内容加 1 指向新的堆栈栈顶单元 然后将指定地址单元 的内容送到堆栈栈顶单元 执行 POP 指令时 先将 SP 指向的堆栈栈顶单元内容送到指定地址单元 然后将 SP 的内 容减 1 修改堆栈栈顶单元 4 若若 S SP P 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 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 指指令令 以以后后 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 位置 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 1000H 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 判断是否为 字符 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 L LJMP HEXBCD ORG 0100H HEXBCD MOV A 40H MOV B 100 DIV AB MOV 50H A MOV A 10 XCH A B DIV AB MOV 51H A MOV 52H B SJMP END 三 三 ProteusProteus 仿真仿真 利用 Proteus 仿真实现 2 3 节中的内容 答 全自动洗衣机按键与指示灯 Proteus 仿真 设全自动洗衣机控制面板上有 8 个控制按键 8 个指示灯 按下一个按键 对应的指 示灯点亮 电路如图所示 参考程序如下 ORG 0000H 上电后 PC 00000H 故在 0000H 单元存放转移指令 LJMP START 转移到应用程序 ORG 0030H 应用程序从 0030H 开始存放 START 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 汇编结束 第第 0303 章章 单片机单片机 C C 语言程序设计语言程序设计 习题解答习题解答 一 填空题一 填空题 1 程序的基本结构有 顺序结构 分支结构 循环结构 2 C51 的存储器模式有 SMALL COMPACT LARGE 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 如果执行 a 如果执行 x i 则 x 3 i 4 执行 x i 则 i 4 x 4 5 何为 函数声明 如何进行函数声明 答 1 函数声明即是声明被调函数的原型 包括被调函数名 函数类型 即返回值类型 形参表 包括形参个数及其数据类型 2 声明函数原型可以按照写函数定义时的函数头 再加上分号即可 三 三 ProteusProteus 仿真仿真 1 在 Proteus 下 仿真实现 3 6 节内容 答 设在存储区 有 10 个数据 99 15 30 13 27 28 7 0 33 67 编写程序 将 其按照从大到小的次序排列 并按次序在数码管上显示 为了简化硬件电路 选用译码 显 示一体化显示模块 仿真电路如图 3 8 所示 图 3 8 数据排序仿真电路 C 语言参考程序如下 include 定义头文件 define uchar unsigned char 定义常量 uchar A 10 99 15 30 13 27 28 7 0 33 67 定义数组 为了显示直观 对 0 99 之间的十进制数进行排序 int DIS 10 252 96 218 242 102 182 190 224 254 246 定义数码管显示 0 9 的引脚值 sbit pos 1 P2 0 定义 4 位数码管第 1 位使能引脚 sbit pos 2 P2 1 定义 4 位数码管第 2 位使能引脚 sbit pos 3 P2 2 定义 4 位数码管第 3 位使能引脚 sbit pos 4 P2 3 定义 4 位数码管第 4 位使能引脚 void taxisfun 排序函数 uchar i j Temp 定义局部变量 for i 0 i 8 i 设置外循环 for j 0 j 8 i j 设置内循环 j 8 i 比用 jA j 当后一个数大于前一个数 Temp A j 前后 2 数交换 前数送零时变量 A j A j 1 后数送前数 A j 1 Temp 零时变量送后数 void delay 延迟函数 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 num 记录显示 结果循环次数 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 DIS now pos P1 口输出当前显示数值的排序结果 pos 1 0 数码管第 1 位亮起 delay 显示延迟 off 数码管 4 位全灭 P1 DIS A now pos 10 P1 口显示排序后数值的十位 pos 3 0 数码管第 3 位亮起 delay 显示延迟 off 数码管 4 位全灭 P1 DIS A now pos 10 P1 口显示排序后数值的个位 pos 4 0 数码管第 4 位亮起 delay 显示延迟 off 数码管 4 位全灭 2 在 Proteus 下 用汇编语言程序实现数据排序 并将排序结果通过数码管显示 答 设有 N 个数存放在 LIST 地址开始的内部 RAM 存储区中 编写程序将 N 个数按由 小到大次序存放在原来的存储区内 仿真电路如图 3 8 所示 数据排序的方法有很多种 常用的是 冒泡法 基本思想是 将相邻两个数作比较 即第一个数和第二个数比较 第二个数和第三个数比较 依次类推 若符合从小到大顺序的 则不改变它们在内存中的位置 否则交换它们的位置 如此反复 直至完成排序 按 冒泡法 对 N 个数排序时 最多需要 N 1 次双重循环 但在多数情况下 不用 N 1 次循环 数据就排好了 为了提高排序效率 程序中可设一交换标志位 每次循环中 若有 交换则设置该标志 表明排序未完成 若无交换 则清除该标志 表明排序已经完成 每次 循环结束时 检查交换标志位 判断排序是否结束 参考程序如下 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 B A 暂存 B INC R0 数据地址加 1 CLR C 清借位标志 SUBB A R0 两数比较 JC LESS Xj Xj 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 LOOP1 发生交换时 R1 的内容为 2 减 1 后不为 0 转移 ORG 0050H 定义数据块从 0050H 开始 LIST DB 0 13 3 90 27 32 11 定义字节数据块 END 汇编结束 第第 4 4 章章 单片机中断系统单片机中断系统 习题解答习题解答 一 填一 填空题空题 1 MCS 51 单片机有 5 个中断源 上电复位时 同级中断的自然优先级从高至 低依次为 外中断 0 定时器 计数器 0 外中断 1 定时器 计数器 1 串行口 若 IP 00010100B 优先级别最高者为 外中断 1 最低者为 定时器 计数器 1 2 外部中断请求有 低电平 触发和 下降沿 触发两种触发方式 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 单片机有 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 需在中断申请引脚处加硬件撤销电路 对于串行口中断标志 TI RI 需在进 入中断服务程序后用软件 CLR RI 或 CLR TI 撤销 它们的中断矢量分别是 0003H 000BH 0013H 001BH 0023H 2 简述 MCS 51 中断过程 答 中断过程分中断申请 中断响应 中断处理 中断返回 4 个阶段 中断请求 各中断源根据自身特点施加合适的信号 将对应的中断标志位置 1 向 CPU 申请 中断 中断响应 CPU 对中断请求进行判断 形成中断矢量 转入响应的中断服务程序 中断处理 根据各中断源要求执行响应中断服务程序 中断返回 中断服务程序结束后 返回主程序 3 简述外中断0INT和1INT的 2 种触发方式 电平 边沿 的异同 答 相同点 都是在检测到有效信号后将中断标志位置 1 向 CPU 申请中断 不同点 电平触发的有效信号是低电平 边沿触发的有效信号是负跳变 前一次检测到高电 平 后一次检测到低电平 4 MCS 51 单片机响应中断时 如何保护断点 如何转移到中断服务应用程序 答 保护断点 单片机在进入中断服务程序前先将当前 PC 以及其它响应寄存器压入堆栈 转入中断服务程序 单片机将当前中断源的中断矢量赋给 PC 相当于一条长跳转指令 5 电路如图 4 7 所示 编写程序 用两级中断实现如下功能 电路正常工作时 两个 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 unsigned char sbit LED0 P1 0 sbit LED1 P1 1 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 i 10 i R LED1 LED0 P1 0 P1 1 P3 2 P3 3 8051 Vcc R K0 K1 flashled0 void serint1 interrupt 2 uchar i LED0 0 for i 0 i 10 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 j 125 j 三 三 Proteus 仿真仿真 1 在 Proteus 下 仿真实现 4 5 节内容 答 全自动洗衣机 启动 暂停 控制 Ptoteus 仿真 在全自动洗衣机工作过程中 当遇到意外事件发生 如衣物缠绕 或需要干预洗衣进程 时 如需要添加消毒液 就需要暂停当前洗衣进程 处理这些事件 用图 4 6 电路模拟全自 动洗衣机中断过程 假设全自动洗衣机有 8 个流程 用 8 个指示灯表示 用 8 个按键进行选 择控制 当某个流程工作时 对应的指示灯点亮 当按下按键 SW1 时 中断正在进行的流程 对应的流程指示灯闪烁 洗衣机进入等待状态 再次按下 SW1 时 指示灯停止闪烁 变成点 亮状态 表示洗衣机恢复原来被中断的洗衣流程 Proteus 仿真电路及程序如下 图 4 6 全自动洗衣机 启动 暂停 中断控制过程 Proteus 仿真 汇编语言参考程序如下 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 循环等待 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 显示 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 P3 2 1 循环闪烁 EA 1 开中断 2 在 Proteus 下 仿真实现简答题第 5 题内容 答 先在 Proteus 下画出电路图 程序如第 5 题所示 也可在此基础上进行扩展 第 05 章 单片机定时计数器 习题解答 一 一 填空题填空题 1 MCS 51 单片机中有 2 个 16 位的定时器 计数 器 2 定时器 计数器T0 可以工作于方式 0 1 2 3 3 方式 0 为 13 位定时器 计数器 4 若系统晶振频率为 12MHz 则T0 工作于定时方式 1 时最多可以定 时 65536 s 5 欲对 300 个外部事件计数 可以选用定时器 计数器T1 的模式 0 或模 式 1 6 TMOD中的M1M0 11 时 定时器工作于方式 3 7 若系统晶振频率为 6MHz 则定时器可以实现的最小定时时间为 2 s 8 MCS 51 单片机工作于定时状态时 计数脉冲来自 单片机内部的机器周 期 9 MCS 51 单片机工作于计数状态时 计数脉冲来自 单片机外部事件 10 当GATE 0 时 则当软件控制位TR0 1 时 启动T0 开始工作 二 二 简答题简答题 1 定时器 计数器 T0 和 T1 各有几种工作方式 简述每种工作方式的特点 如何控制定时 器 计数器的工作方式 答 T0 可以工作于方式 0 1 2 3 T1 可以工作于方式 0 1 2 方式 0 是 13 位定时 计数器 由 TLX 的低 5 位 TLX 的高 3 位未用 和 THX 高 8 位组 成 方式 1 TLX 和 THX 组成 16 位定时 计数器 方式 2 方式 2 为自动重装初值的 8 位定时 计数器 方式 3 只适用于定时 计数器 T0 当 T0 工作在方式 3 时 TH0 和 TL0 被分为两个独立的 8 位计数器 TMOD 用来控制定时计数器的工作方式 位结构如下 D7 D6 D5 D4 D3 D2 D1 D0 GATE M1 M0 GAT M1 M0 A T1 方式字段 T0 方式字段 C T 定时或计数功能选择位 1 为计数方式 0 为定时方式 GATE 门控位 用于控制定时 计数器的启动是否受外部中断请求信号的影响 GATE 0 软件控制位 TR0 TR1 1 启动定时 计数器开始计数 GATE 1 软件控制位 TR0 TR1 1 INT0 INT1 引脚为高电平时启动定时 计数器开始 计数 M1 M0 定时 计数器工作方式选择位 如下表所示 M1 M0 工作 方式 方式说明 0 0 方式 0 13 位定时 计数器 0 1 方式 1 16 位定时 计数器 1 0 方式 2 具有自动重装初值的 8 位定时 计数器 1 1 方式 3 T0 为两个独立的 8 位计数器 T1 为波特率发生器 2 设MCS 51 单片机的晶振频率fOSC 6MHz 分别讨论定时器 计数器 0 在各种工作方式下的最 长定时时间 答 由 fosc 6MHz 可知 一个机器周期 T 2us 由于是加 1 计数 所以最长定时应是 计数初值最小时 即为 0 时 的定时时间 方式 0 213 0 2us 214us 16384us 16 384ms 方式 1 216 0 2us 217us 131 072ms 方式 2 3 28 0 2us 29us 0 512ms 当 fosc 6MHz 即 T 2us 时各种方式下的 定时时间 若 fosc 12MHz 则最长定时时间将缩短一半 3 编写程序从 P1 0 引脚输出频率为 1KHz 的方波 设晶振频率为 6MHz 答 利用 T1 定时中断 fosc 6MHz 1 机器周期 2 uS 1KHz 方波周期 1mS 半个方 波周期 500uS 500uS 2uS 250 若选择方式 2 工作 计算初值 256 250 6 ORG 0000H AJMP MAIN ORG 001BH T1 的中断矢量 LJMP T1INT MAIN MOV TMOD 20H MOV TH0 6 MOV TL0 6 SETB ET1 SETB EA SETB TR1 HERE AJMP HERE 原地等待中断 T1INT CPL P1 0 中断服务 P1 0 取非 RETI 中断返回 END 4 利用定时器 计数器 1 定时中断控制 P1 7 驱动 LED 发光二极管亮 1 秒灭 1 秒地闪烁 设时 钟频率为 12MHz 答 时钟频率为 12MHz 1 个机器周期 1 us 1 秒闪烁一次 0 5 秒 P1 7 求反 1 次 0 5S 500ms 500000 us 方式 1 最大计数 65536 让 T1 工作于方式 1 计数 50000 次中 断一次 初值 65536 50000 15536 3CB0H 用 R7 记录中断次数 计满 10 个中断为 500ms 秒 ORG 0000H AJMP MAIN ORG 001BH AJMP PT1INT ORG 0030H START MOV R7 00H MOV TMOD 10H MOV TL1 0B0H MOV TH1 3CH SETB EA SETB ET1 SETB TR1 HERE SJMP HERE PT1INT MOV TL1 0B0H MOV TH1 03CH INC R7 CJNE R7 10 PEND MOV R7 00H CPL P1 7 PEND RETI END 5 利用 MCS 51 单片机定时器 计数器设计一个数字秒表 定时范围 00 99 秒 两位 LED 数码管显示 设时钟频率为 6MHz 基本原理 利用定时器方式 2 产生 0 5 毫秒时间基准 循环 2000 次 定时 1 秒 答 电路如图所示 把 单片机系统 区域中的 P0 0 AD0 P0 7 AD7 端口用 8 芯排线连接到 数 码显示模块 区域中的任一个 a h 端口上 要求 P0 0 AD0 对应着 a P0 1 AD1 对应着 b P0 7 AD7 对应着 h 把 单片机系统 区域中的 P2 0 A8 P2 7 A15 端口用 8 芯排线连接到 数 码显示模块 区域中的任一个 a h 端口上 要求 P2 0 A8 对应着 a P2 1 A9 对应着 b P2 7 A15 对应着 h 把 单片机系统 区域中的 P3 5 T1 用导线连接到 独立式键盘 区域中的 SP1 端口上 开始时 显示 00 第 1 次按下 SP1 后就开始计时 第 2 次按 SP1 后 计时停止 第 3 次按 SP1 后 计时归零 选择定时工作方式 2 工作方式 2 就具有自动重装载功能 即自动加载计数初值 在这 种工作方式中 16 位计数器分为两部分 即以 TL0 为计数器 以 TH0 作为预置寄存器 初 始化时把计数初值分别加载至 TL0 和 TH0 中 当计数溢出时 由预置寄存器 TH0 以硬件方 法自动给计数器 TL0 重新加载 汇编源程序汇编源程序 TCNTA EQU 30H 时间计数 TCNTB EQU 31H SEC EQU 32H KEYCNT EQU 33H 按键计数 SP1 BIT P3 5 ORG 00H LJMP START ORG 0BH LJMP INT T0 START MOV KEYCNT 00H MOV SEC 00H MOV A SEC MOV B 10 DIV AB MOV DPTR TABLE MOVC A A DPTR MOV P0 A MOV A B MOV DPTR TABLE MOVC A A DPTR MOV P2 A MOV TMOD 02H SETB ET0 SETB EA WT JB SP1 WT 直接寻址位为 1 转移 按键按下时 SP1 为 0 LCALL DELY10MS JB SP1 WT 接着 SP1 变为 1 INC KEYCNT MOV A KEYCNT CJNE A 01H KN1 SETB TR0 TR0 置 1 启动定时器 T0 允许定时 计数器计数 MOV TH0 06H 用于自动恢复定时初值 MOV TL0 06H 置 T0 定时初值 250us MOV TCNTA 00H MOV TCNTB 00H LJMP DKN KN1 CJNE A 02H KN2 CLR TR0 LJMP DKN KN2 CJNE A 03H DKN 可以不要 MOV SEC 00H MOV A SEC MOV B 10 DIV AB MOV DPTR TABLE MOVC A A DPTR MOV P0 A MOV A B MOV DPTR TABLE 可以不要 MOVC A A DPTR MOV P2 A MOV KEYCNT 00H DKN JNB SP1 直接寻址为 0 转移 LJMP WT DELY10MS MOV R6 20 D1 MOV R7 248 DJNZ R7 DJNZ R6 D1 RET 子程序返回 INT T0 INC TCNTA MOV A TCNTA CJNE A 100 NEXT MOV TCNTA 00H INC TCNTB MOV A TCNTB CJNE A 4 NEXT MOV TCNTB 00H INC SEC MOV A SEC CJNE A 100 DONE MOV SEC 00H DONE MOV A SEC MOV B 10 DIV AB MOV DPTR TABLE 可以不要 MOVC A A DPTR MOV P0 A MOV A B MOV DPTR TABLE 可以不要 MOVC A A DPTR MOV P2 A NEXT RETI TABLE DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH END C C 语言源程序语言源程序 include unsigned char code dispcode 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 0 x00 unsigned char second unsigned char keycnt unsigned int tcnt void main void unsigned char i j TMOD 0 x02 ET0 1 EA 1 second 0 P0 dispcode second 10 P2 dispcode second 10 while 1 if P3 5 0 for i 20 i 0 i for j 248 j 0 j if P3 5 0 keycnt switch keycnt case 1 TH0 0 x06 TL0 0 x06 TR0 1 break case 2 TR0 0 break case 3 keycnt 0 second 0 P0 dispcode second 10 P2 dispcode second 10 break while P3 5 0 void t0 void interrupt 1 using 0 tcnt if tcnt 400 tcnt 0 second if second 100 second 0 P0 dispcode second 10 P2 dispcode second 10 三 三 ProteusProteus 仿真仿真 1 在 Proteus 下 仿真实现 5 4 节内容 答 全自动洗衣机定时控制 Proteus 仿真 洗衣机中所需的定时功能并不复杂 可以利用单片机提供的定时器方便实现 设洗衣机 有三段定时时间 分别为 进水阶段定时 2 秒 洗涤阶段定时 4 秒 甩干阶段定时 2 秒 并 分别用三个 LED 发光二极管表示进水 洗涤 甩干三个环节的工作状态 其中如果发光二极 管 A 亮 表示进水工作正在进行 发光二极管 B 亮 表示洗涤工作正在进行 发光二极管 C 亮 表示甩干工作正在进行 发光二极管熄灭时 说明相应的定时已到 工作停止 图 5 7 给出了 Proteus 仿真电路图 图 5 6 全自动洗衣机定时控制 PROTUES 仿真电路图 图 5 6 中 S 表示洗衣机启动开关 开关按下洗衣机开始工作 首先是进水定时控制 表示正在进水的 LED 发光二极管 A 点亮 当进水控制的定时时间到时 进水工作停止 发光 二极管 A 灭灯 接着开始洗涤工作定时 发光二极管 B 点亮 洗涤工作结束后 开始甩干工 作定时 发光二极管 C 点亮 当洗衣功能结束时 三个指示灯都熄灭 表示洗衣工作结束 并接通扬声器 LS1 鸣声提醒 汇编语言参考程序如下 ORG 0000H 在 0000H 单元存放转移指令 LJMP MAIN 转移到主程序 ORG 000BH 计数 定时器 T0 的中断入口地址 LJMP Time0 转到中断子程序 Time0 ORG 0100H 主程序从 0100H 开始 MAIN JB P2 0 MAIN

温馨提示

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

评论

0/150

提交评论