秒表程序实验报告.docx

上传人:b****3 文档编号:5515802 上传时间:2022-12-18 格式:DOCX 页数:21 大小:412.89KB
下载 相关 举报
秒表程序实验报告.docx_第1页
第1页 / 共21页
秒表程序实验报告.docx_第2页
第2页 / 共21页
秒表程序实验报告.docx_第3页
第3页 / 共21页
秒表程序实验报告.docx_第4页
第4页 / 共21页
秒表程序实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

秒表程序实验报告.docx

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

秒表程序实验报告.docx

秒表程序实验报告

 

山东理工大学计算机学院

课程设计

(嵌入式秒表程序开发)

 

班级计升1001班

姓名刘海龙

学号1021051005

指导教师李业德

 

二○年月日

 

课程设计任务书及成绩评定

1、设计题目:

用超级终端控制秒表

2、题目的设计内容和要求:

通过Led显示秒表,能够根据在超级终端中输入不同的字符来控制秒表暂停和重新计时。

 

3、设计任务和要求:

3.1程序设计、调试:

要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释,并在实验系统上调试通过。

3.2课程设计说明书:

a、本次课程设计的目的和意义。

b、设计报告:

字数约2000~3000字(不包括程序清单),内容包括:

设计题目;

系统的主要功能、作用以及主要技术性能指标;

总体设计方案、工作和组成原理(框图)或设计说明、采用的技术路线等;

系统设计:

接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算;

设计总结:

对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。

c、作品的使用或操作说明。

d、设计图纸或图表(如接口电路原理图等)。

装订时将课程设计说明书附在该3页之后。

3.3设计内容不允许抄袭和复印,否则取消设计成绩。

4、工作安排:

(设计进度及完成情况)

●第一阶段:

根据题目要求查阅资料构思设计方案、进行接口电路原理图设计和程序设计以及其它准备工作。

●第二阶段:

对第一阶段完成的设计内容进行详细的检查或修改无错后,按照设计方案自行在实验系统上进行程序的输入和调试。

为便于调试和查错,程序最好采用模块化结构,一部分一部分的调试,通过反复的调试或修改直到达到设计要求为止。

●第三阶段:

按照3中的内容和要求撰写课程设计说明书。

日期

内容

2011.12.18

选择题目,查阅相关开发板及程序设计的资料分析开发板控制过程,准备实验

2011.12.22

构思设计方案,熟悉试验台,将用到的处理器地址定义成相关宏,写出开发板的初始化函数。

2012.12.25

写出开发板的初始化程序,深入调试,处理错误。

与老师同学进行交流,程序实现

2012.12.29

用AXD调试程序,并下载到开发板上运行。

2012.01.09

整理好文档,答辩

5、主要参考文献及资料:

[1].嵌入式系统原理与接口技术-------清华大学出版社

[2].嵌入式LinuxOS原理与应用--------清华大学出版社

 

学科部主任___________(签字)

 

6、成绩评定:

评语:

 

设计成绩:

指导老师:

(签字)

 

二○年月日

  

 

第一章:

概述………………………………………………………………………………………5

 

第二章实验开发平台………………………………………………………………………6

 

第三章系统分析………………………………………………………………………………7

 

第四章系统设计原理………………………………………………………………………10

第五章课程设计步骤………………………………………………………………………15

 

第六章程序代码………………………………………………………………………………27

 

第七章心得与体会……………………………………………………………………………23

 

第一章概述

A/D转换器是模拟信号源和CPU之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。

在工业控制和数据采集及许多其他领域中,A/D转换是不可缺少的。

A/D转换器有以下类型:

逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来定选择何种类型。

本实验利用ADS1.2进行开发设计,利用UJTAG2.0,AXD进行调试及运行,通过超级终端输入控制信息,通过在超级终端上输入控制信息来控制秒表。

新一代的ARM9处理器,通过全新的设计,采用了更多的晶体管,能够达到两倍以上于ARM7处理器的处理能力。

这种处理能力的提高是通过增加时钟频率和减少指令执行周期实现的。

  ARM7处理器采用3级流水线,而ARM9采用5级流水线。

增加的流水线设计提高了时钟频率和并行处理能力。

5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。

在同样的加工工艺下,ARM9TDMI处理器的时钟频率是ARM7TDMI的1.8~2.2倍。

 指令周期的改进对于处理器性能的提高有很大的帮助。

