1、嵌入式实验报告实验模块一说明:该模块分为3个子实验,每个实验均为设计性实验,实验设计的内容由简到繁,系统功能在前序实验基础上逐渐增加。实验一 实验目的:掌握输出设备程序控制的原理实验设备:TCP-I实验箱,文祥500台式电脑实验内容:采用8086与8255组成系统,8个发光二极管为输出,编程实现控制8个发光二极管一盏灯循环点亮。实验步骤:1、将输出端口引脚与LED相连 2、编程实现对8个LED的输出控制将实验箱中的8255片选信号连接到218H21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H21BH。将8255的端口A的8个引脚:PA0PA7与8个LED对
2、应相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。程序如下:程序清单:CODE SEGMENTASSUME CS:CODESTART:MOV DX,21BHMOV AL,80HOUT DX,AL;工作方式初始化MOV DX,218HMOV AL,0FEH;设置输出数据,即显示模式MOV CX,80;设置循环次数XH:OUT DX,ALROL AL,1CALL DELAY;调用延迟程序LOOP XHMOV AH,4CHINT 21H;返回dosDELAY PROC;延迟子程序PUSH CXMOV BX,2000A0:MOV CX,3000A1:LOOP A1DEC BXJNZ A0P
3、OP CX RETDELAY ENDPCODE ENDSEND START实验总结:主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据。实验二实验目的:掌握输出设备程序控制的原理的基础上进一步掌握输入设备与输出设备协同控制的原理。实验设备:TCP-I实验箱,文祥500台式电脑实验内容:采用8086与8255组成系统,8个发光二极管为输出,开关为输入。编程实现控制8个发光二极管一盏灯循环点亮,并用开关控制显示状态的暂停。实验步骤:1、将输出端口引脚与LED相连,将输入端口引脚与开关相连 2、编程实现对8个LED及开关的输入/输出控制将实验
4、箱中的8255片选信号连接到218H21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H21BH。将8255的端口A的8个引脚:PA0PA7与8个LED对应相连,将开关与端口B的PB0相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。程序如下:程序清单:CODE SEGMENTASSUME CS:CODESTART:MOV DX,21BHMOV AL,82HOUT DX,AL;工作方式初始化MOV DX,219HJIANCE:IN AL,DXTEST AL,1;检测开关的状态,控制暂停JZ JIANCEMOV DX,218HMOV AL,0FEH;设
5、置输出数据,即显示模式MOV CX,80;设置循环次数XH:OUT DX,ALROL AL,1CALL DELAY;调用延迟程序LOOP XHMOV AH,4CHINT 21H;返回dosDELAY PROC;延迟子程序PUSH CXPUSH DXPUSH AXMOV BX,2000A0:MOV CX,3000A1:LOOP A1MOV DX,219HCESHI:IN AL,DXTEST AL,1; 检测开关的状态,控制暂停JZ CESHIDEC BXJNZ A0POP AXPOP DXPOP CX RETDELAY ENDPCODE ENDSEND START实验总结:主要包括对实验结果、调
6、试过程、错误及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据。实验三实验目的:1、掌握输入/输出设备程序控制的原理 2、掌握多分支、多循环程序的编写方法和技巧实验设备:TCP-I实验箱,文祥500台式电脑实验内容:采用8086与8255组成系统,8个发光二极管为输出,开关为输入。编程实现控制8个发光二极管一盏灯循环点亮,并用开关控制显示状态的暂停,与显示模式的切换。其中模式一为一盏灯循环点亮,模式二为4盏灯交叉循环点亮。实验步骤:1、将输出端口引脚与LED相连 2、编程实现对8个LED的输出控制将实验箱中的8255片选信号连接到218H21FH,将8255的4个寄存器
7、地址(A、B、C端口及控制字寄存器端口)设置为218H21BH。将8255的端口A的8个引脚:PA0PA7与8个LED对应相连,将开关1与端口B的PB0相连,将开关2与端口B的PB1相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。程序流程图如下:程序清单:上课已讲,自己补上实验总结:主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据实验模块2该实验模块为3个分立设计型实验,旨在使学生掌握ARM7系统的基本组成和简单应用。实验四实验目的:1、掌握ARM数据处理器指令的使用方法 2、了解ARM指令灵活的第2个操作数。实验设备:m
8、agicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境实验内容:1、使用MOV和MVN指令访问ARM通用寄存器 2、使用ADD、SUB、AND、ORR、CMP、TST等指令完成数据加减运算及逻辑运算。实验步骤:1、启动ADS1.2使用ARM EXECUTABLE IMAGE工程模板建立以个工程。建立汇编源文件,编写实验程序然后添加到工程中。 2、设置工程连接地址RO BASE为0x4000 0000,RW BASE为0x4000 3000,设置调试入口地址IMAGE ENTRY POINT为0x4000 0000。 3、编译连接工程,选择【project】-【
9、debug】,启动AXD进行软件仿真调试。打开寄存器窗口(processor register),选择current项进行各寄存器值的监视。程序清单:X EQU 11 ; 定义X的值为11Y EQU 8 ; 定义Y的值为8BIT23 EQU (123) ; 定义BIT23的值为0x00800000 AREA Example3,CODE,READONLY ; 声明代码段Example3 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令 START ; 使用MOV、ADD指令实现:R8 = R3 = X + Y MOV R0,#X ; R0 = X,X的值必须是8位图数据 MO
10、V R1,#Y ; R1 = Y,Y的值必须是8位图数据 ADD R3,R0,R1 ; 即是R3 = X + Y MOV R8,R3 ; R8 (2*X)吗?若大于则R5 = R5&0xFFFF0000,否则R5 = R5|0x000000FF MOV R0,#Y ADD R0,R0,R0,LSL #2 ; 计算R0 = Y + 4*Y = 5*Y MOV R0,R0,LSR #1 ; 计算R0 = 5*Y/2 MOV R1,#X MOV R1,R1,LSL #1 ; 计算R1 = 2*X CMP R0,R1 ; 比较R0和R1,即(5*Y/2)和(2*X)进行比较 LDRHI R2,=0xF
11、FFF0000 ; 若(5*Y/2)(2*X),则R2 (2*X),则R5 = R5&R2 ORRLS R5,R5,#0x000000FF ; 若(5*Y/2)(2*X),则R5 = R5|0x000000FF ; 使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令) TST R5,#BIT23 BICNE R5,R5,#0x00000040 B START END 思考题:1、 指令MOV R0,#0X12345678是否正确?为什么?2、 更改X的值为200,Y值为163,单步运行程序,每执行一步程序的结果是多少?实验总结:主要包括对实验结果、调试过程、错误
12、及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据。实验五实验目的:掌握在C语言程序中调用汇编程序,了解ATPCS基本原则。实验设备:magicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境实验内容:在C语言程序中调用汇编子程序,实现两个整数的加法运算。实验步骤:1、1、启动ADS1.2使用ARM EXECUTABLE IMAGE工程模板建立以个工程。建立汇编源文件,编写实验程序然后添加到工程中。 2、设置工程连接地址RO BASE为0x4000 0000,RW BASE为0x4000 3000,设置调试入口地址IMAGE ENTRY
13、POINT为0x4000 0000。 3、设置工程选项,位于开始位置的起始代码段设置为startup.0的start段。 4、编译连接工程,选择【project】-【debug】,启动AXD进行软件仿真调试。程序清单:#define uint8 unsigned char #define uint32 unsigned intextern uint32 Add(uint32 x, uint32 y);uint32 sum;/ 调用汇编程序Add实现加法运算void Main(void) sum = Add(555, 168); while(1); 起动文件。初始化C程序的运行环境,然后进入C程
14、序代码。 IMPORT |Image$RO$Limit| IMPORT |Image$RW$Base| IMPORT |Image$ZI$Base| IMPORT |Image$ZI$Limit| IMPORT Main ; 声明C程序中的Main()函数 AREA Start,CODE,READONLY ; 声明代码段Start ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令 Reset LDR SP,=0x40003F00 ; 初始化C程序的运行环境 LDR R0,=|Image$RO$Limit| LDR R1,=|Image$RW$Base| LDR R3,=|I
15、mage$ZI$Base| CMP R0,R1 BEQ LOOP1LOOP0 CMP R1,R3 LDRCC R2,R0,#4 STRCC R2,R1,#4 BCC LOOP0 LOOP1 LDR R1,=|Image$ZI$Limit| MOV R2,#0LOOP2 CMP R3,R1 STRCC R2,R3,#4 BCC LOOP2 B Main ; 跳转到C程序代码Main()函数 END思考题:在实验程序中,如何使用指针形式传递参数?实验总结:主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据。实验六实验目的:1、掌握LPC22
16、00专用工程模板的使用。 2、掌握EASYJTAG仿真器的安装和使用。 3、熟悉LPC2000系列ARM7微控制器的GPIO控制。实验设备:magicarm2200,文祥500台式电脑,win98操作系统,ADS1.2集成开发环境实验内容:控制MAGIC ARM2200实验箱中的蜂鸣器报警。先使用片外RAM进行调试,调试通过后将程序固化并脱机运行。实验步骤:1、连接EASYJTAG仿真器和MAGICARM2200实验箱,然后安装EASYJTAG仿真器驱动程序 2、为ADS1.2增加LPC2200专用工程模板 3、启动ADS1.2使用ARM EXECUTALBE IMAGE FOR MAGIC
17、ARM2200工程模板建立以个工程。 4、在user组中的MAIN.C中编写主程序代码 5、选用debugINexram生成目标,编译连接工程。 6、将MagicARM2200实验箱上的JP22跳线短接,JP20断开程序清单:/* 文件名:main.c* 功 能:蜂鸣器控制。对蜂鸣器B1进行控制,采用软件延时方法。* 使用I/O口直接控制,采用灌电流方式。* 说 明:将跳线器JP22短接,JP20断开。*/#include config.h#define BEEPCON 0x00000080 / P0.7引脚控制B1,低电平蜂鸣/* 名 称:DelayNS()* 功 能:长软件延时。* 入口参
18、数:dly 延时参数,值越大,延时越久* 出口参数:无*/void DelayNS(uint32 dly) uint32 i; for(; dly0; dly-) for(i=0; i5000; i+); /* 名 称:main()* 功 能:控制蜂鸣器蜂鸣。*/int main(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