《单片机原理及应用》实验指导书.docx

上传人:b****6 文档编号:8725853 上传时间:2023-02-01 格式:DOCX 页数:45 大小:456.78KB
下载 相关 举报
《单片机原理及应用》实验指导书.docx_第1页
第1页 / 共45页
《单片机原理及应用》实验指导书.docx_第2页
第2页 / 共45页
《单片机原理及应用》实验指导书.docx_第3页
第3页 / 共45页
《单片机原理及应用》实验指导书.docx_第4页
第4页 / 共45页
《单片机原理及应用》实验指导书.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

《单片机原理及应用》实验指导书.docx

《《单片机原理及应用》实验指导书.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》实验指导书.docx(45页珍藏版)》请在冰豆网上搜索。

《单片机原理及应用》实验指导书.docx

《单片机原理及应用》实验指导书

 

《单片机原理及应用》

 

实验指导书

 

梁光胜编

 

华北电力大学信息工程系

电子科学与技术实验室

二零零五年十月

前言

1.实验总体目标

掌握凌阳16位单片机SPCE061A的硬件结构和工作原理,掌握利用汇编语言和C语言混合编程的方法设计单片机应用程序的方法,掌握集成软件开发平台的使用方法,为进一步开发应用打下坚实的基础。

⒉适用专业

电子科学与技术

⒊先修课程

数字电子技术基础、C语言程序设计

⒋实验课时分配

实验项目

学时

10个基本型实验

自行安排

设计型实验

实验一定时器TimerA/B实验

2

实验二系统时钟实验

2

实验三FIQ中断实验

2

实验四键唤醒实验

2

实验五A/D转换实验

2

实验六双通道D/A实验

2

实验七片内2KSRAM和32K闪存读写

2

综合型实验

实验一简易复读机的设计与实现

2

实验二语音电子钟的设计与实现

4

⒌实验环境

计算机1台、凌阳16位单片机SPCE061A实验箱1套、μ’nSP™IDE集成开发软件1套、示波器1台。

⒍实验总体要求

以凌阳16位单片机SPCE061A为硬件载体,能够熟练利用汇编语言和C语言混合编程的方法设计单片机应用程序,能够初步掌握单片机应用系统的设计与实现方法。

⒎本实验的重点、难点及教学方法建议

本实验的重点:

掌握凌阳16位单片机SPCE061A的硬件结构、工作原理和指令系统,能够独立完成所列出的实验内容。

本实验的难点:

两个综合型实验题目。

教学方法建议:

指导教师通过一个简单实例,带领学生将设计的全过程完整走一遍,后面的实验内容要求学生独立全面完成。

目录

第一章

SPCE061A基本型实验

实验一

熟悉μ’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

第二章

SPCE061A设计型实验

26

实验一

定时器TimerA/B实验

26

实验二

系统时钟实验

27

实验三

FIQ中断实验

28

实验四

键唤醒实验

29

实验五

A/D转换实验

30

实验六

双通道D/A实验

31

实验七

片内2KSRAM和32K闪存读写

32

第三章

SPCE061A综合型实验

34

实验一

简易复读机的设计与实现

34

实验二

语音电子钟的设计与实现

34

第一章SPCE061A基本型实验

实验一熟悉μ’nSP™IDE环境下的汇编程序的编写

一、实验目的

熟悉μ’nSP™IDE环境及在该环境下用汇编语言编写的应用程序;熟悉简单的μ’nSP™汇编语言指令。

二、实验设备

装有WINDOWS系统和μ’nSP™IDE仿真环境的PC机一台。

三、实验步骤

1、将μ’nSP™IDE打开后,建立一个新工程。

2、在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。

3、编写汇编代码。

4、编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态,等等。

四、程序流程图

五、程序范例

//===============================================================//

//Program:

计算1to100累加值

//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;

六、程序练习

在μ’nSP™IDE下用汇编语言使用冒泡法编写一个排序程序。

.iram

array:

.dw5,89,40,12,55,32,18,46,77,21

实验二熟悉μ’nSP™IDE环境下的C语言的编写

一、实验目的

熟悉μ’nSP™IDE环境及在该环境下用C语言编写的应用程序。

二、实验设备

装有WINDOWS系统和μ’nSP™IDE仿真环境的PC机一台。

三、实验步骤

1、将μ’nSP™IDE打开后,建立一个新工程。

2、在该项目的源文件夹(SOURCEFILES)下建立一个新的C语言文件。

3、编写C语言代码。

4、编译程序,软件调试,观察并跟踪其结果,查看各个寄存器状态,等等。

四、程序范例

//===============================================================//

//Program:

计算1to100累加值

//Output:

[sum]=5050(十进制)或13BA(十六进制)

