推荐-华科 HUST 微机原理 并行IO接口实验 独立式开关
- 格式:docx
- 大小:391.31 KB
- 文档页数:10
《微机接口技术》课程设计报告设计题:人工降雨系统指导老师:谭支鹏、熊自立、陈永平设计时间:2013.10.28 至2013.11.1人工降雨系统设计一、课程设计目的1、掌握接口硬件开发平台的使用方法,利用现有的实验平台和PC机,组成一个微机模拟应用系统。
2、掌握基本接口电路的综合应用。
3、掌握接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法。
4、微机接口技术及接口芯片的综合应用。
5、在干旱了一段时间后,进行人工降雨。
不同的季节,大自然不降雨对生活生产的影响不同,要控制好等待多久才进行人工降雨,以及降雨的量。
二、课程设计要求设计一个模拟的微机应用系统。
要求该系统综合应用实验台上的多种资源(并行接口、串行接口及其它接口和传感器)设计满足选题要求的符合实际应用的硬件系统,编制主控程序;执行元件驱动程序;通信程序等相应的软件,实现主控中心微机与终端机的远距离传送以及远程控制或监测功能。
由一个主控机(上位机)和若干个下位机组成,上位机与下位机利用串行通讯接口进行连接,构成一个完整系统。
主控机负责数据处理,下位机负责接口访问,接口所需的芯片功能需要通过FPGA自己设计实现。
基于FPGA设计的芯片功能可以是一个完整的功能芯片,也可以只是你在应用需要的芯片某项功能即可。
验收的时候会根据实现的情况作出评价。
(1)主控机:在屏幕上用数字、图形、表格、曲线等方式直观地显示数据/状态处理的结果和过程。
(2)下位机:用实验台的声光部件描述当前监控/操作的工作状态,按主控机的命令驱动执行元件并返回状态和结果。
题目要求:1.用实验台上的信号电源模拟湿度计的信号电压。
2.用实验台上的LED和扬声器模拟加湿动作及报警信号。
3.用实验台上的步进电机模拟水泵动作。
4.上位机实现图形监控。
(模拟)三、课程设计内容及过程1.系统总体结构图1) 系统硬件由主控机(其中一台微机)、终端机(另一台位微机)和执行部件组成。
微机接口技术实验报告并行接口实验系别: 计算机科学与技术完成时间:2012-5-15一、实验目的1.熟悉并行接口电路;2.掌握8255并行接口芯片及8253定时器的应用及其编程技术。
二、实验内容及要求通过对8255芯片的编程,使得实验台上的步进电机按顺时针或逆时方向转动,同时扬声器(模拟电子琴)做高8度和低8度循环发音:1. 控制步进电机转动和电子琴发音;2.使用K0控制步进电机顺逆时针转动和电子琴发高低音;3.使用K1控制步进电机和电子琴速度(分快和慢两种速度);4.使用K2启动和停止步进电机转动和电子琴发音。
三、实验原理1、可编程并行芯片8255A并行接口即同时在多根I/O线上,以数据字节或字为单位实现CPU通过I/O端口与I/O 设备或被控制对象之间的信息传递,如计算机与打印机,A/D和D/A转换器,开关量接口等。
8255及其改进型8255A是最广泛应用的并行I/O接口。
8255A的主要性能参数如下:(1)8255A内共有4个端口,分别为口A、口B、口C和控制端口。
前三个端口为8位并行I/O端口,常用于传送数据信息;控制端口是用于接收CPU送来的控制命令,即控制字。
(2)8255A芯片可以三种不同的工作方式与I/O设备进行数据传输,具体方式由控制字来设定。
(3)8255与CPU之间交互信息可以使用中断方式进行。
它内部有三个中断源,分别产生与方式1(1个)和方式2(2个)中。
(4)8255A所有信号与TTL信号兼容,可直接与CPU的三总线连接使用。
(5)8255A使用单一的+5V电源,单项时钟。
8255A的三种工作方式:方式0——基本的输入/输出方式,方式1——选通的输入/输出方式,方式2——双向的输入/输出方式。
本次实验采用方式0,将口A和口B作为输出,分别控制步进电机的旋转和电子琴的发音,口C作为控制输入端。
根据端口编址及寻址方式,设定端口A的地址为288H,端口B地址为289H,端口C地址为28AH,控制端口的地址为28BH。
微机原理实验---并行接口实验
并行接口(Parallel Port)是一种广泛使用的计算机外围设备接口。
它通常用于连接打印机、扫描仪、摄像头等设备,以实现数据的传输和控制。
本实验旨在教授学生使用并行接口实现数据输入和输出的基本功能,以提高学生对计算机外围设备的理解和应用能力。
具体实验步骤如下:
材料及设备:
1. 一台计算机
2. 并行数据线(Parallel Data Cable)
3. 并口测试器(Parallel Port Tester)
4. 8位开关(8-bit Switch)
5. LED 灯(LED Light)
实验步骤:
1. 将并行数据线连接至计算机的并行接口,并将另一端连接至并口测试器。
2. 使用并口测试器测试并行接口是否正常。
若测试失败,可检查并行接口是否损坏或驱动程序是否正确安装。
3. 将 8 位开关连接至并口测试器的数据输出端,连接正确后,将 8 位开关的位置设置为 0。
4. 运行实验程序,将数据从计算机输出至并口测试器。
5. 将 LED 灯连接至并口测试器的数据输入端,将计算机输入的数据传输至 LED 灯并输出。
微机原理实验报告学号姓名专业通信1301指导教师罗杰院(系、所)电信学院并行I/O接口实验一、实验目的1、掌握GPIO IP核的工作原理和使用方法。
2、掌握IO接口程序控制方法1)查询方式2)中断方式3)延时方式3、掌握中断控制方式的IO接口设计原理4、掌握中断程序设计方法二、实验任务使用查询、中断两个方式做独立式开关输入,将开关状态显示到console。
三、硬件电路框图四、硬件平台建立1 创建XPS工程创建basesystem文件夹,建立最小系统。
启动XPS,打开system.xmp工程文件。
2 添加和配置GPIO IP核在XPS主界面左边窗口选择IP Cataiong标签,点击General Purpose I/O展开。
添加AXI Genaral Purpose I/O。
配置开关与led灯分别有16个,将其分别设置为16在ucf文件中添加相应代码3、添加和配置中断控制器IP核在XPS主界面左边窗口选择Clock, Reset and Interrupt标签,点击AXI InterruptController展开。
将INTERRUPT引脚选择axi_intc.c_INTERRUPT。
设置中断输入4、产生外部GPIO链接SW为开关输入,从GPIO_IO接口接入,LED灯输出,从GPIO2_IO接口接入展开External Ports项可看到SW与LED的外部接口五、软件平台建立1.查询源代码#include"stdio.h"#include"xil_io.h"#include"xil_types.h"#define gpio_ctrl 0x40000004 //定义通道1地址#define gpio_data 0x40000000 //定义数据1地址#define gpio1_ctrl 0x4000000c //定义通道2地址#define gpio1_data 0x40000008 //定义数据2地址int main(void){u16 SW,psw; //定义两个输入,psw作比较信号Xil_Out16(gpio_ctrl,0xffff); //输入Xil_Out16(gpio1_ctrl,0x0); //输出psw=SW=0x00; //赋初值0给两个输入信号while(1){SW=Xil_In16(gpio1_data);Xil_Out16(gpio1_data,SW);if(psw!=SW) //判断SW与PSW是否相等{psw=SW;SW=Xil_In16(gpio1_data);xil_printf("the Switch state is 0x%X\n\r",SW);//显示开关状态}}return 0;}状态显示:实验流程图:2 中断源代码:#include"xgpio.h"#include"xparameters.h" #include"xintc.h"#include"stdio.h"#include"xil_io.h"XGpio swled;XIntc intc;//实例化intcint swstate;int pshdip;void Initialize();void GPIOHandler(void * CallBackRef);int main(){Initialize();while(1){if(pshdip){xil_printf("the Switch state is 0x %x\n\r",swstate);pshdip=0;}}return 0;}void Initialize(){XGpio_Initialize(&swled, XPAR_AXI_GPIO_0_DEVICE_ID);XGpio_SetDataDirection(&swled, 1, 0xffff);XGpio_SetDataDirection(&swled, 2, 0x0);XGpio_InterruptEnable(&swled, 1);XGpio_InterruptGlobalEnable(&swled);//XGpio_InterruptClear(&swled,1);XIntc_Initialize(&intc,XPAR_AXI_INTC_0_DEVICE_ID );XIntc_Connect(&intc, XPAR_AXI_INTC_0_AXI_GPIO_0_IP2INTC_IRPT_INTR, (XInterruptHandler)GPIOHandler, (void *)&swled);XIntc_Enable(&intc, XPAR_AXI_INTC_0_AXI_GPIO_0_IP2INTC_IRPT_INTR);microblaze_enable_interrupts();microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,( void *)&intc);XIntc_Start(&intc, XIN_REAL_MODE);void GPIOHandler(void * CallBackRef){swstate= XGpio_DiscreteRead(&swled, 1); pshdip=1;XGpio_DiscreteWrite(&swled, 2, swstate);XGpio_InterruptClear(&swled, 1);状态显示:}实验流程图:六、实验小结在这个实验的过程中,令我觉得最困难的不是硬件部分的理解和搭建,而是软件部分代码的理解,由于代码中利用到了中断,所以对中断状态的理解和使用上面遇到了一些问题。
电子信息与通信学院实验报告实验名称:微机原理实验课程名称:并行IO接口设计班级:姓名:学号:教师:一、实验目的1.掌握GPIO IP核的工作原理和使用方法2.掌握中断控制方式的IO接口设计原理3.掌握中断程序设计方法4.掌握IO接口程序控制方法-------查询方式-------延时方式二、实验任务写一个数码管滚动输出任意数字的程序,并下载到FPGA板子上,用延时、中断两种方式实现。
三、实验原理硬件实现框图如图所示:四、硬件实现步骤1.使用XPS创建一个基于AXI总线的最小计算机系统。
File –> New BSB Project,如图:2.修改时钟设置:将时钟产生器的时钟输入信号进行修改,修改为单一时钟源。
修改后的结果如图:3.添加GPIO IP核,设置seg_0配置:a.在IP Catalog标签中,双击下面图标创建GPIO IP核:b.添加GPIO IP核后,将名字改为LED_16Bits,如图:c.更改seg_0配置窗口的属性,如图:4.添加AXI Interrupt Controller IP核:a.在IP Catalog标签中,双击下面图标创建INTC IP核:b.添加axi_intc_0的中断源,如图:c.将microblaze_0实例的INTERRUPT引脚选择axi_intc_0_INTERRUPT,如图:5.产生外部GPIO连接:a.选中seg_0中的GPIO_IO_O,选择make external,生成外部连接端口;选中GPIO_IO,设置为“No connection”,取消其外部连接端口;选中seg_0中的GPIO2_IO_O,选择make external,生成外部连接端口;选中GPIO2_IO,设置为“No connection”,取消其外部连接端口。
结果如图:b.在ports标签下,展开External Ports项,可看到seg_0生成的seg_0_GPIO2_IO_pin和seg_0_GPIO_IO_pin端口,如图:6.添加timer IP核:a.选择如图的IP核并双击,添加到工程:b.中断信号的连接结果如图所示:7.配置UCF文件:在UCF文件中修改如下所示配置,配置LED连接电路约束:NET "CLK" TNM_NET = sys_clk_pin;TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 100000 kHz;NET "CLK" LOC = "E3" | IOSTANDARD = "LVCMOS33";NET "RESET" LOC = "E16" | IOSTANDARD = "LVCMOS33";NET "RsRx" LOC = "C4" | IOSTANDARD = "LVCMOS33";NET "RsTx" LOC = "D4" | IOSTANDARD = "LVCMOS33";NET "seg_0_GPIO2_IO_pin<0>" LOC = "L3" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<1>" LOC = "N1" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<2>" LOC = "L5" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<3>" LOC = "L4" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<4>" LOC = "K3" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<5>" LOC = "M2" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<6>" LOC = "L6" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO2_IO_pin<7>" LOC = "M4" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<0>" LOC = "N6" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<1>" LOC = "M6" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<2>" LOC = "M3" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<3>" LOC = "N5" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<4>" LOC = "N2" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<5>" LOC = "N4" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<6>" LOC = "L1" | IOSTANDARD = "LVCMOS33"; NET "seg_0_GPIO_IO_pin<7>" LOC = "M1" | IOSTANDARD = "LVCMOS33";8.创建工程过程完成后,a.在主界面下选择Hardware->Generate Netlist;b.在主界面下选择Hardware->Generate Bitstream;c.单击Graphical Design View,可以看到系统的连接图,如下:五、软件设计1.中断方式实现数码管滚动任意数字用户应用程序的设计包括定时器配置、启动中断系统、设计中断服务程序。
一、硬件实验环境的检测(一)硬件实验环境简介TD-PIT实验装置提供了多种常用接口及控制应用部件,如定时器/计数器8254、并行接口8255、键盘输入及LED显示、二进制开/关输入及发光管显示等接口单元电路。
TD-PIT实验装置还向PC机申请了接口实验所需的配置资源。
其中包括16M的存储地址空间、256字节的I/O地址空间和一条中断请求线。
中断请求线是映射到PC机内部的15条中断线的一个。
这些信号如下表1.1所示。
表1.1 TD-PIT实验装置的仿真ISA接口信号TD-PIT实验装置提供了四个I/O设备片选信号和两个存储器设备片选信号,片选信号与偏移地址空间对应关系如下表1.2所示。
表1.2 片选地址对应偏移地址范围(二)硬件实验环境的检测检测硬件环境的好坏是每次微机原理与接口实验之前的必需工作,防止试验中出现未知的bug而无从查起。
1. 检测方法运行检测程序,用示波器检测实验装置的所有信号是否正常。
如发现故障,应检查实验装置上该信号的连线是否开路,是否短路。
查出故障,予以排除。
2. 检测工具TD-PIT实验装置、示波器、连接线若干、PC机3. 检测程序若要在示波器上观测到实验装置上各种信号的波形,则必须执行循环程序,如果只执行几条语句而不构成循环,则输出的信号一闪而过,在示波器上就无法观测到信号的波形。
计算机执行无循环程序后无法退出,这种循环称为“死循环”。
为防止“死循环”,必须在循环语句中加入退出循环命令,一般采用11号功能调用来退出循环。
测试程序如下所示:Stck segment stack 'stack'dw 32 dup(?)stck endsdata segmentdata endscode segmentbegin proc farassume ss:stck,cs:code,ds:datapush dssub ax,axpush axmov ax,datamov ds,axAGN: MOV AL,0FHMOV DX,0E060H ;送端口地址IN AL,DX ;从给出端口输入数据MOV DX,0E067HOUT DX,AL ;从给出端口输出数据MOV AH,0BH ;11号功能调用INT 21H ;检测有无键盘输入CMP AL,0 ;AL=FFH,有输入;AL=00,无输入JZ AGNretbegin endpcode endsend begin4. 地址线、数据总线及有关信号控制的波形̅̅̅̅̅̅的信号(1)片选译码输出IOY0该信号应为负脉冲选通信号,如下图1.1所示。
微机原理实验报告学号姓名华中科技大学专业通信1301指导教师罗杰院(系、所)电信学院类MIPS单周期微处理器设计一.实验目的1.了解微处理器的基本结构。
2.掌握哈佛结构的计算机工作原理。
3.学会设计简单的微处理器。
4.了解软件控制硬件工作的基本原理。
二.实验任务利用HDL语言,基于Xilinx FPGA nexys4实验平台,设计一个能够执行以下MIPS指令集的单周期类MIPS处理器,要求完成所有支持指令的功能仿真,验证指令执行的正确性,要求编写汇编程序将本人学号的ASCII码存入RAM的连续内存区域。
(1)支持基本的算术逻辑运算如add,sub,and,or,slt,andi指令(2)支持基本的内存操作如lw,sw指令(3)支持基本的程序控制如beq,j指令三.各模块实现原理1.指令存储器设计指令存储器为ROM类型的存储器,为单一输出指令的存储器。
设置一个程序计数器指针PC指向指令存储器,当时钟上升沿到来时,取出PC所指的指令,当时钟的下降沿到来时,修改PC的值,使其指向下一条要执行的指令。
因此其对外的接口为clk、存储器地址输入信号(指令指针)以及数据输出信号(指令)。
在本实验中调用ISE提供的IP核进行设计,设定的指令存储器大小为128字。
指令存储器模块在顶层模块中被调用。
输入为指令指针(PC)与时钟信号(clkin),输出为32位的机器指令,并将输出的机器指令送到后续的寄存器组模块、控制器模块、立即数符号扩展模块进行相应的处理。
2.数据存储器设计数据存储器为RAM类型的存储器,并且需要独立的读写信号控制。
因此其对外的接口为clk、we、datain、addr;输出信号为dataout。
当时钟上升沿到来时,如果写信号(we)为真,根据addr所表示的地址找到对应的存储单元,并将输入的数据(datain)写到对应的存储单元中;如果写信号为假,则根据addr所表示的地址,将对应存储单元的数据送到输出端(dataout)。
实验五简单并行I/O接口实验【实验内容】试编写程序,实现以74LS245(或74HC541)作为输入缓冲器,接8个开关作为输入装置;74LS374(或74HC573)作为输出缓存器,接8个发光二极管作为输出装置。
开关状态按表4-1读入,8个发光二极管按表4-1对应显示(显示时间设0.5s)。
表4-1 开关状态与LED状态对应表序号 1 2 3 4 5 6 7 8 9开关状态0AAH55H44H0FAH0F7H0EFH0DFH0BFH其它LED状态01H7FH0BFH7AH02H0AAH55H44H0FFH【实验程序】#include <reg51.h>#include <absacc.h> //F1:包含这个头文件的目的是使程序能够找到并使用函数XBYTE#define IN PORT XBYTE[0x4010]#define OUT PORT XBYTE[0x4000]#define uchar unsigned char#define uint unsigned intuchar idata Switch[ ] ={0xAA, 0x55, 0x44, 0xFA, 0xF7, 0xEF, 0xDF, 0xBF};uchar idata LED[ ] = {0x01, 0x7F, 0xBF, 0x7A, 0x02, 0xAA, 0x55, 0x44, 0xFF};//F2:表中数据存放在内部数据存储器存储空间void delay(uint xms){uint i, j;for( i=xms; i>0; i-- )for( j=110; j>0; j-- ); //Q1:将此循环语句后面的分号去掉行吗?} 答:不行void main(){uchar Key, i;while(1){Key=IN PORT; //读入开关状态,并送入Key保存for( i=0; i<9; i++ ) //Q2:将i值改为8行吗?答:行{if(Key==Switch[i]) //如果读入的开关量与表中数据相同{OUT PORT = LED[ i ];delay(500);}else //如果输入表中无读入的开关值{OUT PORT = LED[8];Delay(500);}}}}。
可编程并行接口一、实验目的掌握8255方式0的工作原理及使用方法。
二、实验内容1.实验电路如图20,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2. 编程从8255C口输入数据,再从A口输出.三、编程提示1、8255控制寄存器端口地址28BHA口的地址288HC口的地址28AH2、参考流程图(见图21):ioport equ 0d400h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhio8255c equ ioport+28ahcode segmentassume cs:codestart: mov dx,io8255b ;设8255为C口输入,A口输出mov al,8bhout dx,alinout: mov dx,io8255c ;从C口输入一数据in al,dxmov dx,io8255a ;从A口输出刚才自C口out dx,al ;所输入的数据mov dl,0ffh ;判断是否有按键mov ah,06hint 21hjz inout ;若无,则继续自C口输入,A口输出mov ah,4ch ;否则返回DOSint 21hcode endsend start/************************//* 可编程并行接口(一) *//************************/#include <stdio.h>#include <conio.h>#include"ApiEx.h"#pragma comment(lib,"ApiEx.lib")void main(){BYTE d ata;printf("--------------------EXP10_4_8255-0---------------------\n");printf("1. 8255 (PA0-PA7) === TPC (L0-L7)\n");printf("2. I/O (288-28F) === 8255 (CS)\n");printf("3. TPC (K0-K7) === 8255 (PC0-PC7)\n");printf("Press any key to begin!\n\n");getch();if(!Startup()) /*打开设备*/{printf("ERROR: Open Device Error!\n");return;}printf("Press any key to exit!");while(!kbhit()) /*有键按下则退出*/{PortWriteByte(0x28b,0x8b); /*设8255为方式0,C口输入,A口输出*/PortReadByte(0x28a,&data);PortWriteByte(0x288,data); /*将C口输入的数据自A口输出*/}Cleanup(); /*关闭设备*/}七段数码管一、实验目的掌握数码管显示数字的原理二、实验内容静态显示:按图22连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
深圳大学实验报告课程名称:微机计算机设计实验项目名称:8255 并行接口实验学院:信息工程学院专业:电子信息工程指导教师:报告人:学号:2009100000班级:<1>班实验时间:2011. 06. 09实验报告提交时间:2011. 06. 25教务处制一、实验目的1. 学习并掌握8255的工作方式及其应用。
2. 掌握8255 典型应用电路的接法。
3. 掌握程序固化及脱机运行程序的方法。
二、实验要求1. 基本输入输出实验。
编写程序,使8255 的A 口为输入,B 口为输出,完成拨动开关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就发生相应改变。
2. 流水灯显示实验。
编写程序,使8255 的A 口和B 口均为输出,数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示,D15~D8 与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。
三、实验设备PC 机一台,TD-PITE 实验装置或TD-PITC 实验装置一套。
四、实验原理并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。
CPU 和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。
8255 可编程外围接口芯片是Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。
8255的内部结构框图和引脚图五、实验过程1. 基本输入输出实验要求:实验使8255 端口A 工作在方式0 并作为输入口,端口B 工作在方式0 并作为输出口。
用一组开关信号接入端口A,端口B 输出线接至一组数据灯上,然后通过对8255 芯片编程来实现输入输出功能。
(1)按要求连接好实验电路。
(2)编写实验程序,经编译、无误后装入系统。
代码如下:SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX, 0646HMOV AL, 90HOUT DX, ALAA1: MOV DX, 0640HIN AL, DXCALL DELAYMOV DX, 0642HOUT DX, ALJMP AA1DELAY: PUSH CXMOV CX, 0F00HAA2: PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START(3)运行程序,改变拨动开关,同时观察LED 显示,验证程序功能。
微机原理实验报告
学号
姓名
专业通信1301
指导教师罗杰
院(系、所)电信学院
并行I/O接口实验
一、实验目的
1、掌握GPIO IP核的工作原理和使用方法。
2、掌握IO接口程序控制方法
1)查询方式
2)中断方式
3)延时方式
3、掌握中断控制方式的IO接口设计原理
4、掌握中断程序设计方法
二、实验任务
使用查询、中断两个方式做独立式开关输入,将开关状态显示到console。
三、硬件电路框图
四、硬件平台建立
1 创建XPS工程
创建basesystem文件夹,建立最小系统。
启动XPS,打开system.xmp工程文件。
2 添加和配置GPIO IP核
在XPS主界面左边窗口选择IP Cataiong标签,点击General Purpose I/O展开。
添加AXI Genaral Purpose I/O。
配置开关与led灯分别有16个,将其分别设置为16
在ucf文件中添加相应代码
3、添加和配置中断控制器IP核
在XPS主界面左边窗口选择Clock, Reset and Interrupt标签,点击AXI Interrupt
Controller展开。
将INTERRUPT引脚选择axi_intc.c_INTERRUPT。
设置中断输入
4、产生外部GPIO链接
SW为开关输入,从GPIO_IO接口接入,LED灯输出,从GPIO2_IO接口接入展开External Ports项可看到SW与LED的外部接口
五、软件平台建立
1.查询
源代码
#include"stdio.h"
#include"xil_io.h"
#include"xil_types.h"
#define gpio_ctrl 0x40000004 //定义通道1地址
#define gpio_data 0x40000000 //定义数据1地址
#define gpio1_ctrl 0x4000000c //定义通道2地址
#define gpio1_data 0x40000008 //定义数据2地址
int main(void)
{
u16 SW,psw; //定义两个输入,psw作比较信号
Xil_Out16(gpio_ctrl,0xffff); //输入
Xil_Out16(gpio1_ctrl,0x0); //输出
psw=SW=0x00; //赋初值0给两个输入信号
while(1)
{
SW=Xil_In16(gpio1_data);
Xil_Out16(gpio1_data,SW);
if(psw!=SW) //判断SW与PSW是否相等
{
psw=SW;
SW=Xil_In16(gpio1_data);
xil_printf("the Switch state is 0x%X\n\r",SW);//显示开关状态}
}
return 0;
}
状态显示:
实验流程图:
2 中断
源代码:
#include"xgpio.h"
#include"xparameters.h" #include"xintc.h"
#include"stdio.h"
#include"xil_io.h"
XGpio swled;
XIntc intc;//实例化intc
int swstate;
int pshdip;
void Initialize();
void GPIOHandler(void * CallBackRef);
int main()
{
Initialize();
while(1)
{
if(pshdip)
{
xil_printf("the Switch state is 0x %x\n\r",swstate);
pshdip=0;
}
}
return 0;
}
void Initialize()
{
XGpio_Initialize(&swled, XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&swled, 1, 0xffff);
XGpio_SetDataDirection(&swled, 2, 0x0);
XGpio_InterruptEnable(&swled, 1);
XGpio_InterruptGlobalEnable(&swled);
//XGpio_InterruptClear(&swled,1);
XIntc_Initialize(&intc,XPAR_AXI_INTC_0_DEVICE_ID );
XIntc_Connect(&intc, XPAR_AXI_INTC_0_AXI_GPIO_0_IP2INTC_IRPT_INTR, (XInterruptHandler)GPIOHandler, (void *)&swled);
XIntc_Enable(&intc, XPAR_AXI_INTC_0_AXI_GPIO_0_IP2INTC_IRPT_INTR);
microblaze_enable_interrupts();
microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,( void *)&intc);
XIntc_Start(&intc, XIN_REAL_MODE);
void GPIOHandler(void * CallBackRef)
{
swstate= XGpio_DiscreteRead(&swled, 1); pshdip=1;
XGpio_DiscreteWrite(&swled, 2, swstate);
XGpio_InterruptClear(&swled, 1);
状态显示:
}
实验流程图:
六、实验小结
在这个实验的过程中,令我觉得最困难的不是硬件部分的理解和搭建,而是软件部分代码的理解,由于代码中利用到了中断,所以对中断状态的理解和使用上面遇到了一些问题。
通过与同学交流,和看书上的相关内容,最后我也把代码理解了,这样就很好地把整个实验的过程都理解了。
总的来说,本次实验做得还比较轻松,原理方面容易掌握,操作方面也容易实验。
希望综合项目的实验也一样顺利。