嵌入式实验报告.docx

上传人:b****2 文档编号:23444079 上传时间:2023-05-17 格式:DOCX 页数:13 大小:29.68KB
下载 相关 举报
嵌入式实验报告.docx_第1页
第1页 / 共13页
嵌入式实验报告.docx_第2页
第2页 / 共13页
嵌入式实验报告.docx_第3页
第3页 / 共13页
嵌入式实验报告.docx_第4页
第4页 / 共13页
嵌入式实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

嵌入式实验报告.docx

《嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

嵌入式实验报告.docx

嵌入式实验报告

实验模块一

说明:

该模块分为3个子实验,每个实验均为设计性实验,实验设计的内容由简到繁,系统功能在前序实验基础上逐渐增加。

实验一

实验目的:

掌握输出设备程序控制的原理

实验设备:

TCP-I实验箱,文祥500台式电脑

实验内容:

采用8086与8255组成系统,8个发光二极管为输出,编程实现控制8个发光二极管一盏灯循环点亮。

实验步骤:

1、将输出端口引脚与LED相连

2、编程实现对8个LED的输出控制

将实验箱中的8255片选信号连接到218H~21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H~21BH。

将8255的端口A的8个引脚:

PA0~PA7与8个LED对应相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。

程序如下:

程序清单:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,21BH

MOVAL,80H

OUTDX,AL;工作方式初始化

MOVDX,218H

MOVAL,0FEH;设置输出数据,即显示模式

MOVCX,80;设置循环次数

XH:

OUTDX,AL

ROLAL,1

CALLDELAY;调用延迟程序

LOOPXH

MOVAH,4CH

INT21H;返回dos

DELAYPROC;延迟子程序

PUSHCX

MOVBX,2000

A0:

MOVCX,3000

A1:

LOOPA1

DECBX

JNZA0

POPCX

RET

DELAYENDP

CODEENDS

ENDSTART

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

实验二

实验目的:

掌握输出设备程序控制的原理的基础上进一步掌握输入设备与输出设备协同控制的原理。

实验设备:

TCP-I实验箱,文祥500台式电脑

实验内容:

采用8086与8255组成系统,8个发光二极管为输出,开关为输入。

编程实现控制8个发光二极管一盏灯循环点亮,并用开关控制显示状态的暂停。

实验步骤:

1、将输出端口引脚与LED相连,将输入端口引脚与开关相连

2、编程实现对8个LED及开关的输入/输出控制

将实验箱中的8255片选信号连接到218H~21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H~21BH。

将8255的端口A的8个引脚:

PA0~PA7与8个LED对应相连,将开关与端口B的PB0相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。

程序如下:

程序清单:

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,21BH

MOVAL,82H

OUTDX,AL;工作方式初始化

MOVDX,219H

JIANCE:

INAL,DX

TESTAL,1;检测开关的状态,控制暂停

JZJIANCE

MOVDX,218H

MOVAL,0FEH;设置输出数据,即显示模式

MOVCX,80;设置循环次数

XH:

OUTDX,AL

ROLAL,1

CALLDELAY;调用延迟程序

LOOPXH

MOVAH,4CH

INT21H;返回dos

DELAYPROC;延迟子程序

PUSHCX

PUSHDX

PUSHAX

MOVBX,2000

A0:

MOVCX,3000

A1:

LOOPA1

MOVDX,219H

CESHI:

INAL,DX

TESTAL,1;检测开关的状态,控制暂停

JZCESHI

DECBX

JNZA0

POPAX

POPDX

POPCX

RET

DELAYENDP

CODEENDS

ENDSTART

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

实验三

实验目的:

1、掌握输入/输出设备程序控制的原理

2、掌握多分支、多循环程序的编写方法和技巧

实验设备:

TCP-I实验箱,文祥500台式电脑

实验内容:

采用8086与8255组成系统,8个发光二极管为输出,开关为输入。

