文档库 最新最全的文档下载
当前位置:文档库 › arm实验8

arm实验8

arm实验8
arm实验8

实验八 IIC 接口实验

1.实验目的

(1)熟悉S3C2410A 处理器的硬件I2C 接口的使用。

(2)了解CAT1025 EEPROM 的操作方法及注意事项。

2.实验设备

PC 机一台;MagicARM2410 教学实验开发平台一套

ADS 1.2 集成开发环境

3.实验内容

使用I2C 接口主模式向CAT1025 写入10 字节数据,然后读出校验,若校验通过则蜂鸣器

响一声,否则不断地蜂鸣报警。I2C 接口操作采用查询方式。

4.实验原理

S3C2410A 具有1 个硬件I2C 接口,可以配置为主发送、主接收、从发送和从接收等4种

操作模式。I2C 接口共包含4 个寄存器,控制寄存器IICCON 用于设置I2C 总线时钟和中断(标志)使能,还有1 位中断标志位;状态寄存器IICSTAT 除了指示当前I2C 总线状态外,还有2 位I2C 操作模式控制位和总线启动/结束控制位;数据寄存器IICDS 用来发送数据或接收数据;从机地址寄存器IICADD 用来保存S3C2410A 作I2C 从机时的器件地址。对I2C 接口进行初始化时,首先要设置相应I/O 为IICSDA、IICSCL 功能引脚,然后通过IICCON 寄存器来设置I2C 总线时钟,并使能I2C 中断(标志),通过IICSTAT 寄存器来设置I2C 接口为主发送模式。

在进行每一次数据传送之前,都需要产生IIC 总线启动信号。先把要访问的IIC 器件的

地址写入IICDS 寄存器当中,然后将IICSTAT 寄存器的d5 位置位,即可产生结束总线信号,并且将从机地址发送出去。通过读取IICCON 寄存器的值来等待总线启动和发送从机地址,通过读取IICSTAT 寄存器的值判断是否有从机应答,如果没有从机应答,则只能进行结束总线操作。

启动总线后,就可以进行多个数据的发送或接收操作。进行I2C 数据发送时,将待发送

数据写入IICDS 寄存器,然后还要写IICCON 寄存器清除I2C 中断标志,总线才开始发送数据。通过读取IICCON、IICSTAT 寄存器的值判断数据是否发送完成。

进行IIC 数据接收时,通过读取IICCON、IICSTAT 寄存器的值判断是否接收到数据,如

果接收到数据,则可以从IICDS 寄存器中读出数据。接收完一字节数据后,需要写IICCON 寄存器清除I2C 中断标志(同时,可以控制输出应答或非应答信号),总线才允许接收下一字节数据。

当一次数据发送/接收完毕后,需要产生结束总线信号。将IICSTAT 寄存器的d5 位清零,然后再清除IICCON 寄存器的d4 位(即中断标志位),即可产生结束总线信号。

5.实验步骤

(1)启动ADS 1.2,使用ARM Executable Image for DeviceARM2410 工程模板建立一个工程WR_EEPROM。

(2)在工程管理窗口中新建立一个I2C 组,新建源文件I2C.C 和I2C.H,并将它们添加到工程的I2C 组中,编写I2C 总线操作程序代码。

(3)在head 组中的config.h 文件中,加入I2C.H 头文件的包含和CAT1025 器件地址的宏定义,如以下程序清单所示。

程序清单包含IIC.H 头文件

(4)在src 组中的main.c 中编写主程序代码。

(5)选用DebugRel 生成目标,然后编译链接工程。

(6)将MagicARM2410 实验箱上的蜂鸣器跳线JP9 短接。

(7)选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。

(8)全速运行程序,若蜂鸣器响一声,表明E2PROM 读写操作成功。

6.参考代码

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

** Description: MagicARM2410实验箱的基础实验---IIC接口实验。

** 使用IIC接口主模式向CAT1025写入10字节数据,然后读出校验,若校验通

过则蜂鸣器

** 响一声,否则不断地蜂鸣报警。

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

#include "config.h"

请仔细阅读main.C、I2C.C、I2C.H三个程序文件,理解IIC的工作流程。

注意:

1.在2C.C中分别定义了硬件IIC器件工作、软件模拟IIC总线工作两种程序,理解这两段程序的用途。

2.I2C.C、I2C.H的代码不在本实验指导书中提供,另行给出。

// 读写E2PROM操作结果状态变量

int i2c_opsta = 0x00;

// 读写E2PROM的数据缓冲区

uint8 dat_buf[50];

// 定义蜂鸣器控制口

#define BEEP (1<<10) /* GPH10口 */

#define BEEP_MASK (~BEEP)

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

** Function name: DelayNS

** Descriptions: 长软件延时。

** 延时时间与系统时钟有关。

** Input: dly 延时参数,值越大,延时越久

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

void DelayNS(uint32 dly)

{

uint32 i;

for(; dly>0; dly--)

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

}

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

** Function name: RunBeep

** Descriptions: 控制蜂鸣器Be一声音。

** Input: 无

** Output: 无

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

void RunBeep(void)

{

rGPHDAT = rGPHDAT & BEEP_MASK; // 解释该条语句的功能:BEEP = 0,清除//蜂鸣器内容

DelayNS(5);

rGPHDAT = rGPHDAT | BEEP; //解释该条语句的功能:BEEP = 1,写1让蜂//鸣器响一声

DelayNS(5);

}

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

** Function name: ErrorShow

** Descriptions: 不停地蜂鸣报警

** Input: 无

** Output: 无

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

void ErrorShow(void)

{

while(1)

{

rGPHDAT = rGPHDAT & BEEP_MASK; // BEEP = 0

DelayNS(2);

rGPHDAT = rGPHDAT | BEEP; // BEEP = 1

DelayNS(2);

}

}

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

** Function name: TestEEPROM

** Descriptions: 对CAT1025的0--9地址进行数据读/写操作,如果出错,则不停地蜂鸣报警。

** Input: 无

** Output: 无

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

void TestEEPROM(void)

