SPCE061A单片机实验指导书
电子工程系
SPCE061A单片机实验指导书
编写说明
本实验指导书是针对“单片机原理及其接口技术”课程实验教学大纲编写的,其中的所有实验是在凌阳十六位单片机SPCE061A实验板(61板)的基础上进行,由于该实验板采用了开放式的设计方法,除语音部分(麦克风和放音喇叭及其驱动电路部分)已设计在实验板上外,所由其它资源全部留给用户自由使用,对于开设设计性、综合性实验提供了必要的空间。本实验指导书共包括10个实验,其中所有实验均为设计性、综合性实验。在实验指导书中只给出实验要求,并提供相关的实验板和相应的元器件,要求同学根据实验要求,设计出满足实验要求的实验原理、硬件电路设计,实际连线,编写相关程序、调试,并对实验结果进行记录、分析。
目录
实验一SPCE061A开发环境实验
实验二 普通IO口实验
实验三 定时/计数器实验
实验四 系统时钟实验
实验五 FIQ中断实验
实验六 信号发生器实验
实验七 A/D转换实验
实验八 七段数码LED显示实验
实验九 录放音实验
实验十 键扫描显示程序
实验一 SPCE061A开发环境实验
【实验目的】
1)熟悉?’nSP?IDE 环境及在该环境下用汇编语言和C语言编写的应用程序。2)熟悉简单的?’nSP?汇编语言指令和C语言程序的编写方法。
【实验设备】
1)装有WINDOWS系统和?’nSP?IDE 仿真环境的PC机一台。
2)?’nSP?十六位单片机61开发板一个【实验步骤】
1)将?’nSP?IDE 打开后,建立一个新工程。
2)在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。3)编写汇编代码。
4)编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态 【程序范例1】
//===============================================================//// Program: 计算1to 100 累加值
//Output: [sum] = 5050(十进制)或13BA(十六进制)
//===============================================================//.RAM // 定义预定义RAM段
.varR_Sum; // 定义变量
.CODE//定义代码段
.public_main; // 对main程序段声明
_main:r1 = 0x0001; // r1=[1..100]
r2= 0x0000; // 寄存器清零
L_SumLoop:
r2 += r1; // 累计值存到寄存器r2
r1 += 1; // 下一个数值
cmpr1,100; // 加到100否
jnaL_SumLoop; // 如果r1<= 100 跳到L_SumLoop [R_Sum]= r2; // 在R_Sum中保存最终结果
L_ProgramEndLoop: // 程序死循环
jmpL_ProgramEndLoop;
【程序范例】
//===============================================================//
//Program: 计算1to 100 累加值
//Output: [sum] = 5050(十进制)或13BA(十六进制)
//===============================================================//
intmain()
{
inti, Sum=0;
for(i=0;i<=100;i++)
Sum= Sum + i; // Sum 是累加的结果
while(1){}; // 程序死循环
//用变量Watch窗口看Sum的值
}
【程序练习】在?’nSP?IDE下用汇编语言使用冒泡法编写一个排序程序。【选做程序练习】在?’nSP?IDE下用C语言使用冒泡法编写一个排序程序
实验二 普通IO口实验
【实验目的】
1)通过实验了解A口作为输入、B口为输出口时的使用方法。
2)使用汇编语言来实现A口作为输入、B口为输出口的方法。
【实验设备】
1)装有WINDOWS系统和?’nSP?IDE 仿真环境的PC机一台。
2)SPCE061A十六位单片机61开发板一个、发光二极管八个,按键八个,面包板一块。
【实验要求】
设计一个用4个按键控制4个发光二极管的实验,要求当该按键按下后,改变发光二极管工作状态(亮/灭)。
【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序) 2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验三 定时/计数器实验
【实验目的】
1)通过实验了解定时器TimerA/B的结构及使用方法。
2)掌握预置数单元P_TimerA/B_Data和定时控制单元P_TimerA/B_Ctrl的设置方法。3)熟悉定时器TimerA/B的编程方法。
【实验设备】
1)装有?’nSP?IDE仿真环境的PC机一台。
2) ?’nSP?十六位单片机61板一个、面包板一块、发光二极管一个。
3)示波器一台。
4)如有特殊要求可向实验教师提出。
【实验要求】:
设计一种实验方法,说明如何利用TimerA/B进行定时/计数,要求实验具有可观测性 【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序)
2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验四系统时钟实验
【实验目的】
1)了解SPCE061PLL 振荡器的功能及其应用。
2)掌握系统时钟单元P_SystemClock的设置方法。
3)熟悉系统时钟和CPU时钟频率的编程方法。
【实验设备】
1)装有?’nSP?IDE仿真环境的PC机一台。
2)?’nSP?十六位单片机实验箱一个、面包板一块,发光二极管一个。
3)示波器一台。
【实验要求】
设计一个实验方法,说明如何改变系统时钟和CPU的时钟频率,要求实验具有可观测性【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序)
2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验五 FIQ中断实验
【实验目的】
1)了解FIQ的中断向量和中断源。
2)掌握中断控制单元P_INT_Ctrl,P_INT_Clear的设置方法。
3)熟悉中断的编程方法。
【实验设备】
1)装有?’nSP?IDE 仿真环境的PC机一台。
2)?’nSP?十六位单片机61板一个,面包板一块、发光二极管2个。
3)示波器一台。
【实验要求】
设计一个实验方法,说明如何利用SPCE061A的FIQ中断实现定时。要求所设计的实验具有可观测性。
【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序) 2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验六 信号发生器实验
【实验目的】
1)了解音频输出接口的结构与转换原理。
2)掌握P_DAC2、P_DAC1、P_DAC_CTRL单元的设置方法。
【实验设备】
1)装有u’nspIDE 仿真环境的PC机一台。
2)?’nSP?十六位单片机实验箱一个。
3)示波器一台。
【实验要求】
设计一个实验方法,利用SPCE061A单片机输出一种交变信号,要求所设计的实验具有可观测性。
【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序) 2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验七 A/D转换实验
【实验目的】
1)了解ADC输入接口的结构与转换原理
2)熟悉模拟量输入口LINE_IN1—LINE_IN7的使用
3)掌握P_ADC、P_ADC_CTRL单元的设置方法
【实验设备】
1)装有?’nSP?IDE仿真环境的PC机一台
2) ?’nSP?十六位单片机实验板一个,面包板一块,可调电位器一个,万用表一块。
3)示波器一台
【实验要求】
设计一个实验方法,利用SPCE061A单片机对外部交变信号进行采集,要求所设计的实验具有可观测性。
【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序) 2)实验步骤;
3)实验过程记录、分析;
(其中前两项要求在实验前完成)
实验八 七段数码LED显示实验
【实验目的】
1)通过实验了解七段数码LED显示器在单片机系统中的使用方法。
2)使用汇编语言实现LED显示的编程方法。
【实验设备】
1)装有WINDOWS系统和?’nSP?IDE 仿真环境的PC机一台。
2)?’nSP?十六位单片机61开发板一个、七段数码LED块两个,面包板一块。
【实验要求】
设计一个实验,用IO端口控制七段数码显示块显示数字(0~9)【实验报告内容】
1)实验原理;(包括实验电路原理图、程序流程及源程序) 2)实验验步骤;
3)实验过程记录、分析。
(其中前两项要求在实验前完成)
实验九 放音实验
【实验目的】
1)了解语音压缩和播放功能并学会编程
2)了解凌阳音频编码算法库(SACM_Lib)。
3)了解SACM_s480的语音文件。
【实验设备】
1)装有u’nspIDE仿真环境的PC机一台
2)?’nSP?十六位单片机61开发板一个
【实验要求】
1)分析下列程序,画出流程图
2)用所给的Windows压缩工具将一个wav文件压缩生成4.8k(或7.2k)的文件。 3)将?’nSP?IDE打开后,建立一个新工程。
4)将下列程序录入
5)添加SACM_S480的语音文件到程序中的资源文件夹(resource)下。
5)编写程序代码。
6)编译程序,观察结果,如有错误添加相应代码,并进行调试。
主程序(MAIN.ASM)
//***********************************************************
//Note: s480只有自动播放方式,在中断FIQ的FIQ_TMA中断源中通过
//主程序的SACM_S480_ServiceLoop()对语音数据进行解码,然后将其
//送入DAC通道播放
//*************************************************************
#defineSPEECH_1 2
#defineDAC1 1
#defineDAC2 2
#defineRamp_UpDn_Off 0
#defineRamp_Up_On 1
#defineRamp_Dn_On 2
#defineRamp_UpDn_On 3
#defineAuto 1
#defineFull 1
#defineEmpty 2
#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=0x2000;
testr1,[P_INT_Ctrl]; //判断是不是FIQ_TMA中断源
jnzL_FIQ_TimerA; //是,则转
r1=0x0800;
testr1,[P_INT_Ctrl]; //否则,判断是不是FIQ_TMB中断源jnzL_FIQ_TimerB; //是,则转
L_FIQ_PWM:
r1=C_FIQ_PWM;
[P_INT_Clear]=r1; //清除P_INT_Clear单元 POPR1,R4 from[sp];
reti;
L_FIQ_TimerA:
[P_INT_Clear]=r1;
callF_FIQ_Service_SACM_S480; //调用函数,完成播放 popr1,r4 from [sp]; reti;
L_FIQ_TimerB:
[P_INT_Clear]=r1;
popr1,r4 from [sp];
reti;
实验十 键扫描显示程序
【实验目的】
1)通过实验进一步了解IO口的使用方法。
2)使用汇编语言实现键扫描和显示程序的编制。
【实验设备】
1)装有WINDOWS系统和?’nSP?IDE 仿真环境的PC机一台。
2)?’nSP?十六位单片机61开发板一个,按键十个,面包板一块,LED显示块两个。
【实验要求】
设计一个键扫描和显示系统,要求当系统中的第N个键被按下后显示相应数字N(0、
1、2、3、4、5、6、7、8、9)
【实验报告内容】
1)实验原理:(包括实验电路原理图、程序流程及源程序); 1)实验步骤:
3)实验过程记录、分析;
(其中前三项要求在实验前完成)
实验用板
本次实验要求:
(1)选做实验一、二、三、七(或八)
(2)实验前将每个实验报告内容的前两项内容写好(检查)