ARM课外实验报告书.docx

上传人:b****9 文档编号:28614073 上传时间:2023-07-19 格式:DOCX 页数:20 大小:62.54KB
下载 相关 举报
ARM课外实验报告书.docx_第1页
第1页 / 共20页
ARM课外实验报告书.docx_第2页
第2页 / 共20页
ARM课外实验报告书.docx_第3页
第3页 / 共20页
ARM课外实验报告书.docx_第4页
第4页 / 共20页
ARM课外实验报告书.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

ARM课外实验报告书.docx

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

ARM课外实验报告书.docx

ARM课外实验报告书

 

ARM课外实验报告书

 

系部名称

学生姓名

专业名称

班级

 

实验一UART通信的试验

一、实习内容:

通过Easy-ARM1138产生信号,向PC机发送信号,PC机通过超级终端接收信号。

二、实验板介绍:

通过232通信、485器件进行连接。

三、原理简述:

UART(UniversalAsynchronousReceiver/Transmitter)即通用异步收发传输器,工作于数据链路层。

包含了RS-232、RS-422、RS-485串口通信和红外(IrDA)等等。

UART协议作为一种低速通信协议,广泛应用于通信领域等各种场合。

UART基本可分为并口通信及串口通信两种。

 异步串口通信协议作为UART的一种,工作原理是将传输数据的每个字符一位接一位地传输。

图一给出了其工作模式:

   其中各位的意义如下:

   起始位:

先发出一个逻辑”0”的信号,表示传输字符的开始。

   资料位:

紧接着起始位之后。

资料位的个数可以是4、5、6、7、8等,构成一个字符。

通常采用ASCII码。

从最低位开始传送,靠时钟定位。

   奇偶校验位:

资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

   停止位:

它是一个字符数据的结束标志。

可以是1位、1.5位、2位的高电平。

   空闲位:

处于逻辑“1”状态,表示当前线路上没有资料传送。

四.实习步骤:

1.根据要求编写程序,接着连接电路,注意每个端口的对应正确,然后设置超级终端的参数,最后将程序下载到ARM板子中进行调试。

2.程序段的相关分析:

是控制LED闪烁发光的简单例程。

该程序实际上是实用工程模板Demo的一个应用,直接从main()函数开始编写。

在main()函数的前面,定义了LED所在的GPIO端口和管脚。

在main()里,首先定义了一个变量ulClock,在调用函数clockInit()时被初始化为当前的系统时钟频率,在后面对库函数SysCtlDelay()调用时会用到该变量。

控制LED分3步走:

调用函数SysCtlPeriEnable()使能LED所在的GPIO模块,调用函数GPIOPinTypeOut()配置LED所在的GPIO管脚为推挽输出,调用GPIOPinWrite()对LED所在的GPIO管脚写0和写1实现LED闪烁发光的效果。

部分程序分析如下:

主函数(程序入口)

intmain(void)

