《单片机原理及应用》实验指导书_第1页
《单片机原理及应用》实验指导书_第2页
《单片机原理及应用》实验指导书_第3页
《单片机原理及应用》实验指导书_第4页
《单片机原理及应用》实验指导书_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

单片机原理及应用单片机原理及应用 实实 验验 指指 导导 书书 梁光胜 编编 华北电力大学信息工程系 电子科学与技术实验室 二零零五 年 十 月 前前 言言 1 实验总体目标 掌握凌阳 16 位单片机 SPCE061A 的硬件结构和工作原理 掌握利用汇编语 言和 C 语言混合编程的方法设计单片机应用程序的方法 掌握集成软件开发平 台的使用方法 为进一步开发应用打下坚实的基础 适用专业 电子科学与技术 先修课程 数字电子技术基础 C 语言程序设计 实验课时分配 实验项目学时 10 个基本型实验自行安排 设计型实验 实验一 定时器 Timer A B 实验2 实验二 系统时钟实验2 实验三 FIQ 中断实验2 实验四 键唤醒实验2 实验五 A D 转换实验2 实验六 双通道 D A 实验2 实验七 片内 2K SRAM 和 32K 闪存读写2 综合型实验 实验一 简易复读机的设计与实现2 实验二 语音电子钟的设计与实现4 实验环境 计算机 1 台 凌阳 16 位单片机 SPCE061A 实验箱 1 套 nSP IDE 集成 开发软件 1 套 示波器 1 台 实验总体要求 以凌阳 16 位单片机 SPCE061A 为硬件载体 能够熟练利用汇编语言和 C 语 言混合编程的方法设计单片机应用程序 能够初步掌握单片机应用系统的设计 与实现方法 本实验的重点 难点及教学方法建议 本实验的重点 掌握凌阳 16 位单片机 SPCE061A 的硬件结构 工作原理和 指令系统 能够独立完成所列出的实验内容 本实验的难点 两个综合型实验题目 教学方法建议 指导教师通过一个简单实例 带领学生将设计的全过程完 整走一遍 后面的实验内容要求学生独立全面完成 目目 录录 第一章第一章 SPCE061ASPCE061A 基本型实验基本型实验 实验一熟悉 nSP IDE 环境下的汇编程序的编写 4 实验二熟悉 nSP IDE 环境下的 C 语言的编写 6 实验三使用汇编语言实现 A 口的输出实验 7 实验四使用 C 语言实现 A 口的输出实验 9 实验五使用汇编语言实现 A 口为输入 B 口为输出实验 10 实验六使用 C 语言实现 A 口为输入 B 口为输出实验 12 实验七IRQ5 中断实验 14 实验八SACM A2000 实验 17 实验九SACM 480 实验 20 实验十SACM 240 实验 23 第二章第二章SPCE061ASPCE061A 设计型实验设计型实验 26 实验一定时器 Timer A B 实验 26 实验二系统时钟实验 27 实验三FIQ 中断实验 28 实验四键唤醒实验 29 实验五A D 转换实验 30 实验六双通道 D A 实验 31 实验七片内 2K SRAM 和 32K 闪存读写 32 第三章第三章SPCE061ASPCE061A 综合型实验综合型实验 34 实验一简易复读机的设计与实现 34 实验二语音电子钟的设计与实现 34 第一章第一章 SPCE061A 基本型实验基本型实验 实验一实验一 熟悉熟悉 nSP IDE 环境下的汇编程序的编写环境下的汇编程序的编写 一 实验目的一 实验目的 熟悉 nSP IDE 环境及在该环境下用汇编语言编写的应用程序 熟悉简 单的 nSP 汇编语言指令 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 三 实验步骤三 实验步骤 1 将 nSP IDE 打开后 建立一个新工程 2 在该项目的源文件夹 SOURCE FILES 下建立一个新的汇编语言文件 3 编写汇编代码 4 编译程序 软件调试 观察并跟踪其结果 查看各个寄存器状态 等等 四 程序流程图四 程序流程图 寄存器赋值 r1 0 x0001 r2 0 x0000 r2 r1 r1 1 r1 100吗 R Sum r2 程序进入死循环 开始 N Y 五 程序范例五 程序范例 Program 计算 1 to 100 累加值 Output sum 5050 十进制 或 13BA 十六进制 RAM 定义预定义 RAM 段 var R Sum 定义变量 CODE 定义代码段 public main 对 main 程序段声明 main r1 0 x0001 r1 1 100 r2 0 x0000 寄存器清零 L SumLoop r2 r1 累计值存到寄存器 r2 r1 1 下一个数值 cmp r1 100 加到 100 否 jna L SumLoop 如果 r1 100 跳到 L SumLoop R Sum r2 在 R Sum 中保存最终结果 L ProgramEndLoop 程序死循环 jmp L ProgramEndLoop 六 程序练习六 程序练习 在 nSP IDE 下用汇编语言使用冒泡法编写一个排序程序 iram array dw 5 89 40 12 55 32 18 46 77 21 实验二实验二 熟悉熟悉 nSP IDE 环境下的环境下的 C 语言的编写语言的编写 一 实验目的一 实验目的 熟悉 nSP IDE 环境及在该环境下用 C 语言编写的应用程序 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 三 实验步骤三 实验步骤 1 将 nSP IDE 打开后 建立一个新工程 2 在该项目的源文件夹 SOURCE FILES 下建立一个新的 C 语言文件 3 编写 C 语言代码 4 编译程序 软件调试 观察并跟踪其结果 查看各个寄存器状态 等等 四 程序范例四 程序范例 Program 计算 1 to 100 累加值 Output sum 5050 十进制 或 13BA 十六进制 int main int i Sum 0 for i 0 i 100 i Sum Sum i Sum 是累加的结果 while 1 程序死循环 用变量 Watch 窗口看 Sum 的值 五 程序练习五 程序练习 在 nSP IDE 下用 C 语言使用冒泡法编写一个排序程序 Int Array 5 89 40 12 55 32 18 46 77 21 实验三实验三 使用汇编语言实现使用汇编语言实现 A A 口的输出实验口的输出实验 一 实验目的一 实验目的 通过实验了解 A 口作为输出口时的使用方法 使用汇编语言来实现 A 口作 为输出口的方法 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 nSP 十六 位单片机实验箱一个 三 实验原理三 实验原理 通过点亮不同发光二极管来显示 A 口输出的数值不同 四 实验步骤四 实验步骤 1 根据硬件连接图连接好硬件 2 将 nSP IDE 打开后 建立一个新工程 3 在该项目的源文件夹 SOURCE FILES 下建立一个新的汇编语言文件 4 编写汇编代码 5 编译程序 软件调试 跟踪结果 观察 LED 及各个寄存器状态等等 五 硬件连接图五 硬件连接图 123456 A B C D 654321 D C B A Title NumberRevisionSize B Date 3 Jul 2002 Sheet of File E Schematic MyDesign2 ddbDrawn By D6 D3 LED D1 LED D0 D7 LED D2 LED D4 LED D5 LED IOA0 IOA1 IOA2 IOA3 IOA4 IOA7 IOA5 IOA6 六 程序流程图六 程序流程图 七 程序范例七 程序范例 INCLUDE hardware inc 包括 hardware inc 文件 RAM VAR R LedCounter 定义变量 VAR R DelayCounter CODE public main 对 main 程序声明 main R1 0 xFFFF 设置 A 口为同相低电平输出口 P IOA Dir R1 P IOA Attrib R1 R1 0 x0000 P IOA Data R1 R LedCounter R1 对 LED counter 清零 L MainLoop R1 R LedCounter P IOA Data R1 送数据到 A 口 R1 R LedCounter R1 1 LED Counter 加 1 R LedCounter R1 R1 0 x0000 Delay Counter 清零 R DelayCounter R1 call F Delay 延时 jmp L MainLoop 跳到 L MainLoop 循环点亮 LED 功能 延时子函数 F Delay L DelayLoop R1 0 x0001 清看门狗 P Watchdog Clear R1 R1 R DelayCounter R1 1 Delay counter 加 1 R DelayCounter R1 jnz L DelayLoop 加到 65536 吗 retf 八 程序练习八 程序练习 使用汇编语言实现 B 口的输出实验 实验四实验四 使用使用 C C 语言实现语言实现 A A 口的输出实验口的输出实验 一 实验目的一 实验目的 通过实验了解 A 口作为输出口时的使用方法 使用 C 语言来实现 A 口作为 输出口的方法 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 nSP 十六 位单片机实验箱一个 三 实验原理三 实验原理 通过点亮不同发光二极管来显示 A 口输出的数值不同 四 实验步骤四 实验步骤 1 根据硬件连接图连接好硬件 2 将 nSP IDE 打开后 建立一个新工程 3 在该项目的源文件夹 SOURCE FILES 下建立一个新的汇编语言文件 4 编写 C 语言代码 5 编译程序 软件调试 6 跟踪结果 观察 LED 及各个寄存器状态等等 五 硬件连接图五 硬件连接图 硬件连接图同实验三 六 程序范例六 程序范例 include hardware h void Delay 延时子程序 unsigned int i for i 0 i 32768 i int main int LedCounter 0 int Temp 设置 A 口 的 Dir Data Attrib SP Init IOA 0 xffff 0 xffff 0 xffff 设置 A 口为无数据反相功能的高电平输出端 SP Init IOA xx xx xx 在 hardware h 文件中已被定义 while 1 SP Export Port IOA Data LedCounter 送数据到 A 口 SP Export xx xx 在 hardware h 文件中已被定义 LedCounter Delay 七 程序练习七 程序练习 使用 C 语言实现 B 口的输出实验 实验五实验五 使用汇编语言实现使用汇编语言实现 A 口为输入口为输入 B 口为输出实验口为输出实验 一 实验目的一 实验目的 通过实验了解 A 口作为输入 B 口为输出口时的使用方法 使用汇编语言 来实现 A 口作为输入 B 口为输出口的方法 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 nSP 十六 位单片机实验箱一个 三 实验原理三 实验原理 根据按键的不同 A 口的数据就不同 则传送到 B 口的数据就不同 相应的发 光二极管就被点亮 四 硬件连接图四 硬件连接图 五 实验步骤五 实验步骤 1 根据硬件连接图连接好硬件 2 将 nSP IDE 打开后 建立一个新工程 3 在该项目的源文件夹 SOURCE FILES 下建立一个新的汇编语言文件 4 编写程序代码 5 编译程序 软件调试 6 按键并观察 LED 及各个寄存器的状态 六 程序流程图六 程序流程图 七 程序范例七 程序范例 INCLUDE hardware inc INCLUDE key inc 包括 key inc 文件 RAM VAR R KeyCode 定义变量保存键值 CODE public main 对 main 程序声明 main call F User Init IO 初始化 IO 口 call F Key Scan Initial 初始化键盘扫描 L MainLoop call F Key Scan ServiceLoop 扫描键盘 call F Key DebounceCnt Down Key debounce call F SP GetCh 取键值 cmp R1 0 x0000 是否有键按下 je L MainLoop 没有 继续检测 R KeyCode R1 有 保存键值 P IOB Buffer R1 送到 B 口显示 jmp L MainLoop F User Init IO r1 0 x0000 设置 A 口为带下拉电阻的输入端 P IOA Dir r1 P IOA Attrib r1 P IOA Data r1 r1 0 xffff 设置 B 口为无数据反相功能的低电 P IOB Dir r1 平输出 P IOB Attrib r1 r1 0 x0000 P IOB Data r1 retf 八 程序练习八 程序练习 使用汇编语言实现 A 口的输出 B 口为输入实验 实验六实验六 使用使用 C 语言实现语言实现 A 口为输入口为输入 B 口为输出实验口为输出实验 一 实验目的一 实验目的 通过实验了解 A 口作为输入 B 口为输出口时的使用方法 使用 C 语言来 实现 A 口作为输入 B 口为输出口的方法 二 实验设备二 实验设备 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台 nSP 十六 位单片机实验箱一个 三 实验原理三 实验原理 根据按键的不同 A 口的数据就不同 则传送到 B 口的数据就不同 相应的发 光二极管就被点亮 四 硬件连接图四 硬件连接图 五 实验步骤五 实验步骤 1 根据硬件连接图连接好硬件 2 将 nSP IDE 打开后 建立一个新工程 3 在该项目的源文件夹 SOURCE FILES 下建立一个新的汇编语言文件 4 编写程序代码 5 编译程序 软件调试 6 按键并观察 LED 及各个寄存器状态 六 程序流程图六 程序流程图 七 程序范例七 程序范例 include hardware h int main int Key 设置 Dir Data Attrib SP Init IOA 0 x0000 0 x0000 0 x0000 设置 A 口为带下拉电阻的输入 SP Init IOB 0 xffff 0 x0000 0 xffff 设置 B 口为无数据反相功能的低电平输出 System Initial while 1 Key SP GetCh 取键值 switch Key case 0 x0000 没有键按下 break case 0 x0001 Key 1 case 0 x0002 Key 2 case 0 x0004 Key 3 case 0 x0008 Key 4 case 0 x0010 Key 5 case 0 x0020 Key 6 case 0 x0040 Key 7 case 0 x0080 Key 8 SP Export Port IOB Buffer Key 在 B 口显示按下的键值 break default break System ServiceLoop 八 程序练习八 程序练习 使用 C 语言实现 A 口的输出 B 口为输入实验 实验七实验七 IRQ5IRQ5 中断实验中断实验 一 实验目的一 实验目的 了解 IRQ5 的中断向量和中断源 掌握中断控制单元 P INT Ctrl P INT Clear 的设置方法 熟悉中断的编程方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱 一个 三 实验原理三 实验原理 IRQ5 中断对应 4Hz 2Hz 中断源 通过写 P INT Ctrl 来设置中断允许 程 序运行后就会产生相应的中断 我们编写一个用中断方式控制发光二极管亮灭 程序 中断程序里读取 P INT Ctrl 单元 判断是哪个中断源 转到相应中断程 序控制对应发光二极管亮或灭 从而了解 IRQ5 中断的组成及编程 四 实验步骤四 实验步骤 1 根据实验内容自行设计 连接硬件电路并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 观察 LED 各个寄存器状态等等 五 程序流程图五 程序流程图 六 程序范例六 程序范例 Note IRQ5 中断有两个中断源 2Hz 和 4Hz 每个中断分别控制二极管的亮灭 即 2Hz 中断控制与 A 口的 IOA0 IOA3 位相连的 LED 4Hz 中断控制与 IOB 口的 IOB0 IOB3 位相 连的 LED 灯 defineP IOA DATA 0 x7000 defineP IOA DIR 0 x7002 defineP IOA ATTRI 0 x7003 defineP IOB DATA 0 x7005 defineP IOB DIR 0 x7007 defineP IOB ATTRI0 x7008 defineP INT CTRL0 x7010 define P INT CTRL NEW0 x702D defineP INT CLEAR0 x7011 defineP Watchdog Clear0 x7012 RAM VAR TIME2 VAR TIME4 code public main main int off r1 0 xffff IOA 口为同相高电平输出口 P IOA ATTRI r1 P IOA DIR r1 P IOA DATA r1 r1 0 xffff IOB 口为同相高电平输出口 P IOB ATTRI r1 P IOB DIR r1 P IOB DATA r1 r1 0 x000c 开中断 IRQ5 4Hz 和 IRQ5 2Hz P INT CTRL r1 P INT CTRL NEW r1 R1 0 TIME2 r1 TIME4 r1 intirq loop r1 0 x0001 P Watchdog Clear r1 清看门狗 jmp loop text public IRQ5 IRQ5 push r1 r5 to sp 压栈保护 r1 0 x0008 test r1 P INT CTRL 比较是否为 4Hz 的中断源 jnz l irq5 4 是 则转至对应程序段 l irq5 2 否 则进入 2Hz 程序段 r1 0 x0004 P INT CLEAR r1 r2 TIME2 r2 0 x0001 TIME2 R2 cmp r2 2 比较是否为 1 秒 jbe LED2HZ OFF 小于等于则 LED 灭 r1 0 xfff0 大于则 LED 亮 P IOA DATA r1 cmp r2 4 比较是否为两秒 jbe LED2Hz RET 小于等于则 LED 继续亮 r2 0 x000 否则 TIME1 单元清零 返回中断 TIME2 R2 jmp LED2Hz RET LED2HZ OFF r1 0 xffff P IOA DATA r1 LED2Hz RET pop r1 r5 from sp RETI l irq5 4 r1 0 x0008 P INT CLEAR r1 r2 TIME4 r2 0 x0001 TIME4 R2 cmp r2 2 比较是否为 0 5 秒 jbe LED4HZ OFF 小于等于则 LED 灭 r1 0 xfff0 大于则 LED 亮 P IOB DATA r1 cmp r2 4 比较是否为 1 秒 jbe LED4Hz RET 小于等于则 LED 继续亮 r2 0 x000 否则 TIME2 单元清零 返回中断 TIME4 R2 jmp LED4Hz RET LED4HZ OFF r1 0 xffff P IOB DATA r1 LED4Hz RET pop r1 r5 from sp RETI 实验八实验八 SACM A2000 实验实验 一 实验目的一 实验目的 了解凌阳单片机以 SACM A2000 语音格式播放及程序的编写方法 了解凌 阳音频编码算法库 SACM Lib 了解 SACM A2000 的语音文件 二 实验设备二 实验设备 装有 u nsp IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一个 三 实验原理三 实验原理 将 PCM 音频格式的 8K16 位 WAV 文件经 SACM A2000 算法压缩后变为 SUB BAND 的音频格式 压缩前为 wav 8k 16bit 压缩后为 16k 20k 24k 并生成 out 文件用于对比试听 pc play 即在 PC 机上试听 out 文件并和实验板上的扬声器的声音进行对比 由于它的压缩比较小 8 1 所以具有高质量 高码率的特点适用于高保真语音和音乐 四 实验步骤四 实验步骤 1 用 PC 机录制一个 wav 语音文件 A2000 自动方式主程序流程图 A2000 手动方式主程序流程图 2 用 Windows 压缩工具将该 wav 文件压缩为 16k 或 20k 24k 的文件 3 将 nSP IDE 打开后 建立一个新工程 4 添加 SACM A2000 的语音文件到程序中的资源文件夹 resource 下 5 添加 编写程序代码 6 编译程序 观察结果 五 程序流程五 程序流程图图 中断服务子程序流程图 六 程序范例六 程序范例 Note A2000 有两种播放方式 即自动方式和非自动方式 我们可以通 过改变 Mode 的值来切换这两种方式 当 Mode 0 时以非自动方式播放 当 Mode 1 时 以自动方式播放 defineSPEECH 10 defineDAC11 defineDAC22 defineRamp UpDn Off 0 defineRamp Up On1 defineRamp Dn On2 defineRamp UpDn On3 defineManual0 defineAuto1 defineFull 1 defineEmpty2 defineMode1 include A2000 h main extern long RES HH 24K SA RES HH 24K EA 定义语音资源的首末地址标号 long int Addr 定义地址变量 intRet 0 定义获取语音数据变量并初始化 if Mode 1 采用自动方式播放 SACM A2000 Initial 1 自动方式播放初始化 SACM A2000 Play SPEECH 1 DAC1 Ramp UpDn On 定义语音索引号 播放通道 允许音量增 减调节 while 1 SACM A2000 ServiceLoop 获取语音数据并将其填入解码队列 if Mode 0 采用非自动方式播放 Addr RES HH 24K SA 送入语音队列的首址 SACM A2000 Initial 0 非自动方式播放的初始化 SACM A2000 InitDecoder DAC1 开始对 A2000 的语音数据以非自动方式解码 while 1 if SACM A2000 TestQueue Full Ret SP GetResource Addr SACM A2000 FillQueue Ret Addr if Addr RES HH 24K EA 如果该段语音未播完 即未到达末地址 时 SACM A2000 Decoder 获取资源并进行解码 再通过中断服务子程序送入 DAC 通道播放 else SACM A2000 Stop 否则 停止播放 中断程序 ISR ASM text includehardware inc includeA2000 inc includeResource inc public FIQ FIQ PUSHr1 r4 to sp 压栈保护 r1 0 x2000 test r1 P INT Ctrl 判断是不是 FIQ TMA 中断源 jnz L FIQ TimerA 是 则转 r1 0 x0800 test r1 P INT Ctrl 否则 判断是不是 FIQ TMB 中断源 jnz L FIQ TimerB 是 则转 L FIQ PWM r1 C FIQ PWM P INT Clear r1 清除 P INT Clear 单元 POP R1 R4 from sp reti L FIQ TimerA P INT Clear r1 call F FIQ Service SACM A2000 调用函数 完成播放 pop r1 r4 from sp reti L FIQ TimerB P INT Clear r1 pop r1 r4 from sp reti 实验九实验九 SACM 480SACM 480 实验实验 一 实验目的一 实验目的 了解语音压缩和播放功能并学会编程 了解凌阳音频编码算法库 SACM Lib 了解 SACM s480 的语音文件 二 实验设备二 实验设备 装有 u nsp IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 三 实验原理三 实验原理 将 PCM 音频格式的 8K16 位 WAV 文件经 SACM S480 算法压缩后变为 CELP 的 音频格式 压缩前为 wav 8k 16bit 压缩后为 48k 72k fo 并生成 out 文件用于对比试听 pc play 即在 PC 机上试听 out 文件并和实验板上 的扬声器的声音进行对比 压缩比较大 80 3 存储容量大 音质介于 A2000 和 S240 之间 适用于语音播放 如 文曲星 词库 四 实验步骤四 实验步骤 1 用 PC 机录制一个 wav 语音文件 2 用所给的 Windows 压缩工具将该 wav 文件压缩生成 4 8k 或 7 2k 的 文件 3 将 nSP IDE 打开后 建立一个新工程 4 添加 SACM S480 的语音文件到程序中的资源文件夹 resource 下 5 编写程序代码 6 编译程序 观察结果 五 程序流程图五 程序流程图 六 程序范例六 程序范例 主程序 MAIN ASM Note s480 只有自动播放方式 在中断 FIQ 的 FIQ TMA 中断源中通过 主程序的 SACM S480 ServiceLoop 对语音数据进行解码 然后将其 送入 DAC 通道播放 defineSPEECH 1 2 defineDAC11 defineDAC22 defineRamp UpDn Off 0 defineRamp Up On1 defineRamp Dn On2 defineRamp UpDn On3 defineAuto1 defineFull1 defineEmpty2 include s480 h main SACM S480 Initial Auto 自动方式播放初始化 SACM S480 Play SPEECH 1 DAC1 DAC2 Ramp UpDn On 定义语音索引号 播放通 允许音量增 减调节 while 1 SACM S480 ServiceLoop 获取语音数据并将其填入解码队列 中断程序 ISR ASM text includehardware inc includeS480 inc includeResource inc public FIQ FIQ PUSHr1 r4 to sp 压栈保护 r1 0 x2000 test r1 P INT Ctrl 判断是不是 FIQ TMA 中断源 jnz L FIQ TimerA 是 则转 r1 0 x0800 test r1 P INT Ctrl 否则 判断是不是 FIQ TMB 中断源 jnz L FIQ TimerB 是 则转 L FIQ PWM r1 C FIQ PWM P INT Clear r1 清除 P INT Clear 单元 POP R1 R4 from sp reti L FIQ TimerA P INT Clear r1 call F FIQ Service SACM S480 调用函数 完成播放 pop r1 r4 from sp reti L FIQ TimerB P INT Clear r1 pop r1 r4 from sp reti 实验十实验十 SACM 240SACM 240 实验实验 一 实验目的一 实验目的 了解凌阳单片机以 SACM S240 语音格式播放及程序的编写方法 了解凌阳 音频编码算法库 SACM Lib 了解 SACM S240 的语音文件 二 实验设备二 实验设备 装有 u nsp IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 三 实验原理三 实验原理 将 PCM 音频格式的 8K16 位 WAV 文件经 SACM S240 算法压缩后变为线性预 测编码格式即 LPC 压缩前为 wav 8k 16bit 压缩后为 24k 压缩比 大 80 1 5 价格低 适用于对保真度要求不高的场合 如 玩具类产品的批量 生产 码率仅为 2 4 Kbps 四 实验步骤四 实验步骤 1 将 nSP IDE 打开后 建立一个新工程 2 在该项目的源文件夹 SOURCE FILES 下建立一个新的 C 语言文件 3 编写程序代码 4 在资源文件夹下添加 SACM S240 的语音文件 5 编译程序 软件调试 观察结果 五 程序流程图五 程序流程图 六 程序范例六 程序范例 主程序 MAIN C Note s240 只有自动播放方式 在中断 FIQ 的 FIQ TMA 中断源中通过 主程序的 SACM S240 ServiceLoop 对语音数据进行解码 然后将其 送入 DAC 通道播放 include hardware h include s240 h defineDAC11 defineDAC22 defineRamp UpDn Off 0 defineRamp Up On1 defineRamp Dn On2 defineRamp UpDn On3 define MaxSpeechNum3 播放语音的最大个数 defineAuto1 main int SpeechIndex 0 选择第一首语音 while 1 SACM S240 Initial Auto SACM S240 Play SpeechIndex DAC1 DAC2 Ramp UpDn On 播放第一首 while SACM S240 Status SpeechIndex SACM S240 Play SpeechIndex DAC1 DAC2 Ramp UpDn On 播放第二首 while SACM S240 Status SpeechIndex SACM S240 Play SpeechIndex DAC1 DAC2 Ramp UpDn On 播放第三首 while 1 SACM S240 ServiceLoop 停 中断程序 ISR ASM TEXT include hardware inc includeS240 inc includeResource inc external F FIQ Service SACM S240 public FIQ FIQ PUSHr1 r4 to sp 压栈保护 r1 0 x2000 test r1 P INT Ctrl 判断是不是 FIQ TMA 中断源 jnz L FIQ TimerA 是 则转 r1 0 x0800 test r1 P INT Ctrl 否则 判断是不是 FIQ TMB 中断源 jnz L FIQ TimerB 是 则转 L FIQ PWM r1 C FIQ PWM P INT Clear r1 清除 P INT Clear 单元 POP R1 R4 from sp reti L FIQ TimerA P INT Clear r1 call F FIQ Service SACM S480 调用函数 完成播放 pop r1 r4 from sp reti L FIQ TimerB P INT Clear r1 pop r1 r4 from sp reti 第二章第二章 SPCE061ASPCE061A 设计型实验设计型实验 实验一实验一 定时器定时器 Timer A B 实验实验 一 实验目的一 实验目的 通过实验了解定时器 Timer A B 的结构及使用方法 掌握预置数单元 P TimerA B Data 和定时控制单元 P TimerA B Ctrl 的设置方法 熟悉定时器 Timer A B 的编程方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 示波器一台 三 实验原理三 实验原理 Timer A 和 Timer B 定时器启动后 在预置数单元 P TimerA Data 或 P TimerB Data 内置入一个计数初值 N 后 定时器 计数器会在选择的时钟源频 率下开始向计数增加的方向计数 N 1 N 2 FFFEH 当计数到 FFFFH 后 定时器 计数器溢出 一方面 产生一个中断请求信号 TA TimeOut INT 或 TB TimeOut INT 被 CPU 响应后执行相应的中断服务程序 与此同时 计数初值 N 会被自动重 新置入定时器 计数器内 并重复上述加计数的过程 另一方面 该溢出信号会作为脉宽调制输出计数器的时钟源输入 使其输 出一个具有四位可调的脉宽调制占空比输出信号 APWMO 或 BPWMO 其中 IOB8 IOB9 分别为 APWM BPWM 的输出端 IOB8 接一个发光二极管 同 时接示波器 可以通过观察二极管亮灭的快慢来对比频率的变化 通过示波器 观察信号的频率 如果示波器测量到的频率为 P 则 f 16 P f 即为 CLK Source 时钟基准 四 实验步骤四 实验步骤 1 根据实验内容连接硬件电路并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 通过示波器观察输出频率并记录比较是否与实际相符 五 程序流程图五 程序流程图 开始 初始化IOB8为 低电平 输出 APWMO端口 设置计数器TimerA初值 时钟源频率设定 程序进入死循环 实验二实验二 系统时钟实验系统时钟实验 一 实验目的一 实验目的 了解 SPCE061 PLL 振荡器的功能及其应用 掌握系统时钟单元 P SystemClock 的设置方法 熟悉系统时钟和 CPU 时钟频率的编程方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 示波器一台 三 实验原理三 实验原理 在 SPCE061A 内 P SystemClock 写 7013H 单元控制着系统时钟和 CPU 时钟 通过设置该单元的 B5 B7 位可以改变系统时钟的频率 Fosc 20 24 32 40 49MHz 将第 0 2 位置为 111 可以使 CPU 时钟停止工作 系统切换至低功耗的备用状态 在备用状态下 通过设置该单元的 B4 位可以 接通或关闭 32KHz 实时时钟 而且通过设置该单元的 B3 位可以使 32768Hz 时 钟处自动弱振或强振状态 本实验通过选择不同 Fosc 信号频率或改变 CPUClk 频率来观察发光二极管亮灭的快慢 四 实验步骤四 实验步骤 1 根据实验内容连接硬件电路并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 观察 LED 亮灭的快慢 并通过示波器观察波形 五 硬件连接图五 硬件连接图 六 程序流程图六 程序流程图 实验三实验三 FIQ 中断实验中断实验 一 实验目的一 实验目的 了解 FIQ 的中断向量和中断源 掌握中断控制单元 P INT Ctrl P INT Clear 的 设置方法 熟悉中断的编程方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 三 实验原理三 实验原理 FIQ 中断对应 PWM TMA TMB 中断源 通过写 P INT Ctrl 来设置中 断允许 FIQ TMA FIQ TMB 中断源分别是通过定时器 A 定时器 B 产生的 当计满溢出时产生中断请求信号 TA TIMEOUT INT 或 TA TIMEOUT INT CPU 响应后进入中断执行相应的子程序 中断程序里可以 通过读取 P INT Ctrl 单元 判断是哪个中断源 并进入相应的子程序控制发光二 极管点亮 四 实验步骤四 实验步骤 1 根据实验内容自行设计 连接硬件电路并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 观察 LED 各个寄存器状态等 五 程序流程图五 程序流程图 主程序流程图 FIQ 中断服务子程序流程图 实验四实验四 键唤醒键唤醒实验实验 一 实验目的一 实验目的 了解 SPCE061 睡眠和唤醒的结构原理 熟悉 SPCE061 睡眠和唤醒的编程 方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 三 实验原理三 实验原理 系统正常运行时点亮 8 个 LED 按 KEY1 系统接收到睡眠信号时 关闭 系统时钟 PLL 振荡器 进入睡眠状态 8 个 LED 全部熄灭 系统睡眠指示灯 黄色 LED 被点亮 按任意键 收到唤醒信号后接通系统时钟 PLL 振荡器 同时 CPU 会响应唤醒事件的处理并进行初始化 这时 8 个 LED 被循环熄灭 四 硬件连接图四 硬件连接图 五 实验步骤五 实验步骤 1 根据硬件连接图连接硬件并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 观察 LED 各个寄存器状态 六 程序流程图六 程序流程图 实验五实验五 A D 转换转换实验实验 一 实验目的一 实验目的 了解 ADC 输入接口的结构与转换原理 熟悉模拟量输入口 LINE IN1 LINE IN7 的使用 掌握 P ADC P ADC CTRL 单元的设置方法 二 实验设备二 实验设备 装有 nSP IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一 个 三 实验原理三 实验原理 ADC 工作方式分手动和自动两种 当 ADC 工作在自动方式下 1 外部信 号由 LIN IN 1 7 即 IOA 0 6 输入并直接被送入缓冲器 P ADC MUX Data 702BH 在 ADC 自动方式被启用后 会产生出一个启动 信号 即 RDY 0 此时 DAC0 的电压模拟量输出值与外部的电压模拟量输入 值进行比较 以尽快找出外部电压模拟量的数字量输出值 A D 转换的结果保 存在 SAR 内 2 当 10 位 A D 转换完成时 RDY 会被置 1 此时 用户通 过读取 P ADC MUX Data 702BH 单元可以获得 10 位 A D 转换的数据 而从 该单元读取数据后 又会使 RDY 自动清 0 来重新开始进行 A D 转换 本实验通过改变 LINE IN 端口的模拟电压来改变 IOB 口输出的数据 采用 自动方式即定时器 A 溢出执行 ADC 转换 可以通过发光二极管的点亮了解转 换的数据值 四 实验步骤四 实验步骤 1 根据实验内容连接硬件电路并检查 2 画流程图并编写程序代码 3 编译程序 软件调试 4 通过改变输入电压 来观察发光二极管的亮灭 五 硬件连接图五 硬件连接图 六 程序流程图六 程序流程图 实验六实验六 双通道双通道 D A 实验实验 一 实验目的一 实验目的 了解音频输出接口的结构与转换原理 掌握 P DAC2 P DAC1 P DAC CTRL 单元的设置方法 二 实验设备二 实验设备 装有 u nsp IDE 仿真环境的 PC 机一台 nSP 十六位单片机实验箱一个 示波器一台 三 实验原理三 实验原理 SPCE061A 提供的音频输出方式为双 DAC 方式 在此方式下 DAC1 DAC2 转换输出的模拟量电流信号分别通过 AUD1 和 AUD2 管脚输出 输入的数字量分别写入 P DAC1 写 7017 和 P DAC2 写 7016 单元 DAC 工作可以直接将 DAR 的数据锁存到 DAC 中 也可以采用定时中断的 方法 即定时器溢出时响应中断 在中断中写输入数据到 P DAC 中 本实验 采取直接方式 通过编程实现一个锯齿波 将实验板的两通道 DAC 输出分别 接示波器 CHI CH2 可以观察到锯齿波形 同时也可以听到 AUD1 和 ADU2 两 端的扬声器有持续间断的声音 四 实验步骤四 实验步骤 1 根据实验内容连接硬件电路并检查 2 画流程图并编写程序代码 3 编程实现 D A 转换功能 4 编译程序 软件调试 通过 DAC1 和 DAC2 来播放语音 同时观察示 波器输出波形 五 程序流程图五 程序流程图 开始 关中断 设置控制字 P DAC Ctrl r3 0 x040 r1中的数据输出 调用延时字程序 r1 r3 实验七实验七 片内片内 2K SRAM 和和 32K 闪存读写闪存读写 一 实验目的一 实验目的 通过实验了解 SPCE061 2K SRAM 和 32K 闪存的读写原理 熟悉 SPCE061 2K SRAM 和 32K 闪存的读写编程方法 二

温馨提示

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

评论

0/150

提交评论