微机原理实验报告串行IO接口
微机原理及接口技术实验报告
《微机原理与接口技术》实验报告姓名:学号:班级:专业:电气工程及其自动化学院:电气与信息工程学院目录实验一数据传送 (2)实验二算术运算 (4)实验三代码转换 (6)实验四程序的基本结构 (9)1、分支程序 (9)2、循环程序 (13)3、子程序 (16)实验五中断实验(8259) (19)实验六并行接口实验(8255) (25)实验七定时器/计数器实验(8235) (31)实验八D/A接口实验 (36)实验九A/D接口实验 (40)实验十串行通信实验 (43)实验一数据传送一、实验目的1. 掌握与数据有关的不同寻址方式。
2. 继续熟悉实验操作软件的环境及使用方法。
二、实验设备PC微机一台、TD-PIT + 或TD-PIT ++ 实验系统一套。
三、实验内容本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
四、实验步骤(1) 运行Tdpit 集成操作软件,编写实验程序。
(2) 编译连接无误后,进入调试环境,进行程序的调试。
按F8 键单步运行程序,执行完MOV DS,AX 语句后,观察DS 寄存器中出现的段地址。
如图1-1所示可以看出DS数据段中MSR源数据串"HELLO,WORLD!$"。
图1-1 进入调试环境(3)继续单步运行程序,执行MOV ES,AX 语句后,可以看数据段出现的段地址,用同样的方法可以查看ES:0000 的数据。
数据传输还没开始进行,此时ES 段的数据为空,如图1-1所示。
继续单步运行程序如图1-2可以看出数据正在逐渐的进入ES段中。
图1-2 DS源数据段数据(4)直到数据传输完毕,可以看到ES 数据段中目的数据串MSD 已经被写入了数据串"HELLO,WORLD!$"。
如图1-3所示。
图1-3 根据ES值查看附加段的数据实验二算术运算一、实验目的1. 掌握运算类指令编程及调试方法。
2. 掌握运算类指令对各状态标志位的影响及测试方法。
微机原理与接口技术实验报告
微机原理与接口技术实验报告实验一、认识tddebug集成操作软件一.实验内容(一)实验题目:数据传输实验1.编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
2.修正此程序,使用字符串传输指令顺利完成。
(二)实验目的:通过对该程序进行调试,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各个寄存器及数据区的内容。
(三)实验步骤:1.运行tddebug软件,选择edit菜单编写实验程序件。
3.使用rmrun菜单中的run运行程序,观察运行结果。
4.采用rmrun菜单中的debug调试程序,查阅程序段、数据段、额外段放入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:1)按f7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
2)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:方法1:在cpu窗口按tab键并使内存数据表明区沦为活动区,按ctrl+g键,?输入:“ds或es寄存器的值:偏移地址”,即可显示用户指定的数据区方法2:选择菜单view|dump,弹出内存数据显示窗口。
3)查阅继续执行结果:按alt+f5,转换至用户窗口。
5.修改数据区中的数据,实地考察、调试程序的正确性。
二.分析设计思想,绘制实验原理图、流程图。
汇编语言程序的研发过程例如图1.1右图,这个过程主要存有编辑、编程、链接几个步骤形成。
三.程序清单及相关注释。
ddatasegmentmsrdb\lenequ$-msrddataendsexdasegmentmsddblendup(?);定义源数据段;定义额外数据段1exdaends;定义堆栈段mystacksegmentstackdw20dup(?)mystackendscodesegment;定义代码段assumecs:code,ds:ddata,es:exdastart:movax,ddatamovds,axmovax,exdamovmovmovmovmoves,axsi,offsetmsrdi,offsetmsdcx,lenbx,0;装载数据段寄存器;装载附加数据段寄存器next:moval,msr[bx];已经开始传输数据moves:msd[bx],al inclooppushbxnextes;将附加段寄存器指向的段值赋给数据段寄存器popdsmovdx,offsetmsdmovah,9int21hmovah,4chint21h;显示字符串;返回dos状态codeendsendstart四.实验结果并分析。
微机原理实验报告 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口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。
微机原理与接口技术实验报告
微机原理与接口技术实验报告
本次实验是关于微机原理与接口技术的实验报告,通过本次实验,我们将深入
了解微机原理与接口技术的相关知识,并通过实际操作来加深对这些知识的理解和掌握。
实验一,微机原理。
在本次实验中,我们首先学习了微机的基本原理,包括微机的组成结构、工作
原理和基本功能。
通过实际操作,我们了解了微机的主要组成部分,如中央处理器(CPU)、内存、输入输出设备等,并学习了它们之间的工作原理和相互配合关系。
同时,我们还学习了微机的基本指令系统和数据传输方式,加深了对微机工作原理的理解。
实验二,接口技术。
在接口技术的实验中,我们学习了微机与外部设备之间的接口技术,包括并行
接口、串行接口和通用接口等。
我们通过实际操作,了解了这些接口技术的工作原理和应用场景,学会了如何通过接口技术实现微机与外部设备的数据交换和通信。
实验三,实验综合。
在本次实验的最后,我们进行了一个综合实验,通过实际操作来综合运用微机
原理和接口技术的知识,实现一个具体的功能。
通过这个实验,我们加深了对微机原理与接口技术的理解,掌握了如何将理论知识应用到实际操作中。
总结。
通过本次实验,我们深入学习了微机原理与接口技术的相关知识,并通过实际
操作加深了对这些知识的理解和掌握。
微机原理与接口技术作为计算机科学与技术的基础知识,对我们今后的学习和工作都具有重要意义。
希望通过这次实验,能够对大家的学习和工作有所帮助,并为今后的学习打下坚实的基础。
以上就是本次实验的实验报告,希望对大家有所帮助。
感谢大家的阅读!。
串行接口实验报告
课程实验报告实验名称:串行接口专业班级:学号:姓名:同组人员:指导教师:报告日期:实验二1. 实验目的 (3)2. 实验内容 (3)3. 实验原理 (3)4. 程序代码 (6)5. 实验体会 (13)实验二1.实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2.实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。
2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。
3.实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4.8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟频率/(波特率×波特率因子)本实验:脉冲源=1MHz波特率=1200波特率因=16计数初值= 1000000/1200*16=527.程序流程框图4.程序代码Fxc.asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz nextmov dl,0ffh ;有键盘输入,读入字符mov ah,06hint 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend startSend .asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址buf3 byte 0mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz next; mov dl,0ffh ;有键盘输入,读入字符;mov ah,06h; int 21hmov dx,28ahin al,dxcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend start步进电机:1.K0=0,逆时针转;K0=1,顺时针转2.K1=0,慢转;K1=1,快转data segmentbuf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示buf2 byte 0 ;步进电机数据buf3 byte 0 ;保存开关数据buf4 byte 0 ;保存顺转数据buf5 byte 9 ;保存反转数据buf6 byte 0 ;开关机data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov buf2,00110011b ;步进电机数据mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;-----------------------------逆转控制----------------R0: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jnz kai ;转反转test al,01 ;测试K0=1?jnz L0 ;转反转mov al,buf4 ;走马灯开始一步顺转cmp al,9jnz S1call change9_0S1: inc al ;数据加1mov buf4,almov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;数据完成加1mov al,buf2 ;电机开始一步逆转ror al,1 ;数据左移mov buf2,almov dx,288h ;A口输出out dx,al ;电机完成一步逆转mov al,buf3 ;回复C口数据test al,02jnz R1 ;转快转call delay_s ;否则慢转jmp R0R1: call delay_q ;快转jmp R0;------------------------------顺转控制-----------------L0: mov al,buf5 ;走马灯开始一步顺转cmp al,0jnz S2T2: test al,03 ;测试K2=1?jnz T2call change0_9S2: dec al ;数据减1mov buf5,al ;mov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;走马灯结束一步顺转mov al,buf2 ;电机开始一步顺转rol al,1 ;数据右移mov buf2,almov dx,288h ;A口输出out dx,al ;电机结束一步顺转mov al,buf3 ;回复C口数据test al,02jnz L1 ;转快转call delay_s ;否则慢转jmp R0T3: test al,03 ;测试K2=1?jnz T3L1: call delay_q ;快转jmp R0kai: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jz L0 ;转反转jmp kaiexit: mov ah,4chint 21hdelay_s proc near ;长延时mov bx,20hlp1: mov cx,0ffffhlp2: loop lp2dec bxjnz lp1retdelay_s endpdelay_q proc near ;短延时mov bx,1lp11: mov cx,0ffffhlp22: loop lp22dec bxjnz lp11retdelay_q endpchange9_0 proc nearmov buf4,-1mov al,buf4retchange9_0 endpchange0_9 proc nearmov buf5,10mov al,buf5retchange0_9 endpcode endsend start5.实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。
《微机原理及接口技术》实验3 IO口和中断
二、实习内容与步骤
(一)内容
1、将P1口与8个LED灯连接,正常情况下使8个灯
循环点亮,形成跑马灯。 2、用1PIN线将单片机的P3.2(INT0端)与某个输入 键连接。要求按键按下后,实现外部中断,在中断 服务程序中使LED灯变为全部闪烁5次,然后返回主
程序使8个灯继续循环亮。
(二)实验步骤
1、仿真仪与CPU的连接和设置
;延时200ms
三、思考题 1、改用INT1进行中断,程序如何修改? 2、改用跳沿触发进行中断,程序如何修改? 四、实验要求: 1、实习前必须编写好程序 2、程序必须编译通过并运行正确 3、提交试验报告:报告内容 (1)实验目的 (2)实验内容 (3)实验原理图与线路连接 (4)实验步骤 (5)实验结果 (6)实验体会
(1)使用USB线和串口线,将XL1000综合仿真仪与 微型计算机连接起来; (2)在XL1000综合仿真仪上,将JP13和JP14两个 232/USB通信选择方式端口的跳线帽跳至232的方式;
(3)将JP17的开关压下,选择仿真模式。
2、硬件连接 连接到八路指示灯部份的JP32。
(1)用一条8PIN的数据排线把CPU部份的P1口(JP44) (2)用1PIN线将单片机的P3.2(INT0端)与某个输入
微机原理与接口技术(单片机)实验
实验三 I/O口和中断
一、实验目的:
1、通过实验学会I/O口和中断的应用。
2、熟悉XLISP系列 单片机综合仿真试验仪的组成和 使用方法。
3、学会应用XLISP仿真试验和keil-uvision2集成调试 软件进行仿真实验。掌握仿真实验的步骤并能得到正确 的实验结果。
键连接。 3、软件设计 用汇编语言编写相关程序,在Keil软件中输入程序, 编辑,编译链接,并运行程序。
东北大学_微机原理实验报告及答案_简单IO扩展
4、写出实验源程序,并给出注释。
DATE SEGMENT
ASSUMECS:DATE
ORG 100H
START:MOV D0H
OUTDX,AL
JMP START
DATE ENDS
ENDSTART
思考题
1DATE SEGMENT
JMP START返回到开始
DATE ENDS 代码段结束
ENDSTART程序结束
注:双击鼠标,可放大图形
五、实验步骤
1、实验连线:
CPLD单元的输出端插孔CS0、CS1分别与244/273单元的片选信号CS244、CS273相连;
电平开关的输出端KK1~KK8分别与244/273单元的IN0~IN7对应连接;
244/273单元的输出端O0~O7分别与发光二极管的输入端LED 1~L ED8对应连接。
3、调试通过后,全速运行程序,观看实验结果。
4、编写实验报告,完成思考题与练习。
六、实验框图
七、思考与练习
1、KK1-KK4开关向上,让LED1-LED4发光二极管灯灭,而其它发光二极管灯保持不变,程序如何修改。
2、74LS244、74LS273的片选信号可以改变,若244/273的片选信号改为与CPLD单元中的CS2、CS3(04c0h、04d0h)相连,应如何修改程序中相应地址。
编辑:点击快捷图标[新建],进入编辑系统。将编写好的源程序逐一输入,然后保存。这时在桌面上就会产生以new .asm命名的文件。
编译运行:选择[编译]菜单,点击[编译或连接],对源程序进行汇编、连接,这时在屏幕左下方的窗口有信息显示:程序下传成功,编译,连接完成;然后点击快捷图标RUN,即运行程序。
微机原理 实验报告 串行
微机原理与接口技术实验实验六、串行接口实验学号U201413416姓名班级电信1406班一、实验目的理解RS232 串行通信协议以及接口设计理解SPI串行通信协议掌握RS232 串行接口设计掌握SPI串行接口设计掌握串行AD/DA 接口设计二、实验任务Nexey4开发板通过外接SPI AD模块,实现AD转换,并打印结果到console三、基本原理1.SPI IP核接口寄存器2. D/A转换接口时序逻辑框图四、硬件电路框图、模块设计1.硬件电路框图2.SPI IP核设计1) 在IP Catalog里面选择AXI SPI Interface2) 配置SPI核如下图所示:3) 删除SPISEL外部引脚,将其配置成net_vcc:4) 配置ucf引脚如下:3. 中断控制器设计1) 通过AXI Interrupt Controller添加中断控制器2) 在Intr添加spi中断3) 将此中断控制器改成axi4lite_0 的中断控制器4. 查看当前最小系统的引脚输出及硬件框图外部引脚地址Interrupt ViewInterface view5.生成Netlist 以及bitstream,导出到SDK点击project中的Export hardware design to SDK 五、软件实现步骤六、实验结果1. A0连接VCC2.A0连接GND七、心得体会本次实验给我的收获颇多,通过这次实验,我理解了SPI串行通信协议。
在写程序的过程中,首先需要很熟悉的了解SPI串口通信的过程,一步一步对SPI接口进行配置,否则实验无法成功。
我还使用了ADC数模转换器。
这次实验相对复杂,不管是在配置还是使用上,都比传统的GPIO外设难度大,所以能做成功这次实验是非常有收获的。
微机原理与接口技术实验报告
微机原理与接口技术实验报告实验一,微机原理实验。
1. 实验目的。
本实验旨在通过对微机原理的实验,加深学生对微机原理相关知识的理解,提高学生的动手能力和实验技能。
2. 实验内容。
本实验主要包括微机原理的基本知识、微处理器的结构和功能、微机系统的总线结构、存储器与I/O接口。
3. 实验步骤。
(1)了解微机原理的基本知识,包括微处理器的分类、功能和工作原理。
(2)学习微机系统的总线结构,掌握总线的分类、功能和工作原理。
(3)了解存储器与I/O接口的基本概念和工作原理。
(4)进行实际操作,通过实验板进行微机原理实验,加深对微机原理知识的理解。
4. 实验结果。
通过本次实验,我深刻理解了微机原理的基本知识,掌握了微处理器的结构和功能,了解了微机系统的总线结构,以及存储器与I/O接口的工作原理。
通过实际操作,我对微机原理有了更深入的认识,提高了自己的动手能力和实验技能。
实验二,接口技术实验。
1. 实验目的。
本实验旨在通过对接口技术的实验,加深学生对接口技术相关知识的理解,提高学生的动手能力和实验技能。
2. 实验内容。
本实验主要包括接口技术的基本知识、接口电路的设计与调试、接口技术在实际应用中的作用。
3. 实验步骤。
(1)了解接口技术的基本知识,包括接口的分类、功能和设计原则。
(2)学习接口电路的设计与调试,掌握接口电路设计的基本方法和调试技巧。
(3)了解接口技术在实际应用中的作用,包括各种接口的应用场景和实际案例。
(4)进行实际操作,通过实验板进行接口技术实验,加深对接口技术知识的理解。
4. 实验结果。
通过本次实验,我深刻理解了接口技术的基本知识,掌握了接口电路的设计与调试方法,了解了接口技术在实际应用中的作用。
通过实际操作,我对接口技术有了更深入的认识,提高了自己的动手能力和实验技能。
总结。
通过微机原理与接口技术的实验,我对微机原理和接口技术有了更深入的理解,提高了自己的动手能力和实验技能。
希望通过今后的学习和实践,能够更加深入地掌握微机原理与接口技术的知识,为将来的工作和研究打下坚实的基础。
串行I-O接口
32
波特率是串行口每秒钟发送或接收的数码位数,与振荡器的频率或
定时器的溢出率成正比。当定时器/计数器处于工作方式0、工作方式1
和工作方式3时 溢出率= 振荡频率/(2n-n位定时器初值+重置定时器的中断处理程序机
RI:接收中断标志。由硬件在方式0串行接收第8位结束或在其它 方式中接收停止位的中间时置1(除了与SM2有关),由软件清0。
以上标志设有位地址,可进行位操作,复位时全部清0。 2. 波特率选择寄存器PCON
D7 D6 D5 PCON SMOD
D4 D3 D2 D1 D0
字节地址87H
PCON用来确定串行数据传送时的波特率,没有位地址。有关SMOD 位的使用,将在下面结合串行通信接口的工作方式一起介绍。
2. 工作方式1 当SM0 SM1=01时,串行接口选择工作方式1,为可变波特率的
8位异步通信方式。发送数据由TXD端输出,每一帧信息为10位,一 位起始标志位0,8位数据位和一位停止位1。发送时,数据送入发送 缓冲器SBUF,然后启动发送。数据发送完后,将中断标志位TI置1。
接收时(REN=1)以所选波特率的16倍速率采样RXD引脚,当 采样到从1到0的下跳沿时启动接收器,确认起始位后,接收一帧信息 。当RI=0,停止位为1或SM2=0时,停止位进入RB8,中断标志位 RI置1。若这两个条件都不满足,则信息丢失。在通常情况下,串行 口方式1工作时,SM2清0,波特率为:
MOV A, @R0
;取数
MOV C, P
;奇偶标志送C
MOV TB8, C
;置奇偶标志
MOV SBUF, A
微机原理 简单Io接口设计实验
四、实验步骤
1、取箱子,把电源线和USB通信线接好
START:
MOVAL,0FH
BEGIN:ROLAL,01H
MOVDX,208H
OUTDX,AL
MOVCX,5000
AA:LOOPAA
LOOPBEGIN
JMPBEGIN
CODEENDS
七、实验收获
运行的原理,将课堂上的只是在实际中运用到实验连接中,了解各部分的功能,是最好本实验的基础。
此实验是最基础的微机实验,运用最基础的知识,强调对课本知识的熟悉与掌握。要熟悉仪器的连接方法,通过此次实验,了解了实验,对课本的只是加强了理解,很有收获!
(3)按试验箱的RST键。
断开试验箱的电源,根据实验要求接线,然后编写程序,编译,连接,全速运行。
五、实验接线图
六、程序清单
实验代码
1.利用芯片74LS244作为输入接口,输入8位逻辑电平开关的状态。用芯片74LS273作为输出接口,用以驱动8个LED。
2.
CODE SEGMENT
ASSUME CS:CODE
微机原理简单io接口设计实验微机原理与接口技术微机原理及接口技术微机原理与接口微机原理及应用微机原理pdfio接口微机原理微机原理及应用pdf微机原理与应用微机原理视频教程
计算机学院实验报告
课程名称_微机原理与接口技术__实验名称_简单I/O设计____
班级_ ________姓名___________学号___________仪器组号_______实验日期______
微机原理实验报告 可编程并行IO接口8255
《微机原理及应用技术》课程实验报告实验五可编程并行I/O接口8255【预习内容】1.怎样选中可编程I/O接口?怎样实现I/O端口的寻址?8255的CS/接地址译码/CS0,则命令字地址为8003H,PA口地址为8000H,PB口地址为8001H,PC口地址为8002H。
通过地址/数据总线,按照指定地址进行读写操作直接选中8255。
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片。
CPU与外设交换的数据是以字节为单位进行的。
因此一个外设的数据端口含有8位。
而状态口和命令口可以只包含一位或几位信息,所以不同外设的状态口允许共用一个端口,命令口也可共用。
数据信息、状态信息和控制信息的含义各不相同,按理这些信息应分别传送。
但在微型计算机系统中,CPU通过接口和外设交换数据时,只有输入(IN)和输出(OUT)两种指令,所以只能把状态信息和命令信息也都当作数据信息来传送,且将状态信息作为输入数据,控制信息作为输出数据,于是三种信息都可以通过数据总线传送了。
但要注意,这三种信息被送入三种不同端口的寄存器,因而能实施不同的功能。
CPU对外设的访问实质上是对I/O接口电路中相应的端口进行访问,也需要由译码电路来形成I/O端口地址。
I/O端口的编址方式有两种·存储器映象寻址方式·I/O指令寻址方式2.8255A接口芯片内含几个I/O端口?它们的名称分别是?这些I/O口地址有何特点?三个数据端口,三种工作方式A口可工作于方式0、方式1和方式2中的任一种B口可工作于方式0和方式1,但不能工作于方式2C口只能工作于方式08位数据端口:A口、B口、C口A口:PA7~PA0B口:PB7~PB0C口:PC7~PC0连接外部设备A口与B口为一个8位的输入口或输出口C口单独作为一个8位的输入口或输出口配合A口和B口使用,作为控制信号和状态信号3.8255A有几个控制字?怎样设置?它有两个控制字,一个是方式选择控制字,一个是对C口进行置位或复位控制字。
串行接口实验报告
串行接口实验报告串行接口实验报告引言:串行接口是一种用于数据传输的通信协议,它通过一条线路逐位地传输数据。
与并行接口相比,串行接口在使用的线路数量上更加节省,因此在某些场景下更为常见和实用。
本实验旨在通过搭建一个串行接口的实验平台,研究串行接口的工作原理和性能。
实验设备与方法:本次实验使用了一台计算机、一根串行线缆以及一个串行接口转换器。
首先,将计算机与串行接口转换器通过串行线缆连接起来。
然后,通过计算机上的串行接口软件,设置串行接口的参数,如波特率、数据位、校验位等。
最后,通过发送和接收数据的操作,验证串行接口的正常工作。
实验结果与分析:在实验过程中,我们首先测试了串行接口的数据传输速率。
通过调整波特率,我们发现串行接口的传输速率与波特率成正比。
当波特率较低时,数据传输速度较慢,而当波特率较高时,数据传输速度较快。
这说明串行接口的传输速率受到波特率的限制。
接下来,我们测试了串行接口的数据可靠性。
通过发送一组数据,并在接收端进行校验,我们可以判断数据是否传输正确。
实验结果显示,当串行接口的校验位设置正确时,数据传输的可靠性较高。
然而,当校验位设置错误时,数据传输的可靠性会降低。
这表明校验位的设置对于数据传输的正确性至关重要。
此外,我们还测试了串行接口的最大传输距离。
通过逐渐增加传输距离,我们发现当传输距离超过一定范围时,数据传输会出现错误。
这是因为串行接口的信号在传输过程中会受到衰减和干扰的影响,导致数据传输的不可靠。
因此,在实际应用中,需要根据传输距离选择合适的串行接口设备。
结论:通过本次实验,我们深入了解了串行接口的工作原理和性能。
串行接口的传输速率受到波特率的限制,数据可靠性与校验位的设置密切相关,传输距离会影响数据传输的可靠性。
在实际应用中,我们应根据需求选择合适的串行接口设备,并根据实际情况进行参数设置,以确保数据传输的稳定和可靠。
未来展望:随着科技的不断发展,串行接口在各个领域的应用越来越广泛。
串行接口实验报告
一、实验目的1. 理解串行接口的基本原理和功能。
2. 掌握串行接口的硬件连接和软件编程方法。
3. 学习使用串行接口进行数据传输。
4. 了解串行接口在实际应用中的重要性。
二、实验原理串行接口是一种数据传输方式,将数据按位顺序一位一位地传输。
与并行接口相比,串行接口具有传输距离远、传输速度快、抗干扰能力强等优点。
在串行接口中,数据以一定的速率、格式和协议进行传输。
串行接口的基本原理是:发送端将数据按位发送,接收端按照同样的速率和格式接收数据,并通过软件或硬件解码恢复原始数据。
串行接口的硬件连接主要包括发送端和接收端,其中发送端包括发送数据缓冲器、串行移位寄存器、时钟发生器等;接收端包括接收数据缓冲器、串行移位寄存器、时钟恢复电路等。
三、实验内容1. 硬件连接(1)根据实验要求,连接实验板上的串行接口电路。
(2)将实验板与计算机连接,确保通信线路畅通。
2. 软件编程(1)使用C语言编写串行接口发送和接收数据的程序。
(2)设置串行接口的波特率、数据位、停止位和校验位等参数。
(3)实现数据的发送和接收,并对接收到的数据进行处理。
3. 实验步骤(1)启动实验环境,编译并运行串行接口发送和接收数据的程序。
(2)在计算机上打开串行通信调试软件,如串口调试助手。
(3)设置调试软件的波特率、数据位、停止位和校验位等参数,确保与实验程序设置一致。
(4)在调试软件中发送数据,观察实验板接收到的数据是否正确。
(5)修改实验程序,调整发送和接收的数据,验证串行接口通信功能。
四、实验结果与分析1. 实验结果通过实验,成功实现了串行接口的发送和接收功能。
在计算机上发送数据,实验板接收到的数据与发送数据一致,说明串行接口通信功能正常。
2. 实验分析(1)在实验过程中,需要注意串行接口的波特率、数据位、停止位和校验位等参数设置,确保与接收端一致。
(2)在实际应用中,串行接口通信需要考虑抗干扰能力,可以通过采用差分传输、增加滤波电路等措施来提高通信质量。
微机接口技术 微机原理实验二 IO口扩展实验
宁德师范学院计算机系
实验报告
(2013 —2014 学年第2学期)
课程名称微机原理与接口技术
实验名称实验二I/O口扩展实验专业计算机科学与技术(非师)年级12级
学号B2012102147 姓名王秋指导教师潘日萍
实验日期2015.4.15
org 100h
start: mov dx,04a0h ;74LS244地址
in al,dx ;读输入开关量
mov dx,04b0h ;74LS273地址
out dx,al ;输出至LED
jmp start
code ends
end start
实验结果截图:
图1:程序代码运行截图
图2 :微机连线后运行程序图
图3 :运行后改变开关灯亮灭情况1
图4:运行后改变开关灯亮灭情况2
注:1、报告内的项目或设置,可根据实际情况加以补充和调整
2、教师批改学生实验报告应在学生提交实验报告10日内。
微机原理-串行接口实验报告
实验报告一.实验任务采用UART IP 核,实现Nexys4 或Nexys4 DDR 实验板UART接口之间的通信。
要求当拨动开关时,将开关对应的值通过UART1发送到UART2,同时利用LED 灯指示UART2接收到的当前开关的值;当按下按键时,将按键对应的值通过UART2发送到UART1,同时利用数码管指示UART1接收到的当前按下的按键位置码(C,U,d,L,r)。
UART 波特率为9600bps。
二.硬件电路框图三.程序源代码#include "xil_io.h"#include "stdio.h"#include "xintc_l.h"#include "xgpio_l.h"#include "xuartlite_l.h"void UART_SR();void BtnHandler();void My_ISR() __attribute__ ((interrupt_handler));int main(){Xil_Out32(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_TRI_OFFSET,0x1f); //设定BUTTON为输入方式Xil_Out16(XPAR_GPIO_0_BASEADDR+XGPIO_TRI2_OFFSET,0x0); //LED灯输出Xil_Out32(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_IER_OFFSET,XGPIO_IR_CH1_MASK); //通道1允许中断Xil_Out32(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_GIE_OFFSET,XGPIO_GIE_GINTR_ENABLE_ MASK); //允许GPIO中断输出Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_CONTROL_REG_OFFSET,XUL_CR_ENABL E_INTR|XUL_CR_FIFO_RX_RESET|XUL_CR_FIFO_TX_RESET);//使能中断,清除RX,TX寄存器Xil_Out32(XPAR_AXI_INTC_0_BASEADDR+XIN_IER_OFFSET,XPAR_AXI_GPIO_2_IP2INTC_IRPT _MASK|XPAR_AXI_UARTLITE_3_INTERRUPT_MASK);//对中断控制器进行中断源使能Xil_Out32(XPAR_AXI_INTC_0_BASEADDR+XIN_MER_OFFSET,XIN_INT_MASTER_ENABLE_MA SK|XIN_INT_HARDWARE_ENABLE_MASK);microblaze_enable_interrupts();//允许处理器处理中断return 0;}void My_ISR(){int status;status=Xil_In32(XPAR_AXI_INTC_0_BASEADDR+XIN_ISR_OFFSET);//读取ISRxil_printf("0x%x\n",status);if((status&XPAR_AXI_UARTLITE_3_INTERRUPT_MASK)==XPAR_AXI_UARTLITE_3_INTERRUPT _MASK){UART_SR();}elseif((status&XPAR_AXI_GPIO_2_IP2INTC_IRPT_MASK)==XPAR_AXI_GPIO_2_IP2INTC_IRPT_MASK) BtnHandler(); //调用按键中断Xil_Out32(XPAR_AXI_INTC_0_BASEADDR+XIN_IAR_OFFSET,status);//写IAR}void UART_SR(){Xil_Out16(XPAR_GPIO_0_BASEADDR+XGPIO_DATA2_OFFSET,Xil_In32(XPAR_AXI_UARTLITE_3 _BASEADDR+XUL_RX_FIFO_OFFSET));}void BtnHandler(){unsigned short btncode;btncode=Xil_In8(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_DATA_OFFSET)&0x1f;while((Xil_In32(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_DATA_OFFSET)&0x1f)!=0){xil_printf("The pushed button's code is 0x%x\n",btncode);//打印输入的按键序号}switch(btncode){case 0x1:Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_TX_FIFO_OFFSET,btncode);break;case 0x2:Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_TX_FIFO_OFFSET,btncode);break;case 0x4:Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_TX_FIFO_OFFSET,btncode);break;case 0x8:Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_TX_FIFO_OFFSET,btncode);break;case 0x10:Xil_Out32(XPAR_AXI_UARTLITE_3_BASEADDR+XUL_TX_FIFO_OFFSET,btncode);break;default:break;}Xil_Out32(XPAR_AXI_GPIO_2_BASEADDR+XGPIO_ISR_OFFSET,Xil_In32(XPAR_AXI_GPIO_2_B ASEADDR+XGPIO_ISR_OFFSET)); //清除中断}四.实验结果五.实验心得在这个实验当中,主要是运用UART模块实现Nexys4 DDR 实验板UART接口之间的通信,在实验进程中,硬件平台搭设时,需要增加新的UART IP核作为标准输入输出接口,另外在管脚约束时,需要自己重新定义。
微机原理实验-基本IO口扩展实验
微机原理与系统设计课程实验报告
实验名称基本IO扩展实验
实验三基本IO口扩展实验
一、实验目的
了解TTL芯片扩展简单I/O口的方法,掌握数据输入输出程序编制的方法。
二、实验内容说明
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
其引脚图如下:
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
其引脚图如下:
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连接到发光二极管显示。
具体实验内容如下:
(1)当开关Yi为低电平时对应的发光二极管点亮,Yi为高电平时对应的发光二极管灭。
(2)当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
(3)当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
(4)自主设计控制及显示模式,完成编程调试,演示实验结果。
三、实验原理图:
实验连线图:
四、实验步骤:
(1)实验连线:
①244的CS——ISA总线接口模块的0000H,Y7—Y0——开关K1—K8。
②273的CS——ISA总线接口模块的0020H,Q7—Q0——发光二极管L1—L8。
③该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
④该模块的数据(AD0~AD7)连到ISA总线接口模块的数据(LD0~LD7)。
(2)编写实验程序,编译链接,运行程序
(3)拨动开关,观察发光二极管的变化。
五、实验程序。
串行IO接口实验报告
电子信息与通信学院实验报告实验名称:串行IO接口设计课程名称:微机原理实验专业班级:电信卓越1201班姓名:钟远维学号:U201213500实验成绩:指导教师:罗杰2014年12月23日一.实验目的1.理解RS232串行通信协议以及接口设计2.理解SPI串行通信协议3.掌握RS232串行接口设计4.掌握SPI串行接口设计5.掌握串行AD/DA接口设计二.实验任务SPI接口DA转换输出锯齿波,频率1kHz以上(降低采样频率),峰峰值约3.3V要求:全部采用中断方式。
三.实验步骤1.接口电路如图所示:DAC121S101中断控制方式接口电路2.硬件平台建立1)使用XPS创建一个基于AXI总线的最小计算机系统。
File –> New BSB Project,如图:2)修改时钟设置:将时钟产生器的时钟输入信号进行修改,修改为单一时钟源。
修改后的结果如图:3)添加AXI Interrupt Controller IP核:a.在IP Catalog标签中,双击下面图标创建INTC IP核:b.将microblaze_0实例的INTERRUPT引脚选择axi_intc_0_INTERRUPT,如图:4)加入AXI SPI接口控制器:a.如图所示,选择AXI SPI。
b.配置SPI接口参数如图所示。
这是由于该SPI接口仅需要输出数据,而且一次传输需要16位数据,一个从设备,且D/A转换芯片要求SCLK 最高速率30MHz,由于AXI总线频率为100MHz,一次分频比为4,此时SCLK的频率仅为25MHz。
c.设置端口连接配置,如图:5)为AXI INTC添加中断源,如图:6)配置UCF文件:在UCF文件中修改如图所示配置,此时是通过PMOD JA上排插针进行连接:7)创建工程过程完成后,a.在主界面下选择Hardware->Generate Netlist;b.在主界面下选择Hardware->Generate Bitstream;c.单击Graphical Design View,可以看到系统的连接图,如下:3.软件平台建立a.SDK提供的外设驱动以及应用程序,点击Export&Launch1.点击project->Expert Hardware Design to SDK…SDK:2.在SDK中,点击file->new->board support package,如图:3.点击file->new->application project,创建一个Empty Applicant工程,在src中新建一个SPIDIswitch.c文件,如图所示:b.源代码及注释:四.实验结果和调试过程首先,把SPI接口D/A模块跟Nexys4的板子相接;然后,下载并运行该工程,将示波器的探针连接到J2的1脚,可以看到锯齿波的波形。
微机原理实验报告串行IO接口
微机原理实验报告串⾏IO接⼝微机原理实验预习报告串⾏I/O接⼝实验1)理解RS232串⾏通信协议以及接⼝设计2)理解SPI串⾏通信协议3)掌握RS232串⾏接⼝设计4)掌握SPI串⾏接⼝设计5)掌握串⾏AD/DA接⼝设计⼆实验任务SPI接⼝DA转换输出锯齿波满量程下的锯齿波硬件电路框图软件流程图四实现步骤硬件实现1、加⼊中断控制器和SPI总线接⼝2、配置SPI接⼝参数,:⼀次传输16位数据,分频⽐为4,SCLK的频率为25MHz3、端⼝连接配置4、UCF配置软件实现1、导出到SDK2、建⽴⼀个新的空⼯程3、将源码加⼊新的c源⽂件中源代码及注释:#include"xparameters.h"#include"xspi.h"#include"xintc.h"#include"xil_exception.h"#define BUFFER_SIZE 2void SpiIntrHandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount); //⽤户定义的SPI终端服务程序static XIntc IntcInstance;static XSpi SpiInstance;volatile int TransferInProgress;//中断结束状态标志int Error;u8 ReadBuffer[BUFFER_SIZE];u8 WriteBuffer[BUFFER_SIZE];int main(void)int Status,Count;Status = XSpi_Initialize(&SpiInstance,XPAR_SPI_0_DEVICE_ID);Status = XSpi_Initialize(&SpiInstance,XPAR_INTC_0_DEVICE_ID);Status = XIntc_Connect(&IntcInstance, XPAR_INTC_0_SPI_0_VEC_ID, (XInterruptHandler) XSpi_InterruptHandler,(void *)&SpiInstance);Status = XIntc_Start(&IntcInstance, XIN_REAL_MODE);XIntc_Enable(&IntcInstance, XPAR_INTC_0_SPI_0_VEC_ID);microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler, &IntcInstance); microblaze_enable_interrupts();//设置SPI接⼝⽤户中断服务函数XSpi_SetStatusHandler(&SpiInstance,&SpiInstance,(XSpi_StatusHandler) SpiIntrHandler); //配置SPI接⼝⼯作模式Status = XSpi_SetOptions(&SpiInstance,XSP_MASTER_OPTION|XSP_CLK_PHASE_1_OPTION);//设置从设备选择信号Status = XSpi_SetSlaveSelect(&SpiInstance,1);//使能SPI接⼝XSpi_Start(&SpiInstance);//循环输出数据到SPI接⼝控制DAC输出锯齿波while(1){WriteBuffer[0] = (u8) (Count);//SPI输出数据的低8位WriteBuffer[1] = (u8) (Count>>8)&0x0f;// SPI输出数据的⾼8位,其中⾼4位清零,使得Vout正常输出电压Count=Count+32;if (Count==4096)Count=0;//12位DAC转换数据达到最⼤值时,恢复到0TransferInProgress = TRUE; // 设置传输状态标志为1XSpi_Transfer(&SpiInstance, WriteBuffer, (void*)0, 2);//⼀次传输2个字节while (TransferInProgress);// 等待传输结束}return XST_SUCCESS;}void SpiIntrHandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount){TransferInProgress = FALSE;//进⼊中断表⽰传输结束,修改传输状态标志为0if (StatusEvent != XST_SPI_TRANSFER_DONE){Error++;}}五实验验证观察峰峰值为3.3v左右,即为满量程的⼯作电压六实验总结1)通过实验学会了在AXI总线上连接SPI接⼝2)学会了并⾏I/O接⼝的设计3)知道了波形的输出条件和量程的选择。
串转并的IO口实验实验报告
实验六串转并的I/O口实验一实验目的熟悉并掌握串转并的I/O口扩展方法二实验设备及器件IBM PC机一台单片机仿真器,编程器,实验仪三合一综合开发平台一台三实验内容1. 写程序,通过单片机的P1口控制74HC164的串行输入端口,实现串并转换.2. 验证串并转换的正确性.四实验要求熟悉串转并的工作原理,学会使用串并转换芯片扩展单片机的I/O口资源.五实验步骤1. 短接C5区JP10接口,将C5区J43接口与A2区J61接口的P10~P13对应相连(CLK对P10等)。
2. 运行编写好的软件程序,完成一次串并转换.3. 使用C2区的逻辑笔或D1区的J52接口(LED指示灯)测试并行输出数据Q0~Q7数据的正确性.六实验原理七实验参考程序CLK EQU P1.0DINA EQU P1.1DINB EQU P1.2CLR164 EQU P1.3ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#60H ;设置堆栈向量NOP ;设置以下端口初始化CLR CLK ;CLK=0SETB DINB ;DINB=1CLR CLR164 ;CLR=0输出端口清零SETB CLR164 ;CLR=1MOV A,#0AAH ;用户输出数据初始化MOV R4,#08HSLCHG: RLC AMOV DINA,C ;串行输出一位数据SETB CLK ;移位时钟NOPCLR CLKNOPDJNZ R4,SLCHGSJMP $ ;程序结束,完成一次串并转换END八程序流程图九实验思考尝试编写程序,实现8位LED流水灯的控制。
原理图同上。
十完成实验报告。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验预习报告串行I/O接口实验
1)理解RS232串行通信协议以及接口设计
2)理解SPI串行通信协议
3)掌握RS232串行接口设计
4)掌握SPI串行接口设计
5)掌握串行AD/DA接口设计
二实验任务
SPI接口DA转换输出锯齿波满量程下的锯齿波
硬件电路框图
软件流程图
四实现步骤
硬件实现
1、加入中断控制器和SPI总线接口
2、配置SPI接口参数,:一次传输16位数据,分频比为4,SCLK的频率为25MHz
3、端口连接配置
4、UCF配置
软件实现1、导出到SDK
2、建立一个新的空工程
3、将源码加入新的c源文件中
源代码及注释:
#include"xparameters.h"
#include"xspi.h"
#include"xintc.h"
#include"xil_exception.h"
#define BUFFER_SIZE 2
void SpiIntrHandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount); //用户定义的SPI终端服务程序
static XIntc IntcInstance;
static XSpi SpiInstance;
volatile int TransferInProgress;
//中断结束状态标志
int Error;
u8 ReadBuffer[BUFFER_SIZE];
u8 WriteBuffer[BUFFER_SIZE];
int main(void)
int Status,Count;
Status = XSpi_Initialize(&SpiInstance,XPAR_SPI_0_DEVICE_ID);
Status = XSpi_Initialize(&SpiInstance,XPAR_INTC_0_DEVICE_ID);
Status = XIntc_Connect(&IntcInstance, XPAR_INTC_0_SPI_0_VEC_ID,
(XInterruptHandler) XSpi_InterruptHandler,(void *)&SpiInstance);
Status = XIntc_Start(&IntcInstance, XIN_REAL_MODE);
XIntc_Enable(&IntcInstance, XPAR_INTC_0_SPI_0_VEC_ID);
microblaze_register_handler((XInterruptHandler)XIntc_InterruptHandler, &IntcInstance);
microblaze_enable_interrupts();
//设置SPI接口用户中断服务函数
XSpi_SetStatusHandler(&SpiInstance,&SpiInstance,(XSpi_StatusHandler) SpiIntrHandler);
//配置SPI接口工作模式
Status = XSpi_SetOptions(&SpiInstance,
XSP_MASTER_OPTION|XSP_CLK_PHASE_1_OPTION);
//设置从设备选择信号
Status = XSpi_SetSlaveSelect(&SpiInstance,1);
//使能SPI接口
XSpi_Start(&SpiInstance);
//循环输出数据到SPI接口控制DAC输出锯齿波
while(1){
WriteBuffer[0] = (u8) (Count);
//SPI输出数据的低8位
WriteBuffer[1] = (u8) (Count>>8)&0x0f;
// SPI输出数据的高8位,其中高4位清零,使得Vout正常输出电压
Count=Count+32;
if (Count==4096)
Count=0;
//12位DAC转换数据达到最大值时,恢复到0
TransferInProgress = TRUE; // 设置传输状态标志为1
XSpi_Transfer(&SpiInstance, WriteBuffer, (void*)0, 2);
//一次传输2个字节
while (TransferInProgress);
// 等待传输结束
}
return XST_SUCCESS;
}
void SpiIntrHandler(void *CallBackRef, u32 StatusEvent, u32 ByteCount)
{
TransferInProgress = FALSE;
//进入中断表示传输结束,修改传输状态标志为0
if (StatusEvent != XST_SPI_TRANSFER_DONE){
Error++;
}
}
五实验验证
观察峰峰值为3.3v左右,即为满量程的工作电压
六实验总结
1)通过实验学会了在AXI总线上连接SPI接口2)学会了并行I/O接口的设计
3)知道了波形的输出条件和量程的选择。