-
本科实验报告
课程名称:
嵌入式系统实验
学院(系)
:
电子信息与电气工程学部
专
业:
电子信息工程
2011
年
11
月
5
日
实验一
ARM
的串行口实验
一、实验目的和要求
1
.
掌握
ARM
的串行口工作原理。
2
.
学习编程实现
ARM
的
UART
通讯。
3
.
掌握
CPU
利用串口通讯的方法。
二、实验内容
编程实现
ARM
和计算机串行通讯,
实现连续输出已输入的字符串功能。
即连续输入字符串,
当按
“
Enter
”
键时,显示此字符串。
三、主要仪器设备
硬件:
ARM
嵌入式开发平台、
PC
机
Pentium100
以上、用于
ARM920T
的
JTAG
仿真器、串口线。
软件:
PC
机操作系统
WinXP
、
ARM ADS1.2
集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验步骤
1
.
搭建好实验环境;
2
.
编写主
函数
C
语言代码,使其实现连续输出已输入的字符,并进行编译
,生成
文件;
3
.
在超级
终端上加载
文件;
4
.
输入<
/p>
bootucos
,运行程序;
5
.
通过键盘向串口输入数据,观察超级终端上字符的输出情况。
五、核心代码
while(1)
{
Uart_SendByten(0,0xa);//
p>
换行
Uart_SendByten(0
,0xd);//
回车
err=Uart_Getchn(c1,0,0);
//
从串口采集数据
while(1)
{
if(c1[0]==0xa || c1[0]==0xd)
//
若按
E
nter
键就换行
break;
else
{
Uart_SendByten(0,c1[0]);
//
显示采集的数据
err=Uart_Getchn(c1,0,0);
//
从串口采集数据
}
}
}
六、实验结果与分析
因为采用串口通信所以数据只能先通过主机发送给嵌入式处理器然后再通过同一个信道有处理器返
p>
回给主机,所以为了能直接显示操作的结果只能重复进行对一次按键的发送,读取,返回操作
,因此实验
结果应该是每采集到一个输入的非回车或者换行的
A
SCII
字符是,就应该立即显示出来;当按下“
Enter<
/p>
”
键时,应同时发送“换行”和“回车”的
ASCII
码,使光标移动到下一行的起始位置继续等待接收。
由运行结果图验证实现了预期,在超级终端可以连续输出输入相应的的字符,出现了
相应的结果。
七、实验心得
p>
实验一,即串口通信实验主要是在熟悉试验台和实验环境之后的对原始程序做一个比较简单的
修改,
理解通
ARM
与计算机之间的通
信。刚开始的时候还和队友对实验应该现实的方式有一点分歧,后来我认
识到由于串行口
传送数据是逐个传送的,每次只能显示一个数据,因此通过将输入的数据保存到字符串数
组中,最后一起输出的想法是不能实现的。所以我们最终还是选择了最合适的显示方式,就是按初始源代
码中给出了单个字符输入和输出的功能,指示判断输入字符的
ASCII
码来实现实验要求的连续输入输出。
还有就
是配置超级终端。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进
行通信的端口,这些参数必须匹配。因此在配置超级终端时必须参数设置正确,否则无法进行正常通信。 p>
实验一,
主要是了解了如何使用串口
通信和
ADS1.2
集成开发环境,
还有实验的基本操作和注意事项,
为后续实验的基础。
实验二
ARM
的
A/D
接口实验
一、实验目的和要求
1.
熟悉
ARM
本身自带的八路十位
A/D
控制器及相应寄存器;
2.
编程实现
AR
M
系统的
A/D
功能;
3.
掌握带有
A/D
p>
的
CPU
编程实现
A/D
功能的主要方法。
二、实验内容
利用外部模拟信号编程
,实现
ARM
循环采集前
3
路信号,并显示在超级终端上。同时与串口通信结合,
通过键盘输入端口号
,输出相应一路信号的采样值。
三、主要仪器设备
硬件:
ARM
嵌入式开发平台、
PC
机
Pentium100
以上、用于
ARM920T
的
JTAG
仿真器、串口线。
软件:
PC
机操作系统
WinXP
、
ARM ADS1.2
集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验步骤
1
.
搭建好实验环境;
2
.
编写主
函数
C
语言代码,并进行编译,生成
<
/p>
文件;
3
.
在超级
终端上加载
文件;
4
.
输入<
/p>
bootucos
,运行程序;
5
.
通过键盘向超级终端输入端口号,显示相应端口的转换数据。
五、核心代码
while(1)
{
flag=(rUTRSTAT0 & 0x1);
//
是否有按键按下的标志位
if(flag)
{
ttt:
err=Uart_Getchn(c1,0,0);
if(c1[0]<='3' && c1[0]>'0')
{Uart_Printf(0,
else
{
Uart_Printf(0,
n
goto ttt;
}
}
i=c1[0]-'1';
for(j=0;j<=1;j++)
{d=GetADresult(i)*3.3/1023; } //
数据采集,处理
Uart_Printf(0,
hudelay(1000);
Uart_Printf(0,
}
六、实验结果与分析
当按下主机键盘的
1~3
时,超级终端上显示出相应
的端口号
(
从左至右对应
1~3)
p>
和采样值,并能实时
刷新;否则,若按其他键则提示出错,需要重新
输入。旋转相应旋钮改变电阻值,显示的采样值也随而改
变。实现了预定要求。
七、实验心得
A/
D
转换是物理世界与数字世界的接口。实验中首先初始化
ARM
和
A/D
设备,然后利用
GetADresult
函数并处理即可得到转换值。实验中采集了两次数据
,取的是第二次采集的数据,通过老师讲解,我们知
道因为初次采集噪声的干扰较强,所
以用稍后叫精确的数据。
我们本想实现源程序中的实时刷新效
果。但
Uart_Getchn(c1,0,0)
的每次调用都
需等待按键的输入,
因而不能实现动态刷新。后来我们通过判断标志位
< br>flag=(rUTRSTAT0
&
0x1)
确定是否有按键按下,在确认
是否需要调用
U
art_Getchn(c1,0,0)
。
flag=1
时,
若
Uart_Getchn(c1,0,
0)
得到的值是否位于
1
~
3
范围内。
若不是,则提示出错,需要重新输入键
值;若正确,则显示相应的端口号和采样值。但是为了简便设计和
不破坏结构,我们不得
不在提示出错后使用
goto
进行跳转。还有就是如何能在当前
行进行数据覆盖,实
现等效动态刷新,才明白”
r
”的含义,并通过
Uart_Printf(0,
实
现,即光标回到行首但不换行,
达到数据覆盖的目的。
要想真正弄懂
ARM
中
A/D
转换的原理,是远远不够的,还需在底层函数中下不断摸索。但是老师也建
p>
议我们不要轻易改动底层文件。
实验三
LCD
的驱动控制实验
一、实验目的和要求
1.
了解
LCD
基本概念与原理
2.
理解
LCD
的驱动控制
3.
熟悉用
总线方式驱动
LCD
模块
4.
熟悉用
ARM
< br>内置的
LCD
控制器驱动
LCD
二、实验内容
学习
< br>LCD
显示器的基本原理,理解其驱动控制方法。编程实现屏幕上的彩色条纹滚动
的效果。
三、主要仪器设备
硬件:
ARM
嵌入式开发平台、
PC
机
Pentium100
以上、用于
ARM920T
的
JTAG
仿真器、串口线。
软件:
PC
机操作系统
WinXP
、
ARM ADS1.2
集成开发环境、仿真器驱动程序、超级终端通讯程序。
四、实验步骤
1
.
搭建好实验环境;
2
.
编写主
函数
C
语言代码,并进行编译,生成
<
/p>
文件;
3
.
在超级
终端上加载
文件;
4
.
输入<
/p>
bootucos
,运行程序;
5
.
观察<
/p>
LCD
显示效果。
五、核心代码
for (i=0;i
<10;i++)//
初始化颜色数组,
10
< br>种颜色
switch (i)
{
case 0: jcolor[0]=0x00000000;
//RGB
均为
0
黑色
break;
case 1:
jcolor[1]=0x000000f8;
//R
红色
break;
case 2:
jcolor[2]=0x0000f0f8;
//R
and G
橙色
break;
case 3: jcolor[3]=0x0000fcf8;
//R
and G
黄
break;
case 4:
jcolor[4]=0x0000fc00;
//G
绿色
break;
case 5:
jcolor[5]=0x00f8fc00;
//G
and
B
青色
break;
case 6: jcolor[6]=0x00f80000;
//B
蓝色
break;
case 7:
jcolor[7]=0x00f800f8;
//R
and B
紫色
break;
case 8:
jcolor[8]=0x00f8fcf8;
//RGB
白色
break;
case 9:
jcolor[9]=0x00f0f0f0;
//
自定义颜色
break;
//default:break;
}
while(1)
{
for(i=0;i<10;i++)
for (k=0;k<640;k++)
for (j=i*48;j
LCDBufferII2[j][k]=jcol
or[(1
0-n+i)%10];
if(n>8)
n=0;
else
n++;
LCD_Refresh();
}
六、实验结果与分析
由于实验中
p>
LCD
是从上到下,从左到右的逐行,逐像素扫描,而且刷新更新新
图像的速度很慢,每
次更新完后会有一定的间隔,影响最终的效果。
分析其原因,应该在于整个电路的电路和时序操作上的问题,也有可能是底层函数
对二级缓存想以及
缓存的控制操作刷新频率的操作或状态位有关。因此还需要对底层程序
和实际电路有深入的了解,才能实
现更实际和复杂的功能。
七、实验心得
实验三
是目前的中最有意思的。因为所有的实验现象都只在开发板上,脱离了上位机的参与。也是通
过简单的数据操作计算实现了要求的显示效果,动态的效果是很有意思的。但是正如实验结果分析中所提 p>
到的,
LCD
从左到右,从上到下逐行,逐
像素扫描的方式虽然是主流方式,但刷新速度和底层程序或电路
固定的保持刷新周期让我
们有所失望,而且颜色控制字的实现也有些让人摸不清头脑,回想起来以前对
VGA
p>
显示学习时讲解的标准化的时序方式,我觉得在嵌入式设备中或许也应该注重标准化统一,方
便开
发人员,及通用扩展兼容性。这些问题均导致实验三的结果在我们看来是最糟糕的,
因为我们目前还是无
能为力的。这也让我深刻体会到对底层的配置的重要性,和标准化统
一的意义。
-
-
-
-
-
-
-
-
-
上一篇:ARM的串口通信实验
下一篇:电子温度控制器课程设计(DOC)