性能提高的幅度依赖于代码执行时指令的重叠,这实际上是程序本身的问题。

对于采用最高级的语言,一般来说,性能的提高在30%左右。

  以ARM9E-S为例介绍ARM9处理器的主要结构及其特点。

ARM9E-S的结构如图4所示。

其主要特点如下:

  

(1)32bit定点RISC处理器,改进型ARM/Thumb代码交织,增强性乘法器设计。

支持实时(real-time)调试;

  

(2)片内指令和数据SRAM,而且指令和数据的存储器容量可调;

  (3)片内指令和数据高速缓冲器(cache)容量从4K字节到1M字节;

  (4)设置保护单元(protectionunit),非常适合嵌入式应用中对存储器进行分段和保护;

  (5)采用AMBAAHB总线接口,为外设提供统一的地址和数据总线;

  (6)支持外部协处理器,指令和数据总线有简单的握手信令支持;

 (7)支持标准基本逻辑单元扫描测试方法学,而且支持BIST(built-in-self-test);

  (8)支持嵌入式跟踪宏单元,支持实时跟踪指令和数据。

第二章实验开发平台

2.1课程设计目的:

1)结合UART0和定时器0,设计一个秒表

2)复习UART0和定时器0的工作原理和应用

3)熟悉掌握ARM中的程序应用,将理论结合实际

4)通过本次实验,将以前学的进行结合使用,以检验自己的学习质量

5)更加熟练了ARM的实验环境

2.2课程设计仪器:

软件:

Windowsxp系统,ADS1.2集成开发环境

硬件:

1)Easy-ARM实验开发板一套

计算机一台(内装有ADS1.2及EasyJTAG仿真器)

2)单片机选型:

AT89S51

3)复位电路:

上电+按钮

4)晶振电路

5)键盘:

独立键盘+中断

6)数码管显示:

LED

7)独立按键控制

 

 

第三章系统分析

3.1系统平台初始化

初始化试验平台ARM9,包括端口地址的初始化,频率,时间等在VIVI终端输入字符,在控制语句中判断输入的字符,从而实现不同的功能。

A/D转换器在扩展板的接法如图所示,前三路通过电位器接到3.3v电源上。

 

A/D转换器在扩展板上的接法

 

3.2LED显示原理:

硬件总体设计原理图:

LED显示原理图:

原理图如下:

 

3.3总电路图

 

 

 

第四章系统设计原理

4.1中断原理:

LPC2131通过向量中断控制器(VIC)管理中断。

外设中断信号需要经过2个开关才能到达ARM内核,真正产生异常,逻辑示意图如图4.129所示。

如果在VIC中使能了相应外设的中断,外设中断才能到达VIC并向内核发送中断请求;只有使能了内核中断IRQ或者FIQ,内核才能真正产生异常。

使用VIC的IRQ中断处理过程如图4.130所示:

●用户程序首先要初始化VIC使能相关中断,然后正常运行用户程序(如图4.130中的①);

●当有IRQ中断产生时,VIC将会根据中断源设置VICVectAddr寄存器为相应中断服务程序的地址(如图4.130中的②),

●切换处理器工作模式为IRQ模式,并跳转到异常向量表的IRQ中断入口0x00000018处(如图4.130中的③);

●读取VICVectAddr寄存器的值然后放入PC程序指针,跳转到相应中断服务程序(如图4.130中的④);

●中断服务中执行相应的中断处理,清除中断标志,(如图4.130中的⑤);

●中断服务完成后,切换回原来的模式,并返回原中断点(如图4.130中的⑥)。

4.2UART0查询:

(1)特性:

●16字节收发FIFO;

●寄存器位置符合16C550工业标准;

●接收器FIFO触发点可为1,4,8和14字节;

●内置波特率发生器;

●LPC2131包含使能实现软件流控制的机制。

(2)结构:

UART接收器模块UxRx监视串行输入线RxD的有效输入。

UARTRx移位寄存器(UxRSR)通过RxD接收有效的字符。

当UxRSR接收到一个有效字符时,它将该字符传送到UARTRx缓冲寄存器FIFO中,等待CPU或主机通过主机接口进行访问。

UART发送器模块UxTx接收CPU或主机写入的数据并将数据缓存到UARTTx保持寄存器FIF(UxTHR)中。

UARTTx移位寄存器(UxTSR)读取UxTHR中的数据并将数据通过串行输出管脚TxD发送。

