实验指导书(上).pdf_第1页
实验指导书(上).pdf_第2页
实验指导书(上).pdf_第3页
实验指导书(上).pdf_第4页
实验指导书(上).pdf_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

6-实验指导书 1 前前 言言. 7 第一章第一章 SPCE061A 基础应用实验基础应用实验. 8 实验一 熟悉 nSP IDE 环境下的汇编程序的编写. 8 【实验目的】. 8 【实验设备】. 8 【实验步骤】. 8 【程序流程图】. 8 【程序范例】. 8 【程序练习】. 9 实验二 熟悉 nSP IDE 环境下的 C 语言的编写 10 【实验目的】. 10 【实验设备】. 10 【实验步骤】. 10 【程序范例】. 10 【程序练习】. 10 实验三 使用汇编语言实现 A 口的输出实验11 【实验目的】11 【实验设备】11 【实验原理】11 【实验步骤】11 【硬件连接图】11 【程序范例】. 12 实验四 使用 C 语言实现 A 口的输出实验 14 【实验目的】. 14 【实验设备】. 14 【实验原理】. 14 【实验步骤】. 14 【硬件连接图】. 14 【程序范例】. 14 【程序练习】. 15 实验五 使用汇编语言实现 A 口为输入 B 口为输出实验. 16 【实验目的】. 16 【实验设备】. 16 【实验原理】. 16 【硬件连接图】. 16 【实验步骤】. 16 【程序流程图】. 16 【程序范例】. 17 【程序练习】. 18 实验六 使用 C 语言实现 A 口为输入 B 口为输出实验 19 【实验目的】. 19 【实验设备】. 19 【实验原理】. 19 6-实验指导书 2 【硬件连接图】. 19 【实验步骤】. 19 【程序流程图】. 19 【程序范例】. 20 【程序练习】. 21 实验七 定时器 Timer A/B 实验. 22 【实验目的】. 22 【实验设备】. 22 【实验原理】. 22 【实验步骤】. 22 【程序流程图】. 22 【程序范例】. 22 【程序练习】. 24 实验八 系统时钟实验 25 【实验目的】. 25 【实验设备】. 25 【实验原理】. 25 【实验步骤】. 25 【硬件连接图】. 25 【程序流程图】. 26 【程序范例】. 26 实验九 FIQ 中断实验 28 【实验目的】. 28 【实验设备】. 28 【实验原理】. 28 【实验步骤】. 28 【程序流程图】. 28 【程序范例】. 29 实验十 IRQ0/IRQ1/IRQ2 中断实验 32 【实验目的】. 32 【实验设备】. 32 【实验原理】. 32 【实验步骤】. 32 【程序流程图】. 32 【程序范例】. 32 实验十一 IRQ4 中断实验. 35 【实验目的】. 35 【实验设备】. 35 【实验原理】. 35 【实验步骤】. 35 【程序范例】. 36 实验十二 IRQ5 中断实验. 40 【实验目的】. 40 【实验设备】. 40 6-实验指导书 3 【实验原理】. 40 【实验步骤】. 40 【程序流程图】. 41 【程序范例】. 41 实验十三 IRQ6 中断实验 44 【实验目的】. 44 【实验设备】. 44 【实验原理】. 44 【实验步骤】. 44 【程序流程图】. 45 【程序范例】. 45 实验十四 外部中断 EXT1,EXT2 实验 . 49 【实验目的】. 49 【实验设备】. 49 【实验原理】. 49 【实验步骤】. 49 【硬件连接图】. 49 【程序流程图】. 50 【程序范例】. 50 实验十五 键唤醒 53 【实验目的】. 53 【实验设备】. 53 【实验原理】. 53 【硬件连接图】. 53 【实验步骤】. 53 【程序流程图】. 54 【程序范例】. 54 【程序练习】. 56 实验十六 UART 实验 57 【实验目的】. 57 【实验设备】. 57 【实验原理】. 57 【实验步骤】. 57 【程序流程图】. 58 【程序范例】. 58 【程序练习】. 60 实验十七 A/D 转换 61 【实验目的】. 61 【实验设备】. 61 【实验原理】. 61 【实验步骤】. 61 【硬件连接图】. 61 【程序流程图】. 62 【程序范例】. 62 6-实验指导书 4 【程序练习】. 63 实验十八 双通道 D/A. 64 【实验目的】. 64 【实验设备】. 64 【实验原理】. 64 【实验步骤】. 64 【程序流程图】. 64 【程序范例】. 64 【程序练习】. 65 实验十九 一路输入的录音 66 【实验目的】. 66 【实验设备】. 66 【实验原理】. 66 【实验步骤】. 66 【程序范例】. 66 实验二十 片内 2K SRAM 读写. 68 【实验目的】. 68 【实验设备】. 68 【实验原理】. 68 【硬件连接图】. 68 【实验步骤】. 68 【程序流程图】. 68 【程序范例】. 69 实验二十一 32K Flash 读/写 71 【实验目的】. 72 【实验设备】. 72 【实验原理】. 72 【硬件连接图】. 72 【实验步骤】. 72 【程序范例】. 72 实验二十二 低电压检测实验 75 【实验目的】. 75 【实验设备】. 75 【实验原理】. 75 【硬件连接图】. 75 【实验步骤】. 75 【程序流程图】. 76 【程序范例】. 77 实验二十三 实验 LVR 实验 79 【实验目的】. 79 【实验设备】. 79 【实验原理】. 79 【实验步骤】. 79 【程序范例】. 79 6-实验指导书 5 第二章第二章 语音实验部分语音实验部分. 81 常见的几种音频压缩算法 81 凌阳音频压缩编码 81 音频压缩技术之趋势 81 语音压缩方法 82 实验一 SACM-A2000. 84 【实验目的】. 84 【实验设备】. 84 【实验原理】. 84 【实验步骤】. 84 【程序流程图】. 84 【程序范例】. 86 实验二 SACM-480 . 89 【实验目的】. 89 【实验设备】. 89 【实验原理】. 89 【实验步骤】. 89 【程序流程图】. 89 【程序范例】. 90 实验三 SACM-240 . 92 【实验目的】. 92 【实验设备】. 92 【实验原理】. 92 【实验步骤】. 92 【程序流程图】. 92 【程序范例】. 93 实验四 SACM_MS01 实验 95 【实验目的】. 95 【实验设备】. 95 【实验原理】. 95 【实验步骤】. 95 【硬件连接图】. 95 【程序流程图】. 96 【程序范例】. 97 实验五 SACM_A2000 与 S480/S720 混合实验 102 【实验目的】. 102 【实验设备】. 102 【实验原理】. 102 【实验步骤】. 102 【硬件连接图】. 102 【程序流程图】. 103 【程序范例】. 104 实验六 SACM-DVR. 109 6-实验指导书 6 【实验目的】. 109 【实验设备】. 109 【实验原理】. 109 【实验步骤】. 109 【硬件连接图】. 109 【程序范例】110 前前 言言 本教材是结合nSP系列 SPCE061A 单片机基础与应用技术一书而设计实验,与课堂教学 内容结合紧密。比如实验 14,内容浅显易懂,并附有例子程序,让读者们能尽快了解,并掌握凌 阳单片机的语法结构和基本编程方法。通过由浅入深的一系列训练,可以使读者全面了解并掌握凌 阳 nSP系列单片机的各个功能模块的实现方法,突出地了解 nSP系列单片机在广泛应用实例 中的优势。 本书共分三章,内容如下: 第一章 SPCE061A 基础实验,共有 23 个实验。 第二章 语音实验,共有 6 个实验。 第三章 综合应用实验,共有 8 个实验。 本书语音实验和综合应用实验中的每一个例子都有一定的代表性,也有一定的深度,建议读者 从基础实验学起。本书中的所有实验均以 nSP十六位单片机实验箱为实验设备。 本书所附的光盘中的所有源程序代码,都是经过调试,并可直接运行。读者在学习的时候,可 以直接使用它来调试、验证程序,以达到节省时间、快速入门的目的;另外,本书中一些例子的程 序代码具有一定的实际应用价值,读者只要稍作修改,就可直接引用。 由于编者水平有限,编写时间仓促,书中错漏在所难免,敬请读者及专家赐正。 北阳电子 应用推广部 二零零二年八月 6-实验指导书 8 第一章第一章 SPCE061A 基础应用实验基础应用实验 实验一实验一 熟悉熟悉 nSP IDE 环境下的汇编程序的编写环境下的汇编程序的编写 【实验目的】【实验目的】 1)熟悉 nSP IDE 环境及在该环境下用汇编语言编写的应用程序。 2)熟悉简单的 nSP汇编语言指令。 【实验设备】【实验设备】 装有 WINDOWS 系统和 nSP IDE 仿真环境的 PC 机一台。 【实验步骤】【实验步骤】 1)将 nSP IDE 打开后,建立一个新工程。 2)在该项目的源文件夹(SOURCE FILES)下建立一个新的汇编语言文件。 3)编写汇编代码。 4)编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态,等等。 【程序流程图】【程序流程图】 主程序流程图: 寄存器赋值 r1=0x0001 r2=0x0000 r2+=r1 r1+=1 r1100吗? R_Sum=r2 程序进入死循环 开始 N Y 【程序范例】【程序范例】 /=/ / Program: 计算 1 to 100 累加值 / Output: sum = 5050(十进制) 或 13BA(十六进制) /=/ .RAM / 定义预定义 RAM 段 .var R_Sum; / 定义变量 6-实验指导书 9 .CODE /定义代码段 .public _main; / 对 main 程序段声明 _main: r1 = 0x0001; / r1=1100 r2 = 0x0000; / 寄存器清零 L_SumLoop: r2 += r1; / 累计值存到寄存器 r2 r1 += 1; / 下一个数值 cmp r1,100; / 加到 100 否 jna L_SumLoop; / 如果 r1 S240 凌阳音频压缩编码凌阳音频压缩编码 1)波形编码:sub-band即SACM-A2000 特点:高质量、高码率,适于高保真语音音乐。 2)参数编码:声码器(vocoder)模型表达,抽取参数激励信号进行编码。线性预测编码(LPC)即 SACM-S240 特点:压缩比大,计算量大,音质不高,廉价! 3)混合编码:CELP即SACM-S480 特点:综合参数和波形编码之优点。 除此之外,还具有FM音乐合成方式即SACM-MS01 音频压缩技术之趋势音频压缩技术之趋势 1)降低资料率,提高压缩比,用于廉价、低保真场合(如:电话) 。 实验指导书 8- 82 2)追求高保真度,复杂的压缩技术(如:CD) 语音压缩方法语音压缩方法 语音压缩分DOS和WINDOWS两种: (一)DOS下的压缩: A2000: 1) 用PC机录制一个wav语音文件 2) 用cool edit pro软件转换成8k16位的文件 3) 用A2000压缩生成16k(或20k,24k)压缩率的文件 4) 在ms-dos下: e:sacm2000.exe 16 *.wav *.out *.16k 或 (e:sacm2000.exe 20 *.wav *.out *.20k e:sacm2000.exe 24 *.wav *.out *.24k) S480: 1) 用PC机的录音机录制语音文件生成8K16位的WAV文件 2) 用s480压缩生成4.8k(或7.2k)压缩率的文件 3) 在ms-dos下: e:sacm.exe *.wav *.48k *.out s48 或(e:sacm.exe *.wav *.72k *.out s72) 下图是凌阳音频压缩编码 (SACM)方法的流程: 将需要压缩的WAV文 件转换成8K16位 执行 SACM2000.EXE 进行压缩 (SACM_2000) 执行SACF.EXE, 用音乐编辑器编 辑(SACM_MS01) 文本编辑 生成*.bin文 件 *16K,20K,24K 的压缩文件 *.WAV文件用 作试听 执行 SACM.EXE进行 压缩 (SACM_480) 执行 SACM240.EXE进 行压缩 (SACM_240) 16k/20k/24kbps *.WAV文件用 作试听 *.48k,*.72K 的压缩文件 4.8k/7.2kbps 2.4kbps 应用 *16K,20K, 24K的压缩文 件 应用 听 试 比 对 应用 应用 对比试听 (二)WINDOWS下的压缩: 如下图所示,可以选择一个或多个wav文件进行压缩,具体步骤可根据提示来操作 实验指导书 8- 83 实验指导书 8- 84 实验一实验一 SACM-A2000 【实验目的】【实验目的】 1)了解凌阳单片机以SACM_A2000语音格式播放及程序的编写方法。 2)了解凌阳音频编码算法库(SACM_Lib)。 3)了解SACM_A2000的语音文件。 【实验设备】【实验设备】 1)装有unsp IDE仿真环境的PC机一台。 2)nSP十六位单片机实验箱一个。 【实验原理】【实验原理】 将PCM音频格式的8K16位WAV文件经SACMA2000算法压缩后变为SUB-BAND的音频格式, 压缩前为:*.wav ,8k/16bit;压缩后为:*.16k/*.20k/*.24k,并生成*.out文件用于对比试听( pc-play), 即在PC机上试听*.out文件并和实验板上的扬声器的声音进行对比。由于它的压缩比较小(8:1)所以 具有高质量、高码率的特点适用于高保真语音和音乐。 【实验步骤】【实验步骤】 1)用PC机录制一个wav语音文件。 2)用Windows压缩工具将该wav文件压缩为16k(或20k,24k)的文件。 3)将nSP IDE打开后,建立一个新工程。 4)添加SACM_A2000的语音文件到程序中的资源文件夹(resource)下。 5)添加、编写程序代码。 6)编译程序,观察结果。 【程序流程图】【程序流程图】 主程序流程图: SACM_A2000放音的 初始化 SACM_A2000_Initi al(Auto) SACM_A2000压缩播放 SACM_A2000_Play(SPEECH_1 ,DAC1,Ramp_UpDn_On) 获取语音数据并解 码等待中断播放 SACM_A2000_Servi ceLoop() 实验指导书 8- 85 A2000手动方式主程序流程图: SACM_A2000_InitDecoder (DAC1) 获取语音资源 SP_GetResource(Addr) 并填充语音队列 SACM_A2000_FillQueue(Ret) 修改地址Addr+ 解码并通过中断中的 F_FIQ_Service_SACM _A2000函数获取数据 并播放 判断语音队列 是否满? SACM_A2000_TestQu eue() 判断是否到 语音的结束地址 RES_WW_24K_EA 放音结束 SACM_A2000_St op() 是 否 是 否 结束 开始 实验指导书 8- 86 中断服务子程序: 寄存器组入 栈保护 FIQ是 TimerA中断 吗? FIQ是 TimerB中断 吗? 转至FIQ_PWM中 断服务处理子 程序 寄存器组出 栈 中断返回 调用 F_FIQ_Service_SAC M_A2000函数 清中断状态 否 否 是 清中断状态 是 中断返回中断返回 寄存器组出 栈 寄存器组出 栈 清中断状态 【程序范例】【程序范例】 /* / Note: A2000有两种播放方式,即自动方式和非自动方式,我们可以通 /过改变Mode的值来切换这两种方式:当Mode=0时以非自动方式播放, /当Mode=1时,以自动方式播放。 /* #define SPEECH_1 0 #define DAC1 1 实验指导书 8- 87 #define DAC2 2 #define Ramp_UpDn_Off 0 #define Ramp_Up_On 1 #define Ramp_Dn_On 2 #define Ramp_UpDn_On 3 #define Manual 0 #define Auto 1 #define Full 1 #define Empty 2 #define Mode 1 #include “A2000.h“ main() extern long RES_HH_24K_SA,RES_HH_24K_EA; /定义语音资源的首末地址标号 long int Addr; /定义地址变量 int Ret = 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); 实验指导书 8- 88 SACM_A2000_FillQueue(Ret); Addr+; if(Addr MaxVolume) VolumeIndex = MaxVolume; SACM_MS01_Volume(VolumeIndex); break; case 0x20: / 音量减小 if(VolumeIndex = 0) VolumeIndex = 0; else VolumeIndex-; SACM_MS01_Volume(VolumeIndex); break; case 0x40: /播放下一首 if( +SongIndex = MaxSongNum) SongIndex = 0; SACM_MS01_Play(SongIndex, DAC1+DAC2, Ramp_UpDn_On); break; case 0x80: /播放前一首 SACM_MS01_ChannelOff(0); SACM_MS01_ChannelOn(1); 实验指导书 8- 99 SACM_MS01_ChannelOn(2); SACM_MS01_ChannelOff(3); SACM_MS01_ChannelOff(4); SACM_MS01_ChannelOff(5); SACM_MS01_SetInstrument(2,Instrument,0); /f(channel, instrument,song command on/off) if(+Instrument Inst_Max_Num) Instrument=0; SACM_MS01_SetInstrument(1,Drum,1); /f(channel, instrument,song command on/off) if(+Drum Drum_Max_Num) Drum=0; /if( -SongIndex Max_Volume) Volume_A2000 = Max_Volume; SACM_A2000_Volume(Volume_A2000); break; case S480_720: /S480放音 Volume_S480+; if(Volume_S480 Max_Volume) Volume_S480 = Max_Volume; SACM_S480_Volume(Volume_S480); break; break; case 0x20: switch(SpeechType) case A2000: /A2000类型的播放 if(Volume_A2000 Min_Volume) Volume_A2000-; SACM_A2000_Volume(Volume_A2000); break; case S480_720: /S480类型的播放 if(Volume_S480 Min_Volume) Volume_S480-; SACM_S480_Volume(Volume_S480); break; break; case 0x40: / 播放下一首 case 0x80: / 播放前一首 default: break; Ret = System_ServiceLoop(); /调用键扫描服务循环函数 switch(SpeechType) 实验指导书 8- 107 case A2000: SACM_A2000_ServiceLoop(); / A2000的自动播放与停止 break; case S480_720: SACM_S480_ServiceLoop(); / S480的自动播放与停止 break; return 0; 系统文件(system.asm): /* / Function: System commander / Service for H/W, keyboard scan / Input: None / Output: None / Functions: / (In Assembly view) / call F_System_Initial; / (In C language view) / System_Initial(); /* .include resource.inc; .include hardware.inc; .include key.inc; .public R_SpeechType; .RAM .var R_SpeechType; .external R_Flag_A2000; .external R_Flag_S480; .CODE .public _Set_SpeechType; .public F_Set_SpeechType; F_Set_SpeechType: _Set_SpeechType: .PROC push BP,BP to SP; BP = SP + 1; r1 = BP+3; R_SpeechType = r1; pop BP,BP from SP; 实验指导书 8- 108 retf; .ENDP .public _System_Initial; .public F_System_Initial; _System_Initial: .PROC F_System_Initial: push BP,BP to SP; / 寄存器入栈保护 call F_Key_Scan_Initial; / 键盘扫描 / Add other general initialization here /BP = SP + 1; /r1 = BP+3; call F_User_Init_IO; /r1 =0x0001; /返回值 pop BP,BP from SP; retf; .ENDP; /* / Function: Main Loop of system / Input: None / Output: None / Using: / call F_System_ServiceLoop; (in assembly domain) / System_ServiceLoop(); (in C domain) /* .public _System_ServiceLoop; .public F_System_ServiceLoop; _System_ServiceLoop: .PROC F_System_ServiceLoop: call F_Key_DebounceCnt_Down; / 去抖 call F_Key_Scan_ServiceLoop; /调用键盘扫描子程序 /call F_Key_Scan_ServiceLoop_2; / 调用键扫描子程序2 R1=0x0001; / 清除看门狗 P_Watchdog_Clear=R1; retf; .ENDP; 实验指导书 8- 109 实验六实验六 SACM-DVR 【实验目的】【实验目的】 1)通过实验了解凌阳单片机对语音的录制,压缩和播放的功能及过程。 2)学会编程并会扩展SRAM。 【实验设备】【实验设备】 1)装有unsp IDE仿真环境的PC机一台。 2)nSP十六位单片机实验箱一个。 【实验原理】【实验原理】 SACM-DVR具有录音和放音功能,并采用A2000的算法,录音时采用16K数据率及8K采样率获取 语音资源,经过A2000压缩后存储在扩展的SRAM 628128A里,录音32秒后完毕,并自动开始放 音。 【实验步骤】【实验步骤】 1)连接硬件线路。 2)编写程序。 3)编译程序、调试程序。 4)执行程序后开始录音,并在32秒后开始放音。 【硬件连接图】【硬件连接图】 A15 31 A14 3 A13 28 A12 4 A11 25 A10 23 A9 26 A8 27 A7 5 A6 6 A5 7 A4 8 A3 9 A2 10 A1 11 A0 12 D0 13 D1 14 D2 15 D3 17 D4 18 D5 19 D6 20 D7 21 CS1 22 CS2 30 OE 24 WE 29 A16 2 628128A IOB0 IOB1 IOB2 IOB3 IOB4 IOB5 IOB6 IOB7 IOB8 IOB9 IOB10 IOB11 IOB12 IOB13 IOB14 VSS IOB15 IOA8 IOA9 IOA1 IOA1 IOA1 IOA1 IOA1 IOA1 IOA6 VDD IOA5 IOA4 实验指导书 8- 110 手动方式主程序流程图: 获取语音队列状态 SACM_DVR_TestQueue() empty? 手动方式 初始化SACM_DVR_Initial (Manual) 采用A2000对语音编码 SACM_DVR_InitEncode r(RceMonitorOn) 判断存储语音 的地址是否超出 Sram大小 结束 开始 停止录音 SACM_DVR_Stop Encoder() DVR放音 初始化 SACM_DVR_Init ial(Manual) SRAM读初始化 InitReadSRAM() SACM_DVR_Init Decoder(DAC1) SACM_DVR_ TestQueue()函数 判断是否满? 是否播放完毕? 放音完毕 SACM_DVR_Stop Decoder() 通过函数 SACM_DVR_Decode ()解码 并通过中断服务子程序 F_FIQ_Service_SACM_DVR送 入DAC通道播放 SRAM写初始化 InitWriteSRAM() 获取数据并编码 SACM_DVR_Encode () SACM_DVR_Fetc hQueue()从队 列中获取数据 写数据到SRAME WriteSRAM(Addr, Ret) 修改地址Addr+=2 Addr+=2; 两个8位SRAM存储 一个16位数 是 是 否 是 否 否 【程序范例】【程序范例】 主程序(MAIN.C) /* / Note: DVR有两种录放音方式,即自动方式和非自动方式,我们可以通 /过改变Mode的值来切换这两种方式:当Mode=0时以非自动方式录放音, 实验指导书 8- 111 /当Mode=1时,以自动方式录放音,而且中断中分别用FIQ中断实现语音的 /播放,用IRQ1中断实现语音的录制。这里我们用非自动方式: /* #define Manual 0 #define Auto 1 #define SRAM_Size 0xffff-2 #define Stop 0 #define Record 1 #define Play 2 #define RceMon

温馨提示

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

评论

0/150

提交评论