{

uint8 suba[2];

int rw_err;

int i;

rw_err = 0;

// 写数据测试

suba[0] = 1; // 1位子地址

suba[1] = 0x00; // 子地址

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

{

dat_buf[i] = i+'0';

}

i2c_opsta=ISendStr(CAT1025, suba, dat_buf, 10);

// 上面的函数IsendStr( )里面的参数有什么含义?CAT1025从级器件首

//地址,suba器件内部子地址,dat_buf待发送数据,10发送数据长度

for(i=0; i<10000; i++); // 等待写周期

// 读出校验

for(i=0; i<10; i++) dat_buf[i] = 0x00;

i2c_opsta=IRcvStr(CAT1025, suba, dat_buf, 10);

// 上面的函数IrcvStr( )里面的参数有什么含义?CAT1025从级器件首

//地址,suba器件内部子地址,dat_buf待接收数据,10接收数据长度

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

{

if(dat_buf[i] != (i+'0')) rw_err = 1;

}

// 上面的for( )的功能是什么?判断传输的数组是否有错

if(rw_err) ErrorShow();

}

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

** Function name: main

** Descriptions: 初始化I2C总线,然后对CAT1025进行读写测试。

** Output: 系统返回值0

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

int main(void)

{

// 初始化I/O

rGPHCON = (rGPHCON & (~(0x03<<20))) | (0x01<<20); // rGPHCON[21:20] = 01b,

设置GPH10为GPIO输出模式

rGPHDAT = rGPHDAT | BEEP; // 防止蜂鸣器响

// 初始化I2C接口

InitI2C();

// 测试EEPROM(CAT1025)

TestEEPROM();

// 测试通过

RunBeep();

while(1);

return(0);

}

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

** End Of File

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

7. 实验结果:

请在实验报告中写出观察到的实验现象及相关程序的中文解释,并按照参考程序中的红

色文字的要求完成相应工作。

实验现象:蜂鸣器响一声

附:I2C.c程序

#define IN_I2C

#include "config.h"

// I2C总线设置宏定义

#define IICCON_DACK ((1<<7) | (1<<6) | (1<<5) | (0<<0)) /* 使能ACK位,IICCLK=PCLK/512=97656 */

#define IICCON_DNACK ((0<<7) | (1<<6) | (1<<5) | (0<<0)) /* 中断使能(这样才能正确操作I2C) */

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

** Function name: InitI2C

** Descriptions: 初始化总线(100KHz总线速率)

** 设FCLK=200MHz,HCLK=100MHz,PCLK=50MHz。

** Output: 无

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

void InitI2C(void)

{

// 设置管脚连接

rGPECON = (rGPECON & 0x0FFFFFFF) | 0xA0000000; // 设置I2C口使能

rGPEUP = rGPEUP | 0xC000; // 该语句实现什么功能?

// 设置I2C控制寄存器(使能ACK位时才能接收从机的应答位)

rIICCON = IICCON_DACK;

rIICSTAT = (3<<6)|(1<<4); // 该语句实现什么功能

// 从机地址(作主机时没有用)

rIICADD = 0x10;

}

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

** Function name: START_I2C

** Descriptions: 启动总线,发送从机地址,并发送从机地址

** Input: sla 从机动地址

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Note: sla位最低位为读写控制位

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int StartI2C(uint8 sla)