{

jtagWait();

clockInit();

SysCtlPeriEnable(LED_PERIPH);

GPIOPinTypeOut(LED_PORT,LED_PIN);

for(;;)

{

GPIOPinWrite(LED_PORT,LED_PIN,0x00);//点亮LED

SysCtlDelay(150*(TheSysClock/3000));

GPIOPinWrite(LED_PORT,LED_PIN,0xFF);//熄灭LED

SysCtlDelay(850*(TheSysClock/3000));

}

#include"systemInit.h"

#include"uartGetPut.h"

#include

分析:

在程序中设置自己的班级及序号

intmain(void)//主函数(程序入口)

{

chars[40];

jtagWait();

clockInit();//时钟初始化:

晶振,6MHz

uartInit();

sprintf(s,"\r\n");

uartPuts(s);

sprintf(s,"23456=0x%X\r\n",23456);

uartPuts(s);

for(;;)

{

}

}

 

五.实习小结:

这次试验我掌握了RS232的通信原理以及超级终端的使用方法,我们可一输入一个字符串,然后在超级终端接收相同的字符串,当然我们可以修改程序让输出汉字。

当我们把RS232的板子换成RS485的板子,我们就可以做RS485的串口通信试验了。

也就是说,我们可以通过板子不同可以实现不同的试验,我们可以让数码管根据要求显示数字,要求LED按不同的规律来闪烁。

也可以让LCD来显示字。

 

实验三温度传感器实验

一.实验内容:

首先我们应该了解相关的名词含义ADC:

Analog-to-DigitalConverter的缩写,指模/数转换器或者模拟/数字转换器。

真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。

在此实验中我们主要了解和搭建室内温度的采集及A/D转换。

二.实验板介绍:

在实验板的搭建过程中用到了Easyarm138和的A/D转换模块,其可以完成温度信号的采集及处理TMP123的功能主要是将被测温度

模拟量转换成数字量,

把数字化信号编码成时间比率(t1/t2)

形式。

T1和t2

时间上是连续

用同一个时钟即可获

二者

比率。

温度仅与时间比率有关,而与时钟频率无关,

时钟频率发生波动,也会

解码过程中被数字滤波器滤掉。

TMP123既可以检测温度,也可

单片机实现温度控制功能,适用于远程温度检测、微机或电子设备

温度监视器及工业过程控制等领域。

三.实验原理:

1.模数转换原理:

AD模数转换原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。

其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。

2.通过TMP123将采集到的模拟温度连续信号进行模拟信号的采集并进行处理,通过与138板进行连接数据的传送通过USB与电脑进行连接,通过超级终端我们可以观测到室内温度的变换情况,与温度计算有关的计算公式实现如下:

10位的ADC模块集成有一个温度传感器,可以用来获取芯片的当前温度。

在温度传感器特性图里,给出了以下公式:

Vsenso=2.7-(T+55)/75,单位:

V

设Vsenso对应的ADC采样值为N,2.7V对应N1,(T+55)/75对应N2已知:

N1*(3/1024)=2.7N2*(3/1024)=(T+55)/75由此得到:

N=N1-N2=2.7/(3/1024)-((T+55)/75)/(3/1024)解得:

T=(151040-225*N)/1024结论:

ADC配置为温度传感器模式后,只要得到ADC采样值N,就能推算出当前的温度T。

温度及电压测试图:

3.实习步骤

熟悉实验过程中要用到的138有关模块及相关的拐角功能,其次按实际的电路的原理图进行电路的连接,将已经调试好的程序下载致IAR软件中同时并打开电脑的超级终端,然后运行此时我们可以在超级终端观测到实时的室内温度。

四.重要的ADC主函数如下:

tBooleanADC_EndFlag=false;

//定义ADC转换结束的标志

//系统节拍定时器初始化

voidSysTickInit(void)

{

SysTickPeriodSet(TheSysClock);

//设置SysTick计数器的周期值

SysTickIntEnable();

//使能SysTick中断

IntMasterEnable();

//使能处理器中断

SysTickEnable();

//使能SysTick计数器

}//ADC初始化

voidadcInit(void)

{

SysCtlPeriEnable(SYSCTL_PERIPH_ADC);

SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);

//设置ADC采样速率

ADCSequDisable(ADC_BASE,

//采样序列配置:

ADC基址,采样序列编号,触发事件,采样优先级

ADCSequConfig(ADC_BASE,3,ADC_TRIGGER_PROCESSOR,0);

//采样步进设置:

ADC基址,采样序列编号,步值,通道设置

ADCSequStepConfig(ADC_BASE,3,0,ADC_CTL_TS|

ADC_CTL_END|

ADC_CTL_IE);

ADCIntEnable(ADC_BASE,3);

//使能ADC中断

IntEnable(INT_ADC3);

//使能ADC采样序列中断

IntMasterEnable();

//使能处理器中断

ADCSequEnable(ADC_BASE,3);

//使能采样序列

}

//ADC采样

unsignedlongadcSample(void)

{

unsignedlongulValue;

ADCProcessorTrigger(ADC_BASE,3);

//处理器触发采样序列

while(!

ADC_EndFlag);

//等待采样结束

ADC_EndFlag=false;

//清除ADC采样结束标志

ADCSequDataGet(ADC_BASE,3,&ulValue);

//读取ADC转换结果

return(ulValue);

}

//显示芯片温度值

voidtmpDisplay(unsignedlongulValue)

{

unsignedlongulTmp;

charcBuf[40];

ulTmp=151040UL-225*ulValue;

sprintf(cBuf,"%ld.",ulTmp/1024);

uartPuts(cBuf);

sprintf(cBuf,"%ld",(ulTmp%1024)/102);

uartPuts(cBuf);

uartPuts("℃\r\n");

}intmain(void)

{

unsignedlongulValue;

jtagWait();

clockInit();

//时钟初始化:

PLL,12.5MHz

uartInit();

//UART初始化

adcInit();

//ADC初始化

SysTickInit();

{

SysCtlSleep();

//睡眠,减少耗电以降低温度

ulValue=adcSample();

tmpDisplay(ulValue);

}}

//SysTick计数器的中断服务函数

voidSysTick_ISR(void)

{

//仅用于唤醒CPU,而不需要做其他事情

}

//ADC采样序列3的中断

voidADC_Sequence_3_ISR(void)

{unsignedlongulStatus;

ulStatus=ADCIntStatus(ADC_BASE,3,true);

//读取中断状态

ADCIntClear(ADC_BASE,3);

//清除中断状态,重要

if(ulStatus!

=0)

//如果中断状态有效

{

ADC_EndFlag=true;

//置位ADC采样结束标志

}

}

 

五.实习小结

1.实验的过程中熟悉了常见的模数转换器的原理及实际的工作参数,尤其是TMP123的集成电路设计的内部构造,这对数电知识和模电知识的运用有着密切的联系,并了解了其外围电路的连接的机理,尤其是在和单片机的连接上,TMP123既可以检测温度,也可

单片机实现温度控制功能,适用于远程温度检测、微机或电子设备

温度监视器及工业过程控制等领域。

2.A/D转换的技术在模拟到数字的领域开通了道路,因为在数字领域信息的传递可以离散化,这可以较方便的在计算机及通信中进行传输,同时由于现代的集成电路的不断的发展,在局部及较远的距离传输时数字信号有着较理想的作用,这也是数字信号的优势。

而与硬件的相关软件也能更好的处理数字领域的域值。

 

实验四液晶显示实验

1.实验内容:

通过实验了解和掌握和了解基本的黑白液晶显示器显示原理,并利用其显示所要得到实验目的,并掌握4*4键盘工作的简单原理。

2.实验板介绍(器件):

1.4*4的按键矩阵模块。

2.黑白液晶显示器模块

3.实验原理:

1.矩阵式键盘的结构与工作原理;在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

2.显示原理:

LCD液晶显示器的真实解析度定义为“定点形式”,所以我们在使用LCD显示器时,这样画面所呈现的影像将会越清晰,使用起来感觉也会越好。

3.

4.实验步骤:

1.搭建好电路之后,在IAR环境下进行程序的调试并在显示屏上点阵显示出目的的结果。

部分的程序段如下:

#defineSysCtlPeriEnableSysCtlPeripheralEnable

#defineSysCtlPeriDisableSysCtlPeripheralDisable

#defineGPIOPinTypeInGPIOPinTypeGPIOInput

#defineGPIOPinTypeOutGPIOPinTypeGPIOOutput

//定义KEY

#defineKEY_PERIPHSYSCTL_PERIPH_GPIOG

#defineKEY_PORTGPIO_PORTG_BASE

#defineKEY_PINGPIO_PIN_5

//防止JTAG失效

voidJTAG_Wait(void)

{

SysCtlPeriEnable(KEY_PERIPH);//使能KEY所在的GPIO端口

GPIOPinTypeIn(KEY_PORT,KEY_PIN);

//设置KEY所在管脚为输入,PG5

if(GPIOPinRead(KEY_PORT,KEY_PIN)==0x00)

//如果复位时按下KEY,则进入

{

for(;;);

//死循环,以等待JTAG连接

}

SysCtlPeriDisable(KEY_PERIPH);

//禁止KEY所在的GPIO端口

}

//定义全局的系统时钟变量

unsignedlongTheSysClock=12000000UL;

//系统初始化

voidSystemInit(void)

{

SysCtlLDOSet(SYSCTL_LDO_2_50V);

//设置LDO输出电压

SysCtlClockSet(SYSCTL_USE_OSC|

//系统时钟设置,采用主振荡器

SYSCTL_OSC_MAIN|

SYSCTL_XTAL_6MHZ|

SYSCTL_SYSDIV_1);

/*

SysCtlLDOSet(SYSCTL_LDO_2_75V);

//配置PLL前将LDO电压设置为2.75V

SysCtlClockSet(SYSCTL_USE_PLL|

//系统时钟设置,采用PLL

SYSCTL_OSC_MAIN|

//主振荡器

SYSCTL_XTAL_6MHZ|

//外接6MHz晶振

SYSCTL_SYSDIV_10);

//分频结果为20MHz

*/

TheSysClock=SysCtlClockGet();

//获取系统时钟,单位:

Hz

LCD_Init();

//初始化LED1和LED2

}

unsignedchars1[]={"张坤博西安邮电学院"};

unsignedchar*p1=s1;

unsignedchars2[]={"张坤博电子零六零七"};

unsignedchar*p2=s2;

unsignedchars3[]={"张坤博电子零六零七"};

unsignedchar*p3=s3;

unsignedchars4[]={"张坤博电子零六零七”};

unsignedchar*p4=s4;

unsignedchars5[]={"点阵式液晶屏"};

unsignedchar*p5=s5;

unsignedchar*p6=s6;

unsignedchars7[]={"省"};

unsignedchar*p7=s7;

unsignedchars8[]={"心"};

unsignedchar*p8=s8;

unsignedchars9[]={"波形:

方波"};

unsignedchar*p9=s9;

unsignedchars10[]={"频率:

1MHZ"};

unsignedchar*p10=s10;

unsignedchars11[]={":

正弦波"};

unsignedchar*p11=s11;

unsignedchars12[]={":

方波"};

unsignedchar*p12=s12;

unsignedchars13[]={":

三角波"};

unsignedchar*p13=s13;

unsignedchars14[]={":

锯齿波"};

unsignedchar*p14=s4;

//主函数(程序入口)

intmain(void)

{intap;

unsignedlongi;

JTAG_Wait();

//防止JTAG失效,重要!

while

(1)

{

SystemInit();

LCMDisplayPicture_4();Delay(2500*(TheSysClock/4000));

SystemInit();

LCMDisplayPicture_5();Delay(2500*(TheSysClock/4000));

SystemInit();

LCMDisplayPicture_6();

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

{

WRCM(0X91+i);

HANZI(s9);

}

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

{

WRCM(0X89+i);

HANZI(s10);

}

Delay(2500*(TheSysClock/4000));

SystemInit();

LCMDisplayPicture_7();

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

{

WRCM(0X81+i);

HANZI(s11);

}

//系统初始

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

{

WRCM(0X91+i);

HANZI(s12);

}

//系统初始化

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

{

WRCM(0X89+i);

HANZI(s13);

}

//系统初始化

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

{WRCM(0X99+i);

HANZI(s14);

}

Delay(2500*(TheSysClock/4000));

SystemInit();

LCMDisplayPicture_3();Delay(2500*(TheSysClock/4000));

SystemInit();

LCMDisplayPicture();

Delay(2500*(TheSysClock/4000));SystemInit();

LCMDisplayPicture_1();

Delay(2500*(TheSysClock/4000));SystemInit();

LCMDisplayPicture_2();

Delay(2500*(TheSysClock/4000));

SystemInit();

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

{

WRCM(0X80+i);

HANZI(s1);

}

Delay(500*(TheSysClock/4000));

//系统初始

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

{

WRCM(0X90+i);

HANZI(s2);

}

Delay(500*(TheSysClock/4000));

//系统初始化

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

{

WRCM(0X88+i);

HANZI(s3);

}

Delay(500*(TheSysClock/4000));

//系统初始化

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

{

WRCM(0X98+i);

HANZI(s4);

}

Delay(2500*(TheSysClock/4000));

SystemInit();

for(ap=0;ap<5;ap++)

{Delay(200*(TheSysClock/4000));

LCMDisplayPicture();

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

{

WRCM(0X80+i);

HANZI(s6);

}

WRCM(0X90);

HANZI(s7);

WRCM(0X97);

HANZI(s7);

WRCM(0X88);

HANZI(s8);

WRCM(0X8F);

HANZI(s8);

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

{WRCM(0X98+i);

HANZI(s6);

}

Delay(200*(TheSysClock/4000));

//LCMDisplayPicture_1();

}

//系统初始化

SystemInit();

for(ap=0;ap<5;ap++)

{Delay(200*(TheSysClock/4000));

//LCMDisplayPicture_1();

for(i=0;i<16;i+=8)

{

WRCM(0X88+i);

HANZI(s5);

}

Delay(200*(TheSysClock/4000));

LCMDisplayPicture_2();

}

 

SystemInit();

for(ap=0;ap<5;ap++)

{

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

当前位置:首页 > 表格模板 > 表格类模板

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

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