第7章习题解答_第1页
第7章习题解答_第2页
第7章习题解答_第3页
第7章习题解答_第4页
第7章习题解答_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

第第 7 7 章章 思考题及习题思考题及习题 7 7 1 如果采用的晶振的频率为 24MHz 定时器 计数器工作在方式 0 1 2 下 其最大定 时时间各为多少 答 晶振的频率为 24MHz 机器周期为 0 5 s 方式 0 最大定时时间 0 5 s 213 0 5 s 8192 4096 s 方式 1 最大定时时间 0 5 s 216 0 5 s 65536 327686 s 方式 2 最大定时时间 0 5 s 28 0 5 s 256 128 s 2 定时器 计数器用作计数器模式时 对外界计数频率有何限制 答 外部输入的计数脉冲的最高频率为系统振荡器频率的 1 24 3 定时器 计数器的工作方式 2 有什么特点 适用于哪些应用场合 答 方式 2 为初值自动装入的 8 位定时器 计数器 克服了在循环定时或循环计数应用 时就存在用指令反复装入计数初值影响定时精度的问题 4 THx与 TLx x 0 1 是普通寄存器还是计数器 其内容可以随时用指令更改吗 更改后的新值是立即刷新还是等当前计数器计满后才能刷新 答 THx 与 TLx x 0 1 是计数器 其内容可以随时用指令更改 但是更改后的新 值要等当前计数器计满后才能刷新 5 ProteusProteus 虚拟仿真虚拟仿真 使用定时器T0 采用方式2 定时 在 P1 0 脚输出周期为400 s 占空比为4 1 的矩形 脉冲 要求在 P1 0 脚接有虚拟示波器 观察P1 0 脚输出的矩形脉冲波形 答 略 6 ProteusProteus 虚拟仿真虚拟仿真 利用定时器T1 的中断来使P1 7 控制蜂鸣器发出1kHz 的音频信号 假设系统时钟频率为 12MHz 答 利用定时器 T1 的中断控制 P1 7 引脚输出频率为 1kHz 的方波音频信号 驱动蜂鸣 器发声 系统时钟为 12MHz 方波音频信号的周期为 1ms 因此 T1 的定时中断时间为 0 5 ms 进入中断服务程序后 对 P1 7 求反 电路如图所示 图 控制蜂鸣器发出 1kHz 的音频信号 先计算 T1 初值 系统时钟为 12MHz 则方波的周期为 1 s 1kHz 的音频信号周期为 1ms 要定时计数的脉冲数为 a 则 T1 的初值 TH1 65 536 a 256 TL1 65 536 a 256 参考程序如下 include 包含头文件 sbit sound P1 7 将 sound 位定义为 P1 7 引脚 define f1 a 65536 a 256 定义装入定时器高 8 位的时间常数 define f2 a 65536 a 256 定义装入定时器低 8 位的时间常数 unsigned int i 500 unsigned int j 0 void main void EA 1 开总中断 ET1 1 允许定时器 T1 中断 TMOD 0 x10 TMOD 0001 000B 使用 T1 的方式 1 定时 TH1 f1 i 给定时器 T1 高 8 位赋初值 TL1 f2 i 给定时器 T1 低 8 位赋初值 TR1 1 启动定时器 T1 while 1 循环等待 i 460 while j 2000 j 0 i 360 while j 2000 j 0 void T1 void interrupt 3 using 0 定时器 T1 中断函数 TR1 0 关闭定时器 T1 sound sound P1 7 输出求反 TH1 f1 i 定时器 T1 的高 8 位重新赋初值 TL1 f2 i 定时器 T1 的低 8 位重新赋初值 j TR1 1 启动定时器 T1 7 ProteusProteus 虚拟仿真虚拟仿真 制作一个 LED 数码管显示的秒表 用 2 位数码管显示计时时间 最小计时单位为 百毫 秒 计时范围 0 1 9 9s 当第 1 次按下并松开计时功能键时 秒表开始计时并显示时间 第 2 次按下并松开计时功能键时 停止计时 计算两次按下计时功能键的时间 并在数码管 上显示 第 3 次按下计时功能键 秒表清 0 再按 1 次计时功能键 重新开始计时 如果计 时到 9 9s 时 将停止计时 按下计时功能键 秒表清零 再按下重新开始计时 答 答 本秒表应用了 AT89C51 的定时器工作模式 计时范围 0 1 9 9s 此外还涉及如何 编写控制 LED 数码管显示的程序 LED 数码管显示的秒表原理电路如图所示 图 LED 数码管显示的秒表原理电路及仿真 参考程序如下 include 包含 51 单片机寄存器定义的头文件 unsigned char code discode1 0 xbf 0 x86 0 xdb 0 xcf 0 xe6 0 xed 0 xfd 0 x87 0 xff 0 xef 数码管显示 0 9 的段码表 带小数点 unsigned char code discode2 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 数码管显示 0 9 的段码表 不带小数点 unsigned char timer 0 记录中断次数 unsigned char second 储存秒 unsigned char key 0 记录按键次数 main 主函数 TMOD 0 x01 定时器 T0 方式 1 定时 ET0 1 允许定时器 T0 中断 EA 1 总中断允许 second 0 设初始值 P0 discode1 second 10 显示秒位 0 P2 discode2 second 10 显示 0 1s 位 0 while 1 循环 if P3 按键次数加 1 switch key 根据按键次数分三种情况 case 1 第一次按下为启动秒表计时 TH0 0 xee 向 TH0 写入初值的高 8 位 TL0 0 x00 向 TL0 写入初值的低 8 位 定时 5ms TR0 1 启动定时器 T0 break case 2 按下两次暂定秒表 TR0 0 关闭定时器 T0 break case 3 按下 3 次秒表清 0 key 0 按键次数清 0 second 0 秒表清 0 P0 discode1 second 10 显示秒位 0 P2 discode2 second 10 显示 0 1s 位 0 break while P3 如果按键时间过长在此循环 void int T0 interrupt 1 using 0 定时器 T0 中断函数 TR0 0 停止计时 执行以下操作 会带来计时误差 TH0 0 xee 向 TH0 写入初值的高 8 位 TL0 0 x00 向 TL0 写入初值的低 8 位 定时 5ms timer 记录中断次数 if timer 20 中断 20 次 共计时 20 5ms 100ms 0 1s timer 0 中断次数清 0 second 加 0 1s P0 discode1 second 10 根据计时时间 即时显示秒位 P2 discode2 second 10 根据计时时间 即时显示 0 1s 位 if second 99 当计时到 9 9s 时 TR0 0 停止计时 second 0 秒数清 0 key 2 按键数置 2 当再次按下按键时 key 即 key 3 秒表清 0 复原 else 计时不到 9 9s 时 TR0 1 启动定时器继续计时 8 ProteusProteus 虚拟仿真虚拟仿真 制作一个采用 LCD1602 显示的电子钟 在 LCD 上显示当前的时间 显示格式为 时时 分分 秒秒 设有 4 个功能键 k1 k4 功能如下 1 k1 进入时间修改 2 k2 修改小时 按一下 k2 当前小时增 1 3 k3 修改分钟 按一下 k3 当前分钟增 1 4 k4 确认修改完成 电子钟按修改后的时间运行显示 答 答 本题难点在于处理功能键 K1 K4 的输入 由于每个功能键都具有相应的一种或多 种功能 因此程序中需要大量使用 do while 或 while 循环结构 以检测是否有按键按下 的具体功能 按键检测函数如下 void time change unsigned char keyvalue0 0 keyvalue1 0 keyvalue0 keyscan 检测是否有按键按下 if keyvalue0 如果有按键按下 继续检测 if keyvalue0 1 按键 1 走时停止 开始判断更改值 直到按键 4 按下 while key0 防抖 直到按键松开时才进行下一步的操作 TR0 0 控制走时的中断停止 do keyvalue1 keyscan 检测按键按下 if keyvalue1 2 如果按键 2 按下 改变时间 while key1 防抖 if hour 23 如果小时数小于 23 则加 1 hour else 如果小时数为 23 置位为 0 hour 0 else if keyvalue1 3 如果按键 3 按下 改变分钟 while key2 防抖 if minute 59 如果分钟数小于 59 则加 1 minute else 如果分钟数为 59 置位为 0 minute 0 clock write while keyvalue1 4 重复对时间的修改直到按键 4 按下 while key3 0 防抖 TR0 1 调整时间后重新开始走时 必须注意 程序设计中 小时 分钟 秒变量 hour minute second 必须置为全局变 量 才能如上述函数一样在各处函数中直接进行修改 如为局部变量 则上述形式的直接修 改无效 1602 液晶显示模块以及基于单片机定时器的时钟实现见教材的

温馨提示

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

评论

0/150

提交评论