{

uint32 i;

rIICDS = sla; // 设置从机地址

if(sla&0x01)

{

rIICSTAT = (2<<6)|(1<<5)|(1<<4); // 该语句实现什么功能?主接收模式,开始信//号输出,IIC总线数据输出使能有效

rIICCON = IICCON_DACK; // 若是重启总线,则需要有此操作}

else

{

rIICSTAT = (3<<6)|(1<<5)|(1<<4); // 主发送模式,发送使能,启动总线}

// 等待操作完成

while((rIICCON&0x10) == 0);

// 判断操作是否成功(总线仲裁和从机应答)

if((rIICSTAT&0x09) == 0)

{

return(TRUE);

}

else

{

// 发送结束信号

if(sla&0x01) rIICSTAT = (2<<6)|(0<<5)|(1<<4);

else rIICSTAT = (3<<6)|(0<<5)|(1<<4);

rIICCON = IICCON_DACK;

for(i=0; i<5000; i++); // 等待结束信号产生完毕

return(FALSE);

} // end of if((rIICSTAT&0x09) == 0)...else...

}

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

** Function name: I2C_SendByte

** Descriptions: 发送一字节数据,并接收应答位

** Input: dat 要发送的数据

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int I2C_SendByte(uint8 dat)

{

uint32 i;

rIICDS = dat; // 将数据写入I2C数据寄存器

rIICCON = IICCON_DACK; // 清除中断标志,允许发送数据操作

// 等待操作完成

while((rIICCON&0x10) == 0);

// 判断操作是否成功(总线仲裁和从机应答)

if((rIICSTAT&0x09) == 0)

{

return(TRUE);

}

else

{

// 发送结束信号

rIICSTAT = (3<<6)|(0<<5)|(1<<4);

rIICCON = IICCON_DACK;

for(i=0; i<5000; i++); // 等待结束信号产生完毕

return(FALSE);

}

}

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

** Function name: I2C_RcvByteNA

** Descriptions: 接上I2C总线上一字节数据,并发送非应答位

** Input: dat 用于接收数据的指针

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int I2C_RcvByteNA(uint8 *dat)

{

uint32 i;

// 允许接收数据

rIICCON = IICCON_DNACK;

// 等待接收数据操作完成

while((rIICCON&0x10) == 0);

// 判断操作是否成功(总线仲裁)

if((rIICSTAT&0x08) != 0)

{

// 发送结束信号

rIICSTAT = (2<<6)|(0<<5)|(1<<4);

rIICCON = IICCON_DACK;

for(i=0; i<5000; i++); // 等待结束信号产生完毕

return(FALSE);

}

*dat = rIICDS; // 读取数据

return(TRUE);

}

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

** Function name: I2C_RcvByteA

** Descriptions: 接上I2C总线上一字节数据,并发送应答位

** Input: dat 用于接收数据的指针

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int I2C_RcvByteA(uint8 *dat)

{

uint32 i;

// 允许接收数据

rIICCON = IICCON_DACK;

// 等待接收数据操作完成

while((rIICCON&0x10) == 0);

// 判断操作是否成功(总线仲裁)

if((rIICSTAT&0x08) != 0)

{

// 发送结束信号

rIICSTAT = (2<<6)|(0<<5)|(1<<4);

rIICCON = IICCON_DACK;

for(i=0; i<5000; i++); // 等待结束信号产生完毕

return(FALSE);

}

*dat = rIICDS; // 读取数据

return(TRUE);

}

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

** Function name: STOP_I2C

** Descriptions: 结束总线

** Input: send I2C当前模模式。主发送模式时为1,否则为0(主接收模式)

** Output: 无

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

void StopI2C(uint8 send)

{

uint32 i;

if(send)

{

rIICSTAT = (3<<6)|(0<<5)|(1<<4);// 发送结束信号

}

else

{

rIICSTAT = (2<<6)|(0<<5)|(1<<4);// 发送结束信号

}

rIICCON = IICCON_DACK;

for(i=0; i<5000; i++); // 等待结束信号产生完毕

}

//根据上面的程序,请你写出IIC主发送模式下的工作流程图

//以下内容不需要看,与本次实验内容无关

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

** Function name: ISendStr

** Descriptions: 使用硬件I2C发送数据。

** Input: sla 从机地址

** suba 器件子地址(第一字节用来表示子地址字节个数)

** s 发送数据缓冲区

** no 发送数据个数

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Note: 使用前设置好参数。程序不会更改s、suba缓冲区的数据

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int ISendStr(uint8 sla, uint8 *suba, uint8 *s, uint8 no)

{

int bak;

sla = sla & 0xFE;

if(!StartI2C(sla))

{

if(!StartI2C(sla)) return(FALSE); // 启动总线,发送从机地址}

// 发送器件子地址

bak = *suba++;

for(; bak>0; bak--)

{

if(!I2C_SendByte(*suba++)) return(FALSE);

}

// 发送数据

for(; no>0; no--)

{

if(!I2C_SendByte(*s)) return(FALSE);

s++;

}

StopI2C(1); // 结束总线

return(TRUE);

}

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

** Function name: IRcvStr

** Descriptions: 使用硬件I2C读取数据。

** Input: sla 从机地址

* suba 器件子地址缓冲区指针(第一字节用来表示子地址字节个数)

* s 接收数据缓冲区

* no 接收数据个数

** Output: 操作成功返回TRUE,仲载失败/无从机应答返回FALSE

** Note: 使用前设置好参数。程序不会更改suba缓冲区的数据

** Created by: 黄绍斌

** Created Date: 2006-01-11

**-------------------------------------------------------------------------------------------------------

** Modified by:

** Modified Date:

**------------------------------------------------------------------------------------------------------

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

int IRcvStr(uint8 sla,uint8 *suba,uint8 *s,uint8 no)

{

int bak;

bak = *suba++; // 子地址个数

if(bak > 0)

{

sla = sla & 0xFE;

if(!StartI2C(sla))

{

if(!StartI2C(sla)) return(FALSE); // 启动总线,发送从机地址(写) }

// 发送器件子地址

for(; bak>0; bak--)

{

if(!I2C_SendByte(*suba++)) return(FALSE);

}

}

// 重启总线

sla = sla | 0x01;

if(!StartI2C(sla)) return(FALSE); // 启动总线,发送从机地址(读)

// 读取数据

for(; no>1; no--)

{

if(!I2C_RcvByteA(s)) return(FALSE); // 发送数据

s++;

}

if(!I2C_RcvByteNA(s)) return(FALSE);

StopI2C(0); // 结束总线

return(TRUE);

}

实验八 公式、序列及函数的使用

实验八公式、序列及函数的使用 一、实验目的 1.熟练掌握序列填充及公式复制的方法; 2.掌握常用函数的功能及使用方法,并能用它们来解决一些实际问题。 二、实验内容与操作步骤 在Excel环境下完成以下各操作: (一)序列填充及公式的使用 1.在Excel中创建一个空白工作簿 2.利用Excel提供的数据填充功能,在Sheet1工作表中输入以下数据: ⑴在区域A1:A9中从上到下填入:2,4,6,8,10,12,14,16,18 ⑵在区域B1:B9中从上到下填入:1,2,4,8,16,32,64,128,256 ⑶在区域C1:C12中从上到下填入:JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC ⑷在区域D1:D7中从上到下填入:星期日,星期一,星期二,星期三,星期四,星期五,星期六 3.在Sheet2工作表中,利用公式计算二次函数ax2+bx+c的值,其中a=2,b=3,c=5,x从-3到4变化,每隔0.5取一个函数值。操作方法写出如下: 4.把工作簿以E81.XLS为文件名存入D:\EX8中。 (二)函数的使用 在Excel环境下打开D:\EX8\E82.XLS文件,依次完成以下各操作后按E83.XLS为文件名存入D:\EX8中。 1、统计函数的使用 ⑴单击“统计函数”工作表;

⑵在区域F3:G8中用“统计函数”计算出各分店的统计值。 操作方法是:先在F3单元及G3单元输入的计算公式,然后选定区域F3:G3后双击其填充柄。其中F3单元的公式为,G3单元的公式为。 ⑶在区域B9:E12用“统计函数”计算出各季度的统计值。 2、条件函数的使用 ⑴单击“条件函数”工作表。 ⑵计算出各学生的平均分; ⑶给定各学生的成绩等级,规则如下:平均分≥90为“A”,80≤平均分<90为“B,70≤平均分<80为“C”,60≤平均分<70为“D”,平均分<60为“E”。以此规则在区域F3:F62用IF函数确定各学生的等级。 ⑷用FREQUENCY函数在区域I2:I5中统计出平均分0~59,60~79,80~99,100各分数段的学生人数。 3、文本函数的使用 ⑴单击“文本函数”工作表; ⑵在区域A2:F32给出的数据清单中,编号的前3位为系别信息,101为数学系,102为物理系,103为化学系,据此在区域B3:B32用函数求出每位教师的系别。其中B3单元使用的公式为。 ⑶已知身份证号的第7至第10位数为出生年份,据此在区域F3:F32用函数求出每位教师的出生年份。其中F3单元使用的公式为。 4、日期函数的使用 ⑴单击“日期函数”工作表; ⑵在区域A2:F32给出的数据清单中,在区域E3:E32用日期函数求出每位职工的工龄。其中E3单元使用的公式为。 ⑶在区域F3:F32用日期函数求出每位职工的工作天数(即自参加工作以来已经过的总天数。其中F3单元使用的公式为。 5、财务函数的使用 使用 PMT 函数完成以下有关的操作: ⑴单击“财务函数”工作表; ⑵某企业向银行贷款5 万元,准备4年还清,假定当前年利率为 4 % ,在 B5 单元 计算每个月应向银行偿还贷款的数额,根据条件在 B2 : B4 补充所需内容。其中单元格B5 使用的公式为。 ⑶假定当前年利率为 5 %,为使 5 年后得到 10 万元的存款,在 D5 单元计算现在开

嵌入式实验报告二

实习二建立交叉编译环境 实习内容: 本次实验主要包括二部分内容:开发环境配置,主要有配置NFS,Samba和超级终端;编写编译程序。 1、配置NFS(实现宿主机和目标机的信息共享) 打开Linux虚拟机,点击主菜单运行系统设置->服务器设置->NFS 服务器,点击增加,在出现的界面中的目录中填入需要共享的路径,在主机中填入允许进行连接的主机的IP地址(注意:这里主机IP指的是开发板的IP)。并选择允许客户对共享目录的操作为只读或读写(注意:实验中选的是读写,一定不能忽略),如下图: 对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。然后退出,完成了NFS配置。 2、配置Samba(实现Windows和Linux系统的文件共享) ①关闭防火墙,这个地方和上面的NFS的配置是一样的。 ②配置Samba服务器 选择“系统设置”—>“服务器配置”—>“Samba服务”,进行Samba 服务器配置。首先创建Samba共享,选择“基本”选项卡,在“目录”

的文本框中输入要共享的文件,基本权限设为读/写。在“访问”选项卡中选择“允许所有用户访问”选项,通过“首选项”进行服务器配置。在“基本”选项卡中设置工作组和描述,在“安全性”选项卡中设置“验证模式”为共享,“加密口令”为否,“来宾账号”为无来宾账号。 ③设置Samba服务器IP地址(与前面的NFS的设置相同) ④启动Samba服务器 在命令行中输入service smb start,即可启动Samba服务器。 ⑤配置Windows下的IP地址 将Windows下的IP地址和Samba服务器IP地址设置在同一网段中即可(注意:这里设置IP时一定要注意在同一网段) ⑥在Windows下访问共享 在Windows中的“运行”窗口中输入Samba服务器的IP地址,就可以看见在虚拟机中共享的文件。 3、配置超级终端 ①在linux操作系统Xwindow界面下建立终端,在终端的命令行提示符后输入minicom,回车,然后就会看见minicom的启动画面,若没有启动Xwindow则在命令行提示符后直接输入minicom即可。 ② minicom启动后,先按Ctrl+A键,然后按Z键进入主配置界面,按“O”进入配置界面,按上下键选择Serial port setup,进入端口设置界面,然后按照指导书中的指示修改几个重要选项。 ③选好后按ESC键退出端口设计界面,选择Save setup as df1保存

arm实验报告最终版

ARM与嵌入式技术 实验报告 专业班级:10通信工程1班 姓名:万洁 学号:100103011125 实验日期:2013年5月28日 指导老师:郑汉麟

1、 通过实验掌握ARM 指令的特点和寻址方式; 2、 掌握简单的ARM 汇编语言的程序设计; 3、 了解集成开发环境 Embest IDE 及其开发软件的应用; 、实验环境 Embest IDE 应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备 的面向嵌入 式系统的开发和调试工具。其开发软件 Embest IDE for ARM 是集编辑器、编译 器、调试器、工程管理器( projectma nager )于一体的高度集成的窗口环境,用户可以在 Embest IDE 集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应 用程序。 三、实验步骤 1)新建工程: 运行Embest IDE 集成开发环境,选择菜单项 File 宀New Workspace ,如图一,系统弹 出一个对话框,键入文件名“ wj ”,如图二,点击 0K 按钮。将创建一个新工程,并同时创 建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程 .。 (老师提醒:不要放入Bin 文件夹中) ■ Emb?t QE Pre 亠 Educat 「販]£dii_Vww Buid frtbug D if** Qri+W 诊 Open-" Qrl*O 2)建立源文件: 点击菜单项 File T New ,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。 编辑完后,保存文件“ wj.s ”后缀,如图三,四。 Hr* Open Workspace.? 图一 ■■ rflJO IUU rl jil rd f rfl,rl Clop : h Ho. .end 图 tut vUrl:

arm实验8

实验八 IIC 接口实验 1.实验目的 (1)熟悉S3C2410A 处理器的硬件I2C 接口的使用。 (2)了解CAT1025 EEPROM 的操作方法及注意事项。 2.实验设备 PC 机一台;MagicARM2410 教学实验开发平台一套 ADS 1.2 集成开发环境 3.实验内容 使用I2C 接口主模式向CAT1025 写入10 字节数据,然后读出校验,若校验通过则蜂鸣器 响一声,否则不断地蜂鸣报警。I2C 接口操作采用查询方式。 4.实验原理 S3C2410A 具有1 个硬件I2C 接口,可以配置为主发送、主接收、从发送和从接收等4种 操作模式。I2C 接口共包含4 个寄存器,控制寄存器IICCON 用于设置I2C 总线时钟和中断(标志)使能,还有1 位中断标志位;状态寄存器IICSTAT 除了指示当前I2C 总线状态外,还有2 位I2C 操作模式控制位和总线启动/结束控制位;数据寄存器IICDS 用来发送数据或接收数据;从机地址寄存器IICADD 用来保存S3C2410A 作I2C 从机时的器件地址。对I2C 接口进行初始化时,首先要设置相应I/O 为IICSDA、IICSCL 功能引脚,然后通过IICCON 寄存器来设置I2C 总线时钟,并使能I2C 中断(标志),通过IICSTAT 寄存器来设置I2C 接口为主发送模式。 在进行每一次数据传送之前,都需要产生IIC 总线启动信号。先把要访问的IIC 器件的 地址写入IICDS 寄存器当中,然后将IICSTAT 寄存器的d5 位置位,即可产生结束总线信号,并且将从机地址发送出去。通过读取IICCON 寄存器的值来等待总线启动和发送从机地址,通过读取IICSTAT 寄存器的值判断是否有从机应答,如果没有从机应答,则只能进行结束总线操作。 启动总线后,就可以进行多个数据的发送或接收操作。进行I2C 数据发送时,将待发送 数据写入IICDS 寄存器,然后还要写IICCON 寄存器清除I2C 中断标志,总线才开始发送数据。通过读取IICCON、IICSTAT 寄存器的值判断数据是否发送完成。 进行IIC 数据接收时,通过读取IICCON、IICSTAT 寄存器的值判断是否接收到数据,如 果接收到数据,则可以从IICDS 寄存器中读出数据。接收完一字节数据后,需要写IICCON 寄存器清除I2C 中断标志(同时,可以控制输出应答或非应答信号),总线才允许接收下一字节数据。

嵌入式实验报告

嵌入式技术 实验报告 系别:计算机与科学技术系 班级:计12-1班 姓名:刘杰 学号:12101020128 总成绩: 评语: 日期:

2.在弹出的对话框中依次选择“cedevice emulator emulator kdstub”。 3.选择“Build OS”菜单的“sysgen”开始构建平台。 1.1.4连接,下载和运行平台 1.选择“Target”菜单下的“Connection option”菜单项。 2.在新的对话框中,配置连接关系 3.选择“Target”菜单下的“attach”菜单项,开始下载。 ?实验结果 操作系统定制成功,能正常运行。 ?结果截图 ?问题总结 由于对实验平台了解不够,致使操作过程中添加和删除组件时不知道该如何下手,影响整个实验进度。 实验1.2: 1.打开Platform Builder,并且打开实验1的工程,在实验1的工程基础上做本实验。

进程显示 IE信息查看

报文监测 实验1.3使用Platform Builder开发应用程序 简单实验步骤 1.打开Platform Builder。 2.选择“File”菜单下的“Open Workspace…”,然后打开实验1中创建的平台,本实验要基于 上面的实验的基础上做。 3.选择“File”菜单下的“New Project or File…”,打开“New Project or File”对话框。 4.在“Projects”选项页中选择“WCE Application”;在“Project Name”中输入项目的名字,例 如“MyApp”。 5.在“New Project Wizard – step 1 of 1”中选择“A typical Hello World Application”,点击“Finish” 按钮。 6.选择“Build”菜单中的“Build MyApp.exe”来编译应用程序。

arm嵌入式实验报告完整版

arm嵌入式实验报告完整版 篇一:ARM嵌入式系统实验报告1 郑州航空工业管理学院 嵌入式系统实验报告 第 赵成,张克新 院姓专学 系:名:业:号:电子通信工程系周振宇物联网工程 121309140 电子通信工程系 XX年3月制 实验一 ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容

1.ADS1.2 IDE的安装、环境配置及工程项目的建立;2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加;(2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制;(4)使用查表法实现程序跳转;(5)使用BX指令切换处理器状态;(6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上;内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2;集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括两个软件组件。在ADS1.2

中建立 ARM Executable Image(ARM可执行映像)类型的工程,工程目标配置为 Debug;接着,还需要对工程进行目标设置、语言设置及链接器设置;最后,配置仿真环境为ARMUL仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名: AREA XTF,CODE,READONLY 声明32位ARM指令 R0arm嵌入式实验报告完整版) ADD R0,R1,R2 3.列写出使用LDR、STR指令的汇编程序,并在关键语句后面给出相应的注释。 AREA XTF,CODE,READONLY ;声明代码段XTFENTRY ;标示程序入口CODE32 ;声明32位ARM 指令START LDR R0,=1 ;加载数据LDR R1,=2LDR R3,=ADDR_1;载符号地址 ADD R2,R0,R1;R2[R3] ;数据空间定义 AREA Data_1,DATA,ALIGN=2 ADDR_1 DCD 0 END ;结束 4.“使用多寄存器传送指令进行数据复制”汇编程序分析。 LDR R0,=SrcData ;

ARM实验指导

ADS 集成开发环境及EasyJTAG 仿真器应用 ADS 集成开发环境是ARM 公司推出的ARM 核微控制器集成开发工具,英文全称为ARM Developer Suite,成熟版本为ADS1.2。ADS1.2 支持ARM10 之前的所有ARM 系列微控制器,支持软件调试及JTAG 硬件仿真调试,支持汇编、C、C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、Windows XP、Windows2000 以及RedHat Linux上运行。 这里将简单介绍使用ADS1.2 建立工程,编译连接设置,调试操作等等。最后还介绍了基于LPC2100 系列ARM7 微控制器的工程模板的使用,EasyJTAG 仿真器的安装与使用。 一、ADS 1.2 集成开发环境的组成 ADS 1.2 由6 个部分组成,如表1 所示。 表1 ADS 1.2 的组成部分 由于用户一般直接操作的是CodeWarrior IDE 集成开发环境和AXD 调试器,所以这一章我们只介绍这两部分软件的使用,其它部分的详细说明参考ADS 1.2 的在线帮助文档或相关资料。 1. CodeWarrior IDE 简介

ADS 1.2 使用了CodeWarrior IDE 集成开发环境,并集成了ARM 汇编器、ARM 的C/C++编译器、Thumb 的C/C++编译器、ARM 连接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。CodeWarrior IDE 主窗口如图1所示。 2. AXD 调试器简介 AXD 调试器为ARM 扩展调试器(即ARM eXtended Debugger),包括ADW/ADU 的所有特性,支持硬件仿真和软件仿真(ARMulator)。AXD 能够装载映像文件到目标内存,具有单步、全速和断点等调试功能,可以观察变量、寄存器和内存的数据等等。AXD 调试器主窗口如图2 所示。

嵌入式系统综合实验一

嵌入式系统综合实验一

学号: 装 订 线 实验报告 课程名称: 嵌入式系统设计 指导老师:马永昌 成绩:________________ 实验名称:综合实验一dht11和人体感应传感器 实验类型:验证型 同组学生姓名:孙凡原 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 一、实验目的和要求 1.掌握字符设备驱动程序的基本结构和开发方法 2.掌握用户空间调用设备驱动的方法 3.掌握用户和内核的交互 二、实验内容和原理 专业:测控技术与仪器 姓名:颜睿

装订 线1.编写温湿度传感器DHT11驱动,传输打印温湿度信息 2.编写人体感应传感器驱动,控制LED灯亮灭 原理: 温湿度传感器DHT11: 1.引脚图 实际使用传感器没有NC引脚 2.数据采集 a.数据总时序 用户主机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出40bit 的数据,幵触发一次信采集。

b.主机发送起始信号 连接DHT11的DATA引脚的I/O口输出低电平,且低 电平保持时间不能小于18ms,然后等待DHT11 作出 应答信号。 装 线 订 c.检测从机应答信号 DHT11 的DATA 引脚检测到外部信号有低电平时, 等待外部信号低电平结束,延迟后DHT11 的DATA 引脚处于输出状态,输出80 微秒的低电平作为应答信 号,紧接着输出80 微秒的高电平通知外设准备接收数 据。

装 订线 d.接收数据 (1)数据判定规则 位数据“0”的格式为:50 微秒的低电平和26-28 微秒的高电平,位数据“1”的格式为:50 微秒的低电平加70微秒的高电平。 接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us,再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。 (2)数据格式 一次传送40 位数据,高位先出 8bit 湿度整数数据+ 8bit 湿度小数数据+8bit 温度整

《嵌入式系统与开发》ARM汇编及接口设计-实验报告 - 答案

《ARM汇编与接口设计》 实验报告 学生姓名: 学号: 专业班级: 指导教师: 完成时间:

实验1 ARM汇编与S3C6410接口设计 一.实验目的 熟悉裸板开发环境构建,掌握利用ADS开发工具或arm-linux-gcc开发工具编写裸板系统下程序的基本步骤和方法,掌握裸板程序的基本架构,熟悉汇编设计的基本指令和伪指令的使用方法,掌握S3C6410接口开发基本方法和步骤,并编程设计LED流水灯和看门狗程序设计。深刻体会软件控制硬件工作的基本思路和方法。 二.实验内容 实验1.1 熟悉ADS开发工具或交叉编译器arm-linux-gcc的安装和基本使用 实验1.2 LED流水灯实验 实验1.3 看门狗实验 三.预备知识 C 语言、微机接口等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 ADS开发工具安装和使用 步骤: 第一步,ADS工具安装在 平台 B.linux平台)下,按照类似于VC++ 第二步,利用ADS打开demo项目模板,查看ADS中配置中几个重要选项, 第三步,参照demo项目代码结构,编写裸板程序完成两整数加和两整数减函数,分别用C代码实现,写出完成汇编启动代码和C代码。 第四步 用ADS自带的ARM的汇编代码,b被编译器优化到寄存器中,函数返回汇编语句 。 5.2 arm-linux-gcc编译工具安装和使用

第一步:arm-linux-gcc(A. WINDOWS平台 B.linux平台)下,按照类似于gcc 第二步:参看相关实验样例,一般基于arm-linux-gcc编译的裸板程序通常包含汇编启动代码文件,C功能代码文件和make工具文件Makefile。 5.3 LED流水灯设计实验 本实验要求使用arm-linux-gcc编译。备注,控制LED1的GPIO口为GPM0 步骤1:编写代码 参看相关实验样例,编写LED1报警灯代码,实现LED1以1秒左右的时间进行闪烁,要求LED 驱动代码编写在leddrv.c中,功能代码编写在main.c文件中,启动代码文件和Makefile文件参照实验样例代码来设计。 则启动代码文件内容: 功能层main.c文件内容: 步骤2:编译 编译步骤为: 步骤3:加载到内存中运行

armhelloworld实验.

实验一HelloWorld 一、实验目标: 1.了解实验箱的使用; 2.了解ADS的使用(建立新的工程并正确设置和编译); 3.调试HelloWorld程序,体会整个过程; 4.了解三个警告,如何消除?(选做); 二、任务: 1、给出建立新工程的步骤; 1、首先了解ADS软件使用 ADS非常易于初学者上手,该软件的操作尤为简单,对于一般ARM程序的开发,可以分为以下几个过程:编写ARM代码->译、链接产生可执行二进制代码->利用实验箱上ARM系统自带的Bootloader,通过串口大师把可执行代码通过计算机串口下载到硬件板->实验系统在接受完下载的代码后即自动执行->查看实验结果。 下面详细的讲述如何利用该软件开发适合本实验系统的ARM程序。 1.首先在开始菜单中,点击“程序->ARM Developer Suite V1.2->CodeWarrior for ARM Developer Suite”,即可弹出如图2.1.13所示界面。

图2.1.13 ADS软件界面 2.点击“File->New”,会弹出如图2.1.14所示的建立新工程界面。 3.在Project中选择“ARM Executable Image”选择好路径,并在工程名中输入HelloWorld,后点击【确定】,即出现如图2.1.15所示的空的工程界面。 4.此时的工程是一个空的,必须加入相应的代码才行。首先将实验1文件夹下面的inc文件夹和src文件夹拷贝到刚刚建立的HelloWorld文件夹下面;然后在ADS软件中的HelloWorld工程窗口的空白处点击鼠标右键,选择“Add Files…”,选择刚刚拷贝的src文件夹下面的所有文件,如图2.1.16所示。 5.点击【打开】后,会出现如图2.1.17所示的编译类型对话框。

Python 实验8 函数1

实验8 函数(一)实验目的: 1、理解自定义函数过程的定义与调用方法; 2、掌握自定义函数的定义与调用方法; 3、理解函数中的参数的作用; 实验内容: 1、编写一函数Fabonacci(n),其中参数n代表第n 次的迭代。While循环 def fib(n): if n==1 or n==2: return 1 a=1 b=1 i=2 while True: c=a+b a=b b=c i+=1 #第i次迭代,也就就是第i个数 if i==n: return c break def main(): n=input("Enter a number of generation:") print fib(n) main() 或者用for循环 def fib(n): a=1 b=1 c=0 if n==1 or n==2: return 1 else: for i in range(3,n+1): c=a+b a=b b=c return c def main(): n=input("enter n:") print fib(n) main() 2、编写一函数Prime(n),对于已知正整数n,判断该数就是否为素数,如果就是素数,返回True,否则返回 False。 def prime(n): if n<2: return False a=0 for i in range(1,n+1): if n%i==0: a+=1 if a>2: return False else: return True def main(): n=input("Enter a number:") print prime(n) main() Or: def prime(n): if n<2: return False if n==2: return True for i in range(2,n): if n%i==0: return False return True def main(): n=input("Enter a number:") print prime(n) main()

嵌入式实验报告

目录 实验一跑马灯实验 (1) 实验二按键输入实验 (3) 实验三串口实验 (5) 实验四外部中断实验 (8) 实验五独立看门狗实验 (11) 实验七定时器中断实验 (13) 实验十三ADC实验 (15) 实验十五DMA实验 (17) 实验十六I2C实验 (21) 实验十七SPI实验 (24) 实验二十一红外遥控实验 (27) 实验二十二DS18B20实验 (30)

实验一跑马灯实验 一.实验简介 我的第一个实验,跑马灯实验。 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP 下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。 四.实验设备 硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程

6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.使用JLINK下载到实验板 11.单步调试 12.记录实验过程,撰写实验报告 六.实验结果及测试 源代码: 两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。七.实验总结 通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。

ARM实验报告

湖南科技学院ARM嵌入式设计实验报告题目:基于ARM嵌入式系统跑马灯的设计 专业:电子信息工程 班级:电信1102班 姓名:段相辉 学号:201106002232 指导教师:陈光辉 2014年11 月

目录 摘要............................................. 错误!未定义书签。ABSTRACT .......................................... Ⅰ错误!未定义书签。 1 题目要求 (1) 2 设计软件的安装 (2) 3 开发平台的搭建 (22) 4 项目设计 (23) 4.1 设计思路概述 (2) 4.1.1 设计层次介绍 (2) 4.1.2 设计模块介绍 (3) 5总结 (6) 致谢 (25) 参考文献 (26) 附录 (27)

引言 随着生活水平的提高和IT技术的进步,8位处理器的处理能力已经不能满足嵌入式系统的需要了;而16位处理器在性能和成本上都没有很大的突破。并且在8位机的开发中,大多使用汇编语言来编写用户程序。这使得程序的可维护性、易移植性等都受到了极大的挑战。正是基于此,ARM公司适时的推出了一系列的32位嵌入式微控制器。目前广泛使用的是ARM7和ARM9系列,ARM7TDMI内核的ARM7处理器广泛应用于工业控制、仪器仪表、汽车电子、通讯、消费电子等嵌入式设备。

1、题目要求 构建嵌入式Linux开发环境,熟悉linux的命令操作,并在嵌入式Linux 开发环境中设计跑马灯。 2、设计软件的安装 2.1 VMware Player简介 (a) VMware Workstation是一个“虚拟机”软件.它使用户可以在一台机 器上同时运行多个操作系统. (b) VMware Player是VMware Workstation的精简版,最初只是虚拟机的“播放机”, 但最新版本的已经具有创建虚拟机的功能.具有体积小,使用灵活,免费等特点. (c) 多个操作系统在主系统的平台上,可像Windows应用程序那样切换.而且每个操作系统都可以进行虚拟的分区、配置而不影响真实硬盘的数据. (d) 利VMware Player创建虚拟机

嵌入式实验结果

源程序a ; NAME: asm1_a.s ; Author: TYW /WUHAN R&D Center,Embest ; Desc: ARM instruction examples ; History: 2007.5.1 x EQU 45 ; x=45 y EQU 64 ; y=64/ stack_top EQU 0x30200000 ; define the top address for stacks export Reset_Handler AREA text,CODE,READONL Y export Reset_Handler ; code start */ ldr sp, =stack_top mov r0, #x ; put x value into R0 str r0, [sp] ; save the value of R0 into stacks mov r0, #y ; put y value into R0 ldr r1, [sp] ; read the data from stack,and put it into R1 add r0, r0, r1 ;R0=R0+R1 str r0, [sp] stop b stop ; end the code ,cycling end 调试脚本 //*** <<< Use Configuration !disalbe! Wizard in Context Menu >>> *** //Name: DebugINRam.ini FUNC void Setup (void) { // Program Entry Point, .AXF File download Address PC = 0x030000000; } //map 0x00000000,0x0200200 READ WRITE exec map 0x30000000,0x30200000 read WRITE exec Setup(); // Setup for Running //g,main 源程序b ;# NAME: ARMcode.s * ;# Author: EWUHAN R & D Center, st * ;# Desc: ARMcode examples * ;# copy words from src to dst ;# History: shw.He 2005.02.22 GLOBAL Reset_Handler area start,code,readwrite entry code32

ARM实验报告--Thumb

XI`AN TECHNOLOGICAL UNIVERSITY 实验报告

西安工业大学实验报告 一丶实验目的 通过实验掌握ARM处理器16位Thumb汇编指令使用方法 二、实验内容 使用Thumb汇编语言,完成基本reg/men访问,以及简单的算术/逻辑运算。 使用Thumb汇编语言,完成较为复杂的程序分支,领会立即数大小的限制,并体会ARM与Thunb的区别。 三、实验原理 ARM 处理器共有两种工作状态: ARM:32 位,这种状态下执行字对准的ARM 指令; Thumb:16 位,这种状态下执行半字对准的Thumb 指令 在Thumb 状态下,程序计数器PC 使用位1 选择另一个半字。 注意: ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM 处理器在两种工作状态之间可以切换。 1)进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort 和SWI)返回时,自动切换到Thumb 状态。 2) 进入ARM 状态。当操作数寄存器的状态位0 为0 时,执行BX 指令进入ARM 状

态。处理器进行异常处理(IRQ,FIQ,Undef,Abort 和SWI)。在此情况下,把PC 方入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。 四、实验过程 1)打开Embest IDE Pro软件,选择菜单项File-->New Workspace,系统弹出对话框,创建名为TEXT的新工程,并同时创建一个与工程名相同的工作区。此时在工作窗口将打开该工作区和工程。 2)建立源文件: 点击菜单项File-->New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位玉窗口中第一行,将程序所需的源文件代码输入,编辑完后,进行保存,保存文件格式为_a.s文件。 3)添加源文件: 选择Project-->Add To Project-->File命令,弹出文件选择对话框,在工程目录下选择刚才建立的_a.s格式的源文件 4)基本配置: 选择菜单项Project-->Settings,弹出工程设置对话框,在工程设置对话框中,选择Processor设置对话框,选择ARM7对目标板所用处理器进行配置。

实验八 函数含答案

实验八函数 【目的与要求】 1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 【上机内容】 【一般示例】 【例1】将打印18个"*"组成星形线定义为一个返回值和形参列表都为空的函数,通过主函数调用它。 #include void Star(void) //画星形线。函数没有返回值,形参列表也为空 { int i; for(i=1;i<=18;i++) printf("*"); //18个"*"组成星形线 printf("\n"); return ; //返回值类型为void,return后不带表达式,此句可省略 } int main() { Star( ); //单独的函数调用语句,实参表为空,但必须保留括号 printf("I love C language!\n"); Star( ); return 0; } 【例2】调用prime 函数以每行5个素数的格式输出100到200之间的所有素数。

#include #include int prime(int m) //判断素数函数定义 { int i,k,f=1 ; //函数内定义3个变量 if (m==1) //形参若为1 f=0 ; //形参若为1,非素数 k=(int)sqrt(m); for (i=2; i<=k;i++) if (m%i==0) //m被某除数整除 f=0 ; //则不是素数 return f ; //用return语句返回 } //函数体结束 int main( ) { int i,count=0; for (i=101;i<200;i=i+2) //用i作为循环控制变量,从101开始,步长为2 if (prime(i)) //对每一个i,调用prime函数判断它是否为素数 { printf("%5d",i); //如果是素数,输出该素数i count++ ; //素数个数加1 if (count%5==0 ) //每输出5个素数换一行 printf("\n"); }

ARM实验报告

ARM嵌入式 实验报告 姓名:冯贤成 学号:120101021106 专业:电子信息工程 指导老师:郑汉麟

ARM嵌入式系统 一、实验目的 1、通过实验掌握ARM指令的特点和寻址方式; 2、掌握简单的ARM汇编语言的程序设计; 3、了解集成开发环境Embest IDE及其开发软件的应用; 二、实验平台 Windows 7系统下的Embest IDE嵌入式软件开发平台 三、实验内容 1.编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位) 程序如下: .global _start .text _start: MOV R2,#0x80000003 /*把第一个立即数送进R2*/ MOV R3,#0x40000013 /*把第二个立即数送进R3*/ AND R0,R2,#0xff000000 /*取R2高8位到R0*/ AND R3,R3,#0xffffff00 /*R3低8位清零*/ ORR R3,R3,R0,lsr #24 /*R0逻辑右移24位后与R3相或,结果送进R3*/ stop: b stop .end 调试结果: ①Download下载: ②把第一个立即数送进R2:

③把第二个立即数送进R3: ④取R2高8位到R0: ⑤R3低8位清零: ⑥R0逻辑右移24位后与R3相或,结果送进R3:

单步跟踪后的结果,存储器及寄存器的结果显示: 2.编程实现64位的加法运算,要求【R1:R0】+【R3:R2】结果放回【R1:R0】。

程序如下: .global _start .text _start: MOV R0,#12 /R0=12 MOV R1,#6 /R1=6 MOV R2,#8 /R2=8 MOV R3,#9 /R3=9 ADDS R0,R0,R2 /R0等于低32位相加,并影响标志位 ADC R1,R1,R3 /R1等于高32位相加,并加上低位进位stop: b stop .end 调试结果: ①Download下载: ②将12赋给R0 ③将6赋给R1

STM32-ARM-综合实验报告(南京航空航天大学)

南京航空航天大学研究生实验报告 项目名称:ARM嵌入式系统设计与应用技术 设计专题:综合实验二类:数据采集和显示系统 班级: 小组成员 (1)姓名:学号:学科:电话:Email:导师: (2)姓名:学号:学科:电话:Email:导师: (3)姓名:学号:学科:电话:Email:导师: 20XX年XX月XX日

一、本实验主要内容及要求 本次综合实验的主要内容是,利用ARM内部的A/D转换器进行数据采集和显示系统设计。实验要求如下: 1、采用STM32开发板上的12位A/D转换器(参考电压3.3V)采集电位器测 试点的电压值。电位器与A/D的输入通道14相连接。 2、当按下Key键之后任意旋转电位器,利用A/D转化器采样20组电压值(每 1ms采样一次,使用定时器TIM2计时),并在液晶屏幕上显示当前电压值,当再次按下Key键之后将20组电压值存入到FLASH中。 3、复位后按下Temper键将保存的20组电压值在液晶屏幕中央绘制出波形(要 求各点连接,每个点为5个像素,要有坐标系)。 1)横坐标为“1~20”,每个横坐标之间的间隔为8个像素点; 2)纵坐标为电压值“0V,1V,2V,3V,4V”,相邻坐标之间的为10个像素 点。 4、在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。可利用STM32 开发板的资源扩展其他自定义功能(如增加温度采集通道、当前采样频率显示和设置、采样率调节等)。 二、硬件框图 本次实验的硬件部分主要是计算机和STM32两个部分,对于计算机部分不做过多的介绍,下面着重介绍STM32中的与本实验相关模块。 1.1 ADC模块 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。 STM32教学平台的电位器是信号是连接到STM32的PC4口的,PC4正好是A/D转换的通道14,STM32实验教学平台上也标注了ADC12_14(14通道),电位器硬件框图如图1所示,ADC硬件框图如图1所示。

ARM实验三 ARM的串行口实验

实验三 ARM的串行口实验 一、实验目的 1.掌握ARM的串行口工作原理。 2.学习编程实现ARM的UART通讯。 3.掌握CPU利用串口通讯的方法。 二、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯: ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。 三、预备知识 1.用EWARM集成开发环境,编写和调试程序的基本过程。 2.ARM应用程序的框架结构。 3、了解串行总线。 四、实验设备及工具 硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG 仿真器、串口线。 软件:PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。 五、实验原理及说明 1.异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

相关文档