UART波特率发生器模块UxBRG产生UARTTx模块所使用的定时。

UxBRG模块时钟源为VPB时钟(pclk)。

主时钟与UxDLL和UxDLM寄存器所定义的除数相除得到UARTTx模块使用的时钟。

该时钟为16倍过采样时钟NBAUDOUT。

中断接口包含寄存器UxIER和UxIIR。

中断接口接收几个由UxTx和UxRx发出的单时钟宽度的使能信号。

●UxTx和UxRx的状态信息保存在UxLSR中。

●UxTx和UxRx的控制信息保存在UxLCR中。

 

4.3UART的结构如图4.16所示:

VPB接口提供CPU或主机与UART之间的通信连接。

4.4定时器:

(1)概述:

LPC2131具有2个32位可编程定时/计数器,均具有4路捕获、4比较路匹配并输出电路。

定时器对外设时钟(pclk)周期进行计数,可选择产生中断或根据4个匹配寄存器的设定,在到达指定的定时值时执行其它动作(输出高/低电平、翻转或者无动作)。

它还包括4个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择产生中断。

可用于对内部事件进行计数的间隔定时器,或者通过捕获输入实现脉宽调制,亦可作为自由运行的定时器。

定时器0和定时器1除了外设基地址以外,其它都相同。

(2)定时器特性:

●带可编程32位预分频器的32位定时器/计数器;

●具有多达4路32位的捕获通道-当输入信号跳变时可取得定时器的瞬时值,也可选择使捕获事件产生中断;

●4个32位匹配寄存器:

Ø匹配时定时器继续工作,可选择产生中断;

Ø匹配时停止定时器,可选择产生中断;

Ø匹配时复位定时器,可选择产生中断。

●多达4个对应于匹配寄存器的外部输出,具有下列特性:

Ø匹配时设置为低电平;

Ø匹配时设置为高电平;

Ø匹配时翻转;

Ø匹配时无动作。

(3)结构:

定时器0和定时器1的方框图,如下图所示:

(注:

捕获寄存器3不能用于定时器0)

(4)定时器基本操作方法:

●计算定时器的时钟频率,设置PR寄存器进行分频操作;

●设置比较匹配通道的初值及其工作模式,若是使用捕获功能,则设置捕获方式;

●若使用定时器的相关中断,则设VIC,使能中断;

●设置TCR,启动定时器。

如前所述,定时计数器时钟频率计算如下:

其中,N为PR的值。

 

第五章课程设计步骤:

1)Arm超级终端启动初始化窗口进入vivi模式如下:

2)载入编好的程序,运行ADS.12软件;

3)打开UarmJtag.exe配置为ARM9,然后点击确定:

4)观察实验现象,看程序是否正常运作,有没有达到实验预计的功能。

5)点击运行,在终端中输入控制字符控制秒表的启停

 

第六章程序代码

6.1程序说明:

本程序是结合了UART0和定时器,自编程序设计的一个可以记录20个时间值的秒表。

6.2实验程序:

主要程序代码:

#include"../inc/drivers.h"

#include"../inc/lib.h"

#include

#include

#include"inc/MotorCtrl.h"

#defineU8unsignedchar

#defineTRUE1

#defineFALSE0

#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting

#defineADCCON_FLAG(0x1<<15)

#defineADCCON_ENABLE_START_BYREAD(0x1<<1)

#defineMCLK(50700000)

#defineMOTOR_SEVER_FRE1000//20kHz

#defineMOTOR_CONT(MCLK/2/2/MOTOR_SEVER_FRE)

#defineMOTOR_MID(MOTOR_CONT/2)

 

#definerADCCON(*(volatileunsigned*)0x58000000)

#definerADCDAT0(*(volatileunsigned*)0x5800000C)

#definerUTRSTAT0(*(volatileunsigned*)0x50000010)

#definerUTRSTAT1(*(volatileunsigned*)0x50004010)

#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch)

#defineWrUTXH1(ch)(*(volatileunsignedchar*)0x50004020)=(unsignedchar)(ch)

#defineRdURXH0()(*(volatileunsignedchar*)0x50000024)

#defineRdURXH1()(*(volatileunsignedchar*)0x50004024)

#definePRSCVL(49<<6)

#defineADCCON_ENABLE_START(0x1)

#defineSTDBM(0x0<<2)

#definePRSCEN(0x1<<14)