//===============================================================//

intmain()

{

inti,Sum=0;

for(i=0;i<=100;i++)

Sum=Sum+i;//Sum是累加的结果

while

(1){};//程序死循环

//用变量Watch窗口看Sum的值

}

五、程序练习

在μ’nSP™IDE下用C语言使用冒泡法编写一个排序程序。

IntArray[]={{5,89,40,12,55,32,18,46,77,21}

实验三使用汇编语言实现A口的输出实验

一、实验目的

通过实验了解A口作为输出口时的使用方法;使用汇编语言来实现A口作为输出口的方法。

二、实验设备

装有WINDOWS系统和μ’nSP™IDE仿真环境的PC机一台、μ’nSP™十六位单片机实验箱一个。

三、实验原理

通过点亮不同发光二极管来显示A口输出的数值不同。

四、实验步骤

1、根据硬件连接图连接好硬件。

2、将μ’nSP™IDE打开后,建立一个新工程。

3、在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。

4、编写汇编代码。

5、编译程序,软件调试,跟踪结果,观察LED及各个寄存器状态等等。

五、硬件连接图

六、程序流程图

七、程序范例

//*******************************************************************

.INCLUDEhardware.inc;//包括hardware.inc文件

.RAM

.VARR_LedCounter;//定义变量

.VARR_DelayCounter;

.CODE

.public_main;//对_main程序声明

_main:

R1=0xFFFF;//设置A口为同相低电平输出口

[P_IOA_Dir]=R1;

[P_IOA_Attrib]=R1;

R1=0x0000;

[P_IOA_Data]=R1;

[R_LedCounter]=R1;//对LEDcounter清零

L_MainLoop:

R1=[R_LedCounter];

[P_IOA_Data]=R1;//送数据到A口

R1=[R_LedCounter];

R1+=1;//LEDCounter加1

[R_LedCounter]=R1;

R1=0x0000;//DelayCounter清零

[R_DelayCounter]=R1;

callF_Delay;//延时

jmpL_MainLoop;//跳到L_MainLoop循环点亮LED

//////////////////////////////////////////

//功能:

延时子函数

//////////////////////////////////////////

F_Delay:

L_DelayLoop:

R1=0x0001;//清看门狗

[P_Watchdog_Clear]=R1;

R1=[R_DelayCounter];

R1+=1;//Delaycounter加1

[R_DelayCounter]=R1;

jnzL_DelayLoop;//加到65536吗?

retf;

八、程序练习

使用汇编语言实现B口的输出实验。

实验四使用C语言实现A口的输出实验

一、实验目的

通过实验了解A口作为输出口时的使用方法;使用C语言来实现A口作为输出口的方法。

二、实验设备

装有WINDOWS系统和μ’nSP™IDE仿真环境的PC机一台、μ’nSP™十六位单片机实验箱一个。

三、实验原理

通过点亮不同发光二极管来显示A口输出的数值不同。

四、实验步骤

1、根据硬件连接图连接好硬件。

2、将μ’nSP™IDE打开后,建立一个新工程。

3、在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。

4、编写C语言代码。

5、编译程序,软件调试。

6、跟踪结果,观察LED及各个寄存器状态等等。

五、硬件连接图

硬件连接图同实验三。

六、程序范例

#include"hardware.h"

voidDelay()

{//延时子程序

unsignedinti;

for(i=0;i<32768;i++){}

}

intmain()

{intLedCounter=0;

intTemp;

//设置A口的Dir,Data,Attrib

SP_Init_IOA(0xffff,0xffff,0xffff);

//设置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、在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。

4、编写程序代码。

5、编译程序,软件调试。

6、按键并观察LED及各个寄存器的状态。

六、程序流程图

七、程序范例

.INCLUDEhardware.inc;

.INCLUDEkey.inc;//包括key.inc文件

.RAM

.VARR_KeyCode;//定义变量保存键值

.CODE

.public_main;//对main程序声明

_main:

callF_User_Init_IO;//初始化IO口

callF_Key_Scan_Initial;//初始化键盘扫描

L_MainLoop:

callF_Key_Scan_ServiceLoop;//扫描键盘

callF_Key_DebounceCnt_Down;//Keydebounce

callF_SP_GetCh;//取键值

cmpR1,0x0000;//是否有键按下

jeL_MainLoop;//没有,继续检测

[R_KeyCode]=R1;//有,保存键值

[P_IOB_Buffer]=R1;//送到B口显示

jmpL_MainLoop;

F_User_Init_IO:

r1=0x0000;//设置A口为带下拉电阻的输入端

[P_IOA_Dir]=r1;

[P_IOA_Attrib]=r1;

[P_IOA_Data]=r1;

r1=0xffff;//设置B口为无数据反相功能的低电

[P_IOB_Dir]=r1;//平输出

[P_IOB_Attrib]=r1;

r1=0x0000;

[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、在该项目的源文件夹(SOURCEFILES)下建立一个新的汇编语言文件。

4、编写程序代码。

5、编译程序,软件调试。

6、按键并观察LED及各个寄存器状态。

六、程序流程图

七、程序范例

#include"hardware.h"

intmain()

{

intKey;//设置Dir,Data,Attrib

SP_Init_IOA(0x0000,0x0000,0x0000);//设置A口为带下拉电阻的输入

SP_Init_IOB(0xffff,0x0000,0xffff);//设置B口为无数据反相功能的低电平输出

System_Initial();

while

(1)

{

Key=SP_GetCh();//取键值

switch(Key)

{

case0x0000:

//没有键按下

break;

case0x0001:

//Key1

case0x0002:

//Key2

case0x0004:

//Key3

case0x0008:

//Key4

case0x0010:

//Key5

case0x0020:

//Key6

case0x0040:

//Key7

case0x0080:

//Key8

SP_Export(Port_IOB_Buffer,Key);//在B口显示按下的键值

break;

default:

break;

}

System_ServiceLoop();

}

}

八、程序练习

使用C语言实现A口的输出B口为输入实验

实验七IRQ5中断实验

一、实验目的

了解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_DATA0x7000;

.defineP_IOA_DIR0x7002;

.defineP_IOA_ATTRI0x7003;

.defineP_IOB_DATA0x7005;

.defineP_IOB_DIR0x7007;

.defineP_IOB_ATTRI0x7008;

.defineP_INT_CTRL0x7010;

.defineP_INT_CTRL_NEW0x702D;

.defineP_INT_CLEAR0x7011;

.defineP_Watchdog_Clear0x7012;

.RAM

.VARTIME2

.VARTIME4

.code

.public_main

_main:

intoff

r1=0xffff//IOA口为同相高电平输出口;

[P_IOA_ATTRI]=r1

[P_IOA_DIR]=r1

[P_IOA_DATA]=r1

r1=0xffff//IOB口为同相高电平输出口;

[P_IOB_ATTRI]=r1

[P_IOB_DIR]=r1

[P_IOB_DATA]=r1

r1=0x000c//开中断IRQ5_4Hz和IRQ5_2Hz

[P_INT_CTRL]=r1

[P_INT_CTRL_NEW]=r1

R1=0

[TIME2]=r1

[TIME4]=r1

intirq

loop:

r1=0x0001;

[P_Watchdog_Clear]=r1//清看门狗

jmploop

.text

.public_IRQ5

_IRQ5:

pushr1,r5to[sp]//压栈保护

r1=0x0008

testr1,[P_INT_CTRL]//比较是否为4Hz的中断源

jnzl_irq5_4//是,则转至对应程序段

l_irq5_2:

//否,则进入2Hz程序段

r1=0x0004

[P_INT_CLEAR]=r1

r2=[TIME2]

r2+=0x0001

[TIME2]=R2

cmpr2,2//比较是否为1秒

jbeLED2HZ_OFF//小于等于则LED灭

r1=0xfff0//大于则LED亮

[P_IOA_DATA]=r1

cmpr2,4//比较是否为两秒

jbeLED2Hz_RET//小于等于则LED继续亮

r2=0x000//否则,TIME1单元清零,返回中断

[TIME2]=R2

jmpLED2Hz_RET

LED2HZ_OFF:

r1=0xffff

[P_IOA_DATA]=r1

LED2Hz_RET:

popr1,r5from[sp]

RETI

l_irq5_4:

r1=0x0008

[P_INT_CLEAR]=r1

r2=[TIME4]

r2+=0x0001

[TIME4]=R2

cmpr2,2//比较是否为0.5秒

jbeLED4HZ_OFF//小于等于则LED灭

r1=0xfff0//大于则LED亮

[P_IOB_DATA]=r1

cmpr2,4//比较是否为1秒

jbeLED4Hz_RET//小于等于则LED继续亮

r2=0x000//否则,TIME2单元清零,返回中断

[TIME4]=R2

jmpLED4Hz_RET

LED4HZ_OFF:

r1=0xffff

[P_IOB_DATA]=r1

LED4Hz_RET:

popr1,r5from[sp]

RETI

实验八SACM-A2000实验

一、实验目的

了解凌阳单片机以SACM_A2000语音格式播放及程序的编写方法;了解凌阳音频编码算法库(SACM_Lib);了解SACM_A2000的语音文件。

二、实验设备

装有u’nspIDE仿真环境的PC机一台、μ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1