1、入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样基本实验:流水灯,数码管显示,键盘控制,音乐播放,继电器控制通信实验,串口通信实验,红外线遥控信号解码实验等单片机的定义分类和内部组成1 单片机就是中央处理器 CPU,随机存储器 RAM。只读存储器 ROM。定时、计数器和各种输入输出接口 I/o 接口电路等部件集成在一块电路芯片上的微型计算机。2,1 分类按制造工艺分:HMOS 和 CHMOS CHMOS 包括 80c51 等中间加了 C 功耗要小适合便携式手提式和野外作业。2 分类按不同容量的存储器配置分:51 子系列和 52 子系列51 表示单片机最后一位数字为 1 作为标志。
2、片内带有 4KbROM 或 EPROM( Erasable Programmable ROM, 可 擦 除 可 编 程 ROM, 128BRAM, 两 个 16 位 定 时 器 /计 数 器和 5 个 中 段 器 52 系 列 是 增 强 型 各 项 指 标 都 高 。AT89S51 是 AT89C51 的 升 级 版 支 持 ISP 在 线 更 新 程 序 ISP(Internet Service Provider内部集成看门狗计时器等。3.1 串行接口就是接口数据传送3.2 中断控制系统接收中断请求如 定时时间到,需要鸣笛报警类似 stop to do 停下来去执行 ROM 中特定的每段程
3、序,执行完后再继续执行先前中断的程序时钟电路控制节拍工作。一个典型的单片机应用系统包括输入电路,单片机,输出电路把他想象成电脑。单片机的应用:十六进制记和点得点不是十六进制加逻辑数据的运算逻辑与。 。 。两个输入一个输出中间加一个恒定电压有为,全出逻辑或有为,全出;字长通常与计算机内部的寄存器和运算器数据总线的宽度一致实例 1 功能感受 protues 仿真单片机播放渴望主题曲运用 protues 打开仿真原理图。对单片机进行处理编辑 edit component,选取目标文件 hexClock frequency 时钟频率Ok原理图编辑窗口没有滚动条,可通过预览窗口该表原理图的可视范围。Pr
4、otues 双击右键删除先单击鼠标右键,可通过鼠标左键可以编辑元器件的属性鼠标右键来删除画错的连线中键缩放原理图新建即保存新建设计文件Junction dot mode 连接点 Subcircuit mode 子电路 lab 用总线时会用到Terminals mode 终端接口,有 VCC 地输出输入等接口Device pins mode 器件引脚用于绘制各种引脚。Graph mode 仿真图表,用于各种分析,如 noise analysisTape recorder mode 录音机Generator mode 信号发生器Voltage probe mode 电压探针仿真图表用Current
5、 probe mode 电流探针仿真图表用Virtual instruments mode 虚拟仪表有示波器可显示工作波形Resistors 电阻Capacitors 电容Crystal 晶振Radianl electrolytic 圆柱形电解电容Keywords 输入 resistors 470r 或功率先选择元器件后放元器件Led+yellowDrag object 拖动对象Editi properties 编辑属性Rotate clockwise 顺时针旋转 90Rotate anti-clockwise 逆时针旋转 90X-mirror 水平翻转Y-mirror 垂直翻转删可以右键双击
6、双击鼠标左键编辑 label放置电源和地必须编辑正确的 label 如 VCC 地 GND各元器件引脚通过总线的连接并不表示真正意义上的电气连接,需要添加网络标号。要运行双击单片机基本电源 5V振荡电路:单片机是一种时序电路,必须施加脉冲信号才能工作。在它的内部有一个时钟产生电路,只要接上两个电容和一个晶振即可正常工作。P30复位电路;启动后让单片机从初始状态开始执行程序。EA 一横:接正电源端,表示使用内部程序存储器。注意:观察仿真效果时,晶振电路,复位电路和 EA 引脚和电路的连接可以省略。Keil 软件源程序后缀。C 必须手工输入,表示为 c 语言程序,让 keilc51 采用对应的 c
7、 语言的方式来编译源程序。#include包含 51 单片机寄存器定义的头文件将新建的源程序文件加载到项目管理器右击 source group 文件 add c 文件单片机不能处理 c,必须将 c 转换成二进制或十六进制代码,汇编或编译。用鼠标右键点击 target 进入 options for target 确认 output 选项中 create hex重新构造所有目标程序烧录器及烧录软件的使用单片机软硬件系统仿真成功后,要真正投入实际应用,必须将程序烧写入单片机芯片,A51 程序烧录器和先将 COM 接口(用作数据通信)与计算机的 COM 接口(RS-232)连接好,然后将单片机安插在烧
8、录器的插座中,再用一根 USB 线将 USB 接口与计算机的 USB 接口连接,让计算机通过这根 USB 线向烧录器提供+5V 电源使用烧录器前,手动设置一些,参数标签页,根据 COM 口,设置好串口,波特率设置为28800;点击自动擦除器件命令,点击打开文件命令选择单片机文件十六进制文件 hex 再点击打开点击自动写器件。实例 4 用单片机控制一个灯闪烁Led 灯亮存在电压差和正向偏置延迟函数Void main(void)/ 两个 void 分别表示无须返回值和没有参数传递Unsigned int i;/ 定义无符号整数,最大 65535For(i=0;i虚 拟 仪 表示 波 器 oscil
9、loscopeProtues 示 波 器 面 板 ? 及 使 用单 片 机 需 要 一 个 时 钟 信 号 送 给 内 部 个 电 路 , 才 能 使 他 们 有 节 拍 的 工 作 , 时 钟 信 号 的 频率 由 外 部 振 荡 电 路 的 晶 振 频 率 决 定 , 51 系 列 单 片 机 的 机 器 周 期 是 由 12 个 振 荡 周 期 组成 。指 令 周 期 : 单 片 机 执 行 一 条 指 令 的 时 间 。时 钟 频 率 越 低 , 延 时 的 时 间 就 越 长 , 灯 闪 烁 的 速 度 就 越 慢 。实 例 5 将 p1 口 状 态 送 入 p0 口 p2 口 p3
10、 口利 用 单 片 机 工 作 速 度 快 的 特 点 , 无 限 循 环 可 以 让 单 片 机 不 停 地 把 p1 口 的 电 平 状 态 送到 p0 口 p2 口 和 p3 口 。引 脚 接 地 低 电 平 被 输 入 到 p 口实 例 6 使 用 p3 口 流 水 点 亮 8 位 led记 忆 , 0xfe 11111110 0xfd 11111101 0xfb 11111011 0xf7 111101110xef 11101111 0xdf 11011111 0xbf10111111 0x7f 01111111实 例 7 通 过 对 p3 口 地 址 的 操 作 流 水 点 亮 8
11、 位 led单 片 机 都 有 固 定 的 地 址 , 记 忆 : 张 三 在 教 室 的 第 2 排 第 5 列老 师 可 以 说 清 张 三 回 答 问 题 也 可 以 说 请 第 2 排 第 5 列 的 同 学 答 题 。Sfr x=0xb0; 通 过 关 键 字 sfr 将 x 定 义 为 p2 的 地 址 0xb0定 义 后 , 程 序 中 对 x 的 操 作 就 相 当 于 对 地 址 0xb0 即 p3 的 操 作类 似 于 指 针P3 口 的 固 定 地 址 是 BOHMCS-51 单 片 机 存 储 器 的 基 本 结 构它 有 两 种 1 即 程 序 存 储 器 和 2 数
12、 据 存 储 器从 物 理 MSC-51 有 4 个 存 储 地 址 空 间 , 即 片 内 程 序 存 储 器 和 片 外 程 序 存 储 器程 序 存 储 器 受 EA 一 横 外 接 电 平 的 控 制 。1 当 EA 一 横 接 地 时 , 单 片 机 只 能 使 用 外 部 程 序 存 储 器2 当 EA 一 横 接 +5v 是 单 片 机 先 使 用 内 部 程 序 存 储 器 , 容 量 不 够 时 自 动 使 用 外 部 程序 存 储 器 。特 殊 功 能 寄 存 器ACC 累 加 器标 识 符 名 称 地 址ACC 累 加 器 E0HB b 寄 存 器 F0HPSW 程 序
13、状 态 字 D0HSP 堆 栈 指 针 81HDRTR 数 据 指 针 83H 82HP0 80HP1 90HP2 A0HP3 B0HIP 中 断 优 先 级 控 制 B8HIE 允 许 中 断 控 制 A8HTMOD 定 计 方 式 控 制 89HTCON 定 计 控 制 88HTH0 定 计 0 高 位 字 节 8CHTL0 定 计 0 低 位 字 节 8AHTH1 定 计 1 高 位 字 节 8DHTL1 定 计 1 低 位 字 节 8BHSCON 串 行 控 制 98HSBUF 串 行 数 据 缓 冲 器 99HPCON 电 源 控 制 87H单 片 机 的 复 位 电 路P54 页
14、? ? ?单 片 机 C 语 言 开 发 基 础#includeC 注 释1 种 采 用 /*。 。 。 */可 以 注 释 多 行 内 容2 种 采 用 /但 只 能 注 释 一 行ANSI 标 准 定 义 的 关 键 字P57 记 忆 思 考P58 跳 过数 据 类 型 表 p59 页指 针 型 数 据位 类 型 数 据空 类 型 数 据延 时 函 数 不 需 要 返 回 值 。X+先 用 x 的 值 , 再 让 x 加 1逻 辑 与 定 义 无 符 号 字 符 型 变 量 , 其 值 不 超 过 255运 用 变 量 的 值 变 化 和 将 变 量 的 值 送 到 p 口 用 来 变 化
15、 。For(i=0;i0) 将 运 算 结 果 送 到 p0 口实 例 14 用 p0 口 显 示 条 件 运 算 的 结 果P0=( 84) ?8:4; P0=8=00001000B实 例 15; 用 p0 口 显 示 按 位 异 或 运 算 结 果异 或 相 异 出 1, 相 同 出 0; 记 忆 异 性 才 能 很 火 热 的 做 出 子 女P0=0xa20x3c 异 或 要 做 必 须 上 顶 很 公 平 应 用实 例 16 用 p0 口 显 示 左 移 的 运 算 结 果实 例 17 万 能 逻 辑 电 路 F=EY+Z 逻 辑 函 数 p77 图1 专 门 设 计 数 字 电 路
16、, 实 现 逻 辑 功 能2 通 过 单 片 机 编 程 来 实 现 逻 辑 功 能 软 件 即硬 件/实 例 17: “万 能 逻 辑 电 路 “实 验#include /包 含 单 片 机 寄 存 器 的 头 文 件sbit F=P14; /将 F 位 定 义 为 P1.4sbit X=P15; /将 X 位 定 义 为 P1.5sbit Y=P16; /将 Y 位 定 义 为 P1.6sbit Z=P17; /将 Z 位 定 义 为 P1.7void main(void) while(1)F=(X) /将 逻 辑 运 算 结 果 赋 给 F; 实 例 18 用 右 移 实 现 流 水 灯
17、前 提 设 p 口 为 0xff 八 次 右 移 一 位 高 位 丢 弃 低 位 补 0延 迟 用 的 变 量 因 为 要 取 大 数 所 以 必 须 用 int后 面 因 为 要 快 所 以 取 char 型 变 量因 为 单 片 机 运 行 快 。 所 以 led 灯 闪 后 要 延 迟 。C 语 言 语 句If( S1=0)P1=0x00; 如 果 按 键 s 按 下 接 地 ( 相 应 位 为 低 电 平 ) ,Swich 整 型 break 三 者 紧 密While 语 句 花 括 号 运 用 和 一 般 情 况 下 , 在 循 环 体 中 应 该 有 让 循 环 停 止 的 语 句
18、 。 ? ?Do while 语 句 注 意 ;Do 和 while 连 用 while 后 面 的 分 号 不 能 丢 , 它 表 示 整 个 循 环 语 句 的 结 束Do 循 环 语 句 while( 循 环 式 )尽 量 避 免 使 用 goto 语 句P87 页 的 程 序 软 件 即 硬 件实 例 21 用 for 语 句 实 现 鸣 笛 报 警T=1/f,所 以 要 让 蜂 鸣 器 发 出 频 率 f 的 声 音 , 只 要 让 单 片 机 输 送 周 期 为 t 的 脉 冲 方 波 电平 即 可 , 让 单 片 机 没 半 个 周 期 取 反 一 次 。 半 周 期 可 通 过
19、 延 时 来 实 现 。 可 以 通 过 循 环 的 方式 来 实 现 延 时 ,P90 一 重 循 环 消 耗 的 机 器 数 近 似 N=3*n二 重 循 环 消 耗 的 机 器 数 近 似 N=3*n*m例 子 , 如 果 单 片 机 的 晶 振 频 率 为 11.0592MHz,则 机 器 的 周 期 为 1.085 s, 要 发 出1600Hz 的 声 音 , 就 让 单 片 机 每 半 个 周 期 312 s 将 输 出 电 平 取 反 一 次 , 而 延 时312 s 需 要 消 耗 机 器 周 期 数 N=312/1.085 286 可 以 取 300 循 环 次 数 300/
20、3=100 次Void delay(void)Unsigned char I;For(i=0;iP0=isalpha( _) ?0xf0:0x0f;内 部 函 数 文 件 instrins.h 中 有 _crol_()函 数实 例 36; 应 用 内 部 函 数 文 件 instrins.h 中 有 _crol_()函 数 来 点 亮 P3 口 8 位 流 水 灯_crol_(15,2)的 返 回 值 为 00111100B=0x3c 思 考 他 的 应 用实 例 37 实 例 38 感 觉 像 是 介 绍 函 数 以 后 ? ? ? ? c 语 言 应 用 程 序 卡 那 可 可 能 看 看
21、C 语 言 编 译 预 处 理宏 定 义 c 语 言 允 许 一 个 标 示 符 来 表 示 一 个 字 符 串 , 称 为 宏 。P125 宏 定 义 不 是 c 语 句 , 所 以 不 需 加 分 号 。可 以 用 #undef 命 令 来 终 止 宏 定 义 的 作 用 域 。 即 对 #undef 后 面 的 无 用 。 为 防 止 歧 义 应加 括 号 及 时带 参 数 的 函 数 宏 和 函 数 不 同 , 函 数 是 先 求 出 实 参 表 达 式 的 值 , 然 后 代 入 形 参 , 而 带 参 数的 宏 只 是 进 行 简 单 的 字 符 替 换 。实 例 40 文 件 包
22、 含 应 用 举 例使 用 头 文 件 为 #include中 有 关 特 殊 功 能 寄 存 器 的 定 义已 将 P3_0 定 义 为 P3.0 引 脚 , 直 接 应 用 P3_0 就 可 以 对 P3 口 进 行 操 作 了 。实 例 41 条 件 编 译 应 用 举 例常 用 的 条 件 编 译 是 根 据 某 常 量 表 达 式 的 值 的 是 否 为 真 来 控 制 编 译即 #if 常 量 表 达 式程 序 段 1#else 程 序 段 2#endif? ? 思 考 好 的 应 用第 五 章 单 片 机 的 定 时 器 计 数 器当 加 在定 时 器 计 数 器 T0 或 T1
23、 用 作 计 数 器 时 , 对 外 接 晶 振 产 生 的 振 荡 信 号 经 12 分 频 后 , 提供 给 计 数 器 , 作 为 计 数 器 的 脉 冲 输 入 , 计 数 器 以 12 分 频 后 的 脉 冲 周 期 为 基 本 计 数 单位 , 对 输 入 的 脉 冲 进 行 计 数 , 直 至 产 生 溢 出 。 ? ? ?P136 页 到 p140 页 有 点 不 懂 。 工 作 方 式图 p135T0 或 T1 引 脚 上 的 外 部 脉 冲 信 号 出 现 一 个 由 1 到 0 的 负 跳 变 时 , 计 数 器 加1, 直 至 计 数 器 溢 出 。CPU 是 按 顺
24、序 进 行 工 作 的 。实 例 42 用 计 时 器 T0 查 询 方 式 控 制 P2 口 的 8 位 LED 闪 烁T0 工 作 于 方 式 1, LED 灯 的 闪 烁 周 期 为 100ms, 即 亮 50ms, 熄 灭 50ms;12 分 频 即 频 率 被 12 等 分 , 周 期 即 12 除 频 率定 时 器 的 初 值 设 定 需 要 进 行 计 算 , 总 而 言 之 , 就 是 定 时 器 必 须 达 到 顶 值 即 65536.初 值 需 要 T0 的 高 八 位 寄 存 器 TH0 和 低 八 位 寄 存 器 TL0 分 别 存 储存 储 方 法 及TH0= /25
25、6;TL0= %256;溢 出 标 志 位 是 否 为 1 若 为 1 表 示 时 间 已 到 , 否 则 , 等 待 。/实 例 42: 用 定 时 器 T0 查 询 方 式 P2 口 8 位 控 制 LED 闪 烁#include / 包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件/*函 数 功 能 : 主 函 数*/void main(void)/ EA=1; /开 总 中 断/ ET0=1; /定 时 器 T0 中 断 允 许 TMOD=0x01; /使 用 定 时 器 T0 的 模 式 1TH0=(65536-46083)/256; /定 时 器 T0 的 高 8 位
26、赋 初 值TL0=(65536-46083)%256; /定 时 器 T0 的 高 8 位 赋 初 值TR0=1; /启 动 定 时 器 T0TF0=0;P2=0xff;while(1)/无 限 循 环 等 待 查 询while(TF0=0)/查 询 标 志 位 是 否 溢 出;TF0=0;P2=P2;按 位 取 反 , 实 现 led 灯 的 闪 烁TH0=(65536-46083)/256; /定 时 器 T0 的 高 8 位 赋 初 值TL0=(65536-46083)%256; /定 时 器 T0 的 高 8 位 赋 初 值TFO 记 忆 flow 溢 出TRO 记 忆 trigger
27、 引 起 启 动THO 记 忆 high 高 八 位TMOD 记 忆 mode 方 式实 例 43, 用 定 时 器 t1 查 询 方 式 控 制 单 片 机 发 出 1kHz 音 频/实 例 43: 用 定 时 器 T1 查 询 方 式 控 制 单 片 机 发 出 1KHz 音 频#include / 包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件sbit sound=P37; /将 sound 位 定 义 为 P3.7 引 脚/*函 数 功 能 : 主 函 数*/void main(void)/ EA=1; /开 总 中 断/ ET0=1; /定 时 器 T0 中 断 允 许
28、 TMOD=0x10; /使 用 定 时 器 T1 的 模 式 1TH1=(65536-921)/256; /定 时 器 T1 的 高 8 位 赋 初 值TL1=(65536-921)%256; /定 时 器 T1 的 高 8 位 赋 初 值TR1=1; /启 动 定 时 器 T1TF1=0;while(1)/无 限 循 环 等 待 查 询while(TF1=0);TF1=0;sound=sound; /将 P3.7 引 脚 输 出 电 平 取 反TH1=(65536-921)/256; /定 时 器 T0 的 高 8 位 赋 初 值TL1=(65536-921)%256; /定 时 器 T0
29、 的 高 8 位 赋 初 值/实 例 44: 将 计 数 器 T0 计 数 的 结 果 送 P1 口 8 位 LED 显 示#include / 包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件sbit S=P34; /将 S 位 定 义 为 P3.4 引 脚/*函 数 功 能 : 主 函 数*/void main(void)/ EA=1; /开 总 中 断/ ET0=1; /定 时 器 T0 中 断 允 许 TMOD=0x02; /使 用 定 时 器 T0 的 模 式 2TH0=256-156; /定 时 器 T0 的 高 8 位 赋 初 值TL0=256-156; /定 时 器
30、 T0 的 高 8 位 赋 初 值TR0=1; /启 动 定 时 器 T0while(1)/无 限 循 环 等 待 查 询while(TF0=0) /如 果 未 计 满 就 等 待if(S=0) /按 键 S 按 下 接 地 , 电 平 为 0P1=TL0; /计 数 器 TL0 加 1 后 送 P1 口 显 示 TF0=0; /计 数 器 溢 出 后 , 将 TF0 清 0第 六 章 单 片 机 的 中 断 系 统中 断 系 统类 似 写 作 业定 时 器 计 时 器 实 际 上 就 是 中 断 源 。MCS51 单 片 机 提 供 5 个 中 断 源 。外 部 中 断 INT0 一 横 编
31、 号 0 由 P3.2 引 脚 输 入定 时 器 T0 编 号 1外 部 中 断 INT1 一 横 编 号 2 由 P3.3 引 脚 输 入定 时 器 T1 编 号 3串 行 口 通 信 中 断 RI 或 TI 编 号 4自 然 优 先 级 从 上 到 下 逐 级 递 减 。P150 p151 页 未 看void Time(void) interrupt 1 using 0/实 例 46: 用 定 时 器 T0 的 中 断 实 现 长 时 间 定 时#include / 包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件sbit D1=P20; /将 D1 位 定 义 为 P2.0
32、引 脚unsigned char Countor; /设 置 全 局 变 量 , 储 存 定 时 器 T0 中 断 次 数/*函 数 功 能 : 主 函 数*/void main(void)EA=1; /开 总 中 断ET0=1; /定 时 器 T0 中 断 允 许 TMOD=0x01; /使 用 定 时 器 T0 的 模 式 2TH0=(65536-46083)/256; /定 时 器 T0 的 高 8 位 赋 初 值TL0=(65536-46083)%256; /定 时 器 T0 的 高 8 位 赋 初 值TR0=1; /启 动 定 时 器 T0Countor=0; /从 0 开 始 累
33、计 中 断 次 数while(1)/无 限 循 环 等 待 中 断;/*函 数 功 能 : 定 时 器 T0 的 中 断 服 务 程 序*/void Time0(void) interrupt 1 using 0 /“interrupt”声 明 函 数 为 中 断 服 务 函 数/其 后 的 1 为 定 时 器 T0 的 中 断 编 号 ; 0 表 示 使 用 第 0 组 工 作 寄存 器 Countor+; /中 断 次 数 自 加 1if(Countor=20) /若 累 计 满 20 次 , 即 计 时 满 1sD1=D1; /按 位 取 反 操 作 , 将 P2.0 引 脚 输 出 电
34、 平 取 反Countor=0; /将 Countor 清 0, 重 新 从 0 开 始 计 数TH0=(65536-46083)/256; /定 时 器 T0 的 高 8 位 重 新 赋 初 值TL0=(65536-46083)%256; /定 时 器 T0 的 高 8 位 重 新 赋 初 值定 时 器 T0 工 作 于 方 式 1 时 , 最 大 可 计 脉 冲 数 次 数 为 65536, 对 于 11。 0592MHz 的时 钟 频 率 。 一 个 脉 冲 的 宽 度 为 1.085 s, 则 最 大 计 时 长 度 只 有1.08565536=71107 s 即 大 约 71ms,要
35、 想 计 时 更 长 时 间 , 采 用 软 件 计 时 的 方 法设 置 一 个 变 量 counter 来 存 储 定 时 器 T0 的 中 断 次 数 , 即 每 产 生 一 次 中 断 , 使 变 量counter 自 加 1, 如 果 T0 每 50ms 中 断 一 次 , 那 当 counter 自 加 20 次 时 , 所 及 时 间为 1s。中 断 一 次 就 要 重 新 赋 值 一 次控 制 两 个 LED 灯 以 不 同 的 周 期 闪 烁 , 第 一 个 LED 亮 灭 时 间 为 100ms, 第 二 个 LED亮 灭 时 间 为 400ms, 所 以 需 要 设 置
36、两 个 变 量 counter1 和 counter2 来 分 别 统 计 中 断次 数 , 且 都 为 最 小 的 整 数 倍 。/实 例 47: 用 定 时 器 T1 中 断 控 制 两 个 LED 以 不 同 周 期 闪 烁#include / 包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件sbit D1=P20; /将 D1 位 定 义 为 P2.0 引 脚sbit D2=P21; /将 D2 位 定 义 为 P2.1 引 脚unsigned char Countor1; /设 置 全 局 变 量 , 储 存 定 时 器 T1 中 断 次 数unsigned char C
37、ountor2; /设 置 全 局 变 量 , 储 存 定 时 器 T1 中 断 次 数/*函 数 功 能 : 主 函 数*/void main(void)EA=1; /开 总 中 断ET1=1; /定 时 器 T1 中 断 允 许 TMOD=0x10; /使 用 定 时 器 T1 的 模 式 1TH1=(65536-46083)/256; /定 时 器 T1 的 高 8 位 赋 初 值TL1=(65536-46083)%256; /定 时 器 T1 的 高 8 位 赋 初 值TR1=1; /启 动 定 时 器 T1Countor1=0; /从 0 开 始 累 计 中 断 次 数Countor
38、2=0; /从 0 开 始 累 计 中 断 次 数 while(1)/无 限 循 环 等 待 中 断;/*函 数 功 能 : 定 时 器 T1 的 中 断 服 务 程 序*/void Time1(void) interrupt 3 using 0 /“interrupt”声 明 函 数 为 中 断 服 务 函 数/其 后 的 3 为 定 时 器 T1 的 中 断 编 号 ; 0 表 示 使 用 第 0 组 工 作 寄存 器 7Countor1+; /Countor1 自 加 1Countor2+; /Countor2 自 加 1if(Countor1=2) /若 累 计 满 2 次 , 即 计
39、 时 满 100msD1=D1; /按 位 取 反 操 作 , 将 P2.0 引 脚 输 出 电 平 取 反Countor1=0; /将 Countor1 清 0, 重 新 从 0 开 始 计 数if(Countor2=8) /若 累 计 满 8 次 , 即 计 时 满 400msD2=D2; /按 位 取 反 操 作 , 将 P2.1 引 脚 输 出 电 平 取 反Countor2=0; /将 Countor1 清 0, 重 新 从 0 开 始 计 数TH1=(65536-46083)/256; /定 时 器 T1 的 高 8 位 重 新 赋 初 值TL1=(65536-46083)%256
40、; /定 时 器 T1 的 高 8 位 重 新 赋 初 值实 现 方 法 先 开 总 中 断 EA 分 支 中 断 ET?,选 择 方 式 , 赋 初 值 , 启 动 定 时 器 T? , 声 明音 调 与 频 率 的 关 系音 调 低 1 低 2 低 3 低 4 低 5 低 6 低 7频 率 262 294 330 349 392 440 494音 调 中 1 中 2 中 3 中 4 中 5 中 6 中 7频 率 523 587 659 698 784 880 988音 调 高 1 高 2 高 3 高 4 高 5 高 6 高 7频 率 1046 1175 1318 1397 1568 176
41、0 1967由 于 单 片 机 的 输 入 输 出 口 只 有 高 电 平 1 和 低 电 平 0, 因 此 向 蜂 鸣 器 输 送 的 电 平 信 号 实际 是 就 是 该 音 频 的 方 波 。 例 如 中 音 频 率 523Hz, 他 的 周 期 为 1523 秒 , 即1。 93ms 只 要 向 蜂 鸣 器 输 送 周 期 为 1.91ms 的 脉 冲 方 波 电 平 信 号 就 能 发 出 523Hz 的音 调 , 该 方 波 的 半 周 期 为 1.912=0.995ms。 为 此 , 需 要 利 用 定 时 器 的 中 断 , 让 输 送给 蜂 鸣 器 的 电 平 信 号 每 0
42、。 955ms 取 反 一 次 即 可 , 由 于 本 书 使 用 的 单 片 机 晶 振 为11.0952mhz, 他 的 机 器 周 期 为 12( 111。 0592) =1.085 s。 因 此 需 要 的 机 器周 期 总 数 为995 s1.085 s=880定 时 器 的 定 时 常 数 为 880C=106 s 除 2f1.085 s=460830频 率THO=(8192-C)32? ? ?每 分 钟 为 72 节 拍 , 每 节 拍 100060ms72=833ms/实 例 49: 用 定 时 器 T0 的 中 断 实 现 “渴 望 “主 题 曲 的 播 放#include
43、/包 含 51 单 片 机 寄 存 器 定 义 的 头 文 件sbit sound=P37; /将 sound 位 定 义 为 P3.7unsigned int C; /储 存 定 时 器 的 定 时 常 数/以 下 是 C 调 低 音 的 音 频 宏 定 义#define l_dao 262 /将 “l_dao”宏 定 义 为 低 音 “1”的 频 率 262Hz#define l_re 286 /将 “l_re”宏 定 义 为 低 音 “2”的 频 率 286Hz#define l_mi 311 /将 “l_mi”宏 定 义 为 低 音 “3”的 频 率 311Hz#define l_fa
44、 349 /将 “l_fa”宏 定 义 为 低 音 “4”的 频 率 349Hz#define l_sao 392 /将 “l_sao”宏 定 义 为 低 音 “5”的 频 率 392Hz#define l_la 440 /将 “l_a”宏 定 义 为 低 音 “6”的 频 率 440Hz#define l_xi 494 /将 “l_xi”宏 定 义 为 低 音 “7”的 频 率 494Hz/以 下 是 C 调 中 音 的 音 频 宏 定 义#define dao 523 /将 “dao”宏 定 义 为 中 音 “1”的 频 率 523Hz#define re 587 /将 “re”宏 定 义
45、 为 中 音 “2”的 频 率 587Hz#define mi 659 /将 “mi”宏 定 义 为 中 音 “3”的 频 率 659Hz#define fa 698 /将 “fa”宏 定 义 为 中 音 “4”的 频 率 698Hz#define sao 784 /将 “sao”宏 定 义 为 中 音 “5”的 频 率 784Hz#define la 880 /将 “la”宏 定 义 为 中 音 “6”的 频 率 880Hz#define xi 987 /将 “xi”宏 定 义 为 中 音 “7”的 频 率 523H /以 下 是 C 调 高 音 的 音 频 宏 定 义#define h_dao 1046 /将 “h_dao”宏 定 义 为 高 音 “1”的 频 率 1046Hz#define h_re 1174 /将 “h_re”宏 定 义 为 高 音 “2”的 频 率 1174Hz#define h