微机原理实验并行IO接口设计

合集下载

实验二_并行I_O口

实验二_并行I_O口

一、实验目的1、熟悉Proteus软件和Keil软件的使用方法。

2、熟悉单片机应用电路的设计方法。

3、掌握单片机并行I/O口的直接应用方法。

4、掌握单片机应用程序的设计和调试方法。

二、设计要求1、用Proteus软件画出电路原理图。

要求在P1.0至P1.7口线上分别接LED0至LED7八个发光二极管,在P3.0口线上接一蜂鸣器。

2、编写程序:要求LED0至LED7以秒速率循环右移。

3、编写程序:要求LED0至LED7以秒速率循环左移。

4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。

三、电路原理图四、实验程序流程框图和程序清单/***********(1)LED0~LED7以秒速率循环右移**************/MAIN: MOV A, #11111110BLOOP: MOV P1, A ;LED0灯亮,其他全灭LCALL DELAY1s ;调用1s延时子程序RL A ;累加器内容循环左移LJMP LOOP ;继续循环/***********1s延时子程序*******************/DELAY1s:MOV R7, #0A7HDL1: MOV R6, #0ABHDL0: MOV R5, #10HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1NOPRETEND/***********(2)LED0~LED7以秒速率循环左移**************/ORG 0000HMAIN: MOV A, #01111111BLOOP: MOV P1, A ;LED7灯亮,其他全灭LCALL DELAY1s ;调用1s 延时子程序RR A ;累加器内容循环右移 LJMP LOOP ;继续循环 /********************1s 延时子程序**********************/ DELAY1s:MOV R7, #0A7HDL1: MOV R6, #0ABHDL0: MOV R5,#10HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1NOP RETEND/**********(3)要求在灯循环移动的同时,蜂鸣器逐位报警 **************/ORG 0000HMAIN: MOV A, #11111110BLOOP: MOV P1, A ;LED0灯亮,其他全灭CPL P3.0 ;开蜂鸣器 LCALL DELAY05s ;调用0.5秒延时子程序 SETB P3.0 ;关蜂鸣器 LCALL DELAY05s ;调用0.5秒延时子程序 RL A ;累加器内容循环左移 LJMP LOOP ;继续循环/*********0.5s 延时子程序****************/DELAY05s:MOV R7, #17H DL1: MOV R6, #98HDL0: MOV R5, #46H DJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1RETEND六、实验总结通过本次实验,我熟悉了Proteus软件和Keil软件的使用方法,熟悉了单片机应用电路的设计方法。

微机原理实验报告 IO实验

微机原理实验报告 IO实验

《微机原理及应用技术》课程实验报告实验一片内输入、输出实验【预习内容】1.二进制、十进制及十六进制的表示方法及相互转换方法。

二进制XXXXB如1111B 十进制XX如15 十六进制0xXX如0x0f相互转换方法:十进制转二进制方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。

二进制转十进制方法为:把二进制数按权展开、相加即得十进制数。

二进制转十六进制方法为:4位二进制数按权展开相加得到1位十六进制数。

