




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机电子琴系统程序设计单片机电子琴系统程序设计 论文论文 单片机电子琴系统程序设计 电 子 琴 的 设 计 摘 要 随着电子技术的迅速发展 特别是随大规模集成电路出现 给人类生活带来 了根本性的改变 由其是单片机技术的应用产品已经走进了千家万户 本文首先描述系统硬件工作原理 并附以系统结构框图加以说明 着重介绍了本 系统所应用的各硬件接口技术和各个接口模块的功能及工作过程 其次 详细阐 述了程序的各个模块和实现过程 本设计以数字集成电路技术为基础 单片机技 术为核心 本文编写的主导思想是软硬件相结合 以硬件为基础 来进行各功能 模块的编写 本系统以单片机的汇编语言进行软件设计 增加了程序的可读性和可移植性 为 了便于扩展和更改 软件的设计采用模块化结构 使程序设计的逻辑关系更加简 洁明了 系统通过扬声器为载体发出声音 所以具有人性化的操作和悦耳的歌声 关键词 单片机 电子琴 音乐 Abstract Along with the technical and quick development in electronics appear with the large scale integrated circuit especially give mankind the life brought the changes of the root From its is a single technical and applied product in a machine to has walked into the 10000 doors thousand This text discusses to report to the police the design of the system primarily with realizes Make use of the electric potential machine replace the air spreads to feel machine change its electric resistance value to change electric voltage again with solid hour input of the air density proceeds the comparison distinguishing the light that produce the harmony controls the different reaction controls notify the each customer unit The so called water supply design handles the post the waters according to the floor number unit number water supply type sum stanza the number display come out and the amalgamation realizes water supply consumer of employment The system passes loud speaker as to carry produces a sound so have the humanized operation with the pleasing singing Key words MCU Electronic organ Music 目 录 摘 要 1 第一章 绪 论 3 1 1 设计任务与要求 3 1 2 设计目的 3 第二章 硬件设计 3 2 1 音乐的基本知识 3 2 2 音乐产生原理 4 2 3 硬件设计原理框图 7 2 4 流程图 8 2 5 基本功能介绍 11 第三章 单片机系统程序设计 15 3 1 发出七个音符程序 15 3 2 演奏 生日快乐歌 程序 17 第四章 软件与硬件的调试 20 4 1 Keil 工程的建立 20 4 2 工程文件建立 21 4 3 编译 连接 22 参 考 文 献 747 单片机电子琴系统程序设计 第一章 绪 论 1 1 设计任务与要求 设计任务 能够发出1 2 3 4 5 6 7等七个音符 设计基本要求 按键与音符 一个按键对应一个音符 播放 能够演奏播放一首完整的歌曲 1 2 设计目的 1 能够对电子电路 电子元器件 印制电路板等方面的知识有进一步的认识 独 立对其进行测试与检查 2 熟悉8051单片机的内部结构和功能 合理使用其内部寄存器 能够完成相关 软件编程设计工作 3 为实现预期功能 能够对系统进行快速的调试 并能够对出现的功能故障进 行分析 及时修改相关软硬件 4 对软件编程 排错调试 焊接技术 相关仪器设备的使用技能等方面得到较全 面的锻炼和提高 第二章 硬件设计 2 1 音乐的基本知识 在音乐中使用的各个固定频率的音叫音级 常用符号C D E F G A B c d e a1 b1 c2 d2 表示 它们对应于钢琴上的白键 两音之间音高的距离 叫音程 在上述音级中 E与F B与C之间音高的距离仅为其它相邻音级之间距离 的一半 称它们之间的音程为半音音程 而称其它相邻各音之间的距离为全音音 程 在这些全音音程之间又加入新的半音音级 用符号 C D F G A c d f 表示 对应于钢琴上的黑键 国际上目前采用以a1 440Hz作为标准国际音高 由此推算出各音级的频率见表1 音持续时间的长短 即时值 一般用拍数表示 休止符表示暂停发音 2 2 音乐产生原理 要产生音频信号 只要算出某一音频的周期 频率的倒数 将此周期除以2即为 半周期的时间 利用定时器计时此半周期时间 计时到后取反输出 重复此过程 即得到此频率的声音信号 此信号从P1 7脚输出 定时器T0工作在定时方式1 改变TH0及TL0 产生不同的音频频率 必须考虑到 中断响应时间的影响 尤其在高音部分 若忽略中断响应时间 会使音频频率比 标准值低几十Hz 相当于1 4音程 很容易听出来 对低音部分影响不大 一般中 断响应时间为3 6个机器周期 经过反复试验取5个机器周期作为校正最为恰当 表1中所给的定时初值就是考虑中断响应后的定时常数 另外 为避免T1中断可 能引起杂音 应将定时器T0中断设为高优先级 这样编写出来的程序播放的音与 标准音叉进行差频校音 非常准确和谐 每个音符使用两个字节 低位字节 偶地 址 代表音级 00H表示不发音 休止符 01H 30H依次表示的音级为c c d d e f a3 a3 b3 详见表1 高位字节 奇地址 代表音符的时值 拍数 00H 0FH依次表示拍数 为1 8拍 0 10s 8拍 6 40s 见表2 乐曲的结束标志是两个字节 00H 0FH 定时器T1工作在定时方式1 定时时间为0 10s左右 作为音符节拍的最小时间单 位 即1 8拍 该时间要求不必很准确 该时间越短 音乐播放节奏就越快 时间取 0 10s时 定时常数取为3CB0H 即TH1 3CH TL1 0B0H 其它的音符节拍都是1 8拍的整数倍 借助软件计数 允许中断的次数就是倍数 例如 要得到1拍的延 时 只要中断8次即可 要编写的乐谱按要求以音符字节数据表的形式存放在程序中 改变乐曲就是通 过改变该数据表的内容来实现的 主程序的任务是按顺序读取数据表中的字节 根据情况调用音级子程序和音长 子程序 启动定时器T0 根据定时器T1应中断的次数 启动定时器T1 数据表读 完后 根据所设置的循环演奏次数决定是否结束程序 音级子程序的任务是取出 字节中的音级部分 分析TH0和TL0中应送入何值 送给寄存器R3 R2 音长子程 序的任务是取出字节中的音长部分 分析确定定时器T1应中断的次数 次数送寄 存器R4中 同时启动定时器T1 直到完成所需拍数 定时器T0的中断服务程序任务是取反P1 7输出产生方波 重新为TH0 TL0送初 值 定时器T1的中断服务程序任务是 判断节拍数完成否 关闭定时器T0 T1中断 当乐曲较长时 超过254个字节 数据表指针溢出 应及时修改基址 寄存器DPTR内容 即数据表的表头指针 例如 C 1时音节 6 用音符 包含音级和音长 字节表示就为 11H 02H 14H 01H 16H 01H 19H 02H 16H 02H 16H 08H 16H 0AH 00H 04H 其中11H 02H中的11H表示音3 mi 02H表 示节拍为半拍 本次设计中单片机晶振为12MHZ 那么定时器的计数周期为1MHZ 假如选择工 作方式1 那T值便为T 216 5 105 相应的频率 那么根据不同的频率计算出应该赋给定时器的计数值 列出不同音符与单片机 计数T0相关的计数值如下表所示 表1 各音的频率 定时初值 字节字符 音级 1 C 频率 Hz 定时初值 字节字符 音级 1 C 频率 Hz 定时初值 字节字符 c 1 130 81 F88E 01H c2 523 25 FE27 19H c 138 59 F8F9 02H c2 554 37 FE42 1AH d 2 146 83 F95E 03H d2 587 33 FE5B 1BH d 155 56 F9BE 04H d2 622 25 FE73 1CH e 3 164 81 FA18 05H e2 659 26 FE8A 1DH f 4 174 61 FA6D 06H f2 698 46 FE9F 1EH f 185 00 FABE 07H f2 739 99 FEB3 1FH g 5 196 00 FB09 08H g2 783 99 FEC6 20H g 207 65 FB51 09H g2 830 61 FED8 21H a 6 220 00 FB95 0AH a2 880 00 FEE9 22H a 233 08 FBD4 0BH a2 932 33 FEF9 23H b 7 246 94 FC11 0CH b2 987 77 FF08 24H c1 1 261 63 FC49 0DH c3 1046 5 FF16 25H c1 277 18 FC7F 0EH c3 1108 7 FF24 26H d1 2 293 66 FCB2 0FH d3 1174 7 FF30 27H d1 311 13 FCE1 10H d3 1244 5 FF3C 28H e1 3 329 63 FD0F 11H e3 1318 5 FF47 29H f1 4 349 23 FD39 12H f3 1396 9 FF52 2AH f1 369 99 FD61 13H f3 1480 0 FF5C 2BH g1 5 392 00 FD87 14H g3 1568 0 FF66 2CH g1 415 30 FDAB 15H g3 1661 2 FF6F 2DH a1 6 440 00 FDCD 16H a3 1760 0 FF77 2EH a1 466 16 FDED 17H a3 1864 7 FF7F 2FH b1 7 493 88 FE0B 18H b3 1975 5 FF86 30H播放方法 P1 7输出的音频信号不能直接驱动普通喇叭 可驱动高阻抗耳机发声或者有源音 箱发音 也可自制音频放大电路驱动喇叭发音 747 单片机电子琴系统程序设计 表2 拍数对应的字节字符 拍数 1 8 1 4 1 2 3 4 1 5 4 3 2 7 4 字符 00H 01H 02H 03H 04H 05H 06H 07H 拍数 2 5 2 3 7 2 4 5 6 8 字符 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 表3 不同音符与单片机计数T0相关的计数值 音符 频率 Hz 简谱码 T值 1 523 64580 2 587 64684 3 659 64777 4 698 64820 5 784 64898 6 880 64968 7 988 65030 2 3 硬件设计原理框图 2 4 流程图 一 主流程图 二 中断子程序 2 5 89S51芯片介绍 AT89S52是一种低功耗 高性能CMOS8位微控制器 具有8K在系统可编程Flash 存储器 使用Atmel公司高密度非易失性存储器技术制造 与工业80C51产品指令 和引脚完全兼容 片上Flash允许程序存储器在系统可编程 亦适于 常规编程器 在单芯片上 拥有灵巧的8位CPU和在系统可编程Flash 使得AT89S 52为众多嵌入式控制应用系统提供高灵活 超有效的解决方案 AT89S52具有以下标准功能 8k字节Flash 256字节RAM 32位I O口线 看门狗定时器 2个数据指针 三个16 位定时器 计数器 一个6向量2级中断结构 全双工串行口 片内晶振及时钟电路 另外 AT89S52可降至0Hz静态逻辑操作 支持2种软件可选择节电模式 空闲 模式下 CPU停止工作 允许RAM 定时器 计数器 串口 中断继续工作 掉电保 护方式下 RAM内容被保存 振荡器被冻结 单片机一切工作停止 直到下一个 中断或硬件复位为止 芯片引脚说明 VCC 电源 GND 地 P0口 P0口是一个8位漏极开路的双向I O口 作为输出口 每位能驱动8个TTL逻 辑电平 对P0端口写 1 时 引脚用作高阻抗输入 当访问外部程序和数据存储器时 P0口也被作为低8位地址 数据复用 在这种模 式下 P0具有内部上拉电阻 在flash编程时 P0口也用来接收指令字节 在程序校 验时 输出指令字节 程序校验时 需要外部上拉电阻 P1口 P1口是一个具有内部上拉电阻的8位双向I O口 p1输出缓冲器能驱动4个T TL逻辑电平 对P1端口写 1 时 内部上拉电阻把端口拉高 此时可以作为输入 口使用 作为输入使用时 被外部拉低的引脚由于内部电阻的原因 将输出电流 I 此外 P1 0和P1 2分别作定时器 计数器2的外部计数输入 P1 0 T2 和时器 计 数器2的触发输入 P1 1 T2EX 具体如下表所示 在flash编程和校验时 P1口接 收低8位地址字节 引脚号 第二功能 P1 0 T2 定时器 计数器T2的外部计数输入 时钟输出 P1 1 T2EX 定时器 计数器T2的捕捉 P1 5 MOSI 在系统编程用 P1 6 MISO 在系统编程用 P1 7 SCK 在系统编程用 P2口 P2口是一个具有内部上拉电阻的8位双向I O口 P2输出缓冲器能驱动4个T TL逻辑电平 对P2端口写 1 时 内部上拉电阻把端口拉高 此时可以作为输入 口使用 作为输入使用时 被外部拉低的引脚由于内部电阻的原因 将输出电流 I 在访问外部程序存储器或用16位地址读取外部数据存储器 例如执行MOVX DPTR 时 P2口送出高八位地址 在这种应用中 P2口使用很强的内部上拉发送1 在使 用8位地址 如MOVX RI 访问外部数据存储器时 P2口输出P2锁存器的内容 在flash编程和校验时 P2口也接收高8位地址字节和一些控制信号 P3口 P3口是一个具有内部上拉电阻的8位双向I O口 p2输出缓冲器能驱动4个T TL逻辑电平 对P3端口写 1 时 内部上拉电阻把端口拉高 此时可以作为输入 口使用 作为输入使用时 被外部拉低的引脚由于内部电阻的原因 将输出电流 I P3口亦作为AT89S52特殊功能 第二功能 使用 如下表所示 在flash编程和 校验时 P3口也接收一些控制信号 引脚号 第二功能 P3 0 RXD 串行输入 P3 1 TXD 串行输出 P3 2 INT0 外部中断0 P3 3 INT0 外部中断0 P3 4 T0 定时器0外部输入 P3 5 T1 定时器1外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器写选通 RST 复位输入 晶振工作时 RST脚持续2个机器周期高电平将使单片机复位 看门狗 计时完成后 RST脚输出96个晶振周期的高电平 特殊寄存器AUXR 地址8EH 上 的DISRTO位可以使此功能无效 DISRTO默认状态下 复位高电平有效 ALE PROG 地址锁存控制信号 ALE 是访问外部程序存储器时 锁存低8位地 址的输出脉冲 在flash编程时 此引脚 PROG 也用作编程输入脉冲 在一般情况 下 ALE以晶振六分之一的固定频率输出脉冲 可用来作为外部定时器或时钟使 用 然而 特别强调 在每次访问外部数据存储器时 ALE脉冲将会跳过 如果需 要 通过将地址为8EH的SFR的第0位置 1 ALE操作将无效 这一位置 1 ALE仅在执行MOVX或MOVC指令时有效 否则 ALE将被微弱拉高 这个ALE 使能标志位 地址为8EH的SFR的第0位 的设置对微控制器处于外部执行模式下 无效 PSEN 外部程序存储器选通信号 PSEN 是外部程序存储器选通信号 当AT89S5 2从外部程序存储器执行外部代码时 PSEN在每个机器周期被激活两次 而在访 问外部数据存储器时 PSEN将不被激活 EA VPP 访问外部程序存储器控制信号 为使能从0000H到FFFFH的外部程序存 储器读取指令 EA必须接GND 为了执行内部程序指令 EA应该接VCC 在flash 编程期间 EA也接收12伏V电压Vpp XTAL1 振荡器反相放大器和内部时钟发生电路的输入端 XTAL2 振荡器反相放大器的输出端 定时器0和定时器1 在AT89S52中 定时器0和定时器1的操作与AT89C51和AT89C52一样 定时器2 定时器2是一个16位定时 计数器 它既可以做定时器 又可以做事件计数器 其 工作方式由特殊寄存器T2CON中的C T2位选择 如表2所示 定时器2有三种工 作模式 捕捉方式 自动重载 向下或向上计数 和波特率发生器 工作模式由T2C ON中的相关位选择 定时器2有2个8位寄存器 TH2和TL2 在定时工作方式中 每个机器周期 TL2寄存器都会加1 由于一个机器周期由12个晶振周期构成 因 此 计数频率就是晶振频率的1 12 在计数工作方式下 寄存器在相关外部输入 角T2发生1至0的下降沿时增加1 在这种方式下 每个机器周期的S5P2期间采样 外部输入 一个机器周期采样到高电平 而下一个周期采样到低电平 计数器将 加1 在检测到跳变的这个周期的S3P1期间 新的计数值出现在寄存器中 因为识 别1 0的跳变需要2个机器周期 24 单片机电子琴系统程序设计 个晶振周期 所以 最大的计数频率不高于晶振频率的1 24 为了确保给定的电 平在改变前采样到一次 电平应该至少在一个完整的机器周期内保持不变 捕捉方式 在捕捉模式下 通过T2CON中的EXEN2来选择两种方式 如果EXEN2 0 定时 器2时一个16位定时 计数器 溢出时 对T2CON的TF2标志置位 TF2引起中断 如果EXEN2 1 定时器2做相同的操作 除上述功能外 外部输入T2EX引脚 P1 1 1至0的下跳变也会使得TH2和TL2中的值分别捕捉到RCAP2H和RCAP2L中 除 此之外 T2EX的跳变会引起T2CON中的EXF2置位 像TF2一样 T2EX也会引起中断 捕 捉模式下图所示 2 5 基本功能介绍 1 TMOD 定时器2控制寄存器 2 T2CON 定时器 计数器2控制寄存器 符号 功能 TF2 定时器2溢出标志位 必须软件清 0 RCLK 1或TCLK 1时 TF2不用置位 EXF2 定时器2外部标志位 EXEN2 1时 T2EX上的负跳变而出现捕捉或重载时 EXF2会被硬件置位 定时器2打开 EXF2 1时 将引导CPU执行定时器2中断程 序 EXF2必须如见清 0 在向下 向上技术模式 DCEN 1 下EXF2不能引起中断 RLCLK 串行口接收数据时钟标志位 若RLCLK 1 串行口将使用定时器2溢出 脉冲作为串行口工作模式1和3的串口接收时钟 RLCLK 0 将使用定时器1计数 溢出作为串口接收时钟 TCLK 串行口发送数据时钟标志位 若TCLK 1 串行口将使用定时器2溢出脉冲 作为串行口工作模式1和3的串口发送时钟 TCLK 0 将使用定时器1计数溢出 作为串口发送时钟 EXEN2 定时器2外部允许标志位 当EXEN2 1时 如果定时器2没有用作串行时 钟 T2EX P1 1 的负跳变见引起定时器2捕捉和重载 若EXEN2 0 定时器2将 视T2EX端的信号无效 TR2 开始 停止控制定时器2 TR2 1 定时器2开始工作 定时器2定时 计数选择标志位 0 定时 1 外部事件计数 下降沿触发 捕捉 重载选择标志位 当EXEN2 1时 1 T2EX出现负脉冲 会引起捕捉操作 当定时器2溢出或EXEN2 1时T2EX出 现负跳变 都会出现自动重载操作 0将引起T2EX的负脉冲 当RCKL 1或TCKL 1时 此标志位无效 定时器2溢 出时 强制做自动重载操作 三 波特率发生器 通过设置T2CON 见表2 中的TCLK或RCLK可选择定时器2作为波特率发生器 如果定时器2作为发送或接收波特率发生器 定时器1可用作它用 发送和接收的 波特率可以不同 如图8所示 设置RCLK和 或 TCLK可以使定时器2工作于波特 率产生模式 波特率产生工作模式与自动重载模式相似 因此 TH2的翻转使得 定时器2寄存器重载被软件预置16位值的RCAP2H和RCAP2L中的值 模式1和模 式3的波特率由定时器2溢出速率决定 具体如下公式 定时器可设置成定时器 也可为计数器 在多数应用情况下 一般配置成定时方 式 CP T2 0 定时器2用于定时器操作与波特率发生器有所不同 它在每一机器 周期 1 12晶振周期 都会增加 然而 作为波特率发生器 它在每一机器状态 1 2 晶振周期 都会增加 波特率计算公式如下 其中 RCAP2H RCAP2L 是RCAP2H和RCAP2L组成的16位无符号整数 定时 器2作为波特率发生器 如图8所示 图中仅仅在T2CON中RCLK或TCLK 1才有 效 特别强调 TH2的翻转并不置位TF2 也不产生中断 EXEN2置位后 T2EX引脚上1 0的下跳变不会使 RCAP2H RCAP2L 重载到 T H2 TL2 中 因此 定时器2作为波特率发生器 T2EX也还可以作为一个额外的 外部中断 定时器2处于波特率产生模式 TR2 1 定时器2正常工作 TH2或TL2 不应该读写 在这种模式下 定时器在每一状态都会增加 读或写就不会准确 寄存器RCAP2可以读 但不能写 因为写可能和重载交迭 造成写和重载错误 在读写定时器2或RCAP2寄存器时 应该关闭定时器 TR2清0 四 中断允许控制寄存器 IE 五 晶振特性 AT89S52单片机有一个用于构成内部振荡器的反相放大器 XTAL1和XTAL2分 别是放大器的输入 输出端 石英晶体和陶瓷谐振器都可以用来一起构成自激振 荡器 从外部时钟源驱动器件的话 XTAL2可以不接 而从XTAL1接入 由于外 部时钟信号经过二分频触发后作为外部时钟电路输入的 所以对外部时钟信号 的占空比没有其它要求 最长低电平持续时间和最少高电平持续时间等还是要 符合要求的 内部振荡电路连接图 外部振荡电路连接图 石英晶振 C1 C2 30PF 10PF 陶瓷谐振器 C1 C2 40PF 10PF 六 空闲模式 在空闲工作模式下 CPU处于睡眠状态 而所有片上外部设备保持激活状态 这 种状态可以通过软件产生 在这种状态下 片上RAM和特殊功能寄存器的内容保 持不变 空闲模式可以被任一个中断或硬件复位终止 由硬件复位终止空闲模式 只需两个机器周期有效复位信号 在这种情况下 片上硬件禁止访问内部RAM 而可以访问端口引脚 空闲模式被硬件复位终止后 为了防止预想不到的写端口 激活空闲模式的那一条指令的下一条指令不应该是写端口或外部存储器 单片机电子琴系统程序设计 第三章 单片机系统程序设计 3 1 发出七个音符程序 源程序如下 ORG 0000H SJMP START ORG 000BH AJMP INT 0 ORG 0030H START MOV P1 00H SETB EA SETB ET0 计数器0 MOV TMOD 02H MOV TH1 09CH MOV TL1 09CH 定时器初植 CLR TR0 定时器不允许 SCAN MOV A P2 键盘扫描 判断键盘按下 跳到SCAN 1 若未按 继续扫描 CJNE A 0FFH SCAN 1 NOP SJMP SCAN SCAN 1 ACALL DELAY 是不是真的要按下 如果是 则跳转SU KEY查询是哪个按下 MOV A P2 CJNE A 0FFH SU KEY NOP SJMP SCAN SU KEY JNB P2 1 MU 1 判断是哪个键按下 JNB P2 2 MU 2 JNB P2 3 MU 3 JNB P2 4 MU 4 JNB P2 5 MU 5 JNB P2 6 MU 6 JNB P2 7 MU 7 SJMP SCAN R1信号周期 MU 1 MOV R1 19 如果第一个按键按下 则R1 19 同时程序转NEXT SJMP NEXT MU 2 MOV R1 17 SJMP NEXT MU 3 MOV R1 15 SJMP NEXT MU 4 MOV R1 14 SJMP NEXT MU 5 MOV R1 13 SJMP NEXT MU 6 MOV R1 11 SJMP NEXT MU 7 MOV R1 10 SJMP NEXT NEXT MOV A R1 MOV R0 A SETB TR0 启动定时器0 NEXT 1 MOV A P2 没键按下继续执行 有键按下 返回读引脚 CJNE A 0FFH NEXT 1 ACALL DELAY MOV A P2 真的没键按下 CJNE A 0FFH NEXT 1 CLR TR0 不响 AJMP SCAN 扫描键盘去 INT 0 中断程序 DJNZ R0 RE R0不等于0时 返回 CPL P1 0 MOV A R1 MOV R0 A RE RETI DELAY MOV R7 100 延长时间等待 键盘消抖 D1 MOV R6 10 D2 DJNZ R6 D2 DJNZ R7 D1 RET END 3 2 演奏 生日快乐歌 程序 源程序如下 ORG 0000H JMP MAIN ORG 000BH JMP TT0 MAIN MOV TMOD 01H 设置定时器0工作方式 MOV IE 82H 设置中断 MAIN0 MOV 30H 00H NEXT MOV A 30H MOV DPTR TABLE 查表 MOVC A A DPTR MOV R2 A JZ STOP ANL A 0FH MOV R5 A MOV A R2 SWAP A ANL A 0FH JNZ SING MOV 22H A RL A MOV DPTR TABLE1 查表 MOVC A A DPTR MOV TH0 A MOV 21H A MOV A 22H RL A INC A MOVC A A DPTR MOV TL0 A MOV 20H A SETB TR0 W1 CALL DELAY INC 30H JMP NEXT STOP CLR TR0 JMP MAIN0 TT0 PUSH ACC 中断服务程序 PUSH PSW MOV TL0 20H MOV TH0 21H CPL P1 0 POP PSW POP ACC RETI DELAY MOV R7 2 延时187ms W2 MOV R4 187 W3 MOV R3 248 DJNZ R3 DJNZ R4 W3 DJNZ R7 W2 DJNZ R5 DELAY RET TABLE1 DW 64260 64400 64524 64580 音符计数植 DW 64684 64777 64820 64898 DW 64968 65030 65058 65110 DW 65157 65178 65217 TABLE DB 82H 01H 81H 94H 84H 节拍表 DB 0B4H 0A4H 04H DB 82H 01H 81H 94H 84H DB 0C4H 0B4H 04H DB 82H 01H 81H 0F4H 0D4H DB 0B4H 0A4H 94H DB 0E2H 01H 0E1H 0D4H 0B4H DB 0C4H 0B4H 04H DB 82H 01H 81H 94H 84H 单片机电子琴系统程序设计 第四章 软件与硬件的调试 单片机开发中除必要的硬件外 同样离不开软件 我们写的汇编语言源程序要变 为CPU可以执行的机器码有两种方法 一种是手工汇编 另一种是机器汇编 目 前已极少使用手工汇编的方法了 机器汇编是通过汇编软件将源程序变为机器 码 用于MCS 51 单片机的汇编 软件有早期的A51 随着单片机开发技术的不断发展 从普遍使用汇编语言到逐 渐使用高级语言开发 单片机的开发软件也在不断发展 Keil 软件是目前最流行开发MCS 51 系列单片机的软件 这从近年来各仿真机厂商纷纷宣布全面支持Keil 即可看出 Keil 提供了包括C编译器 宏汇编 连接器 库管理和一个功能强大的仿真调试器等 在内的完整开发方案 通过一个集成开发环境 uVision 将这些部份组合在一起 运行Keil 软件需要Pentium 或以上的CPU 16MB或更多RAM 20M 以上空闲的硬盘空间 WIN98 NT WIN2000 WINXP 等操作系统 掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的 如果你使用C 语言编程 那么Keil 几乎就是你的不二之选 目前在国内你只能买到该软件 而你买的仿真机也很可 能只支持该软件 即使不使用C 语言而仅用汇编语言编程 其方便易用的集成环境 强大的软件仿真调试工具也 会令你事半功倍 我们将通过一些实例来学习Keil 软件的使用 在这一部份我们将学习如何输入源程序 建立工程 对工程进行详 细的设置 以及如何将源程序变为目标代码 4 1 Keil 工程的建立 首先启动Keil 软件的集成开发环境 这里假设读者已正确安装了该软件 可以从桌面上直接双 击uVision 的图标以启动该软件 UVison启动后 程序窗口的左边有一个工程管理窗口 该 窗口有3 个标签 分别是Files Regs 和Books 这三个标签页分别显示当前项目的文件结 构 CPU 的寄存器及部份特殊功能寄存器的值 调试时才出现 和所选CPU 的附加说明文件 如果是第一次启动Keil 那么这三个标签页全是空的 1 源文件的建立 使用菜单 File New 或者点击工具栏的新建文件按钮 即可在项目窗口的右侧打开一个新的文 本编缉窗口 在该窗口中输入汇编语言源程序 保存该文件 注意必须加上扩展 名 汇编语言源程序一般用asm 或a51 为扩展名 需要说明的是 源文件就是一般的文本文件 不一定使用Keil 软件编写 可以使用任意文本编缉器编写 而且 Keil 的编缉器对汉字的支持不好 建议使用UltraEdit 之类的编缉软件进行源程序的输入 2 建立工程文件 在项目开发中 并不是仅有一个源程序就行了 还要为这个项目选择CPU Keil 支持数百种CPU 而这些CPU 的特性并不完全相同 确定编译 汇编 连接的参数 指定调试的方式 有一些 项目还会有多个文件组成等 为管理和使用方便 Keil 使用工程 Project 这一概念 将这些参数设置和所需的所有文件都加在一个工程 中 只能对工程而不能对单一的源程序进行编译 汇编 和连接等操作 下面我们 就一步一步地来建立工程 点击 Project New Project 菜单 出现一个对话框 要求给将要建立的工程起一个名字 你可以在编缉框中 输入一个名字 设为exam1 不需要扩展名 点击 保存 按钮 出现第二个对话框 如图2所示 这个对话框要求选择目标CPU 即你所用芯片的型号 Keil 支持的CPU很多 我们选择Atmel 公司的89C51 芯片 点击ATMEL 前面的 号 展开该层 点击其中的89C51 然后再点击 确定 按钮 回到主界 面 此时 在工程窗口的文件页中 出现了 Target1 前面有 号 点击 号展 开 可以看到下一层的 Source Group1 这时的工程还是一个空的工程 里面什么文件也没有 需要手动把刚才 编写好的源程序加入 点击 Source Group1 使其反白显示 然后 点击鼠标右键 出现一个下拉菜单 如图3 所示 选中其中的 Add file to Group 出现一个对话框 要求寻找源文件 注意 该对话框下面的 文件类型 默 认为C source file c 也就是以C 为扩展名的文件 而我们的文件是以asm 为扩展名的 所以在列表框中找不到exam1 asm 要将文件类型改掉 点击对话框 中 文件类型 后的下拉列表 找到并选中 Asm Source File a51 asm 这样 在列表框中就可以找到exam1 asm 文件了 图2 选择目标CPU 图3 加入文件 4 2 工程文件建立 首先点击左边Project窗口的Targey1 然后使用菜单 Project Option for target target 即出现对工程设置的对话框 这个对话框非常复杂 共有8个页面 要全部搞清可不容易 好在绝大部分设置项默认值就行了 设置对话框中的Target页面 Xtal后面的数值是 晶振频率值 默认值是所选目标CPU的最高可用频率值 对于我们所选的AT89C 51而言是24M 该数值与最终产生的目标代码无关 仅用于软件模拟调试时显示 程序执行时间 正确设置该数值可使显示时间与实际所用时间一致 一般将其设 置成与你的硬件所用晶振频率相同 如果没必要了解程序执行的时间 也可以不 设 这里设置为12 Memory Model用于设置RAM使用情况 有三个选择项 small是所有变量都在单片机的内部RAM中 Compact是可以使 用一页外部扩展RAM 而Large则是可以使用全部外部扩展RAM Clde Model用于设置ROM空间的使用 同样也有三个选择项 即small模式 只用低于2 K的程序空间 Compact模式 单个函数的代码量不能超过2K 整个程序可以使用 64K程序空间 Large模式 可用全部64K空间 Useon chipROM选择项 确认是否使用片内ROM 注意 该中选项并不会影响最终生成 的目标代码量 Operating项是操作系统选择 Keil提供了两种操作系统 Rtx ting和Rtx full 关于操作系统是另外一个很大的话题了 通常我们不使用任何操作系统 即 使用该项的默认值 None 不使用任何操作系统 Off Chip Code mmory可以确定系统扩展ROM的地址范围 Off Chip x Data memory组用于确定系统扩展RAM啊地址范围 这些选择项必须根据所用硬件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《幼儿教师招聘》练习题库有答案详解
- 渔业养殖水产品与健康饮食书籍出版创新创业项目商业计划书
- 教师招聘之《小学教师招聘》题库检测模拟题【模拟题】附答案详解
- 教师招聘之《幼儿教师招聘》考试综合练习完整参考答案详解
- 教师招聘之《幼儿教师招聘》强化训练含答案详解(模拟题)
- 教师招聘之《小学教师招聘》高分题库附答案详解【满分必刷】
- 2025年呼伦贝尔莫力达瓦达斡尔族自治旗内蒙古大学校园引才笔试备考附答案详解(突破训练)
- 患者隐私保护-医疗机构医疗质量安全专项整治行动方案
- 2025年美妆行业个性化定制服务模式在短视频平台中的应用报告
- 2025年私募股权投资基金行业投资热点:生物制药生产与质量控制退出策略深度分析
- 数学-湖南省长郡中学2025-2026学年高二上学期暑假作业检测(开学)试题+答案
- 构建餐饮油烟共治格局的策略及实施路径
- 检测基础知识培训课件
- 前交叉韧带重建手术质量评价规范
- 国企招聘笔试题及答案-投资专员、投资经理B卷
- 2025年四川医疗卫生事业单位《卫生公共基础知识》考试真题及答案
- 民航企业管理概论课件
- 解读学习2025年《住房租赁条例》培训课件
- Q-JJJ 9002-2025 铁路建设项目安全穿透式管理实施指南
- 视网膜静脉周围炎诊断
- 睾丸鞘膜积液护理查房
评论
0/150
提交评论