编程实现控制8个发光二极管一盏灯循环点亮,并用开关控制显示状态的暂停,与显示模式的切换。

其中模式一为一盏灯循环点亮,模式二为4盏灯交叉循环点亮。

实验步骤:

1、将输出端口引脚与LED相连

2、编程实现对8个LED的输出控制

将实验箱中的8255片选信号连接到218H~21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H~21BH。

将8255的端口A的8个引脚:

PA0~PA7与8个LED对应相连,将开关1与端口B的PB0相连,将开关2与端口B的PB1相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。

程序流程图如下:

程序清单:

上课已讲,自己补上

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据

 

实验模块2

该实验模块为3个分立设计型实验,旨在使学生掌握ARM7系统的基本组成和简单应用。

实验四

实验目的:

1、掌握ARM数据处理器指令的使用方法

2、了解ARM指令灵活的第2个操作数。

实验设备:

magicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境

实验内容:

1、使用MOV和MVN指令访问ARM通用寄存器

2、使用ADD、SUB、AND、ORR、CMP、TST等指令完成数据加减运算及逻辑运算。

实验步骤:

1、启动ADS1.2使用ARMEXECUTABLEIMAGE工程模板建立以个工程。

建立汇编源文件,编写实验程序然后添加到工程中。

2、设置工程连接地址ROBASE为0x40000000,RWBASE为0x40003000,设置调试入口地址IMAGEENTRYPOINT为0x40000000。

3、编译连接工程,选择【project】-【debug】,启动AXD进行软件仿真调试。

打开寄存器窗口(processorregister),选择current项进行各寄存器值的监视。

程序清单:

XEQU11;定义X的值为11

YEQU8;定义Y的值为8

BIT23EQU(1<<23);定义BIT23的值为0x00800000

AREAExample3,CODE,READONLY;声明代码段Example3

ENTRY;标识程序入口

CODE32;声明32位ARM指令

START;使用MOV、ADD指令实现:

R8=R3=X+Y

MOVR0,#X;R0<=X,X的值必须是8位图数据

MOVR1,#Y;R1<=Y,Y的值必须是8位图数据

ADDR3,R0,R1;即是R3=X+Y

MOVR8,R3;R8<=R3

;使用MVN、SUB指令实现:

R5=0x5FFFFFF8-R8*8

MVNR0,#0xA0000007;0xA0000007的反码为0x5FFFFFF8

SUBR5,R0,R8,LSL#3;R8左移3位,结果即是R8*8

;使用CMP指令判断(5*Y/2)>(2*X)吗?

若大于则R5=R5&0xFFFF0000,否则R5=R5|0x000000FF

MOVR0,#Y

ADDR0,R0,R0,LSL#2;计算R0=Y+4*Y=5*Y

MOVR0,R0,LSR#1;计算R0=5*Y/2

MOVR1,#X

MOVR1,R1,LSL#1;计算R1=2*X

CMPR0,R1;比较R0和R1,即(5*Y/2)和(2*X)进行比较

LDRHIR2,=0xFFFF0000;若(5*Y/2)>(2*X),则R2<=0xFFFF0000

ANDHIR5,R5,R2;若(5*Y/2)>(2*X),则R5=R5&R2

ORRLSR5,R5,#0x000000FF;若(5*Y/2)≤(2*X),则R5=R5|0x000000FF

;使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)

TSTR5,#BIT23

BICNER5,R5,#0x00000040

BSTART

END

思考题:

1、指令MOVR0,#0X12345678是否正确?

为什么?

2、更改X的值为200,Y值为163,单步运行程序,每执行一步程序的结果是多少?

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

实验五

实验目的:

掌握在C语言程序中调用汇编程序,了解ATPCS基本原则。

实验设备:

magicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境

实验内容:

在C语言程序中调用汇编子程序,实现两个整数的加法运算。

实验步骤:

1、1、启动ADS1.2使用ARMEXECUTABLEIMAGE工程模板建立以个工程。

