微机原理实验报告串行IO接口
- 格式:doc
- 大小:1.86 MB
- 文档页数:10
《微机原理与接口技术》实验报告姓名:学号:班级:专业:电气工程及其自动化学院:电气与信息工程学院目录实验一数据传送 (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四.实验结果并分析。
《微机原理及应用技术》课程实验报告实验一片内输入、输出实验【预习内容】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两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。
微机原理与接口技术实验实验六、串行接口实验学号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接口实验
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)知道了波形的输出条件和量程的选择。