微机原理实验四DA
- 格式:docx
- 大小:212.11 KB
- 文档页数:7
实验报告实验四 8251可编程串行口与PC机通信实验一、实验要求利用实验箱内的8251A芯片,实现与PC机的通信。
二、实验目的1.掌握8251A芯片结构和编程方法;2.了解实现串行通信的硬件环境,数据格式和数据交换协议;3.了解PC机通信的基本要求。
三、实验原理(一)8251A芯片工作方式配置:1. 8个数据位;2.无奇偶校验位;3.1个停止位;4.波特率因子设为16;5. 波特率设为9600。
(二)8251A主要寄存器说明图4-1 模式字图4-2 命令字CO MMAN D I NSTR UCT ION FO RMA T图4-3 状态字(三)8251编程对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。
(1)方式控制字方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。
图4-4 方式控制字说明(2)命令控制字命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。
图4-5 所示的是8251 命令控制字各位的定义。
图4-5命令控制字说明(3)状态字CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如图4-6所示。
图4-6 状态字说明四、实验电路连接:1.CS8251接228H,CS8279已固定接至238H;2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。
注意:RS232通信口必须在设备断电状态下插拔!图4-7 连线图五、实验内容及要求1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。
使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。
将结果截图保存,贴入实验报告。
上海大学微机实践报告实验四:D/A转换器实验【实验目的】了解D/A转换的基本原理,掌握DAC0832芯片的性能、使用方法及对应的硬件电路。
【实验内容】编写程序,要求输出锯齿波、三角波及方波,分别用示波器观察波形;如有能力,把三段程序编在一起,循环输出三种波形。
【实验区域电路连接图】连线:CS5→8000H;IOWR→IOWR;JX2→JX17;AOUT→示波器。
【程序框图】三角波【编程】1)方波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALCALL DELAYXOR AL,0FFH ;高低电平转换JMP LOOP1DELAY: ;若干秒延时MOV BX,0FFHLOOP2:DEC BXJNZ LOOP2RETCODE ENDSEND STARTCODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1: ;逐步累加到5V,到最大值后又从零开始累加OUT DX,ALNOPINC ALJMP LOOP1CODE ENDSEND STARTLOOP2:OUT DX,ALMOV AL,00H ;达到最大值后,再从00H不断累加,使波形上升JMP LOOP1 ;循环输出锯齿波CODE ENDSEND START3)三角波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALINC ALCMP AL,0FFHJZ LOOP2 ;进行三角波下降沿JMP LOOP1LOOP2:OUT DX,ALDEC ALNOPJZ LOOP1 ;重新进行三角波上升沿JMP LOOP2CODE ENDSEND START1、DAC产生波形的频率如何调节?频率上限的限制取决于那些因素?解:如果是方波只要调节延时程序就可以实现改变频率。
微机原理与应用第四次实验报告实验6 汇编语言程序结构一、实验目的1.掌握汇编语言项目上机过程2.掌握汇编语言程序结构和常用伪操作3.掌握汇编语言程序设计和调试方法4.掌握MSP430F1xx基本I/O控制方法二、实验任务1.学习汇编指示性语句(可在simulator下完成)在EWH8下新建项目Lab_6,编写下面程序L6_directives.s43(程序清单见后页,该程序只是为了学习指示性语句,程序本身并没有实现什么特定功能),利用project/remove移出模板文件test_asm.s43,点击project/add/files将L6_directives.s43添加到项目中。
1) 利用EW430下的view/memory查看DATA16_C段中定义的存储单元内容和地址,在memory/go的窗口内输入存储单元的符号(如number1)即可查看到该符号对应的存储单元地址和内容,注意在L6_directives.s43程序中使用这些存储单元的内容和地址的方法;利用view/disassembly反汇编程序,对比源程序,利用每条指令后的注释,学习其中用到的指示性操作,如:#define、SFB、SFE、SIZEOF、$等,并能在今后的程序设计中使用。
2) 在L6_directives.s43中,number4和number1分别被定义成了什么?二者有何不同?#number4和#number1这两个操作有何不同?MOV #number4, R7和MOV number4, R7执行的结果会相同吗?为什么?3) 如图6-1所示,点击项目中的msp430x14x.h文件,了解该文件中用到的指示性语句,今后的实验中会用到该文件中的定义。
答2.编程控制实验板上发光二级管按下面4种规律循环显示1) 8个LED灯顺时针一个一个单独点亮,每次只有一个灯亮,其他灯灭;2) 4个奇数号LED灯和4个偶数号LED灯交替点亮各一次;3) 8个LED灯两两点亮,顺序为LED1和8,LED2和7,LED3和6,LED4和5,每次只有两个灯亮,其他灯灭;4) 8个LED灯全亮,全灭注意:在灯的状态变化中,需留一定延时,以便视觉能感受到灯的亮灭,要求编写一延时子程,需要延时的地方,用CALL指令调用该子程。
本科实验报告实验名称:A/D和D/A转换课程名称:实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:学院:同组搭档:专业:成绩:实验四 A/D和D/A转换一、实验目的1、了解A/D 转换的基本原理,掌握ADC0809 的使用方法。
2、了解D/A 转换的基本原理,掌握DAC0832 芯片的使用方法。
3、了解直流电机控制的基本方法。
二、实验内容与步骤(一)A/D 转换部分1、接线:2、实验电路原理图下图通过实验台左下角电位器RW1 输出0~5V直流电压送入ADC0809 通道0(IN0),利用debug 的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。
启动IN0开始转换: Out 298H读取转换结果: In 298H3、用万用表测量CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的。
4、编程按中断方式采集IN0 输入的电压,在屏幕上显示出转换后的数据(用16 进制数)。
5、考虑如果采用IN7 输入的电压,启动开始转换和读取转换结果的地址应该是多少。
6、按查询方式采集IN0 输入的电压,软硬件如何实现。
编程方案1、ADC0809 的IN0 口地址为298H。
2、IN0 单极性输入电压与转换后数字的关系为:其中Ui 为输入电压,UREF 为参考电压,这里的参考电压为+5V电源。
3、一次A/D 转换的程序可以为MOV DX, PortOUT DX,AL ;启动转换;延时IN AL,DX ;读取转换结果放在AL 中(二) D/A 转换部分1、接线:CS /0832 接 Y2 /IO 地址用万用表测量 WR2 和XFER 在实验系统上如何联系的。
2、实验电路原理如图2,DAC0832 采用单缓冲方式,具有单双极性输出端(图中的Ua、Ub),利用debug 输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua 及双极性输出端Ub 的电压,验证数字与电压之间的线性关系。
实验四 A/D转换实验一、实验目的与要求目的:掌握A/D芯片与单片机的接口方法及ADC性能;了解单片机实现数据采集的方法。
二、实验参考步骤1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T4a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test4a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T4a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、将ad0804 的wr引脚连接P3.6 ,rd引脚接p3.7 ad0804数据接P1口,八路发光管接P0口,完成仿真器与计算机之间的连线并通电。
6、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真,调节电位器控制电压输入,观察指示灯状态。
7、根据指示灯状态记录对应的AD结果,利用万用表测量对应的输入电压值进行比较,验证AD结果是否正确。
8、通过多次改变输入值的方式重复步骤7并记录调试结果,然后在KEIL软件中启动启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。
9、根据参考源程序1进行思考、修改和拓展,自行设计程序目标并编程验证,比如利用数码管显示AD值,或者利用AD值控制PWM波的占空比等。
10、完成参考程序二的仿真演示并自行分析其程序设计思想。
三、实验内容1、程序一:0804的基本应用。
程序演示目的:实验者转动电位器以改变输入电压,利用ad0804读取AD结果并利用P0口显示AD结果;硬件连接:将ad0804的 wr引脚接P3.6,rd引脚接P3.7,ad0804数据口接P1口, P0口接八路发光管。
微机原理与接口技术第四次实验报告目录第一次实验:实验6 8254定时/计数器实验 (1)第二次实验:实验3 六位数码管显示实验 (4)实验5 小键盘按键识别实验 (8)实验2 拨动开关和 LED 显示实验 (15)实验8 8255方式1输出 (17)实验13 继电器实验 (20)第三次实验: 实验10 8位D/A转换实验 (23)第一次实验:实验68254 定时/计数器实验一实验目的熟悉 8254 在系统中的电路接法,掌握 8254 的工作方式及应用编程。
二实验内容使用 8254 两个计数器级连,采用定时方式工作,周期性的点亮及熄灭发光二极管各 0.5秒。
三实验原理(1)接线图:(2)流程图四程序清单及注释.Model small.386DATA SEGMENTD1 DB 10 DUP('4')D2 DB 20 DUP('3') DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA BEG:MOV AX,DATAMOV DS,AXMOV AL,37HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,200HOUT DX,ALMOV AL,AHOUT DX,ALMOV AL,77HMOV DX,203HOUT DX,ALMOV AX,1000;1000控制LED闪烁频率MOV DX,201HOUT DX,ALMOV AL,AHOUT DX,ALCODE ENDSEND BEG四问题及体会(1)初次使用TPC-386EX汇编,对软件的使用不够熟悉,对输出输入接口的确定还有些模糊,需要继续尝试加以提高;(2)TPC-386EX 环境与下位机的匹配是一个常见的错误,实验中多次显示“请先传送文件”提示,后来发现是两者间接口连接出现问题,以后实验中会注意。
第二次实验:实验3 六位数码管显示实验一实验目的了解共阴级数码管显示数字的原理,掌握六位共阴级数码管动态显示的控制方法。
实验四串操作指令程序实验一、实验目的1. 熟悉五种串操作指令的功能,会编写常用的串操作应用程序。
2. 会使用DEBUG 命令查看串操作运行的结果。
二、实验环境1. 硬件:PC 微机2. 软件:Masm for Windows 汇编集成开发环境三、实验讲义串指连续存放在存储器中的一些数据字节、字或者双字。
串操作允许对程序连续存放的数据块进行操作。
这是唯一一种可以从存储器到存储器的指令。
源串一般存放在数据段,偏移地址由SI 指定;目标串必须在附加段,偏移地址由DI 指定。
在每次进行串操作后,SI 和DI 两个指针会自动修改。
修改的是增量方向还是减量方向由标志位DF 决定,DF=0 为增量操作,DF=1 为减量操作。
CX 中存放的是数据块的长度,可在CX 前加重复前缀标志,对串进行连续操作。
执行串指令之前,一般先进行如下操作:源串首地址(末地址)→ SI目的串首地址(末地址)→ DI串长度→ CX建立方向标志DF1. 重复前缀标志助记符判断条件说明REP CX 0 CX=CX-1,若CX 0 则重复REPE 或REPZ CX 0 且ZF=1 CX=CX-1,若CX 0 且ZF=1 则重复REPNE 或REPNZ CX=0 且ZF=0 EX=CX-1,若CX 0 且ZF=0 则重复2. 方向标志指令方向标志由标志位DF 决定,有CLD 和STD 两种指令。
CLD 将DF 置0,地址为增量操作。
STD 将DF 置1,地址为减量操作。
3. 串传送指令格式: [REP] MOVS DESTS, SRCS[REP] MOVSB/ MOVSW / MOVSD功能:将DS:SI 中的源串数据传送到ES:DI 规定的目的串单元中。
加重复前缀REP 可实现连续存放的数据块的传送。
例1:将源串中前三个字节的数据传送到目的串。
源串在数据段(DATAS)中,存放在SRC 单元中;目的串在附加数据段(EDATAS)中,存放在DEST 单元中。
微机原理第四次上机实验报告学号:PB12203254 姓名:**潇上机时间:每周五晚上【一、实验目的和要求】:1,熟练掌握分支程序的两种结构形式:即相当于高级语言中的IF_THEN_ELSE语句和CASE语句。
2,熟练掌握使用条件转移指令实现分支程序设计的基本方法。
3,熟练掌握使用跳转表方法实现CASE结构的分支程序的设计。
【二、实验内容和过程】程序1:编写一个程序将一个数组中正数和负数分成两个数组并分别屏幕显示正数和负数的个数。
(一)程序的算法:1,首先是待处理数组的创建:我们通过21H号中断调用的0A号功能调用输入数字串,存于BUFF字符串区(设定为0A号调用的键入缓冲区),这里只负责将键入的以回车符(0DH)结尾的字符串读入数据段,不检查输入是否合法。
但是,我们通过输出提示告知用户键入的数字之间应该使用空格符(20H)来分隔。
实际上,我们在处理数字的时候就是以空格符(当然,还包括尾后输入的回车符)作为一个数字的字符串形式结束的标志(回车符还标识所有数字处理完毕)。
另一方面,我们计划给每个数字分配一个字的储存空间,故我们支持的数字范围为-32768~32767,这同样有键入提示字符串提示。
2,数字处理阶段:----预备处理阶段:初始化用来作为指针和数据暂存的寄存器(DI指向保存正数的数组NUM1,SI指向保存负数对应补码的数组NUM2,BX指向键入缓存区BUFF,数据暂存的CX清0,将要用来读数和处理的AX清0),计数器清零(L1,L2清0,他们分别记录存入NUM1和存入NUM2的元素的个数)。
----正式处理阶段:(a)开始:我们通过BX指向BUFF,通过MOV AL,[BI]j将一个字节读入AL。
(b)判断,是否为回车符(0DH):TURE,所有数字处理完毕,跳转到输出阶段;FALSE,继续执行接下来的指令。
(c)判断,是否为回车(20H):TURE,尚未开始下一个数字的输入,回跳(a)重新读入下一个字节的内容;FALSE,继续执行接下来的指令。
微机原理实验四串行IO接口实验
姓名:英俊哥
学号:
班级:
一、实验目的
1.理解UART串行通信协议以及接口设计
2.理解SPI串行通信协议
3.掌握UART串行接口设计
4.掌握SPI串行接口设计(DA、AD串行接口设计)
二、实验任务
Nexys4开发板通过外界SPIDA模块,实现DA转换,利用DAC121S101DA转换芯片,基于SPI总线控制其Dout输出锯齿波。
扩展
(1)周期可调
(2)输出电压可调
(3)输出其他波形,如正弦波,三角波等
三、硬件电路框图
四、硬件平台建立过程
1.使用XPS创建一个基于AXI总线的最小计算机系统。
配置相关参数,选择处
理器频率、BRAM大小为32KB,并增加串口作为标准输入输出接口。
创建最小系统的基本操作如前面的实验。
2.硬件平台要求加入中断控制器课SPI总线接口,如下图所示,在IP Catalog
中添加AXI Interrupt Controller,采用默认设置。
3.加入AXI SPI接口控制器如下图所示,选择AXI SPI。
由于该SPI接口仅需要输
出数据,而且一次传输需要16位数据,一个从设备,且D/A转换芯片要求SCLK最高速率30MHz,由于AXI总线频率为100MHz,因此分频比为4,此时SCLK的频率为25MHz。
4.具体SPI端口连接配置下图所示。
5.External Ports 如下:
6.配置UCF,分配物理引脚如下图所示。
五、软件平台建立
建立一个BSP文件,再建立一个新的空工程,将源码加入新的c源文件中。
下载并运行该工程,将示波器探针连接到J2的1脚,可看到锯齿波的波形。
C源码如下:
* SPIDA1.c
*
* Created on: 2015-12-8
* Author: hn_wu_000
*/
#include "xparameters.h" /*XPAR parameters*/
#include "xspi.h" /*SPI device driver*/
#include "xintc.h" /*Interrupt controller device drive*/
#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=XIntc_Initialize(&IntcInstance,XPAR_INTC_0_DEVICE_ID);
Status=XIntc_Connect(&IntcInstance,XPAR_INTC_0_SPI_0_VEC_ID,(XInterrupt Handler)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)Spi IntrHandler);
//设置SPI接口工作模式
Status=XSpi_SetOptions(&SpiInstance,XSP_MASTER_OPTION|XSP_CLK_PHASE_1_O
PTION);
//设置从设备选择信号
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位清0,使得Vout正常输出电压
Count++;
if(Count==4096)
Count=0;
//12位DAC转换数据到达最大值时,恢复到0
TransferInProgress=TRUE;
//设置传输状态标志为1
XSpi_Transfer(&SpiInstance,WriteBuffer,(void*)0,2);
while(TransferInProgress);
//等待传输结束
}
return XST_SUCCESS;
}
void SpiIntrHandler(void *CallBackRef,u32 StatusEvent,u32 ByteCount)
{
TransferInProgress=FALSE;
//进入中断表示传输结束,修改传输状态标志为0
if(StatusEvent!=XST_SPI_TRANSFER_DONE){
Error++;
}
}
观察到的锯齿波波形如下:
六、实验小结
通过本次实验我学习到了SPI串行接口的基本原理,因为是做的SPI DA
转换实验,所以实验后对DA模块有了很好的认识。
本次实验不是很难,但是因为要做综合实验而没有做扩展功能,这是个遗憾。
希望能在之后
做出扩展功能部分,以提高自己!。