凌阳单片机实验指导书解析.docx
- 文档编号:25030179
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:37
- 大小:1.18MB
凌阳单片机实验指导书解析.docx
《凌阳单片机实验指导书解析.docx》由会员分享,可在线阅读,更多相关《凌阳单片机实验指导书解析.docx(37页珍藏版)》请在冰豆网上搜索。
凌阳单片机实验指导书解析
第一章SPCE061A基础应用实验
实验一熟悉µ’nSP™IDE集成开发环境下汇编语言程序的编写
【实验目的】
1.熟悉SPCE061A单片机常用的汇编指令;
2.学会使用SPCE061A单片机汇编语言以及伪指令构造汇编程序;
3.掌握µ’nSP™IDE集成开发环境的一般使用方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,SPCE061A实验仪一套。
2.本实验用到的实验仪硬件模块为:
CPU区电路模块、供电电路模块、下载模式选择电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序。
2.实现功能:
从1到100进行累加,并把计算结果保存在[Sum]单元里。
3.实验现象:
实验过程中,单步运行时,可通过IDE的调试工具寄存器观察窗口(RegisterWindow)观察通用寄存器的变化,通过变量观察窗口(ToggleWatch)观察变量Sum的变化;累加结束后保存累加结果:
通过变量观察窗口(ToggleWatch)可以观察到变量Sum的值为5050(十六进制表示为0x13BA)。
【实验原理】
SPCE061A的汇编指令按其功能主要有数据传送指令、算术指令、逻辑指令、转移指令和控制指令。
在程序运行中主要用到r1~r4四个通用寄存器和BP(r5)、SP、PC、SR四个特殊功能寄存器。
其中r1~r4一般作为目标寄存器或源寄存器,参与数据传输或算术逻辑运算。
【程序流程】
初始化寄存器r2作为累加器,初始值为0;寄存器r1为加数,初始值为1。
初始化操作完成后即进入累加循环;在累加循环当中,累加器的数值加上加数,并保存在累加器当中,加数自加1;当加数加到了100,退出累加循环,把r2累加的结果送到[Sum]单元中。
程序流程图如图1-1所示。
图1-1程序流程图
【实验步骤】
鉴于本实验为本书的第一个实验,所以在此介绍一些有关unSPIDE操作的步骤;在之后的实验中,将不再重述。
1.安装IDE:
双击安装软件如下图标,开始安装IDE集成开发环境,按照默认选项安装好IDE。
几点说明:
①IDE2.0.0安装软件在凌阳大学计划的光盘提供。
②安装好IDE后,在C盘的ProgramFiles文件夹会出现一个Sunplus文件夹,打开Sunplus文
件夹有如图1-2所示的文件。
图1-2安装好IDE文件后在Sunplus的文件夹
③打开unSPIDECommon文件夹,包含三个文件夹,如图1-4,本书的介绍当中,会涉及到常
用的头文件、库文件等资源都在Example文件夹里的SPCE061A文件夹包含,如图1-5。
图1-3打开unSPIDECommon文件夹
图1-4打开unSPIDECommon文件夹里的Example文件夹
图1-5SPCE061A包含的文件夹
④在图1-5中的“include”文件夹里包含常用的头文件,例如hardware.h、a2000.inc等;“library”文件夹里包含常用的库函数文件,例如语音库sacmv26e.lib。
2.打开IDE环境。
打开后的界面如图1-6。
图1-6打开IDE后的界面
3.建立一个新的工程
按前面步骤打开IDE环境后,建立一个新的工程,工程名为:
ex01_asm_ADD1-100,建立方法如下:
在File下拉菜单当中,点击New,如图1-7。
图1-7新建工程或者文件
点击New后会出现下面一个对话框,如图1-8,在对话框的location编辑框选择工程存储路径,例如这里选择I:
\self路径(读者可以自己选择自己想存储的路径选择)。
在File编辑框内写上工程名称ex01_asm_ADD1-100。
图1-8新建工程对话框
点击“OK”,就会看到图1-9所示的界面,这个界面为创建新工程后的的界面。
图1-9新工程界面
4.在该工程的源文件夹(SourceFiles)下建立一个新的汇编语言文件(后缀为:
.asm)。
按照图1-7同样的方法打开建立新文件对话框,如图1-10。
图1-10新文件建立对话框
文件类型选择为“SPIDEAsmFile”,即汇编文件;在File框内填写新建文件名,这里命名为“main”,点击“OK”,完成新建“main.asm”文件操作。
建立好main.asm文件后,用户可以在FileView中双击main.asm,以打开该文件;打开后可以看到如图1-11所示界面。
图1-11新文件界面
5.在图1-11所示的main.asm文件中按照程序流程图编写汇编代码。
6.编写完代码后,选择工具栏的“Project-SelectBody”,或者直接点击图标,打开SelectBody对话框;按如图1-12选择Body。
BodyName选择SPCE060A_061A(以后的全部实验中都这样选择)。
图1-12在线仿真Body选择
在IDE环境中按图1-13所示Rebuildall,按图1-14椭圆框所示选择在线调试
图标。
图1-13RebuildAll
图1-14选择在线调试图标
7.如果使用实验仪自带的下载线(Ez-Probe),如图1-15,实验仪②区的Ez-Probe接口连接下载线,使实验仪中的SPCE061A处于在线下载状态,以便将实验程序下载到芯片当中;③区中用跳线把上面两个引针(EMU和EZ)短接,以选择使用Ez-Probe;连接好下载线并设置好跳线后,连接①区电源线以给实验仪供电。
(本书中所有实验将以使用下载线进行实验说明)如果使用Probe,如图1-15,④区的Probe接口连接Probe,使实验仪中的SPCE061A处于在线调试、在线下载状态,以便将实验程序下载到芯片当中;③区中用跳线把下面两个引针(EMU和PRO)短接,以选择使用Probe;连接好Probe线并设置好跳线后,连接①区电源线以给实验仪供电。
图1-15实验仪设置及连接
8.下载(
)(或者按F8键),这时候PC运行指针指向main函数的第一条语句,如图1-16。
图1-16程序下载后的IDE集成开发环境
9.点击
图标(或者按Alt+C键)打开变量观察窗口,点击
图标(或者按Alt+3键)打开寄存器观察窗口,点击
图标(或者按Alt+D键)打开ToggleDisassembly窗口,点击
图标(或者按Alt+2键)打开Memory观察窗口;所有这些窗口打开后如图1-17。
图1-17打开各个观察窗口
10.在变量观察窗口的name项输入变量Sum;单步运行(
)(或者按F11键),如图1-18;通过ToggleDisassembly窗口观察程序的运行情况,通过变量观察窗口的value项观察Sum的值,通过寄存器观察窗口观察寄存器的变化情况;另外,变量观察窗口的Address项显示的是分配给变量的地址空间。
图1-18单步运行
11.累加结束时,检查通过变量观察窗口的value项观察到Sum的值是否为5050(十六进制表示为0x13BA)。
如图1-19。
图1-19程序累加结束后界面
注:
1)如果全速运行,点击
图标或者按F5键。
2)运行过程中如果没有看清楚,需要重新运行,点击
图标或者按Ctrl+Shift+F5键。
3)需要在程序中添加断点,先选中想添加断点的语句,点击
或者按F9键。
相反,去掉断点按
或者按Shift+F9键。
【练习】
在µ’nSP™IDE下用汇编语言编写一个使用冒泡法排序的程序,排列顺序为从小到大的顺序。
.iram
array:
.dw5,89,40,12,55,32,18,46,77,21
实验二熟悉µ’nSP™IDE集成开发环境下C语言程序的编写
【实验目的】
1.熟悉µ’nSP™IDE集成开发环境的使用方法;
3.掌握用SPCE061A单片机C语言编写应用程序的方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,SPCE061A实验仪一套。
2.本实验用到的实验仪硬件模块为:
CPU区电路模块、供电电路模块、下载模式选择电路模块。
【实验要求】
1.编程要求:
编写一个C语言程序。
2.实现功能:
从1到100进行累加,并把计算结果保存在变量Sum中;
4.实验现象:
打开变量观察窗口观察变量Sum的变化,累加结束时变量Sum为5050(16进制表示为0x13BA)。
【实验原理】
µ’nSP™的指令系统算术逻辑操作符与ANSI-C算符相同,如表2-1。
表2-1µ’nSP™指令的算术逻辑操作符
µ’nSP™支持ANSI-C中使用的基本数据类型,如表2-2。
表2-2µ’nSP™对ANSI-C中基本数据类型的支持
【程序流程图】
主程序流程图如图2-1所示。
先定义一个累加值变量Sum和一个加数变量i,初始化Sum=0,i=1,进入累加循环;在累加循环中,Sum和i相加,并把相加结果保存在Sum中,i自加1,判断i是否大于100,如果没有则继续累加,如果大于,则退出累加循环,进入主程序循环,执行清看门狗操作,防止单片机复位。
图2-1主程序流程图
【实验步骤】
1.和实验一同样的方法,将µ’nSP™IDE环境打开后,建立一个新工程ex02_c_ADD1-100。
2.在该工程的源文件夹(SourceFiles)下建立一个新的C语言文件,命名为main。
建立方法如图2-2,注意椭圆框内和实验一建立汇编语言文件的不同。
图2-2建立新的c语言文件
3.在main.c文件里编写C语言代码。
4.RebuildAll。
5.选择在线调试模式(ICE)。
下载、单步运行。
6.打开变量观察窗口观察变量Sum的变化,观察累加结束时Sum是否为5050(16进制表示为
0x13BA)。
【练习】
在µ’nSP™IDE下用C语言编写一个使用冒泡法排序的程序,排列顺序为从小到大的顺序。
IntArray[]={5,89,40,12,55,32,18,46,77,21}
实验三使用汇编语言实现I/O的输出
【实验目的】
1.掌握SPCE061A单片机汇编语言的编程方法;
2.掌握IOA端口作为普通输出口时的使用方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,SPCE061A实验仪一套。
2.本实验用到的实验仪硬件模块为:
CPU区电路模块、供电电路模块、下载模式选择电路模块、I/O口引出接口模块、LED指示灯电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序。
2.实现功能:
通过I/O口输出的数据控制8个LED的点亮与熄灭。
3.实验现象:
8个LED动态点亮和熄灭,并且循环显示。
当A口的底8位中的某位输出为高电平时,相应的三极管导通,有驱动电流流过发光二极管,发光二极管点亮。
当A口低八位中的某位输出低电平时,相应的三极管截止,有电流流过发光二极管,发光二极管熄灭。
【实验原理】
1.I/O口的设置
SPCE061A有32个可编程I/O端口,分为两组:
IOA0~15口和IOB0~15口,其中每一个端口都可以被单独设置为输入或者输出口。
SPCE061A的I/O口的输入输出方式是通过方向控制向量Dir、属性向量Attrib和数据向量Data三个向量组合控制的。
I/O口的组合控制设置如表3-1所示。
注:
端口位默认为带下拉电阻的输入管脚。
按照上面的组合控制设置,当IOA的低八位设置为同相低电平输出口时,Dir、Attrib和Data三个向量的设置如表3-2所示。
表3-1I/O端口的组合控制设置
表3-2IOA的低8位设置为同相低电平输入口
在SPCE061A的I/O口被设置为输出口时,当Data寄存器中的某一位写入“1”时,该位所对应的端口输出高电平;写入“0”时,输出低电平。
2.实验仪LED的点亮与熄灭
如下图3-1实验仪LED的电路原理图。
这里以点亮LED1为例进行说明,其他LED原理和它相同。
当a端为高电平,G5为低电平时三极管导通,LED1也导通,则LED1点亮;a端为低电平,G5为低电平时三极管截止,LED1也截止,LED1熄灭;a端为高电平,G5为低高平时三极管截止,LED1也截止,LED1熄灭。
图3-1发光二极管电路原理图
事实上,在实验仪的接口上并不能看到G5这个接口,如图3-2,在实验仪上有一个三极管阵列的芯片,在实验仪的接口上看到的是DIG5这个接口,G5是通过DIG5反相得到的,因此,要点亮LED1,必须首先设置G5为低电平,同时a为高电平,即在DIG5为高电平,a为高电平时就可以点亮LED1。
图3-2ULN2003A芯片
同样以点亮LED1为例,介绍怎么用I/O口输出控制LED的点亮与熄灭的。
假设IOA0连接a,IOB6连接DIG5,如图3-3(注意图中的粗线表示连接左右两个端口),根据上面的分析,当要点亮LED1时,需要从IOB6口输出高电平,同时从IOA0口输出高电平,即给IOB的数据向量单元送数据“0x40”,给IOA口的数据向量单元送数据“0x01”。
图3-3IOA0连接a,IOB6连接DIG5
【硬件连接】
如图3-4硬件连接图所示,IOA的低八位IOA0-IOA7分别依次接8个LED的导通端a-h,即用跳线把LED_SEG的左右两排引针短接;IOB6连接DIG6,即用跳线短接LED_DIG的IOB6和DIG5。
本书中所有的标号都是以v2.0.2版本的实验仪为准。
图中的粗线表示左右两个端口连接,后面的实验中也采用这种连接方法。
图3-4硬件连接图
【程序流程图】
根据实验要求8个LED的显示状态,初始化A口为同相输出口,并输出电平;初始化IOB6为输出口并输出高电平,以选择8个LED的负极为低电平;程序的主循环中,输出到IOA口低八位的数据每次输出显示后要加1;输出显示的数据可用变量保存,也可在程序运行当中通过读取P_IOA_Buffer(0x7001)寄存器得到上次输出数值。
主程序流程图如图3-5所示:
图3-5主程序流程图
注意:
①为了避免因为延时时间长导致看门狗复位,延时子程序里需要清看门狗操作。
②选择合适的延时时间,本实验中选择大约0.2s的延时。
因为当延时时间太短时,8个发光二极管的状态变化太快,不便观察;而当延时时间太长时,发光二极管停留在一个状态很
长时间,也不便于观察8个发光二极管的状态变化。
【实验步骤】
1.按照流程图编写一个汇编语言程序。
2.利用和前面实验相同的方法RebuildAll。
3.如图3-6所示,实验仪②区的Ez-Probe接口连接下载线,使实验仪中的SPCE061A处于在线下载状态,以便将实验程序下载到芯片当中;③区中用跳线把上面两个引针(EMU和EZ)短接,以选择使用Ez-Probe;④区的引针全部用跳线短接,⑤区用跳线把最下面两个引针短接;连接好下载线并设置好跳线后,连接①区电源线以给实验仪供电。
图3-6实验仪硬件连接和其它设置
注意拨掉LCD的接口/CS和IOB2连接的跳线。
4.在IDE环境中选择在线调试图标,注意Body选择和实验一相同。
5.下载、运行,观察图3-6⑥区LED1-8的变化,检查与实验要求是否统一。
【练习】
利用汇编语言编写程序,实现任选8个IOB口输出控制8个LED的点亮与熄灭
实验四IRQ4中断
【实验目的】
1.熟悉IRQ4的中断向量和中断源;
2.熟悉时基中断的应用;
3.掌握中断控制单元P_INT_Ctrl,P_INT_Clear的设置方法;
5.掌握IRQ4中断的编程方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,SPCE061A实验仪一套。
2.本实验用到的实验仪硬件模块为:
CPU区电路模块、供电电路模块、下载模式选择电路模块、I/O口引出接口模块、LED指示灯电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序;
2.实现功能:
利用IRQ4三个时基中断,即IRQ4_1kHz、IRQ4_2kHz和IRQ4_4kHz中断,在各自的中断服务程序中对相应的变量进行累加;并通过点亮、熄灭发光二极管(LED)来表示相应变量计数器累加的速度;
3.实验现象:
LED1和LED2的亮灭周期为2s,LED3和LED4的亮灭周期为1s,LED5~LED8的亮
灭周期为0.5s。
【实验原理】
IRQ4中断对应4096Hz、2048Hz、1024Hz三个中断源,通过写P_INT_Ctrl来允许中断,通过IRQON、INTIRQ或者INTFIQ,IRQ开总中断。
在本实验中,使用三个变量分别作为IRQ4_1kHz、IRQ4_2kHz和IRQ4_4kHz三个中断的计数器,每响应一次中断,各自的计数器加1,并在中断中判断变量,当这三个变量计数器到达设定计数值(本实验都为1024)时,先把8个LED的公共端设置为低电平,翻转相应的I/O口电平,控制发光二极管(LED)的状态变化,与此同时,对三个变量进行清零操作,再次循环实验现象。
由于IRQ4_1kHz、IRQ4_2kHz和IRQ4_4kHz三个中断的时基频率各不相同,分别为1kHz、2kHz和4kHz,所以三个对应的变量计数器累加到相同的计数值时它们耗去的时间也不同,表现在发二极管上就是它们的亮灭状态变化周期各不相同。
本实验中,中断服务程序中会判断这三个变量的值,检测到对应于IRQ4_1kHz时基中断的变量累加到1024时,通过DIG5的控制口把8个LED的负极设置为低电平,IOA0和IOA1口输出电平翻转一次,控制发光二极管LED1和LED2状态变化;检测到对应于IRQ4_2kHz时基中断的变量累加到1024时,通过DIG5的控制口把8个LED的负极设置为低电平,IOA2和IOA3口输出电平翻转一次,控制发光二极管LED3和LED4状态变化;检测到对应于IRQ4_4kHz时基中断的变量累加到1024时通过DIG5的控制口把8个LED的负极设置为低电平,IOA4~IOA7口输出电平翻转一次,控制发光二极管LED5~LED8状态变化。
【硬件连接】
硬件连接图如图4-1,IOB6连接DIG5(控制8个LED的负极电平),即用跳线短接实验仪LED_DIG的最下面两个引针;IOA0~IOA7分别依次连接LED_SEG的a~h(即控制8个发光二极管LED1~LED8),即用跳线短接实验仪LED_SEG的左右两排引针。
图4-1硬件连接图
【程序流程图】
1.主程序流程图
在主程序里,初始化A口为同相输出口,并初始化其输出状态为低电平,初始化IOB6端口为输出口并初始化其输出状态为高电平;开IRQ4中断,进入主程序循环,执行清看门狗操作。
主程序流程图如图4-2所示。
图4-2主程序流程图
2.中断服务子程序
中断服务子程序流程图如图4-3所示。
假设定义三个变量1K_Counter、2K_Counter和4K_Counter分别作为IRQ4_1kHz、IRQ4_2kHz
和IRQ4_4kHz中断的计数器。
每响应一次IRQ4_1kHz中断让计数器1K_Counter自加1;每响应一次IRQ4_2kHz中断让计数器2K_Counter自加1;每响应一次IRQ4_4kHz中断让计数器4K_Counter自加1。
当1K_Counter加到1024时,IOA0和IOA1口输出电平翻转一次,控制发光二极管D4和D5状态变化,清IRQ4_1kHz中断标志;2K_Counter加到1024时,IOA2和IOA3口输出电平翻转一次,控制发光二极管D6和D7状态变化,清IRQ4_2kHz中断标志;4K_Counter加到1024时,IOA4~IOA7口输出电平翻转一次,控制发光二极管D8~D11状态变化,清IRQ4_4kHz中断标志。
【实验步骤】
1.建立一个新工程ex11_asm_IRQ4,根据程序流程图编写汇编语言程序。
2.RebuildAll。
3.根据硬件连接图连接电路,注意拨掉LCD的接口/CS和IOB2连接的跳线。
4.下载程序,运行。
5.观察8个发光二极管的亮灭情况,分析是否和实验要求相统一。
图4-3中断服务子程序流程图
【练习】
按照所做实验编写一个程序,只需要开IRQ4_1kHz和IRQ4_2kHz中断,在IRQ4_1kHz中断里控制4个发光二极管LED1~LED4,要求发光二极管(LED)每个状态持续的时间为0.5s;在IRQ4_2kHz中断里控制4个发光二极管LED5~LED8,要求发光二极管(LED)每个状态持续的时间为1s。
(读者可自定义控制发光二极管的I/O口。
提示:
实现方法和实验类似。
)
第二章SPCE061A综合设计型实验
内容提要:
让学生在全面了解16位单片机的结构特点和系统原理的基础上,掌握凌阳单片机的硬件结构,指令系统,应用程序设计方法,凌阳音频压缩算法的应用。
培养学生单片机应用系统的设计与开发的能力。
通过实验学生能正确使用单片机开发系统及仿真软件,熟悉汇编语言编程技巧,掌握程序的基本调试方法。
2.11×8键盘输入在LED数码管上的显示
2.1.1LED数码管显示原理
1.实验仪上SPCE061A控制4位8段数码管的显示
实验仪在4位8段数码管的左面有LED_SEG和LED_DIG两个排针接口,其中LED_SEG是控
制此4位8段数码管的段码选择的,LED_DIG是控制4位8段数码管位选择和发光二极管的公共端选择的,“h”控制小数点。
把实验仪上LED_SEG所有两排引针和LED_DIG靠上面四排引针用跳线短接。
框图如图5-1。
图5-1实验仪上SPCE061A和4位数码管显示电路模块的连接
按照上面数码管的显示原理,当在第四个数码管上显示“E”时,先通过IOB5端口给“DIG4”
端口送1,选中第四个数码管;根据图5-1,给IOA0、IOA3、IOA4、IOA5、IOA6端口各送一个1,点亮a、d、e、f、g段就可以显示出“E”。
2..动态显示原理
动态显示是数码管显示比较常用的方式,可以很好的解决端口资源紧张问题。
如图5-2所示。
图5-24位*7段数码管动态显示原理图
动态显示的过程:
以显示“1234”为例说明,首先仅使能位信号DIG4,然后发送“1”的段码“0x06”至数码管,LED4显示“1”,其余的数码管都是不显示;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 指导书 解析