实验4模拟输入输出接口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四模拟输入输出接口
一、实验目的
1. 学习模拟输入输出接口的原理
2. 掌握接口程序实现的基本方法
二、实验设备
标准硬件。

三、实验内容
在实验箱的CPU板上运行程序,拨动相应开关,与它对应的LED灯显示电平的高低,同时,LCD上显示相应的数据值。

四、实验原理
使用一片缓冲芯片74LS244来把CPU外面的输入数据写入CPU的并行总线上,之后,并行总线上的数据被一片数据锁存芯片74LS273保留,CPU通过选中锁存芯片,并读取预先设给锁存器地址内的内容,就可以把数据读出,来确定外面的数据的高低。

本实验的输入是用8个拨动开关两种工作状态来表示输入接口的高低状态,然后,再通过8个LED灯亮和灭两种工作状态,以及LCD上用数据值来清楚的反映各状态的输出显示,从而完成模拟的输入输出接口的实现。

在C程序中的实现,如下程序所示:
while(1)
{
for(i=0;i<1000;i++);//延时
rrr = (*(volatile unsigned char*)0x20000016);//CPU把值写入并行数据总线
d0 = rrr>>7&1;
d1 = rrr>>6&1;
d2 = rrr>>5&1;
d3 = rrr>>4&1;
d4 = rrr>>3&1;
d5 = rrr>>2&1;
d6 = rrr>>1&1;
d7 = rrr>>0&1;//将数据按位赋值
data = (d7<<7|d6<<6|d5<<5|d4<<4|d3<<3|d2<<2|d1<<1|d0);
(*(volatile unsigned char*)0x20000000) = data;//CPU把总线值写入锁存器
for(i=0;i<1000;i++);
if (data != data_pre) //data_pre为上一个数据,若当前数据与上一个相同则不处理
{
Set_Color(GUI_YELLOW);
Set_Font(&GUI_Font8x16);
Disp_BinAt(data,170,120,8);//显示二进制数据
Disp_HexAt(data,170,140,4);//显示十六进制数据
Disp_DecAt(data,170,160,3);//显示十进制数据
data_pre = data; //保存数据
}
}
五、实验步骤
1.打开LCD电源开关。

2.打开ADS1.2开发环境,打开\基础实验 \实验八\IO_SIM.mcp项目文件,然后进行compile和make生成*.axf文件。

3.编译通过后,进入ADS1.2调试界面,加载基础实验\实验八
\IO_SIM_Data\Debug中的映象文件IO_SIM.axf。

4.在ADS调试环境下全速运行映象文件。

LCD上有图形显示后,将拨码开关0-7全部拨到ON,拨动LED灯下方的开关K1-k8,拨到L为0,H为1,0时LED亮。

观察开关上方的8个LED灯的亮灭情况,以及LCD上的显示情况。

每个开关代表1个数字位,遵循二进制规则。

该实验是从数据总线上把检测到的数据变化,锁存到锁存器中,然后又从总线上读出数据,显示到LCD上,来模拟I/O实现。

六、实验结果
在ADS调试环境下全速运行映象文件。

LCD上有图形显示后,按下实验箱下部一排中的任一模拟输入的带锁键值,观察8位数码管上方的8个LED灯的亮灭情况,以及LCD上的显示情况。

每个按键代表1个数字位,按键均不按下,代表数字量为255,全按下为0,每个按键的都是2的权值,在不按下时,最靠近键盘的按键代表1,之后依次是2;4;8;16;32;64;128。

按下时均代表0。

该实验是从数据总线上把检测到的数据变化,锁存到锁存器中,然后又从总线上读出数据,显示到LCD上,来模拟I/O实现。

七、源程序
#include <stdlib.h>
#include <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "mmu.h"
void HaltUndef(void)
{
Uart_Printf("Undefined instruction exception.\n");
while(1);
}
void HaltSwi(void)
{
Uart_Printf("SWI exception.\n");
while(1);
}
void HaltPabort(void)
{
Uart_Printf("Pabort exception.\n");
while(1);
}
void HaltDabort(void)
{
Uart_Printf("Dabort exception.\n");
while(1);
}
void Isr_Init(void)
{
pISR_UNDEF = (unsigned)HaltUndef;
pISR_SWI = (unsigned)HaltSwi;
pISR_PABORT = (unsigned)HaltPabort;
pISR_DABORT = (unsigned)HaltDabort;
rINTMOD = 0x0; //All=IRQ mode
rINTMSK = BIT_ALLMSK; //All interrupt is masked.
rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP
}
void Target_Init(void)
{
MMU_Init();
//ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz ChangeMPllValue(0x52,0x1,0x1); // FCLK=180.0MHz
// ChangeMPllValue(0x70,0x2,0x2); // FCLK=90.0MHz
ChangeClockDivider(1,1); // 1:2:4
Port_Init();
Isr_Init();
Uart_Init(0,19200);
//Uart_Init(0,115200);//Uart_Init(0,230400);
Uart_Select(0);
//Touch_Init();//TouchINT_Init();
}
void Main()
{
Target_Init();
GUI_Init();
Delay(0);
Delay(10000);
Set_Color(GUI_MAGENTA);
Fill_Rect(0,0,639,50);
Set_Color(GUI_WHITE);
Set_BkColor(GUI_MAGENTA);
Set_Font(&CHINESE_FONT16);
Disp_String(CN_start"达盛嵌入式实验平台"CN_end,4,20);
Set_Color(GUI_RED);
Set_BkColor(GUI_RED);
Fill_Rect(0,51,639,479);
Set_Color(GUI_WHITE);
Fill_Rect(50,70,590,72);
Fill_Rect(50,70,52,400);
Fill_Rect(50,398,590,400);
Fill_Rect(588,70,590,400);
Set_Color(GUI_YELLOW);
Set_Font(&CHINESE_FONT16);
Disp_String(CN_start"输入输出数据显示"CN_end,100,85);
Set_Font(&CHINESE_FONT12);
Disp_String(CN_start"二进制显示"CN_end,100,150);
Disp_String(CN_start"十六进制显示"CN_end,100,250);
Disp_String(CN_start"十进制显示"CN_end,100,350);
while(1)
{
rrr = (*(volatile unsigned char*)0x20000016);
d0 = rrr>>7&1;
d1 = rrr>>6&1;
d2 = rrr>>5&1;
d3 = rrr>>4&1;
d4 = rrr>>3&1;
d5 = rrr>>2&1;
d6 = rrr>>1&1;
d7 = rrr>>0&1;
data = (d7<<7|d6<<6|d5<<5|d4<<4|d3<<3|d2<<2|d1<<1|d0);
(*(volatile unsigned char*)0x20000000) = data;
if (data != data_pre)
{
Set_Color(GUI_YELLOW);
Set_Font(&GUI_Font8x16);
GUI_DispBinAt(data,220,150,8);
GUI_DispHexAt(data,220,250,4);
GUI_DispDecAt(data,220,350,3);
data_pre = data;
}
}
八、心得、体会
嵌入式软件开发的最后一个实验,模拟输入输出接口。

感觉还是比较吃力,很多问题不懂怎么做,或者只能是参照实验指导做出来。

从最初的搜集信息,查阅资料,然后到上机调试,再到最后的完成实验报告,获益匪浅。

不单单是对所做课题的学习认识,更重要的是学习的过程中熟悉了很多应用软件。

所以说这样的课设还是很有意义的,让我们在理论学习之余,接触到“实践”,虽然只是模拟,但是同样对我们书本的学习起到了很好的帮助理解的作用。

相关文档
最新文档