建立汇编源文件,编写实验程序然后添加到工程中。

2、设置工程连接地址ROBASE为0x40000000,RWBASE为0x40003000,设置调试入口地址IMAGEENTRYPOINT为0x40000000。

3、设置工程选项,位于开始位置的起始代码段设置为startup.0的start段。

4、编译连接工程,选择【project】-【debug】,启动AXD进行软件仿真调试。

程序清单:

#defineuint8unsignedchar

#defineuint32unsignedint

externuint32Add(uint32x,uint32y);

uint32sum;

//调用汇编程序Add实现加法运算

voidMain(void)

{sum=Add(555,168);

while

(1);

}

;起动文件。

初始化C程序的运行环境,然后进入C程序代码。

IMPORT|Image$$RO$$Limit|

IMPORT|Image$$RW$$Base|

IMPORT|Image$$ZI$$Base|

IMPORT|Image$$ZI$$Limit|

IMPORTMain;声明C程序中的Main()函数

AREAStart,CODE,READONLY;声明代码段Start

ENTRY;标识程序入口

CODE32;声明32位ARM指令

ResetLDRSP,=0x40003F00

;初始化C程序的运行环境

LDRR0,=|Image$$RO$$Limit|

LDRR1,=|Image$$RW$$Base|

LDRR3,=|Image$$ZI$$Base|

CMPR0,R1

BEQLOOP1

LOOP0CMPR1,R3

LDRCCR2,[R0],#4

STRCCR2,[R1],#4

BCCLOOP0

LOOP1LDRR1,=|Image$$ZI$$Limit|

MOVR2,#0

LOOP2CMPR3,R1

STRCCR2,[R3],#4

BCCLOOP2

BMain;跳转到C程序代码Main()函数

END

思考题:

在实验程序中,如何使用指针形式传递参数?

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

实验六

实验目的:

1、掌握LPC2200专用工程模板的使用。

2、掌握EASYJTAG仿真器的安装和使用。

3、熟悉LPC2000系列ARM7微控制器的GPIO控制。

实验设备:

magicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境

实验内容:

控制MAGICARM2200实验箱中的蜂鸣器报警。

先使用片外RAM进行调试,调试通过后将程序固化并脱机运行。

实验步骤:

1、连接EASYJTAG仿真器和MAGICARM2200实验箱,然后安装EASYJTAG仿真器驱动程序

2、为ADS1.2增加LPC2200专用工程模板

3、启动ADS1.2使用ARMEXECUTALBEIMAGEFORMAGICARM2200工程模板建立以个工程。

4、在user组中的MAIN.C中编写主程序代码

5、选用debugINexram生成目标,编译连接工程。

6、将MagicARM2200实验箱上的JP22跳线短接,JP20断开

程序清单:

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

*文件名:

main.c

*功能:

蜂鸣器控制。

对蜂鸣器B1进行控制,采用软件延时方法。

*使用I/O口直接控制,采用灌电流方式。

*说明:

将跳线器JP22短接,JP20断开。

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

#include"config.h"

#defineBEEPCON0x00000080//P0.7引脚控制B1,低电平蜂鸣

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

*名称:

DelayNS()

*功能:

长软件延时。

*入口参数:

dly延时参数,值越大,延时越久

*出口参数:

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

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

{

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

}

}

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

*名称:

main()

*功能:

控制蜂鸣器蜂鸣。

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

intmain(void)

{

PINSEL0=0x00000000;//设置管脚连接GPIO

IO0DIR=BEEPCON;//设置I/O为输出

while

(1)

{

IO0SET=BEEPCON;//BEEPCON=1

DelayNS(15);

IO0CLR=BEEPCON;//BEEPCON=0

DelayNS(15);

}

return(0);

}

思考题:

在实验中如何控制蜂鸣器报警的速度?

实验总结:

主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。

此项为实验成绩评定的重要依据。

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

当前位置:首页 > 经管营销 > 金融投资

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

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