#definelednum1con*(volatileunsignedchar*)0x08000110

#definelednum2con*(volatileunsignedchar*)0x08000112

voidARMTargetInit(void);

voidUart_SendByten(int,U8);

charUart_Getchn(char*Revdata,intUartnum,inttimeout);

voidstop(inttmp1,inttmp2);

voidinit_ADdevice()

{

//初始化

rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN);

}

intGetADresult(intchannel)

{

rADCCON=ADCCON_ENABLE_START_BYREAD|(channel<<3)|PRSCEN|PRSCVL;

hudelay(10);

while(!

(rADCCON&ADCCON_FLAG));//转换结束

return(0x3ff&rADCDAT0);//返回采样值

}

intmain(void)

{

intp,q,i,j,ADData,lastADData,count=0;

charRevdata[10];

charc1[1];

charerr;

ARMTargetInit();//开发版初始化

init_MotorPort();

init_ADdevice();

for(;;)

{

//0123456789abcdef-.0ff

intnum[19]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f,0xff};

Uart_Printf(0,"\nBegincontrolDCmotor.\t\tPressanykeytostop.\n");

for(;;)

{

while

(1)

{

lednum2con=num[0];

lednum1con=num[0];

for(j=1;j<=6;j++)

{

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

{

lednum2con=num[i];

hudelay(1000);

//Uart_SendByten(0,0xa);//换行

//Uart_SendByten(0,0xd);//回车

err=Uart_Getchn(c1,0,0);//从串口采集数据

Uart_SendByten(0,c1[0]);//显示采集的数据

if((c1[0]=='Q'))//有输入,则跳出

{

for(;;)

{

//lednum2con=num[tmp1];

//lednum1con=num[tmp2];

//Uart_SendByten(0,0xa);//换行

//Uart_SendByten(0,0xd);//回车

err=Uart_Getchn(c1,0,0);//从串口采集数据

Uart_SendByten(0,c1[0]);//显示采集的数据

if((c1[0]=='G'))//有输入,则返回

break;

}

}

hudelay(3500);

}

lednum1con=num[j];

//hudelay(3500);

}

}

}

}

 

return0;

}

voidUart_SendByten(intUartnum,U8data)//okericrong

{//inti;

if(Uartnum==0)

{

//while(!

(rUTRSTAT0&0x4));//WaituntilTHRisempty.

hudelay(10);

WrUTXH0(data);

}

else

{

//while(!

(rUTRSTAT1&0x4));//WaituntilTHRisempty.

hudelay(10);

WrUTXH1(data);

}

}

charUart_Getchn(char*Revdata,intUartnum,inttimeout)

{

if(Uartnum==0){

//while(!

(rUTRSTAT0&0x1));//Receivedataread

*Revdata=RdURXH0();

returnTRUE;

}

else{

//while(!

(rUTRSTAT1&0x1));//Receivedataread

*Revdata=RdURXH1();

returnTRUE;

}

}

/******************************************************************************************EndOfFile

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

6.3在运行本实验程序后,实验现象如下:

打开arm-超级终端窗口:

1)当按下G键时,秒表开始启动;

2)当按下Q键时,秒表停止走动;

3)最多可以记录60个时间值。

 

第七章课程设计心得与体会

1.通过这次课程设计,加强了我们动手、思考和解决问题的能力。

运用ADS1.2进行开发设计,利用UJTAG2.0,AXD进行调试及运行,通过超级终端输入控制信息及显示信息的输出的实验步骤,对各种工具如何配置及使用更加熟练,并对出现的问题学会了如何解决,提高了个人的分析问题,解决问题的能力。

2.为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。

3.我觉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。

对所用开发板的内部结构有一个系统的了解,知道开发板要用到的串口和处理器地址;

5要有一个清晰的程序设计思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路。

发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

6

平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。

而且还可以记住很多东西。

比如一些芯片的功能,平时看课本,这次看了,下次就忘了,通过动手实践让我们对各个元件映象深刻。

认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。

所以这个期末测试之后的课程设计对我们的作用是非常大的。

5.另外通过这次课程设计使我对嵌入式系统开发有了进一步的认识,更加熟练掌握了运用ADS1.2进行开发设计,利用UJTAG2.0,AXD进行调试及运行,通过超级终端输入控制信息及显示信息的输出的实验步骤,对各种工具如何配置及使用更加熟练,并对出现的

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

当前位置:首页 > 经管营销

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

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