(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。

十六进制转二进制方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。

十进制转十六进制有两种方法间接法把十进制转成二进制,然后再由二进制转成十六进制。

直接法把十进制转十六进制按照除16取余,直到商为0为止。

十六进制转成十进制方法为:把十六进制数按权展开、相加即得十进制数。

2.C语言基本数据类型、定义方式以及赋值范围。

(1)整数类型(2)浮点类型3.写出至少一种软件延时程序并说明原理。

基本原理:利用循环结构反复执行空语句占用指令周期,实现等待延时。

void Delay1ms() //@12.000MHz{unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}4.掌握for循环及while循环,掌握if语句及switch语句。

for语句for (/*初始化 int i=0*/; /*判断条件 i<count*/; /*执行语句 i++*/) {/* code */}while语句while (/* condition */){/* code */}do{/* code */} while (/* condition */);switch/case语句switch (/*表达式*/){case/*值1*/ : /* code */; break;case/*值2*/ : /* code */; break;...default : /* code */break;}If/if-else语句if (/* condition */){/* code */}else if (/* condition */){/* code */}else{/* code */}5.什么是单片机?什么是单片机最小系统?单片机最小系统三要素是什么?单片机(Microcontrollers,亦称MCU),即单芯片微型计算机,包括了CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。

微机实验 可编程并行接口8255

微机实验  可编程并行接口8255

微机原理实验报告实验题目:可编程并行接口8255一、实验目的1、掌握8255的基本输入输出和PC端口位控的工作方式及应用编程。

2、掌握8255的典型应用电路接法。

二、实验知识回顾8255控制字1、控制方式2、C端口置位复位控制字三、实验内容1、 8255流水灯显示,首先用逻辑电平开关预置一个数字,从A口读入,写入01H到C端口上,左移一次在进行输出,A口读入数据作为左移次数,这样循环下去,从而实现流水灯的显示。

2、用PC端口位控制法控制LED灯,依次点亮LED灯。

四、实验器材微机原理实验箱1个电脑(带TPC-USB软件)1台插线若干五、实现过程1、8255流水灯显示(1)流程图(2)程序源代码io8255a equ 2a0h ;8255A口地址io8255b equ 2a1h ;8255B口地址io8255c equ 2a2h ;8255C口地址io8255mode equ 2a3h ;控制寄存器地址stack1 segment stackdw 256 dup(?)stack1 endsdata segmentla db ? ;定义数据变量lb db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data ;程序由start处开始mov ds,axmov dx,io8255mode ;定义8255的工作方式mov al,90h ;方式0A口输入C口输出out dx,al ;mov dx,io8255a ;A口的地址存入dxin al,dx ;从dx也就是A口读入数据mov la,al ;读入的数据暂存在la变量mov dx,io8255c ;C口的地址存入dxmov al,01h ;将寄存器最低位置零out dx,al ;置位后的值输入给dx,也就是C口mov lb,al ;置位后的值暂存于变量lbloop1:call delaymov al,la ;将A口数据写入CX用以计数mov ch,00hmov cl,laloop2:call delaymov al,lbrol al,1 ;在寄存器内进行位移操作mov lb,al ;将操作后的结果重新写入变量al,为后面调用做准备mov dx,io8255c ;dx代表C口的地址out dx,al ;将al中存储的值写入dx,即C口mov ah,1 ;选择dos的模式为从键盘读取数据int 16h ;进入中断jnz quit ;ZF为0则跳到quitdec cx ;计数器减一jnz loop2 ;若cx!=0,跳到loop2quit:mov ax,4c00h ;结束程序并退出int 21hdelay proc near ;延时子程序push cxpush axmov cx,01fhd1: mov ax,0ffffhd2: dec axjnz d2loop d1pop axpop cxretdelay endpcode endsend start2、位控设置C口输出点亮LED(1)流程图(2)程序源代码io8255a equ 2a0h ;8255A口地址io8255b equ 2a1h ;8255B口地址io8255c equ 2a2h ;8255C口地址io8255mode equ 2a3h ;控制寄存器地址stack1 segment stackdw 256 dup(?)stack1 endsdata segmentla db ? ;定义数据变量lb db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data ;程序由start处开始mov ds,axmov dx,io8255mode ;定义8255的工作方式mov al,00001111b ;位控设置C口最高位为1out dx,almov cx,7 ;剩余未点亮灯数为7 loop1:call delaydec aldec alout dx,aldec cxjnz loop1delay proc near ;延时子程序push cxpush axmov cx,01fhd1: mov ax,0ffffhd2: dec axjnz d2loop d1pop axpop cxretdelay endpcode endsend start(3)实验结果图六、小结通过本次试验,我进一步了解了8255的可编程性,以及如何正确的通过程序控制8255,也更加熟悉了8255 C 端口的位控输出。

微机原理可编程并行接口8255方式0

微机原理可编程并行接口8255方式0

实验一可编程并行接口8255方式0一、实验目的掌握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五、实验现象按照原理图连接好导线后,输入实验代码,编译调试运行,每当有按键按下,LED显示电路L0~L7相应的灯就会被点亮。

实验二七段数码管显示一、实验目的掌握数码管显示数字的原理二、实验内容动态显示(选作):使用图23的电路,编程在两个数码管上循环显示“00-99”。

三、编程提示实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中四、实验代码:data segmentioport equ 0d400h-0280hio8255a equ ioport+28ahio8255b equ ioport+28bhio8255c equ ioport+288hled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 0,0 ;存放要显示的十位和个位bz dw ? ;位码data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,io8255b ;将8255设为A口输出mov al,80hout dx,almov di,offset buffer1 ;设di为显示缓冲区loop1: mov cx,0300h ;循环次数loop2: mov bh,02lll: mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov bh,0mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255c ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,alpush cxpush dxmov dx,8lp1: mov cx,0ffffh ;如果显示过快,可更改cx值为最大0ffffh delay: loop delay ;延时dec dxjnz lp1pop dxpop cxmov bh,byte ptr bzshr bh,1jnz lllloop loop2 ;循环延时mov ax,word ptr [di]cmp ah,09jnz setcmp al,09jnz setmov ax,0000mov [di],almov [di+1],ahjmp loop1set: mov ah,01int 16hjne exit ;有键按下则转exitmov ax,word ptr [di]inc alaaamov [di],al ;al为十位mov [di+1],ah ;ah中为个位jmp loop1exit: mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回DOSint 21hcode endsend start五、实验现象两个数码管从00—99循环显示,在代码中加入延时代码,00—99的显示速度将会发生变化。

微机接口技术实验报告并行接口实验

微机接口技术实验报告并行接口实验

微机接口技术实验报告并行接口实验系别: 计算机科学与技术完成时间: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。

微机原理实验报告并口实验

微机原理实验报告并口实验

微机原理实验报告:并口实验1. 引言微机原理实验是计算机科学与技术专业的一门重要实验课程之一。

通过该实验,学生可以了解并学习微机系统的基本原理和结构,培养对计算机硬件的基本操作和维护能力。

本报告将详细介绍我们在并口实验中所进行的实验步骤、实验结果和实验心得。

2. 实验目的本次实验的目的是通过并口实验,了解并实践如何使用并行口控制外部设备。

并口是计算机上常见的接口之一,用于与外部设备进行数据交互,例如打印机、键盘、LED灯等。

通过本次实验,我们将学会如何通过编程的方式控制并口输出信号,进而控制外部设备的工作。

3. 实验步骤(1)准备工作:首先,我们需要准备一台支持并口的计算机,并确保系统已经安装了合适的驱动程序。

然后,我们需要连接一根并口数据线,将计算机与外部设备连接起来。

(2)编程环境搭建:我们要使用的编程语言是C语言,所以需要在计算机上配置相应的编译器和开发环境。

(3)编写代码:接下来,我们需要编写一段简单的代码,来控制并口输出信号。

这段代码通常包括对并口寄存器的读写操作。

我们可以使用IO口的寄存器来设置输出状态和控制外部设备的工作。

(4)测试与调试:在编写完代码后,我们需要进行测试和调试。

通过观察外部设备的反应,可以判断代码是否正确地控制了并口输出信号。

如果出现问题,我们可以通过查看代码和调试信息来找出问题的原因。

4. 实验结果我们按照上述步骤完成了实验,并取得了如下实验结果:(1)成功控制外部设备:通过编写控制代码,我们成功地控制了与计算机连接的外部设备。

例如,我们可以在LED灯上显示相应的图案和文字。

(2)了解并口寄存器操作:通过本次实验,我们对并口寄存器的操作有了更深入的了解。

我们学会了如何设置输出状态和控制外部设备的工作模式。

(3)掌握数据传输方法:在实验过程中,我们还掌握了一些基本的数据传输方法。

例如,我们可以通过并口将数据传输给外部设备或从外部设备接收数据。

5. 实验心得通过本次并口实验,我们对微机系统的基本原理和结构有了更深入的了解。

微机原理实验---并行接口实验

微机原理实验---并行接口实验

微机原理实验---并行接口实验
并行接口(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 灯并输出。

微机原理实验 可编程并行接口 8255 实验

微机原理实验 可编程并行接口 8255 实验
(4)读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2、8255A的工作方式:
方式0—基本输入输出方式;方式1—选通输入输出方式;方式2—双向选通输入输出方式
3、8255A的状态字:
图1可编程并行接口8255电路
五、实验电路及连线
1、流水灯实验:
(1)实验连线
该模块的WR、RD分别连到MCU主模块的WR、RD。
该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到MCU主模块的数据(AD0~AD7)、地址线(A0~A7)。
8255模块选通线CS连到MCU主模块的地址A15。
8255的PA0~PA7连到发光二极管的L0~L7。
(2)三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。C端口包含一个8位数据输出锁存器及缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
(3)A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。方式控制字的高5位决定A组工作方式,低3位决定B组的工作方式。对C口按位复位命令字可对C口的每一位实现置位或复位。A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部
(2) I/O输入输出实验:利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示
四、实验原理
1、8255A的内部结构:
(1)数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。输入输的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理实验三并行I/O接口实验姓名:学号:班级:一、实验目的1. 掌握GPIOIP核的工作原理和使用方法2.掌握中断控制方式的IO接口设计原理3.掌握中断程序设计方法4.掌握IO接口程序控制方法:中断方式、查询方式、延时方式二、实验任务按键输入,并显示到console用中断、查询两种方式实现按键输入,将结果显示到console窗口。

三、硬件电路四、硬件实现步骤1. 创建一个最小系统,启动XPS,并打开xmp工程文件。

2.添加和配置GPIO IP核。

3. 添加和配置AXI Interrupt Controller IP核。

4. 产生外部GPIO连接。

引脚约束五、中断方式、查询方式1. 中断方式设计思路主程序开放microBlaze INTC,GPIO中断,不停地检测输出标志是否为1,是则输出数据到console,并将输出标志设置为0。

中断服务程序读取数据(或输出数据)并设立输出标志位为1。

通过中断方式读入开关的状态,由于按键仅短暂的时间维持高电平,并且还具有抖动,因此需在中断服务程序内读入按键状态,并且为消除按键回弹产生的中断,需在中断服务程序内部暂时关闭中断,并且延时一段时间再打开中断。

2. 查询方式设计思路主程序不停地读取GPIO和ISR寄存器,当对应位为1时,读取GPIO的数据寄存器并输出到console(xil_printf函数实现,头文件为”stdio.h”),并写ISR相应位。

数据寄存器的读取通过函数Xil_In实现,而ISR相应状态为的写通过函数Xil_Out实现。

六、软件实现流程1. 中断方式主程序实现对各个设备进行初始化,并且开放相应的中断,注册中断服务程序以及开关状态显示等。

然后通过读取中断标志进入相应中断服务程序处理中断,并在console打印相关信息。

2. 查询方式程序实现通过不断地读取GPIO和ISR寄存器,当状态发生变化时读取数据寄存器并输出到console,并写ISR相应位。

七、软件源代码1. 中断方式源代码#include"xparameters.h"#include"xgpio.h"#include"xintc.h"#include"stdio.h"void Initialize();void Delay_50ms();void PushBtnHandler(void *CallBackRef);void SwitchHandler(void *CallBackRef);XGpio Btns,Dips;//按键BTNS外设变量XIntc intCtrl;//定义一个XINTC外设变量int pshBtn,pshDip;int state1,state2;int main(){Initialize();xil_printf("\r\nRunning GpioInputInterrupt!\r\n");while(1){if(pshBtn){xil_printf("Button Interrupt Trigger!!!the state is0x%X\n\r",state1);pshBtn=0;}if(pshDip){xil_printf("Switch Interrupt Trigger!!!the state is0x%X\n\r",state2);pshDip=0;}}return 0 ;}void Initialize(){XGpio_Initialize(&Dips,XPAR_DIP_DEVICE_ID);XGpio_SetDataDirection(&Dips,1,0xff);XGpio_Initialize(&Btns,XPAR_BUTTON_DEVICE_ID); //初始化按键实例,设定其为输入方式XGpio_SetDataDirection(&Btns,1,0xff);XIntc_Initialize(&intCtrl,XPAR_AXI_INTC_0_DEVICE_ID); //intCtr1实例XGpio_InterruptEnable(&Btns,1);XGpio_InterruptGlobalEnable(&Btns);//GPIO中断使能XGpio_InterruptEnable(&Dips,1);XGpio_InterruptGlobalEnable(&Dips);XIntc_Enable(&intCtrl,XPAR_AXI_INTC_0_BUTTON_IP2INTC_IRPT_INTR); XIntc_Enable(&intCtrl,XPAR_AXI_INTC_0_DIP_IP2INTC_IRPT_INTR);//中断控制器的中断源使能XIntc_Connect(&intCtrl,XPAR_AXI_INTC_0_BUTTON_IP2INTC_IRPT_INTR, (XInterruptHandler)PushBtnHandler,(void*)0);XIntc_Connect(&intCtrl,XPAR_AXI_INTC_0_DIP_IP2INTC_IRPT_INTR, (XInterruptHandler)SwitchHandler,(void*)0); //注册中断服务函数microblaze_enable_interrupts(); //允许处理器处理中断microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler,(void*)&intCtrl);XIntc_Start(&intCtrl,XIN_REAL_MODE);//启动中断控制器}void Delay_50ms(){int i;for(i=0;i<5000000;i++);}void PushBtnHandler(void *CallBackRef){state1=XGpio_DiscreteRead(&Btns,1);//按键状态值读取pshBtn=1;XGpio_InterruptDisable(&Btns,1); // 暂时禁止button中断Delay_50ms();XGpio_InterruptClear(&Btns,1); //清除中断标志位XGpio_InterruptEnable(&Btns,1);//再次开放按键中断}void SwitchHandler(void *CallBackRef){state2=XGpio_DiscreteRead(&Dips,1);pshDip=1;XGpio_InterruptClear(&Dips,1);}2.查询方式源代码/** chaxun.c** Created on: 2015-12-1* Author: Administrator*/#include"xparameters.h"#include"stdio.h"#include"xil_io.h"#include"xil_types.h"#define btn_data 0x40000000//数据寄存器地址#define btn_ctr 0x40000004//控制寄存器地址#define btn_status 0x40000120//中断状态寄存器void Delay_50ms();short pshBtn;int main(void){short btn;xil_printf("\r\nRunning GpioInput Test!\n\r");Xil_Out8(btn_ctr,0xff);pshBtn=0x00;while(1){pshBtn=Xil_In8(btn_status);if(pshBtn){btn=Xil_In8(btn_data);Xil_Out8(btn_status,0x01);xil_printf("Button Pushed!!!the state is 0x%X\n\r",btn);Delay_50ms();pshBtn=0x00;}}return 0;}void Delay_50ms(){int i;for(i=0;i<5000000;i++);}八、实验小结本次实验要求用中断和查询的方式实现IO接口程序控制。

先是创建一个最小系统,然后添加和配置GPIO IP核,再添加和配置AXIInterrupt Controller IP核,然后用自己编写的程序实现按键的显示。

我在这个过程中熟悉了最小系统的建立,还有IP核的配置,但我本身编程能力比较弱,所以我在咨询了同学关于中断和查询代码的实现的问题后,终于能成功地实现按键输入的显示了。

虽然付出很多,但收获也是巨大。

相关文档
最新文档