优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx

上传人:b****0 文档编号:12585892 上传时间:2023-04-20 格式:DOCX 页数:25 大小:23.37KB
下载 相关 举报
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx_第1页
第1页 / 共25页
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx_第2页
第2页 / 共25页
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx_第3页
第3页 / 共25页
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx_第4页
第4页 / 共25页
优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx

《优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx》由会员分享,可在线阅读,更多相关《优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx(25页珍藏版)》请在冰豆网上搜索。

优质文档武汉大学计算机学院 嵌入式实验报告word范文模板 25页.docx

优质文档武汉大学计算机学院嵌入式实验报告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%

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

当前位置:首页 > 人文社科 > 军事政治

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

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