优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx
- 文档编号:12585892
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:25
- 大小:23.37KB
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx
《优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx》由会员分享,可在线阅读,更多相关《优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx(25页珍藏版)》请在冰豆网上搜索。
优质文档武汉大学计算机学院嵌入式实验报告word范文模板25页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
武汉大学计算机学院嵌入式实验报告
武汉大学计算机学院
课程实验(设计)报告
课程名称:
嵌入式实验
专业、班:
08级
姓名:
学号:
学期:
201X-201X第1学期
成绩(教师填写)
实验一80C51单片机P1口演示实验
实验目的:
(1)掌握P1口作为I/O口时的使用方法。
(2)理解读引脚和读锁存器的区别。
实验内容:
用P1.3脚的状态来控制P1.2的LED亮灭。
实验设备:
(1)超想-3000TB综合实验仪1台
(2)超想3000仿真器1台
(3)连线若干根
(4)计算机1台
实验步骤:
(1)编写程序实现当P1.3为低电平时,发光管亮;P1.3为高电平时,发光管灭。
(2)修改程序在执行读P1.3之前,先执行CLRP1.3,观察结果是否正确,分析在第二种情况下程序为什么不能正确执行,理解读引脚和读锁存器区别。
实验结果:
(1)当P1.3为低电平时,发光管亮;P1.3为高电平时,发光管灭。
(2)不正确。
因为先执行CLRP1.3之后,当读P1.3的时候它的值就一直是0,所以发光管会一直亮而不会灭。
单片机在执行从端口的单个位输入数据的指令(例如MOVC,P1.0)时,它需要读取引脚上的数据。
此时,端口锁存器必须置为‘1’,否则,输出场效应管导通,回拉低引脚上的高输出电平。
系统复位时,会把所有锁存器置‘1’,然后可以直接使用端口引脚作为输入而无需再明确设置端口锁存器。
但是,如果端口锁存器被清零(如CLRP1.0),就不能再把该端口直接作为输入口使用,除非先把对应的锁存器置为‘1’(如SETBP1.0)。
(3)而在引脚负载很大的情况(如驱动晶体管)下,在执行“读——改——写”一类的指令(如CPLP1.0)时,需要从锁存器中读取数据,以免错误地判断引脚电平。
实验二80C51单片机RAM存储器扩展实验
实验目的:
学习RAM6264的扩展
实验内容:
往RAM中写入一串数据,然后读出,进行比较
实验设备:
(1)超想-3000TB综合实验仪1台
(2)超想3000仿真器1台
(3)连线若干根
(4)计算机1台
实验步骤:
(1)根据流程图设计程序。
(2)RAM_CS插孔连到译码输出P2.7插孔,P1.0连接到L0。
(3)调试运行程序RAM.ASM。
对62256进行读写。
若L1灯闪动,表示62256RAM读写正常。
一直亮说明扩
展数据存储器有损坏。
(4)读写正确数码管显示“6264—0”。
若读写错误,数码管显示“6264—E”。
实验结果:
程序框图:
连线图案:
程序解读:
ORG0000H
AJMPSTART;;无条件跳转到START
ORG0030H;;START的首地址
START:
MOVSP,#60H;;设置堆栈段,是个过程化语句,因为堆栈的前端一般有其他内容,
;;此程序用不到。
MOVDPTR,#0000H;;DPTR是数据指针寄存器。
扩展数据存储器62256的地址,
;;从0000H开始测试,共32K,但下面语句只测试了前4K
MOVR6,#0FH
MOVA,#55H;;测试字,本实验只用了55H
;;/////////////////
RAM1:
MOVR7,#0FFH
RAM2:
MOVX@DPTR,A;;MOVX读写数据存储器,把55H写到0000H
CLRP1.0;;清零,即为暗状态
INCDPTR;;
DJNZR7,RAM2;;R7减1,如不为零则跳转,内循环!
!
256DJNZR6,RAM1;;R6减1,如不为零则跳转,外循环!
!
16
;;共测试4K
MOVDPTR,#0000H;;从新给地址0000H,下步读
MOVR6,#0FH;;写多少,读多少
;;////////////////////////
RAM3:
MOVR7,#0FFH
RAM4:
MOVXA,@DPTR
CJNEA,#55H,RAM6;;比较前两个操作数,不相等则跳转
SETBP1.0;;亮
INCDPTR
DJNZR7,RAM4
DJNZR6,RAM3
;;////////////////////
RAM5:
CLRP1.0
CALLDELAY;;延迟,实现闪烁!
!
SETBP1.0
CALLDELAY
SJMPRAM5;;是个死循环
;;////////////////////
DELAY:
MOVR5,#0FFH
DELAY1:
MOVR4,#0FFH
DJNZR4,$
DJNZR5,DELAY1
RET
RAM6:
SETBP1.0;;1.0口常亮,相当于设置了一个错态!
!
SJMPRAM6;;短转移,无限循环!
!
END
思考与改进:
改进程序清单:
OUTBITequ0e101h
CLK164equ0e102h;段控制口(接164时钟位)
DAT164equ0e102h;段控制口(接164数据位)
LEDBufequ40h
INequ0e103h
ORG0000H
movsp,#60h
MOVDPTR,#0e100H;8155初始化
MOVA,#03H
MOVX@DPTR,A
START:
MOVDPTR,#8000H;往6264的8000H-9FFFH单元送入#55HMOVA,#55H
DD:
MOVX@DPTR,A
INCDPTR
movr0,dph
CJNer0,#0A0H,DD
MOVDPTR,#8000h
DD1:
MOVXA,@DPTR;读出数据进行比较CJNEA,#55H,ERR
INCDPTR
MOVR0,DPH
CJNER0,#0A0H,DD1
mov40h,#06h;显示缓冲器初始化mov41h,#05h
mov42h,#06h
mov43h,#04h
mov44h,#10h
mov45h,#00h
START1:
LCALLDISPLAY;正确的显示“6464-0”SJMPSTART1
ERR:
mov40h,#06h
mov41h,#05h
mov42h,#06h
mov43h,#04h
mov44h,#10h
mov45h,#0Eh;不正确的显示“6264-E。
”START2:
LCALLDISPLAY
SJMPSTART2
DISPLAY:
setb0d3h
movr0,#LEDBuf
movr1,#6;共6个八段管movr2,#00100000b;从左边开始显示Loop:
movdptr,#OUTBIT
mova,#00h
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#LEDmap
movca,@a+dptr
movB,#8;送164
DLP:
rlca
movr3,a
movacc.0,c
anla,#0fdh
movdptr,#DAT164
movx@dptr,a
movdptr,#CLK164
orla,#02h
movx@dptr,a
anla,#0fDh
movx@dptr,a
mova,r3
djnzB,DLP
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#01
callDelay
mova,r2;显示下一位
rRa
movr2,a
incr0
djnzr1,Loop
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
clr0d3h
ret
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
DB40H
Delay:
movr7,#00H;延时子程序
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
end
实验三嵌入式Linux开发环境熟悉实验
实验目的:
熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。
使用Linux的
armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。
实验内容:
本次实验使用RedhatLinux9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并
在其中编写hello.c和Makefile文件。
学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
实验设备:
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
实验步骤:
1、建立工作目录
2、编写程序源代码
在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。
Kdevelope、anjuta软件的界面与vc6.0类似,使用它们对于熟悉windows环境下开发的用户更容易上手。
实际的hello.c源代码较简单,如下:
我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:
按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:
wq”保存并退出。
这样我们便在当前目录下建立了一个名为hello.c的文件。
3、编写Makefile
要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。
使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。
下面我们介绍本次实验用到的Makefile文件。
下面我们来简单介绍这个Makefile文件的几个主要部分:
?
CC指明编译器
?
?
?
?
?
EXEC表示编译后生成的执行文件名称OBJS目标文件列表CFLAGS编译参数LDFLAGS连接参数all:
编译主入口
与上面编写hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中
4、编译应用程序
在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。
如果进行了修改,重新编译则运行:
5、下载调试
在宿主PC计算机上启动NFS服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式Linux环境开发环境的建立。
在建立好NFS共享目录以后,我们就可以进入MINICOM中建立开发板与宿主PC机之间的通讯了。
如果不想使用我们提供的源码的话,可以再建立一个NFS共享文件夹。
如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过MINICOM挂载到开发板上。
再进入/host目录运行刚刚编译好的hello程序,查看运行结果。
实验结果:
编写了一个最基本简单的hello.c程序来验证实验是否成功,主要是进行了交叉编译,生成了可在目标试验台上运行的目标文件,然后成功建立了宿主机与目标实验台仿真终端连接,然后我们成功为目标试验台建立了linux系统终端窗口,然后通过linux命令建立宿主机与目标试验台的共享连接,为了最终的下载和运行最终的可执行文件。
运行文件后,屏幕正确输出程序运行结果:
hello,world!
思考与改进:
本次实验主要是熟悉嵌入式linux开发环境的使用,编写了一个最基本简单的hello.c程序来验证实验是否成功,主要是进行了交叉编译,生成了可在目标试验台上运行的目标文件,然后成功建立了宿主机与目标实验台仿真终端连接,然后我们成功为目标试验台建立了linux系统终端窗口,然后通过linux命令建立宿主机与目标试验台的共享连接,为了最终的下载和运行最终的可执行文件。
这样,我们就完成了本次实验,熟练掌握了嵌入式实验开发的基本步骤,为以后的实验打下良好基础,我们可以在此基础上完成更多实验,编写更加复杂的程序,从而使的我们的实验顺利进行。
实验四串口通信程序设计实验
实验目的:
了解在linux环境下串行程序设计的基本方法。
掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。
学习使用多线程来完成串口的收发处理。
实验内容:
读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。
实验设备:
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
实验步骤:
1、阅读理解源码
进入exp\basic\03_tty目录,使用vi编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
运行make产生term可执行文件
3、下载调试
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。
进入exp\basic\03_tty目录,运行term,观察运行结果的正确性。
由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试。
实验结果:
实验现象:
“ABCDEF.......abcdef.......12345.......”
思考与改进:
Linux操作系统从一开始就对串行口提供了很好的支持,为进行串行通讯提供了大量的函数,我们的实验主要是为掌握在Linux中进行串行通讯编程的基本方法。
本实验的程序流程图如下:
图2.3.3串口通讯实验流程图
设置好串口之后,读写串口就很容易了,把串口当作文件读写就可以了。
实验中通过send函数发送数据,函数定义如下:
void*send(void*data)
{
intc='0';
printf("senddata\n");
while(STOP==FALSE)
{
c++;
c%=255;
write(fd,&c,1);/*stdout*/
usleep(100000);
}
returnNULL;/*waitforchildtodieoritwillbecomeazombie*/
}
对应的通过receive函数接受数据,函数定义如下:
void*receive(void*data)
{
intc;
printf("readmodem\n");
while(STOP==FALSE)
{
read(fd,&c,1);/*comport*/
write(1,&c,1);/*stdout*/
}
printf("exitfromreadingmodem\n");
returnNULL;
}
键盘线程接受键盘输入的数据,发送给send线程,作为其发送数据,通过改变键盘输入数据,可以得到不同结果。
实验五A/D接口转换编程实验
实验目的:
了解在linux环境下对S3C2410芯片的8通道10位A/D的操作与控制。
实验内容:
学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。
阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。
利用外部模拟信号编程实现ARM循环采集全部前4路通道,并且在超级终端上显示。
实验设备:
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
实验步骤:
1、阅读理解源码
进入/arm2410s/exp/basic/04_ad目录,使用vi编辑器或其他编辑器阅读理解源代码。
2、编译应用程序
3、下载调试
换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。
我们可以通过调节开发板上的三个黄色的电位器,来查看a0、a1、a2的变化。
备注:
驱动程序的加载
在实验台的终端提示符【mnt/yaffs】下进入ad目录
【mnt/yaffs】cdad
【mnt/yaffs/ad】insmods3c2410-adc.o
s3c2410-adcinitialized
出现上述提示即加载成功。
实验结果:
初始值为:
a0=0.0032a1=3.2968a2=3.2968;通过调节电位器,a0、a1、a2的值相应的发生改变。
思考与改进:
设定第1个采用次数为100次,统计一个值n1
再设定第2个采用次数为100次,统计一个值n2
?
?
再设定第100个采用次数为100次,统计一个值n100
求统计平均值N=(n1+n2+n3+?
?
+n100)/100。
以列方式显示结果,按回车键开始采样,在按回车键结束。
实验结果:
采样100个之后,a0、a1、a2值趋于相同。
最后平均值得到结果相同。
实验六D/A接口转换编程实验
实验目的:
(1)
(2)
(3)
(4)
学习D/A转换原理掌握MAX504D/A转换芯片的使用方法掌握不带有D/A的CPU扩展D/A功能的主要方法了解D/A驱动程序加入内核的方法
实验内容:
学习D/A接口原理,了解实现D/A系统对于系统的软件和硬件要求。
阅读MAX504芯片文档,掌握
其使用方法。
实验设备:
硬件:
UP-NETARM2410-S嵌入式实验平台、PC机Pentium500以上,硬盘10G以上
软件:
PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX开发环境
实验步骤:
1、阅读理解源码
进入/arm2410s/exp/basic/05_da目录,使用vi编辑器或其他编辑器阅读理解源代码
2、编译应用程序
运行make产生da可执行文件da_main
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录,然后进入
进入/host/exp/basic/05_da目录,运行./da_main,观察运行结果的正确性。
在输入./da_main后会出现下面的提示信息。
这是由于我们没有指定参数造成的,它的格式为./da_main[da的id号][数字],我们可以通过选择0或1来决定输出到开发板上的哪个D/A接口;同时还需要在0.0~4.096V之间来选择一个输出电压。
下面的例子是用了开发板上的DA0并且输出1V的电压,我们可以使用万用表对其进行测量。
可以通过选择0或1来决定输出到开发板上的哪个D/A接口;同时还需要在0.0~4.096V之间来选择一个输出电压。
思考与改进:
改进:
将D/A接口转换与A/D接口转换结合在一起,使用第一个按钮输入。
具体程序代码da_main.c如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include"s3c2410-adc.h"
#defineADC_DEV"/dev/adc/0raw"
#defineDA0_IOCTRL_WRITE0x10
#defineDA1_IOCTRL_WRITE0x11
#defineDA_IOCTRL_CLR0x12
#defineMax504_FULL4.096f
char*DA_DEV="/dev/exio/0raw";
staticintda_fd=-1;
staticintadc_fd=-1;
staticintinit_ADdevice(void)
{
if((adc_fd=open(ADC_DEV,O_RDWR))<0){
printf("Erroropening%sadcdevice\n",ADC_DEV);
return-1;
}
}
staticintGetADresult(intchannel)
{
intPRESCALE=0XFF;
intdata=ADC_WRITE(channel,PRESCALE);
write(adc_fd,&data,sizeof(data));
read(adc_fd,&data,sizeof(data));
returndata;
}
staticvoid*comMonitor(void*data)
{
getchar();
stop=1;
returnNULL;
}
Floatad()
{
floatd;
pthread_tth_com;
void*retval;
//sets3c44b0ADregisterandstartAD
if(init_ADdevice()<0)
return-1;/*Createthethreads*/
pthread_create(&th_com,NULL,comMonitor,0);
d=((float)GetADresult(0)*3.3)/1024.0;
usleep
(1);
/*Waituntilproducerandconsumerfinish.*/
pthread_join(th_com,&retval);
returnd;
}
intmain(intargc,char**argv)
{
floatv;
unsignedintvalue;
while
(1){
v=ad();
if(v<0||v>Max504_FULL){
printf("DAoutmustbetween:
0to%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页 优质 文档 武汉大学 计算机 学院 嵌入式 实验 报告 word 范文 模板 25