若干接口实验报告.docx

上传人:b****6 文档编号:16476235 上传时间:2023-07-13 格式:DOCX 页数:36 大小:189.38KB
下载 相关 举报
若干接口实验报告.docx_第1页
第1页 / 共36页
若干接口实验报告.docx_第2页
第2页 / 共36页
若干接口实验报告.docx_第3页
第3页 / 共36页
若干接口实验报告.docx_第4页
第4页 / 共36页
若干接口实验报告.docx_第5页
第5页 / 共36页
若干接口实验报告.docx_第6页
第6页 / 共36页
若干接口实验报告.docx_第7页
第7页 / 共36页
若干接口实验报告.docx_第8页
第8页 / 共36页
若干接口实验报告.docx_第9页
第9页 / 共36页
若干接口实验报告.docx_第10页
第10页 / 共36页
若干接口实验报告.docx_第11页
第11页 / 共36页
若干接口实验报告.docx_第12页
第12页 / 共36页
若干接口实验报告.docx_第13页
第13页 / 共36页
若干接口实验报告.docx_第14页
第14页 / 共36页
若干接口实验报告.docx_第15页
第15页 / 共36页
若干接口实验报告.docx_第16页
第16页 / 共36页
若干接口实验报告.docx_第17页
第17页 / 共36页
若干接口实验报告.docx_第18页
第18页 / 共36页
若干接口实验报告.docx_第19页
第19页 / 共36页
若干接口实验报告.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

若干接口实验报告.docx

《若干接口实验报告.docx》由会员分享,可在线阅读,更多相关《若干接口实验报告.docx(36页珍藏版)》请在冰点文库上搜索。

若干接口实验报告.docx

若干接口实验报告

南华大学

计算机科学与技术学院

接口技术实验报告

(2010~2011学年度第二学期)

实验:

接口验证性实验

姓名

曹羽

冯灿斌

黄晓燕

符春燕

高昂

学号

20094440105

20094440115

20094440125

20094440135

20094440145

 

专业

计算机

班级

0901班

地点

8-210

教师

刘芳菊

实验五七段数码管

七段数码管动态显示

一、实验目的

掌握数码管显示数字的原理

二、实验内容

动态显示:

按图23连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255C口的PC1,PC0。

编程在两个数码管上显示“56”

三、编程显示

实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

1、实验流程图

2、实验原理图

四、实验代码

datasegment

ioportequ0d400h-0280h

io8255aequioport+28ah

io8255bequioport+28bh

io8255cequioport+288h

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码

buffer1db5,6;存放要显示的个位和十位

bzdw?

;位码

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;将8255设为A口输出

moval,80h

outdx,al

movdi,offsetbuffer1;设di为显示缓冲区

loop2:

movbh,02

lll:

movbyteptrbz,bh

pushdi

decdi

adddi,bz

movbl,[di];bl为要显示的数

popdi

moval,0

movdx,io8255a

outdx,al

movbh,0

movsi,offsetled;置led数码表偏移地址为SI

addsi,bx;求出对应的led数码

moval,byteptr[si]

movdx,io8255c;自8255A的口输出

outdx,al

moval,byteptrbz;使相应的数码管亮

movdx,io8255a

outdx,al

movcx,3000

delay:

loopdelay;延时

movbh,byteptrbz

shrbh,1

jnzlll

movdx,0ffh

movah,06

int21h

jeloop2;有键按下则退出

movdx,io8255a

moval,0;关掉数码管显示

outdx,al

movah,4ch;返回

int21h

codeends

endstart

五、实验结果

当没有键按下时,相对应的数码管会发光,有键按下,就退出。

七段数码管静态显示

一、实验目的

掌握数码管显示数字的原理

二、实验内容

静态显示:

按图22连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

三、编程提示

实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

四、实验原理图

实验流程图

五、实验代码

datasegment

ioportequ0d400h-0280h

io8255aequioport+288h

io8255bequioport+28bh

leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

mesg1db0dh,0ah,'Inputanum(0--9h):

',0dh,0ah,'$'

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,io8255b;使8255的A口为输出方式

movax,80h

outdx,al

sss:

movdx,offsetmesg1;显示提示信息

movah,09h

int21h

movah,01;从键盘接收字符

int21h

cmpal,'0';是否小于0

jlexit;若是则退出

cmpal,'9';是否大于9

jgexit;若是则退出

subal,30h;将所得字符的ASCII码减30H

movbx,offsetled;bx为数码表的起始地址

xlat;求出相应的段码

movdx,io8255a;从8255的A口输出

outdx,al

jmpsss;转SSS

exit:

movah,4ch;返回DOS

int21h

codeends

五、实验结果

当按下0-9的数字键时,在七段数码管上显示出来。

不是数字键就会退出。

实验九中断C

中断方式

一、实验目的

1、了解Windows下中断处理过程

2、比较中断和查询两种数据交换方法的效率差别

二、实验内容

用查询和中断方式分别实现控制指示灯,实验电路如图。

要求直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断,让指示灯显示一秒钟的0x55,否则让指示灯显示0xAA。

然后在任务栏比较中断和查询方式下CPU利用率的差别。

用中断方法

将8255的A口设为输出,IRQ直接接到正脉冲

3.原理图及流程图

原理图

流程图

 

4.实验代码

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

/*中断实验(中断方式)*/

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

#include

#include

#include"ApiEx.h"

#pragmacomment(lib,"ApiEx.lib")

inti;

voidMyISR()

{

PortWriteByte(0x288,0x55);

Sleep(1*1000);

printf("%d\n",i++);

}

voidmain()

{

printf("--------------------EXP15_9_INT2---------------------\n");

printf("1.8255(PA0-PA7)===TPC(L0-L7)\n");

printf("2.8255(CS)===TPC(288H-28FH)\n");

printf("3.TPC(IRQ)===TPC(DMC)\n");

printf("Pressanykeytobegin!

\n\n");

getch();

if(!

Startup())/*打开设备*/

{

printf("ERROR:

OpenDeviceError!

\n");

return;

}

printf("PleasePressDMC!

Pressanykeytoexit!

\n");

PortWriteByte(0x28b,0xa0);

RegisterLocalISR(MyISR);/*注册中断程序*/

EnableIntr();/*开中断*/

while(!

kbhit())

{

//PortWriteByte(0x28b,0xa0);

PortWriteByte(0x288,0xaa);

//Sleep(100);

//printf("Main\n");

}

DisableIntr();/*关中断*/

Cleanup();/*关闭设备*/

}

5.实验结果

直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断,让指示灯显示一秒钟的0x55,否则让指示灯显示0xAA,并延迟2秒。

若有键按下就跳出,否则继续。

查询方式

一、实验目的

1、了解Windows下中断处理过程

2、比较中断和查询两种数据交换方法的效率差别

二、实验内容

用查询和中断方式分别实现控制指示灯,实验电路如图。

要求直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断,让指示灯显示一秒钟的0x55,否则让指示灯显示0xAA。

然后在任务栏比较中断和查询方式下CPU利用率的差别。

查询方法

将8255的A口设为输出接指示灯,C口设为输入,将PC0接正脉冲输入,线路连接三.原理图及流程图

原理图:

流程图:

4.试验代码

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

/*中断实验(查询方式)*/

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

#include

#include

#include"ApiEx.h"

#pragmacomment(lib,"ApiEx.lib")

voidmain()

{

BYTEdata;

printf("--------------------EXP15_9_INT1---------------------\n");

printf("1.8255(PA0-PA7)===TPC(L0-L7)\n");

printf("2.8255(PC0)===TPC(DMC)\n");

printf("3.8255(CS)===TPC(288H-28FH)\n");

printf("Pressanykeytobegin!

\n\n");

getch();

if(!

Startup())/*打开设备*/

{

printf("ERROR:

OpenDeviceError!

\n");

return;

}

printf("PleasePressDMC!

Pressanykeytoexit!

\n");

PortWriteByte(0x28b,0x8b);/*设8255为方式0,C口输入,A口输出*/

while(!

kbhit())

{

PortReadByte(0x28a,&data);

if(data&0x01)

{

PortWriteByte(0x288,0x55);

Sleep(1*1000);/*延迟*/

}

PortWriteByte(0x288,0xaa);

}

Cleanup();/*关闭设备*/

}

5.实验结果

要求直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断,让指示灯显示一秒钟的0x55,否则让指示灯显示0xAA并延迟两秒。

若有键按下就继续,否则跳出。

实验十三数字录音机

一、实验目的

1、了解数字录音技术的基本原理。

2、进一步掌握A/D转换器与D/A转换器的使用方法。

二、实验内容

1、按图41连接电路,将声传感器接J2,把代表语音的电信号送给ADC0809通道2(IN2);D/A转换器的输出端通过K8跳线接喇叭。

2、编程,以每秒钟5000次的速率采集IN2输入的语音数据并存入内存,共采集60000个数据(录12秒),然后再以同样的速率将数据送DAC0832使喇叭发声(放音)。

三、实验提示

1、将8253设置成方式0,计数200个,(定时0.2ms),利用PA0查询OUT0电平,若高电平表示定时时间到。

2、ADC0809通道2(IN2)的口地址为298H

四、实验原理图

实验流程图

五、实验代码

datasegment

ioportequ01400h-0280h

luportequioport+29ah;录音口地址

fangportequioport+290h;放音口地址

io8253aequioport+283h

io8253bequioport+280h

io8255cequioport+28bh

io8255dequioport+288h

data_qudb60000dup(?

);录音数据存放数据区

news_1db'Pressanykeytorecord:

',24h;录音提示

news_2db0dh,0ah,'Playing:

',24h;放音提示

dataends

codesegment

assumecs:

code,ds:

data,es:

data

begin:

movax,data;初始化

movds,ax

moves,ax

movdx,offsetnews_1;显示录音提示

movah,9

int21h

test_1:

movah,1;等待键盘输入

int16h

jztest_1;若不是则循环等待

calllu;调用录音子程序

movdx,offsetnews_2;显示放音提示

movah,9

int21h

fy:

callfang;调用放音子程序

movax,0c07h

int21h

cmpal,20h

jzfy

movah,4ch;返回DOS

int21h

luprocnear;录音子程序

movdi,offsetdata_qu;置数据区首地址为DI

movcx,60000;录60000个数据

cld

xunhuan:

movdx,luport;启动A/D

outdx,al

calldelay;延时

inal,dx;从A/D读数据到AL

stosb;存入数据区,使DI加1

loopxunhuan;循环

ret;子程序返回

luendp

fangprocnear;放音子程序

movcx,60000;放60000个数据

movsi,offsetdata_qu;置数据区首地址为SI

cld

fang_yin:

movdx,fangport

lodsb;从数据区取出数据

subal,30h

outdx,al;放音

calldelay;延时

loopfang_yin;循环

ret;子程序返回

fangendp

delayprocnear;延时子程序

pushdx

moval,10h;设8253通道0工作方式0

movdx,io8253a

outdx,al

moval,200;写入计数器初值200

movdx,io8253b

outdx,al

movdx,io8255c;设8255的A口为输入

moval,9bh

outdx,al

movdx,io8255d;从8255的A口输入

delay1:

inal,dx

andal,1;判断PA0是否为1

jzdelay1;若PA0不为1,转de_lay

popdx

ret;子程序返回

delayendp

codeends

endbegin

六、实验结果

第一次按键,显示信息;第二次按键,若为空格键,就一直放音;若不为空格键,就退出。

实验15DMA传送C

(1)DMA1(块模式)

1、实验目的

1、掌握PC机工作环境下进行DMA方式数据传送(BlockMODE和SingleCycleDemandMode)方法。

2、掌握DMA的编程方法。

2、实验内容

1、将主机内存缓冲区偏移量为0的一块数据“ThisisBlockMODEDMAtransfare.”用BlockMODEDMA方式传送到实验箱上的RAM6116上,再将实验箱上6116的内容用BlockMODEDMA方式传送到主机内存缓冲区偏移量为0x400里。

并察看传回来的数据是否一致。

三、实验提示

1、DMA请求是由单脉冲输入到D触发器,由触发器的Q端向DRQ1发出的。

CPU响应后发出,将触发器Q置成低电平以撤消请求。

2、当使用外部请求传送模式进行DMA传输时,9054只进行32位的传送,传送8、16位数据时需要将数据规整为32位后传输

3、因为PCI总线最大宽度为64位,9054芯片为了节省传输资源,当由LOCAL端外部输入数据时,芯片将数据缓存,凑够64位后一次送入PCI端,即微机端。

这会出现进行两次外部DMA请求后9054芯片才将64位数据传送到PCI端,即微机端的情况

4、实验原理图和实验流程图

流程图

5、实验源程序

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

/*DMA传送(块模式)*/

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

#include

#include

#include

#include"ApiEx.h"

#pragmacomment(lib,"ApiEx.lib")

#definemagic"ThisisBlockMODEDMAtransfare."

#definemagic1"*************************************"

#definelenstrlen(magic)

#definelen1strlen(magic1)

voidMyDmaISR()

{

printf("DMAfinished!

\n");

}

voidmain()

{

inti;

BOOLok;

DWORDdwPhy,dwUser,dwSize;

printf("--------------------EXP18_15_DMA_1---------------------\n");

printf("1.DIP-D(DIP40)===6116\n");

printf("2.TPC(DO-D7)===6116(9,10,11,13,14,15,16,17)\n");

printf("3.TPC(A0-A10)===6116(8,7,6,5,4,3,2,1,23,22,19)\n");

printf("4.TPC(MEMR)===6116(20)\n");

printf("5.TPC(MEMW)===6116(21)\n");

printf("6.TPC(GND)===6116(18,12)\n");

printf("7.TPC(+5V)===6116(24)\n");

printf("Pressanykeytobegin!

\n\n");

getch();

printf("---------COMPDisplayData!

--------\n");

if(!

Startup())/*打开设备*/

{

printf("ERROR:

OpenDeviceError!

\n");

return;

}

ok=DmaCommonBufferGet(&dwPhy,&dwUser,&dwSize);

assert(ok);

printf("DmaCommonBufferGet:

phy=%x,local=%x,size=%x\n",dwPhy,dwUser,dwSize);

memcpy((char*)dwUser,magic,len);/*待传送数据写入微机内存*/

memcpy((char*)dwUser+0x400,magic1,len1);/*清理回传内存空间*/

putchar('\n');

DmaChannelOpen(FALSE);/*打开BlockMODEDMA传送*/

RegisterDmaFinishedSR(MyDmaISR);/*注册DMA传送完成中断程序*/

EnableDmaFinishedNotify();

DmaTransferHostToLocal(dwPhy,0,len);/*启动内存向6116的DMA传送*/

Sleep(100);

DmaTransferLocalToHost(0,dwPhy+0x400,len);/*启动6116向内存的DMA传送*/

Sleep(100);

DisableDmaFinishedNotify();

for(i=0;i

putchar(((char*)dwUser)[i]);

}

putchar('\n');

for(i=0;i

putchar(((char*)dwUser)[i+0x400]);

}

putchar('\n');

DmaChannelClose();/*关闭DMA传送*/

Cleanup();/*关闭设备*/

printf("Pressanykey...");

getch();

}

6、实验结果

将主机内存缓冲区偏移量为0的一块数据“ThisisBlockMODEDMAtransfare.”用BlockMODEDMA方式传送到实验箱上的RAM6116上,再将实验箱上6116的内容用BlockMODEDMA方式传送到主机内存缓冲区偏移量为0x400里。

传回来的数据一致。

(2)DMA2(外部请求模式)

一、实验目的

1、掌握PC机工作环境下进行DMA方式数据传送(BlockMODE和SingleCycleDemandMode)方法。

2、掌握DMA的编程方法。

二、实验内容

将主机内存缓冲区偏移量为0的一块数据“ThisisDMAtranfare.”用SingleCycleDemandModeDMA方式传送到实验箱上的RAM6116上,用户每发出一次DMA请求,PCI板卡上的DMA控制器将公共缓冲区的一个双字传送到实验箱上的6116中。

程序不断读RAM6116的内容,6116映射到主机的IO空间。

三、实验提示

1、DMA请求是由单脉冲输入到D触发器,由触发器的Q端向DRQ1发出的。

CPU响应后发出,将触发

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2