计算机接口技术实验报告
接口技术实验报告
接口技术实验报告接口技术实验报告导言:接口技术在现代科技发展中扮演着重要的角色。
它是不同系统之间进行数据交换和通信的桥梁,为各种设备和软件提供了互联互通的能力。
本实验旨在通过实际操作,深入了解接口技术的原理和应用。
一、实验目的本次实验的目的是探索接口技术在实际应用中的作用和效果。
通过搭建一个简单的接口系统,我们可以了解接口的基本原理、数据传输方式以及如何进行接口的配置和测试。
二、实验设备和材料本次实验所需的设备和材料包括:一台计算机、一个串口转USB线缆、一块开发板、一根网线。
三、实验步骤1. 连接计算机和开发板将串口转USB线缆的USB接口插入计算机的USB接口,然后将串口转USB线缆的串口接口插入开发板的串口接口上。
2. 配置串口参数打开计算机的设备管理器,找到串口转USB线缆所对应的串口号,记录下来。
然后打开开发板上的串口配置界面,将串口号设置为与计算机上一致。
3. 编写测试程序使用C语言编写一个简单的测试程序,通过串口与开发板进行通信。
程序中包括发送数据和接收数据的功能,可以进行双向通信测试。
4. 运行测试程序将编写好的测试程序下载到开发板上,然后在计算机上运行相应的接收程序。
通过观察计算机上的输出和开发板上的LED灯状态,判断数据的传输是否成功。
5. 测试结果分析根据实际测试结果,分析接口技术的稳定性和可靠性。
如果数据传输成功率较高,说明接口配置正确,接口技术应用良好。
四、实验结果与讨论通过本次实验,我们成功搭建了一个简单的接口系统,并进行了数据传输测试。
实验结果显示,接口技术在数据传输方面表现出较高的稳定性和可靠性。
通过合理的配置和编程,我们能够实现计算机与外部设备之间的数据交换和通信。
接口技术的应用范围非常广泛,涉及到计算机、通信、自动化控制等领域。
例如,USB接口被广泛应用于外部设备的连接,如打印机、扫描仪等;串口接口则常用于嵌入式系统和单片机的通信;网口接口则用于实现计算机之间的局域网通信等等。
计算机接口技术实验报告优选全文
最新精选全文完整版(可编辑修改)《计算机接口技术》实验报告专业:电信息科学与技术班级:姓名:学号:年月日实验一:8255A并行口实验实验目的:掌握通过8255A并行口传输数据的方法,以控制发光二极管的亮与灭。
实验内容:一、实验原理实验原理图如图5-9所示,PB4 ~ PB7和PC0 ~ PC7分别与发光二极管电路L1~ L12 相连,本实验为模拟交通灯实验。
交通灯的亮灭规律如下:设有一个十字路口,1、3为南北方向,2、4为东西方向,初始为四个路口的红灯全亮,之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车;延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3 路口红灯亮,而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后重复上述过程。
8255A的PB4~ PB7对应黄灯,PC0 ~ PC3对应红灯,PC4~ PC7对应绿灯。
8255A 工作于模式0,并置为输出。
由于各发光二极管为共阳极,使其点亮应使8255A相应端口清0。
二、实验线路连接(1) CS-8255插孔连译码输出Y7插孔。
(2) L1 - PC4 L4 - PC5 L7 - PC6 L10 - PC7L2 - PB4 L5 - PB5 L8 - PB6 L11 - PB7L3 - PC0 L6 - PC1 L9 - PC2 L12 - PC3三、实验软件清单见随机光盘,文件名为H8255-2.ASM四、实验步骤1、按图5-9连好实验线路2、运行实验程序在DVCC-8086JHN上显示"8255-2"。
同时L1~L12 发光二极管模拟交通灯显示。
CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073H ;设置控制端常量IOAPT EQU 0070H ;设置数据端口A地址常量IOBPT EQU 0071H ;设置数据端口B地址常量IOCPT EQU 0072H ;设置数据端口C地址常量IOBDATA EQU 0500HCONTPORT EQU 00DFHDA TAPORT EQU 00DEHDA TA1 EQU 0640HSTART: JMP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV AX,0HMOV DS,AXMOV AL,82HMOV DX,IOCONPT ;写8255控制字,三个口均工作于方式0OUT DX,AL ;往控制端口写控制字,设置A口工作在方式0输入,B方式0输出MOV DX,IOBPT ;读PB口数据存0601H单元IN AL,DXnot almov al,00hnopnopMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPT ;写方式控制字均为输出MOV AL,80HOUT DX,ALMOV DX,IOBPT ;置PB0,PB4~PB6为1,其余为0MOV AL,DS:[0501H]OR AL,0FH ;使PB0~PB3为1,PB4~PB7为0OUT DX,AL ;即熄灭红灯,点亮绿灯MOV DX,IOCPT ;使PC1,PC4~PC6为1,其余为0MOV AL,0FH ;使PC0~PC3为1,PC4~PC7为0OUT DX,ALCALL DELAY1 ;延时IOLED0: MOV AL,01011010B ;使2,4路口绿灯亮,1,3口红灯亮MOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1and AL,0FH ;灭2,4路口绿灯OUT DX,ALMOV CX,8H ;只计数器值为8IOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]or AL,01011111B ;点亮2,4路口黄灯OUT DX,ALCALL DELAY2 ;短暂延时and AL,00000000B ;灭掉黄灯OUT DX,ALCALL DELAY2LOOP IOLED1 ;黄灯闪烁8次MOV DX,IOCPTMOV AL,0FH ;点亮4个绿灯,灭掉4个红灯OUT DX,ALCALL DELAY2MOV AL,10100101B ;点亮1,3口红灯和2,4路口绿灯OUT DX,ALCALL DELAY1CALL DELAY1and AL,0FH ;灭掉红灯OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]or AL,10101111B ;点亮1,3路口黄灯OUT DX,ALCALL DELAY2and AL,00000000B ;灭掉黄灯OUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0FH ;点亮4个绿灯,灭掉4个红灯OUT DX,ALCALL DELAY2JMP IOLED0 ;循环DELAY1: PUSH AXPUSH CX ;延时子程序MOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DH ADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START实验二:定时/计数器实验目的:1. 学会8253芯片和微机接口原理和方法。
接口技术实验报告doc
接口技术实验报告篇一:《微机原理与接口技术》实验报告《微机原理与接口技术》实验报告华东理工大学信息学院计算机系 XX年12月1234篇二:微机原理与接口技术实验报告微机原理与接口技术实验报告班级:自动化(铁道信号)姓名: ***** 学号:1121**** 授课教师:陈福恩目录1. 实验一................................................. ................................................... ......... 3 2. 实验二................................................. ............................................................. 8 3. 实验三................................................. ................................................... ......... 13 4. 实验四................................................. ................................................... ......... 22 5. 实验五................................................. ................................................... ......... 26 6. 实验六................................................. ................................................... ......... 33 7.参考文献 ................................................ ................................................... .. (38)实验一交通灯控制实验一.实验目的通过应用接口技术设计十字路口、复杂路口交通灯控制系统,学会应用“微机原理与接口技术”课程所学的X86汇编语言和接口技术掌握可编程并行接口芯片的硬件设计、软件编程,实现十字路口交通灯的模拟控制并思考计算机如何应用在各种控制系统中。
接口技术实验3报告
上海大学计算机学院《计算机接口技术》实验3专业:计算机科学与技术班级:周一1~3节姓名:学号:计算机工程与科学学院报告日期 2012 年 10 月 27 日实验名称: 可编程并行接口8255 实验一、…二、实验目的了解可编程并行接口芯片8255 的内部结构、工作方式、初始化编程及应用。
(1) 流水灯实验:利用8255 的A 口、B 口循环点亮发光二极管。
(2) 交通灯实验:利用8255 的A 口模拟交通信号灯。
(3) I/O 输入输出实验:利用8255 的A 口读取开关状态,8255 的B 口把状态送发光二极管显示。
三、实验原理1、8255A 的内部结构:(1)数据总线缓冲器:这是一个双向三态的8 位数据缓冲器,它是8255A 与微机系统数据总线的接口。
输入输的数据、CPU 输出的控制字以及CPU 输入的状态信息都是通过这个缓冲器传送的。
(2)三个端口A,B 和C:A 端口包含一个8 位数据输出锁存器和缓冲器,一个8 位数据输入锁存器。
B 端口包含一个8 位数据输入/输出锁存器和缓冲器,一个8 位数据输入缓冲器。
C 端口包含一个8 位数据输出锁存器及缓冲器,一个8 位数据输入缓冲器(输入没有锁存器)。
>(3)A 组和B 组控制电路:根据CPU 输出的控制字来控制8255 工作方式的电路,它们共用一个端口地址相同的控制字寄存器,接收CPU 输出的一字节方式控制字或对C口按位复位命令字。
方式控制字的高5 位决定A 组工作方式,低3 位决定B 组的工作方式。
对C 口按位复位命令字可对C 口的每一位实现置位或复位。
A 组控制电路控制A 口和C 口上半部,B 组控制电路控制B 口和C 口下半部。
(4)读写控制逻辑:用来控制把CPU 输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2、8255A 的工作方式:方式0—基本输入输出方式;方式1—选通输入输出方式;方式2—双向选通输入输出方式。
微型计算机原理及接口技术实验报告
成都理工大学微型计算机原理及接口技术实验报告学院: 核技术与自动化工程学院专业: 电气工程及其自动化班级:学号:姓名:指导老师:完成时间:实验一EMU 8086软件的使用1、实验目的通过对emu8086的使用,来理解《微型计算机原理及接口技术》课本上的理论知识,加深对知识的运用,以及emu8086交互式学习汇编语言(Assembly Language)、计算机结构(Computer Architecture)和逆向工程(Reverse Engineering)的完整仿真体系。
以及了解创建,编译,链接,调试运行,拟屏幕、源代码观察、复位、辅助工具、变量、DEBUG、堆栈及FLAGS(标志寄存器)观察等功能。
2、实验环境及设备实验中用到的硬件:记本电脑。
软件:emu8086编程程序emu8086.exe。
3、实验内容1.emu8086的编辑面板:其中编程时要做好三个要点1.数据段:segmentends2.堆栈段:segmentends3.代码段e segmentends这三个框架。
编辑好程序如下; multi-segment executable file template.data segment; add your data here!a db 0b db 1c db 0pkey db "press any key...$"endsstack segmentdw 128 dup(0)endscode segmentstart:; set segment registers:mov ax, datamov ds, axmov es, ax; add your code heremov al ,aadd al,bmov c,allea dx, pkeymov ah, 9int 21h ; output string at ds:dx; wait for any key....mov ah, 1int 21hmov ax, 4c00h ; exit to operating system.int 21hendsend start ; set entry point and stop the assemble d1 segment进行编译后:无错误后点击运行:程序中实现了赋值,传址,加法,中断等功能。
微机原理与接口技术实验报告
微机原理与接口技术实验报告引言微机原理与接口技术是计算机科学与技术专业的一门重要课程,通过实验的方式来深入理解微机原理和接口技术的原理和应用。
本实验报告将详细介绍我们在实验中所学到的内容和实验结果。
一、实验目的微机原理与接口技术实验的主要目的是让学生通过实验来了解和掌握微机系统的结构与工作原理,以及接口技术的基本原理和应用。
通过实验,我们可以加深对微机原理和接口技术的理解,并能够熟练操作相应的实验设备和软件。
二、实验内容本次实验主要包括以下几个方面的内容:1. 微机系统的组成与原理:了解微机系统的基本组成部分,包括微处理器、存储器、输入输出设备等,并学习它们的工作原理和相互之间的联系。
2. 微机系统的调试与测试:学习使用调试工具和测试设备来验证微机系统的正确性和稳定性,通过调试和测试来发现和排除系统中的问题。
3. 接口技术的原理与应用:了解各种接口技术的原理和应用,包括并行接口、串行接口、USB接口等,学会设计和实现简单的接口电路。
4. 接口电路的设计与调试:通过实际设计和调试接口电路,加深对接口技术原理的理解,并能够解决实际问题。
三、实验过程及结果在实验中,我们首先学习了微机系统的基本结构和工作原理,并通过实际操作,搭建了一个简单的微机系统。
通过调试和测试,我们验证了系统的正确性和稳定性。
接着,我们学习了各种接口技术的原理和应用。
我们以并行接口为例,设计了一个简单的并行接口电路,并通过实验验证了其正确性。
同时,我们还学习了串行接口和USB接口的原理,并了解了它们在实际应用中的重要性。
在接口电路的设计和调试过程中,我们遇到了一些问题,例如信号传输的稳定性、接口电路的兼容性等。
通过分析和调试,我们逐步解决了这些问题,并取得了令人满意的实验结果。
四、实验总结通过本次实验,我们深入了解了微机原理和接口技术的基本原理和应用。
通过实际操作和调试,我们不仅掌握了微机系统的组成和工作原理,还学会了设计和实现简单的接口电路。
计算机接口课程设计实验报告
计算机接口技术课程设计报告班级:专业:学号:姓名:报告目录结构:一、实验目的二、实验要求三、课程设计使用的设备(环境)四、实验原理:五、实验内容及大概步骤六、实验结果七、总结分析与心得一、实验目的1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统与硬件结构的对应关系;2.通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念;3.培养综合实践及独立分析、解决问题的能力。
二、实验要求针对COP2000实验仪,从详细了解该模型机的指令/微指令系统入手,以实现乘法和除法运算功能为应用目标,在COP2000的集成开发环境下,设计全新的指令系统并编写对应的微程序;之后编写实现乘法和除法的程序进行设计的验证。
三、课程设计使用的设备(环境)1.硬件COP2000实验仪 PC机2.软件COP2000仿真软件四、实验原理:1.该模型机指令系统的特点:①总体概述COP2000模型机包括了一个标准CPU所具备所有部件,这些部件包括:运算器ALU、累加器A、工作寄存器W、左移门L、直通门D、右移门R、寄存器组R0-R3、程序计数器PC、地址寄存器MAR、堆栈寄存器ST、中断向量寄存器IA、输入端口IN、输出端口寄存器OUT、程序存储器EM、指令寄存器IR、微程序计数器uPC、微程序存储器uM,以及中断控制电路、跳转控制电路。
其中运算器和中断控制电路以及跳转控制电路用CPLD来实现,其它电路都是用离散的数字电路组成。
微程序控制部分也可以用组合逻辑控制来代替。
模型机为8位机,数据总线、地址总线都为8位,但其工作原理与16位机相同。
模型机的指令码为8位,根据指令类型的不同,可以有0到2个操作数。
指令码的最低两位用来选择R0-R3寄存器,在微程序控制方式中,用指令码做为微地址来寻址微程序存储器,找到执行该指令的微程序。
而在组合逻辑控制方式中,按时序用指令码产生相应的控制位。
微机原理与接口技术实验报告_5
实验二初级程序的编写与调试实验一、实验目的1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序.2、深入了解数据在存储器中的存取方法,及堆栈中数据的压入与弹出.3、掌握各种寻址方法以及简单指令的执行过程.二、实验内容1.设堆栈指针SP=2000H,AX=3000H,BX=5000H,请编一程序段将AX的内容和BX的内容进行交换.请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试.程序:MOV AX,3000MOV BX,5000MOV SP,2000PUSH AXPUSH BXPOP AXPOP BXHLT2.设DS=当前段地址,BX=0300H,SI=0002H请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入OAH,OBH,OCH,ODH,OEH.在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?-E 300 0A,0B,0C,0D,0E-AMOV BX,0300MOV SI,0002MOV AX,BXMOV AX,0304MOV AX,[0304]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI] HLT3.设AX=0002H,编一个程序段将AX的内容乘10,要求用移位的方法完成. 程序:MOV AX,0002MOV BX,AXMOV CL,2SHL AX,CLADD AX,BXMOV CL,1SHL AX,CLHLT实验四加法及判断程序的编写与调试一、实验目的1.熟练掌握编写汇编语言源程序的基本方法和基本框架.2.学会编写顺序结构,分支结构和循环结构的汇编程序3.掌握程序中数据的产生与输入输出的方法.二、实验内容1.用汇编语言编写一个加法程序:1325+9839请用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出.程序:DATA SEGMENTDATA1 DB '5','2','3','1'DATA2 DB '9','3','8','9'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,DATA1LEA DI,DATA2MOV CX,4MOV AH,0 NEXT:MOV AL,[SI]ADC AL,[DI]ADC AL,AHMOV AH,0AAAADD AL,30HMOV [DI],ALINC DIINC SILOOP NEXTMOV CX,5ADD AH,30HMOV [DI],AH NEXT1:MOV DL,[DI]MOV AH,02INT 21HDEC DILOOP NEXT1MOV AH,4CHINT 21H CODE ENDSEND START2.假设有一组数据:5,-4,0,3,100,-51,请编写一程序,判断:每个数是否大于0?等于0?还是小于0?并输出其判断结果,即即:1当X>0Y=0当X=0-1 当X<0程序:DATA SEGMENTDATA1 DB 5, -4, 0 ,3,100,-51STRING1 DB'Y=1','$'STRING2 DB'Y=0','$'STRING3 DB'Y=-1','$'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,DATA1MOV CX,6NEXT: MOV AL,[SI]CMP AL,0JZ NEXT1JNS NEXT2JS NEXT3NEXT1: MOV DX,OFFSET STRING2MOV AH,09HINT 21HJMP NEXT4NEXT2: MOV DX,OFFSET STRING1MOV AH,09HINT 21HJMP NEXT4NEXT3: MOV DX,OFFSET STRING3MOV AH,09HINT 21HNEXT4: INC SILOOP NEXTMOV AH,4CHINT 21HCODE ENDSEND START实验五大小写字母互换程序的编写与调试一、实验目的进一步熟悉汇编语言源程序的编写方法及宏汇编程序的使用方法二、实验内容设内存数据区有大小写混合英文ASCII码字母: ‘AbCdEfGChinaAgriculturalUniversity’。
NEUQ 计算机接口技术实验报告
计算机接口技术实验报告学号:姓名:提交日期:成绩:东北大学秦皇岛分校计算机与通信工程学院实验1、IO地址译码一、实验目的掌握8253的基本工作原理和编程方法。
二、实验内容按图16虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
三、编程提示8253控制寄存器地址283H计数器0地址280H计数器1地址281HCLK0连接时钟1MHZASM程序:ioport equ 0d400h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253aout dx,almov dx,io8253b ;送计数初值为0FHmov al,0fhout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII码加30Hadd dl,7 ;否则为'A'-'F',ASCII码加37Hnum: add dl,30hmov ah,02h ;显示int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret;子程序返回disp endpcode endsend start实验现象:开始时代表低电平的灯亮,按单脉冲信号5次后高电平的等亮实验2、简单并行接口一、实验目的掌握8253的基本工作原理和编程方法。
最新微机接口实验报告
最新微机接口实验报告实验目的:1. 熟悉微机接口的基本原理和功能。
2. 掌握微机接口的编程和操作技巧。
3. 通过实验加深对微机接口技术的理解。
实验环境:- 微机接口实验箱- 个人电脑- 相关软件和驱动程序实验内容:1. 实验一:了解微机接口的基本结构和工作原理。
- 学习微机接口的基本概念,包括数据总线、地址总线、控制总线等。
- 观察实验箱中的微机接口模块,识别各部分的功能。
2. 实验二:编写简单的输入输出程序。
- 使用汇编语言或C语言编写程序,实现对微机接口的控制。
- 通过程序实现LED灯的点亮和熄灭,以及按键的读取。
3. 实验三:中断和DMA操作。
- 学习中断的基本概念和处理流程。
- 实现一个基于中断的键盘输入程序。
- 了解DMA的工作原理,并编写相应的数据传输程序。
实验步骤:1. 准备实验环境,确保所有设备和软件均已正确安装和配置。
2. 按照实验指导书的要求,逐步完成各个实验项目。
3. 在实验过程中记录关键步骤和结果,以便撰写实验报告。
4. 对遇到的问题进行分析和解决,记录解决方案。
实验结果:1. 成功理解微机接口的基本结构和功能。
2. 编写的输入输出程序能够正确控制LED灯和读取按键状态。
3. 中断和DMA操作实验顺利完成,实现了预期的功能。
实验结论:通过本次实验,加深了对微机接口技术的理解,掌握了基本的编程和操作技能。
实验中遇到的问题和挑战也有助于提高解决问题的能力。
通过实践,更加明确了理论知识与实际应用之间的联系。
建议和反思:- 在实验过程中,应更加注重对理论知识的应用,以提高实验效率。
- 对于复杂的问题,应采取分步解决的策略,避免在实验中出现混乱。
- 未来应加强实验前的准备工作,确保实验能够顺利进行。
计算机接口技术实验报告
实验一无条件输出端口的构成与地址译码【地址译码电路】【实验板的线路接法】将电路图上的A1-A7端口依次PIN到PIN_3、PIN_4、PIN_7、PIN_8 、PIN_9、PIN_24、PIN_25,再用八股导线连接到实验箱中的XA1-XA7上;将电路图上的IOW端口PIN到PIN_17,通过转换单元连接到实验箱上的IOW端口;将电路图上的D1-D8端口依次PIN到PIN_27、PIN_28、PIN_30、PIN_31 、PIN_32、PIN_40、PIN_41、PIN_42,再用八股导线连接到实验箱中的XD1-XD7上;将电路图上的OUT1-OUT8端口依次PIN到PIN_43、PIN_44、PIN_45、PIN_47 、PIN_48、PIN_51、PIN_52、PIN_53,再用八股导线连接到实验板上二极管对应的的D0-D7上。
最后,给实验板接上电源线和地线。
【输出数据至端口的程序段】#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <bios.h>#include <ctype.h>#include <process.h>void main(){outp( 0x3000, 0x00 );}【Led规律性变化的程序段】#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <bios.h>#include <ctype.h>#include <process.h>void main(){long i, k;for( i=0; 1; i++)//不设出口的死循环{if( i>=8 ) i-=8;for( k=0; k<10000000; k++ ); //等待outp( 0x3000, 0x00+i );}}。
微型计算机原来与接口技术实验报告(全)
微机接口实验报告实验一简单I/O口扩展实验一、实验目的1、熟悉74LS273,74LS244的应用接口方法。
2、掌握用锁存器、三态门扩展简单并行输入、输出口的方法。
二、实验内容1、由键盘输入字符,然后通过74LS273将其ASCII码锁存输出,并通过LED显示出来。
2、逻辑电平开关的状态输入74LS244,经过PCI总线读入并以16进制显示在屏幕上。
3、逻辑电平开关的状态输入74LS244,然后通过74LS273锁存输出,利用LED显示电路作为输出的状态显示。
三、实验原理介绍本实验用到两部分电路:开关量输入输出电路,简单I/O口扩展电路。
四、实验步骤1、实验接线:(←→表示相互连接)CS0←→CS244,CS1←→CS273,平推开关的输出K1~K8←→IN0~IN7(对应连接)00~07←→发光二极管的输入LED1~LED8。
2、编辑程序,用debug调试程序,单步运行。
3、调试通过后,全速运行程序,观看实验结果。
4、编写实验报告。
五、实验提示74LS244或74LS273的片选信号可以改变,例如连接CS2,此时应同时修改程序中相应的地址。
六、实验结果程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。
例如:K2置于L位置,则对应的LED2 应该点亮。
七、程序框图(如图1)实验程序:实验 1; * cs0<->cs273,D0~D7依次接LED1~LED8*;IOPOR T EQU 0A800HLS273 EQU IOPORT+0A0HCODE SEGMENTASSUME CS:CODESTART: MOV AH,2 ;回车符MOV DL,0DHINT 21HMOV AH,1 ;等待键盘输入INT 21HCMP AL,27 ;判断是否为ESC键JE EXIT ;若是则退出MOV DX,LS273 ;若不是,从2A8H输出其ASCII码OUT DX,ALJMP START ;转startEXIT: MOV AH,4CH ;返回INT 21HCODE ENDSEND START实验结果:从键盘输入数字0~9可以通过LED显示相应的二进制代码(亮灯为0,熄灯为1)例如从键盘输入数字3,灯亮情况led4~led1对应0011;即led4~led1从到左表示0011,led4、led3低位,led2、led1高位。
中山大学计算机原理-接口技术实验报告模板-实验八
; 恢复保存的通道地址 ; 读转换结果 ; 存入BUFER内存单元 ; 修改地址指针 ; 修改通道地址 ; 判断8个通道是否均采样一次 ; 未完, 返回启动下一个通道 ; 修改计数值 ; 未完, 返回继续 ; 8个通道均采样10个点, 暂停
三、实验内容
实验预备:按要求连接实验台数据线,并打开 TPC-USB实验机。注意检查 硬件是否连接以及驱动是否正常安装。 1、实验电路原理图如图。通过实验台左下角电位器RW1输出0~5V直流电 压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读 取转换结果,验证输入电压与转换后数字的关系。 启动IN0开始转换: Out 0298 0 读取转换结果: In 0298
五、实验分析与设计
按实验要求连线: 连 线: ADC0809 实验分析: 1、IN0单极性输入电压与转换后数字的关系为: CS----298H~29FH(片选信号) RW1----INO
其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。
2、一次A/D转换的程序可以为 MOV DX,“口地址” OUT DX,AL ;启动转换 ;延时 IN AL,DX ;读取转换结果放在AL中 编写并运行程序: (1)AD_1
计算机原理-接口技术实验
实验报告
实 验 人: 院(系): 学 号: 专业(班级): 日 期:
实验题目: [实验八]模/数转换器;
[实验八]模/数转换器 一、实验目的
了解模/数转换的基本原理,掌握ADC0换的原理: 1、A/D转换器基本结构 A/D转换芯片是由集成在单一芯片上的模拟多路开关、采样/保持器、A/D转 换电路及数字输出接口构成。如图7.73所示。 (1)模拟多路开关:用于切换多路模拟输入信号,根据地址信号选择某一个 通道,使芯片能够分时转换多路模拟输入信号。 (2)采样/保持器:缩短采样时间,减小误差。 (3)精密基准电压源:产生芯片所需要的基准电压。 (4)A/D转换电路:完成模拟量到数字量的转换。 (5)数字接口和控制逻辑:将微机总线与芯片相连,接收控制命令、地址信 息,输出转换结果。
接口的应用实验报告(3篇)
第1篇一、实验目的1. 理解接口的概念和作用。
2. 掌握接口的使用方法,包括接口的定义、实现和继承。
3. 通过实际应用,加深对接口的理解和应用能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 接口的基本概念2. 接口的定义和实现3. 接口的继承和多态4. 接口的应用实例四、实验步骤1. 接口的基本概念(1)打开Eclipse,创建一个名为“InterfaceDemo”的Java项目。
(2)在项目中创建一个名为“Shape”的接口,包含一个抽象方法“draw()”。
```javapublic interface Shape {void draw();}```2. 接口的定义和实现(1)在项目中创建一个名为“Circle”的类,实现“Shape”接口。
```javapublic class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}}```(2)在项目中创建一个名为“Rectangle”的类,实现“Shape”接口。
```javapublic class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}}```3. 接口的继承和多态(1)在项目中创建一个名为“Triangle”的类,继承“Circle”类,并实现“Shape”接口。
```javapublic class Triangle extends Circle implements Shape {public void draw() {System.out.println("Drawing a triangle.");}}```(2)创建一个名为“Main”的类,用于测试接口的应用。
接口技术实验报告
实验二简单并行接口一、实验目的掌握简单并行接口的工作原理及使用方法。
二、实验内容1、按下面图4-2简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。
74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。
2、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。
3、按下面图4-3简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。
74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。
4、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。
图4-2 图4-3三、编程提示1、上述并行输出接口的地址为2A8H,并行输入接口的地址为2A0H,通过上述并行接口电路输出数据需要3条指令:MOV AL,数据MOV DX,2A8HOUT DX,AL通过上述并行接口输入数据需要2条指令:MOV DX,2ADHIN AL,DX2、等待键盘输入可用DOS的1号功能调用。
格式:MOV AH,02HINT 21H功能:计算机等待键盘输入一个字符,若有字符输入,则送CRT显示。
入口参数:无出口参数:AL是键盘输入字符的ASCII码。
3、参考流程图(见图4-4、4-5)等待键盘输入从端口2A8H 输出其ASC码开 始自端口2A0H输入ASCII码保存输入ASCII码至DL 显示ASCII码对应的字符是ESC吗?有键按下吗?开 始结 束结 束YYNN图4-4 参考程序1 图4-5 参考程序2 4、实验程序:(程序1对应图1)(程序2对应图2)Inport epu 0d400h-0280h Inport epu 0d400h-0280h Ls273 epu inport+2a8h Ls244 epu inport+2a0h Code segment Code segmentAssume cs:code Assume cs:codeStart: Start:Moy ah,2 mov dx,ls244Mov dl,0dh in al,dxInt 21h mov dl,alMov ah,1 mov ah,02Int 21h int 21hCmp al,27 mov dl,0dhJe exit int 21hMov dx,ls273 mov dl,0ahOut dx,al int 21hJmp start mov dl,0ffhExit:mov ah,4ch int 21h Int 21h jnz exitCode ends je startend start exit:mov ah,4chInt 21hCode endsEnd start四、实验结果:本实验共分为两个部分,分别为终端输入和终端显示。
中山大学计算机原理-接口技术实验报告模板-实验一-实验二
实验报告实验人:学号:日期:院(系):专业(班级):实验题目:I/O地址译码实验、简单并行接口[实验一] I/O地址译码一. 实验目的掌握I/O地址译码电路的工作原理;了解实验台结构功能及其I/O译码电路的使用方法;复习D触发器的工作原理。
二. 实验原理实验电路如图所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O 地址”输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/ O指令且地址在280H~2BFH范围内,则译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲。
利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
注意:命令中的端口地址是根据PCI卡的基址再加上偏移量计算出来的,不同的微机器PCI卡的基址可能不同,需要事先查找出来,查找方法见本书相关部分中的介绍。
三. 实验内容1、按要求连接实验台数据线,并打开TPC-USB实验机。
注意检查硬件是否连接以及驱动是否正常安装。
2、在TPC-USB集成开发环境下编写控制程序,并调试。
注意:要使译码器电路输出一个负脉冲,必须使用输入或输出指令,并且其地址为译码器输出的对应地址。
对于Y5为2A8H;实验电路中D触发器CLK端输入脉冲时,上升沿使Q 端输出高电平L7发光,CD端加低电平L7灭;为实现亮、灭、亮、灭、……程序必须循环,而且亮和灭的间隔取决于软件延迟时间(延迟通过一段循环程序实现,通过控制循环次数,使在实验所用的主机频率下,使亮灭显示非常明显清晰)程序中最好检查是否有键按下,若有,则停止循环,返回DOS。
可以通过改变连至D触发器的译码输出线以检验译码电路的输出。
四. 实验器材实验所用器材1、TPC-USB通用微机接口实验系统(包含TPC-USB实验台及对应的TPC-USB实验系统集成开发环境)2、若干导线五. 实验分析与设计编程分析:一般的CPU频率在2.0-3.0MHz左右,即处理一个数据大概花费10-7s,而人的肉眼至少要在0.1s以上才能分辨出两次闪烁,而一个ffffH的循环才仅仅是0.05s 左右,所以必须要有多个ffffH的循环,才能使得两次闪烁间隔可以被分辨。
计算机接口技术报告
《计算机接口技术》报告——串行口传输的数模/模数转换专业:电子信息工程班级:电子0811姓名:姒绍辉学号:0820106120指导教师:许洪华二○○一年五月1.课程设计目的1.1巩固和加深对计算机接口技术知识的了解;1.2培养根据课题需要选学参考书籍,查阅芯片资料的能力;1.3按要求编写课程设计报告,正确反映设计和实验成果。
2.课程设计内容及要求2.1课程设计要求设计具备基本完整的功能,具有可实现性;强调创新性和应用性,不与现有系统、产品雷同;硬件设计要求详尽,软件可以限于主要功能和关键部分;2.2课程设计内容本课程设计内容为实现以STC89C52微处理器为核心,通过控制驱动ADC0804,DAC0832,RS232,来实现将0~5V模拟电压量转化为8位数字量,同时为便于观察转化而成的数字量结果,将其通过RSR232上传给上位机显示,最后再将数字量(0~255)转化为模拟电压,以此来控制发光二极管的亮暗;即对于整个设计系统来说,分为AD转化模块,串行传输模块,DA转化模块。
3.课程硬件设计3.1设计思想及总体框架图本设计是以STC89C52微控制器为控制核心单元,该系统突出特点是环境适应能力较强,功耗较低,成本低廉。
ADC0804是一个早期的A/D转换器,因其价格低廉而在要求不高的场合得到广泛应用;作为一个单通道、低价格A/D转换器,主要特点在于内含时钟发生器;单电源工作时输入信号电压范围是0V~5V。
而同样价格较为低廉、低功耗的并行DAC0832芯片,其电流建立时间约为1us,可以工作在双缓冲、单缓冲或直通方式。
系统硬件总体框架图如图1.1所示。
3.2主要模块电路设计(1)微处理器模块使用STC89C52为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
单片机的最小系统如图 1.2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。
计算机接口技术实验报告
计算机接口技术实验报告数学与计算机学院《计算机接口技术》实验报告专业: 班级: 学号: 姓名: 指导老师:实验1 定时与中断接口程序设计一实验目的1了解定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;2.学习使用TURBO C++对8253、8255进行编程操作;3(熟悉拦截PC机中断向量的TC++ 编程方法。
二实验内容1(8253、8255在PC/XT机中的电路连接介绍1, 8088 8253 2,D7…D0 OUT0 D7…D0 至8259 IRQ0,中断类型=8 3, RD GATE0 +5V IOR4, WR CLK0 IOW5, A0 OUT1 A0 至8237的DRAM刷新请求6, A1 GATE1 A1 +5V7, CLK18,地址OUT2 IO/M & 放大 9,译码CS GATE2 A9…A210, CLK0,1,2 40H~43H1.19MHz地址PB0译码 CS PB160H~63H 8255PC机启动后,系统设置的初始状态为:芯片有关工作方式初值运行情况通道0#:方式3(方波计数初值:OUT输出55ms方波至0000H 发生器) 8259的IRQ0 8253 通道2#:,(1KHz) 计数初值:,,(1KHz方波) (1190)PB0、PB1:方式0(简控制蜂鸣器发声。
0:不发8255 单输出) 声,1:发声 8259 IRQ0:允许中断中断类型号:8 CPU响应8号中断 2(程序要求(1)程序启动时,要求输入定时时间,以秒为单位。
(2)按秒计时,每秒到达时,在屏幕上显示当前为第几秒,同时蜂鸣器发出短促叫声;(3)当定时时间到,则显示“Time Up!”,结束程序。
三. 实验步骤1(建立源文件:启动TURBO C++3.0,建立Timer.CPP。
保存到D:\ ×(学号)\Timer.CPP;2(设置TC工作目录:选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录,OK。
微型计算机接口技术实验报告
微型计算机接口技术实验报告实验1:基本IO 口扩展实验一.实验目的了解TTL 芯片扩展简单I/O 口的方法,掌握数据输入输出程序编制的方法。
二.实验内容说明74LS244 是一种三态输出的8 总线缓冲驱动器,无锁存功能,当G 为低电平时,Ai 信号传送到Yi,当为高电平时,Yi 处于禁止高阻状态。
74LS273 是一种8D 触发器,当CLR 为高电平且CLK 端电平正跳变时,D0——D7 端数据被锁存到8D 触发器中。
本实验利用74LS244 作为输入口,读取开关状态,并将此状态通过74LS273 驱动发光二极管显示出来。
三.实验原理图74LS244 与74LS273 扩展I/O 口原理图四.实验步骤1.编写源程序源程序为:MY_STACK SEGMENT PARA 'STACK'DB 100 DUP(?)MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA'IO_9054base_address DB 4 DUP(0) ;PCI卡9054芯片I/O基地址暂存空间IO_base_address DB 4 DUP(0) ;PCI卡I/O基地址暂存空间pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'LS244 DW 00000HLS273 DW 00020HRA DB ?LB DB ?DELAY_SET EQU 0FFFH ;延时常数MY_DATA ENDsMY_CODE SEGMENT PARA 'CODE'MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DA TA, SS:MY_STACKMAIN:.386 ;386模式编译MOV AX,MY_DA TAMOV DS,AXMOV ES,AXMOV AX,MY_STACKMOV SS,AXCALL FINDPCI ;自动查找PCI卡资源及IO口基址MOV CX,word ptr IO_base_address; MOV CX,0E800H ;直接加入(E800:本机PCI卡IO口基址)ADD LS244,CX ;PCI卡IO基址+偏移ADD LS273,CXMOV RA,7FHMOV LB,0FEHREAD1: MOV DX,LS244 ;读取开关状态IN AL,DXCMP AL,55H ;如果是55右移JE READ2CMP AL,0AAH ;如果是AA左移JE READ3NOT AL ;取反JMP READ4READ2: CALL RIGHTJMP READ4READ3: CALL LEFTREAD4: MOV DX,LS273OUT DX,AL ;送LED显示CALL DELAYCALL BREAKJMP READ1MY_PROC ENDp;RIGHT PROC NEARMOV AL,RAROR AL,1MOV RA,ALRETRIGHT ENDPLEFT PROC NEARMOV AL,LBROL AL,1MOV LB,ALRETLEFT ENDP;;***************************************************************************** ; /*按任意键退出*/;*****************************************************************************;BREAK PROC NEAR ;按任意键退出PUSHFPUSH AXPUSH DXMOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN: POP DXPOP AXPOPFRETBREAK ENDP;;***************************************************************************** ; /*延时程序*/;*****************************************************************************;DELAY PROC NEAR ;延时程序PUSHFPUSH DXPUSH CXMOV DX,DELAY_SETD1: MOV CX,-1D2: DEC CXJNZ D2DEC DXJNZ D1POP CXPOP DXPOPFRETDELAY ENDp;;***************************************************************************** ; /* 找卡子程序*/;*****************************************************************************;;FUNCTION CODEIO_port_addre EQU 0CF8H ;32位配置地址端口IO_port_data EQU 0CFCH ;32位配置数据端口IO_PLX_ID EQU 200810B5H ;PCI卡设备及厂商ID BADR0 = 10H ;基地址寄存器0BADR1 = 14H ;基地址寄存器1BADR2 = 18H ;基地址寄存器2BADR3 = 1CH ;基地址寄存器3FINDPCI PROC NEAR ;查找PCI卡资源并显示PUSHADPUSHFDMOV EBX,080000000HFINDPCI_next:ADD EBX,100HCMP EBX,081000000HJNZ findpci_continueMOV DX,offset pcicardnotfind ;显示未找到PCI卡提示信息MOV AH,09HINT 21HMOV AH,4CHINT 21H ;退出findpci_continue:MOV DX,IO_port_addreMOV EAX,EBXOUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口CMP EAX,IO_PLX_IDJNZ findpci_next ;检查是否发现PCI卡MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR1OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_9054base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_9054base_addressAND EAX,0fffffffehMOV dword ptr IO_9054base_address,EAX ;去除i/o指示位并保存MOV DX,IO_port_addreMOV EAX,EBXADD EAX,BADR2OUT DX,EAX ;写地址口MOV DX,IO_port_dataIN EAX,DX ;读数据口MOV dword ptr IO_base_address,EAXAND EAX,1JZ findPCI_next ;检查是否为i/o基址信息MOV EAX,dword ptr IO_base_addressAND EAX,0fffffffehMOV dword ptr IO_base_address,EAX ;去除i/o指示位并保存MOV DX,offset good ;显示开始执行程序信息MOV AH,09HINT 21HPOPfdPOPadRETfindPCI ENDPMY_CODE ENDSEND MAIN2.编译源程序3. 实验连线(连线图如下)244 的CS——ISA 总线接口模块的0000H,Y7—Y0——开关K1—K8。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机接口技术实验报告数学与计算机学院《计算机接口技术》实验报告专业: 班级: 学号: 姓名: 指导老师:实验1 定时与中断接口程序设计一实验目的1了解定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法;2.学习使用TURBO C++对8253、8255进行编程操作;3(熟悉拦截PC机中断向量的TC++ 编程方法。
二实验内容1(8253、8255在PC/XT机中的电路连接介绍1, 8088 8253 2,D7…D0 OUT0 D7…D0 至8259 IRQ0,中断类型=8 3, RD GATE0 +5V IOR4, WR CLK0 IOW5, A0 OUT1 A0 至8237的DRAM刷新请求6, A1 GATE1 A1 +5V7, CLK18,地址OUT2 IO/M & 放大 9,译码CS GATE2 A9…A210, CLK0,1,2 40H~43H1.19MHz地址PB0译码 CS PB160H~63H 8255PC机启动后,系统设置的初始状态为:芯片有关工作方式初值运行情况通道0#:方式3(方波计数初值:OUT输出55ms方波至0000H 发生器) 8259的IRQ0 8253 通道2#:,(1KHz) 计数初值:,,(1KHz方波) (1190)PB0、PB1:方式0(简控制蜂鸣器发声。
0:不发8255 单输出) 声,1:发声 8259 IRQ0:允许中断中断类型号:8 CPU响应8号中断 2(程序要求(1)程序启动时,要求输入定时时间,以秒为单位。
(2)按秒计时,每秒到达时,在屏幕上显示当前为第几秒,同时蜂鸣器发出短促叫声;(3)当定时时间到,则显示“Time Up!”,结束程序。
三. 实验步骤1(建立源文件:启动TURBO C++3.0,建立Timer.CPP。
保存到D:\ ×(学号)\Timer.CPP;2(设置TC工作目录:选菜单Options/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放目录,OK。
如此,TC生成的可执行文件等将会存放到此工作目录下。
四,实验代码#include <stdio.h> //支持标准输入输出,如printf()。
#include <dos.h> //支持接口访问、中断向量操作函数#include <STDLIB.H> //支持exit()函数#ifdef __cplusplus //定义C++使用的中断函数标识符。
若是×.C程序,则不需要 #define __CPPARGS ...#else#define __CPPARGS#endifint nTick=0,sec=0,flag=0;unsigned char sys_PB,my_PB;void interrupt far (*sys_int_08)(__CPPARGS); //若是×.C,则函数参数不写 void interrupt far my_int_08(__CPPARGS) //若是××.C,则函数参数不写 {//8号中断,每55ms中断一次,由8253的0号定时器定时,向8259 IRQ0申请中断++nTick;if(tinck==1) outportb(0x61,my_PB); //开始鸣叫else if(tinck==3) outportb(0x61,sys_PB); //停止鸣叫else if(nTick>18){ // 1second/55ms 近似等于18sec++;}sys_int_08(); //调用系统的中断向量}//========================================== void main(){ unsigned int Time_up;printf("Please input Up Time(5--30): ");scanf("%d",&Time_up);printf("\n");if(Time_up<5 || Time_up>30){ printf("Input Error!");exit(1); //结束程序}outportb(0x63,0x82);//设置8255,PB为输入方式sys_PB=inportb(0x61); //读取PB口,内容my_PB=sys_PB|0x03;//将PB口低2位(PB0,PB1)置1outportb(0x63,0x80);//设置8255,PB为输出方式//8253通道2,产生1KHz方波,送到扬声器,使扬声器发声outportb(0x43,0xb6); //CW=10110110 B,通道2,先低字节,再高字节,方式3,二进制outportb(0x42,0xa6); //low byte,outportb(0x42,0x04); //high byte,0x04a6=1190,f = 1.19MHz,out=f/1190=1000Hzsys_int_08=getvect(0x08); //保存系统的中断向量setvect(0x08,my_int_08); //设置系统向量while(1){ if(flag==1){ flag=0;printf("%d ",sec);if(sec==Time_up) break;}}printf("Timer Up!\n\n");outportb(0x61,sys_PB); //恢复系统的PB口状态setvect(0x08,sys_int_08); //恢复系统的中断向量 }五,实验结果六实验总结通过本次实验使我进一步了解了可编程并行接口8253和8255的工作方式及编程原理,可以编写简单的c语言程序控制8255A实现一些基本功能,了解了定时器/计数器8253、并行I/O接口8255A在PC机中的电路连接方法熟悉了拦截PC机中断向量的TC++ 编程方法但是在实验过程中同样出现了一些问题,经过自己及同组人的共同努力最终解决了问题,也加深了对8255A的了解。
学习了很多知识。
实验3 基于DLL与HOOK技术的键盘消息拦截与读音一实验目的1(了解MFC DLL动态连接库的编程方法;2(了解HOOK技术和回调函数的运行机制;3(学习MFC中加载动态连接库的方法。
二实验指导1(HOOK的基本概念在Windows下,当硬件或软件产生中断时,系统会发送一个消息给用户程序。
因此,用户程序一般不使用中断,而是采用拦截系统消息的方法。
为了拦截不属于本应用程序的消息,拦截程序必须得到系统的认可,由系统安装成全局运行。
HOOK即通常所说的钩子。
实际上,HOOK就是上面所说的消息拦截程序段。
通过系统调用,把它挂入系统。
每当HOOK所希望的消息发出,在没有到达目的窗口前,HOOK程序就先捕获该消息,得到控制权。
HOOK程序先处理该消息,再向系统传递该消息。
也可以丢弃该消息。
系统维护着一个HOOK链,最近安装的HOOK总放在链的开始,从而得到优先执行。
2(HOOK函数的形式及其安装方法HOOK函数在程序中应为全局函数,即:HOOK函数不应写在一个类中。
HOOK函数是一个消息响应函数,由系统调用,应以回调函数的形式出现,其格式为: LRESULT _declspec(dllexport)_stdcall CALLBACK KeyboardProc( int nCode, // 若为HC_ACTION,说明后两参数含有击键的消息 WPARAM wParam, //虚键码LPARAM lParam //击键的有关信息,如重复次数等)写好HOOK函数后,应进行安装,才能得到系统的回调。
安装HOOK的函数为: HHOOK SetWindowsHookEx(int idHook, //钩子的类型,按键为 WH_KEYBOARDHOOKPROC lpfn, //钩子函数的地址HINSTANCE hMod, //包含钩子函数的模块句柄DWORD dwThreadId //指定监视的线程。
若为NULL,则为全局钩子);3(程序要求(1)编写含有按键HOOK的DLL,要求当按键时,能读出按键名称(2)编写安装DLL的应用程序。
三实验步骤1(建立DLL(1)启动VC++,选 File\New(2)进入MFC AppWizard _ step 1 of 1 (3)在KeyHook.cpp文件中添加代码:#include "stdafx.h" installhook() #include "KeyHook.h" {#include "mmsystem.h" hkb=SetWindowsHookEx(WH_KEYBOARD,(H#ifdef _DEBUG OOKPROC)KeyboardProc,hInst,0);#define new DEBUG_NEW return TRUE; #undef THIS_FILE }static char THIS_FILE[] = __FILE__; BOOL __declspec(dllexport) UnHook()#endif {#pragma data_seg(".SHARDAT") BOOL unhooked =UnhookWindowsHookEx(hkb); static HHOOK hkb=NULL; //定义HOOKreturn unhooked; 句柄#pragma data_seg() }LRESULT HINSTANCE hInst; //定义本实例的__declspec(dllexport)__stdcall 句柄BOOL __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) BEGIN_MESSAGE_MAP(CKeyHookApp,{ CWinApp)if(((DWORD)lParam&0x40000000) && END_MESSAGE_MAP()(HC_ACTION==nCode)) CKeyHookApp::CKeyHookApp(){}{ CKeyHookApp theApp;if(wParam>='A' && wParam<='Z'){ CKeyHookApp::InitInstance()char {KeyName[20],temp[10]; AFX_MANAGE_STATE(AfxGetStaticModulestrcpy(KeyName,"sound\\"); State());temp[0]=wParam; temp[1]=0; hInst=AfxGetInstanceHandle();strcat(KeyName,temp); return CWinApp::InitInstance();strcat(KeyName,".wav"); }sndPlaySound(KeyName,SND_ASYNC); int CKeyHookApp::ExitInstance()} {} UnHook();LRESULT RetVal = CallNextHookEx( hkb, return CWinApp::ExitInstance(); nCode, wParam, lParam ); }return(RetVal);}在keypress.cpp添加如下文件:#include "stdafx.h" CDialog::DoDataExchange(pDX); #include "KeyPress.h" }#include "KeyPressDlg.h" BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)#ifdef _DEBUG END_MESSAGE_MAP()#define new DEBUG_NEW CKeyPressDlg::CKeyPressDlg(CWnd* #undefTHIS_FILE pParent /*=NULL*/)static char THIS_FILE[] = __FILE__; : CDialog(CKeyPressDlg::IDD,#endif pParent)class CAboutDlg : public CDialog {{ m_hIcon=AfxGetApp()->LoadIcon(IDR_Mpublic: AINFRAME);CAboutDlg(); }enum { IDD = IDD_ABOUTBOX }; voidprotected: CKeyPressDlg::DoDataExchange(CDataExvirtual void change* pDX)DoDataExchange(CDataExchange* pDX); {protected: CDialog::DoDataExchange(pDX);DECLARE_MESSAGE_MAP() }}; BEGIN_MESSAGE_MAP(CKeyPressDlg, CAboutDlg::CAboutDlg() : CDialog) CDialog(CAboutDlg::IDD){} ON_WM_SYSCOMMAND()void ON_WM_PAINT()CAboutDlg::DoDataExchange(CDataExcha ON_WM_QUERYDRAGICON() nge* pDX) END_MESSAGE_MAP(){ BOOL CKeyPressDlg::OnInitDialog(){ {CDialog::OnInitDialog(); CAboutDlg dlgAbout;ASSERT((IDM_ABOUTBOX & 0xFFF0) == dlgAbout.DoModal();IDM_ABOUTBOX); }ASSERT(IDM_ABOUTBOX < 0xF000); elseCMenu* pSysMenu = {GetSystemMenu(FALSE); CDialog::OnSysCommand(nID,if (pSysMenu != NULL) lParam);{ }CString strAboutMenu; }strAboutMenu.LoadString(IDS_ABOUTBOvoid CKeyPressDlg::OnPaint() X); {if (!strAboutMenu.IsEmpty()) if (IsIconic()){ {pSysMenu->AppendMenu(MF_SEPARATOR); CPaintDC dc(this); // devicecontext for paintingpSysMenu->AppendMenu(MF_STRING, SendMessage(WM_ICONERASEBKGND,IDM_ABOUTBOX, strAboutMenu); (WPARAM) dc.GetSafeHdc(), 0);} int cxIcon =} GetSystemMetrics(SM_CXICON);SetIcon(m_hIcon, TRUE); int cyIcon =// Set big icon GetSystemMetrics(SM_CYICON);SetIcon(m_hIcon, FALSE); // Set CRect rect;small icon GetClientRect(&rect);static HINSTANCE hinstDLL; int x = (rect.Width() - cxIcon + 1) / 2;BOOL (CALLBACK *inshook)(); int y = (rect.Height() - cyIcon + 1) / 2;if(hinstDLL=LoadLibrary((LPCTSTR)"k dc.DrawIcon(x, y, eyhook.dll"))m_hIcon);{ }inshook=GetProcAddress(hinstDLL, else"installhook"); {inshook(); CDialog::OnPaint();} }return TRUE; // return TRUE unless }you set the focus to a control HCURSOR} CKeyPressDlg::OnQueryDragIcon() voidCKeyPressDlg::OnSysCommand(UINT {nID, LPARAM lParam) return (HCURSOR) m_hIcon; { }if ((nID & 0xFFF0) == IDM_ABOUTBOX)四,实验结果:五,实验总结:通过本次实验我了解了MFC DLL动态连接库的编程方法,了解HOOK技术和回调函数的运行机制,同时也学习了一些MFC中加载动态连接库的方法。