ARM课程设计

  • 格式:doc
  • 大小:44.50 KB
  • 文档页数:7

计算机与信息学院
设计性实验报告

名 称: 嵌入式系统课程设计
班 级:
学 号:
姓 名:
实验所属课程: 嵌 入 式
实验室(中心): 现代电子实验室
指 导 教 师 :
实 验 时 间 : 2011年10月24日
组 员 :
1.实验目的:

编码实现串口和并口的输出。

2.实验设备:

硬件:PC 机 一台

软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境
3.实验内容:
把’A’到’Z’26个字母编码,并把自己的名字的字母组合通过
编程输出,结果由LED灯显示,要求用串行和并行两种方式。

4.实验步骤:
(1)
假设各个字母等概率分布,先用哈夫曼编码把26个字母编码,

得到如下编码,A:0100;B:0101; C:01100; D:01101; E:01110;
F:01111; G:10000; H:10001; I:10010; J:10011; K:10100; L:10101;
M:10110; N:10111; O:11000; P:11001; Q:11010; R:11011; S:11100;
T:11101;U:11110;V:11111;W:0000; X:0001; Y:0010; Z:0011.
我的名字拼音的编码为: 11010 10010 10111 01100 10001 11110
10111 11010 11110 0100 10111.在此实验中并行的时候每次输出一
个字母,其输出的电平由前5个灯显示;串行的时候每次输出一个电
平,仅由第一个灯控制。
(2)启动ADS 1.2,使用ARM Executable Image for MagicARM2200 工
程模板建立一个
工程LEDCon_C。
(3)在user 组中的main.c 中编写主程序代码。
(4)选用DebugInExram 生成目标,然后编译链接工程。
(5)短接MagicARM2200-S 教学实验开发平台上LED 跳线JP5。
(6)选择【Project】->【Debug】,启动AXD 进行JTAG 仿真调试。
(7)单步运行程序,通过LED1~LED8 的显示判断输出是否正确。
全速运行程序,观察LED1~LED8 的显示。
代码如下:
**********************************************************/
#include "config.h"
#define LED1 1<<16 // P1.16
#define LED2 1<<17 // P1.17
#define LED3 1<<18 // P1.18
#define LED4 1<<19 // P1.19
#define LED5 1<<20 // P1.20
#define LED6 1<<21 // P1.21
#define LED7 1<<22 // P1.22
#define LED8 1<<23 // P1.23
#define LEDCON 0x00ff0000
uint8 const NAME_STRING[] = "";
const uint32 DISP_TAB[26] = { 0xff04ffff, 0xff05ffff, 0xff14ffff,
0xff15ffff,0xff16ffff, 0xff17ffff, 0xff10ffff, 0xff11ffff,0xff12ffff,
0xff13fffff, 0xff14ffff, 0xff15ffff,0xff16ffff, 0xff17ffff, 0xff18ffff,
0xff19ffff , 0xff1affff,0xff1bffff, 0xff1cffff, 0xff1dffff, 0xff1effff,
0xff1fffff, 0xff00ffff, 0xff01ffff, 0xff02ffff,0xff03ffff};
/**********************************************************
* 名 称:DelayNS()
* 功 能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
**********************************************************/
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
/**********************************************************
* 名 称:Word_to_num(unit8 i)
* 功 能:将字母转化为编码数组中位置。
**********************************************************/
int Word_to_num(uchar a)
{
int8 result;
result=i-‘a’;
return result;
}
/**********************************************************
* 名 称:Bingxing(unit 32 i)
* 功 能:并行输出。
**********************************************************/
void Bingxing(unit 32 i)
{
IO1CLR = i; // 输出LED 显示数据
DelayNS(10); // 延时
IO1SET = 0xffffffff;
}
/**********************************************************
* 名 称:Chuanxing(unit32 i)
* 功 能:输出到LED 显示。
**********************************************************/
Chuanxing(unit32 i)
{
int8 j;
for (j=0;j<8;j++)
{
IO1CLR =(( i>>j)&0xff01ffff); // 输出LED 显示数据
DelayNS(10); // 延时
IO1SET = 0xffffffff;
}
}
/**********************************************************
* 名 称:main()
* 功 能:先并行输出A-Z编码和名字编码到LED 1-LED8显示,再串
* 行输出A-Z编码和名字编码到LED 1显示。
**********************************************************/
int main(void)
{ uint8 i;
uchar *p;
*p=NAMESTRING[];
PINSEL1 = 0x00000000;
IO1DIR = LEDCON; // 配置LED 控制I/O 方向
while(1)
{
for(i=0; i<26; i++)//并行顺序输出A-Z编码
{
Bingxing(DISP_TAB[i]);
}
while(*p!=0) //并行输出名字编码

Bingxing(DISP_TAB[Word_to_num(*p)]);
p++;

for(i=0; i<26; i++)//串行顺序输出A-Z编码
{
Chuanxing (DISP_TAB[i]);
}
while(*p!=0) //串行输出名字编码

Chuanxing (DISP_TAB[Word_to_num(*p)]);
p++;

}
return(0);
}
5.实验结果分析及心得体会: