




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
./微机原理与接口技术实验报告班级:自动化〔铁道信号姓名:*****学号:1121****授课教师:福恩目录1.实验一32.实验二8实验三13实验四22实验五26实验六337.参考文献38实验一交通灯控制实验一.实验目的通过应用接口技术设计十字路口、复杂路口交通灯控制系统,学会应用"微机原理与接口技术"课程所学的X86汇编语言和接口技术掌握可编程并行接口芯片的硬件设计、软件编程,实现十字路口交通灯的模拟控制并思考计算机如何应用在各种控制系统中。〔1掌握利用X86汇编语言技巧〔2掌握X86微处理器与可编程并行接口芯片8255A硬件电路设计〔3熟悉模拟交通灯控制的实现方法并思考如何应用在实际中。二.实验容设计一个交通控制系统,该控制系统工作后,交通灯按照如下规律变化:〔1南北路口的绿灯、东西路口的红灯同时亮3秒左右。〔2南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。〔3南北路口的红、东西路口的绿灯同时亮3秒。〔4南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。〔5返回〔1依次循环。三.实验电路如下图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。8255动态分配地址:控制寄存器:0EC0BHA口地址:0EC08HC口地址:0EC0AH红黄绿红黄绿图1-1交通灯实验电路图四.程序流程图五.源程序CODESEGMENTASSUMECS:CODE;**********************************工作状态控制字设置START:MOVDX,0EC0BH;写控制端口,地址0EC0BHMOVAL,10010000B;C口方式0输出OUTDX,AL;**********************************南北路口绿灯亮,东西路口红灯亮FIRST:MOVDX,0EC0AH;写PC口,地址0EC0AHMOVAL,00100100B;南北绿,东西红,PC口写00100100OUTDX,AL;两层嵌套实现长延时MOVCX,0;外层循环送入初值65536MOVAX,2000H;层循环送入初值2000HDELAY1:DECAXJNZDELAY1LOOPDELAY1;**********************************南北路口黄灯闪烁,东西路口红灯亮MOVBL,5;BL控制黄灯亮的次数5次SECOND:MOVDX,0EC0AHMOVAL,01000100BOUTDX,AL;南北黄,东西红MOVCX,3000HMOVAX,0100HLI1:DECAXJNZLI1LOOPLI1MOVDX,0EC0AH;短延时MOVAL,00000100B;南北路口黄灯先灭OUTDX,ALMOVCX,3000HMOVAX,0100HWEN1:DECAXJNZWEN1;短延时LOOPWEN1DECBLJNZSECOND;南北路口黄灯再亮;**********************************南北路口红灯亮,东西路口绿灯亮THIRD:MOVDX,0EC0AH;写入C口MOVAL,10000001BOUTDX,AL;南北红,东西绿MOVCX,0;长延时MOVAX,2000HDELAY2:DECAXJNZDELAY2LOOPDELAY2MOVBL,4;控制黄灯亮的次数FORTH:MOVDX,0EC0AH;写入C口MOVAL,10000010BOUTDX,AL;南北红,东西黄MOVCX,3000HMOVAX,0100HLI2:DECAXJNZLI2;短延时LOOPLI2;**********************************南北路口红灯亮,东西路口黄灯闪烁MOVDX,0EC0AHMOVAL,10000000BOUTDX,AL;东西路口黄灯先灭MOVCX,3000HMOVAX,0100HWEN2:DECAXJNZWEN2LOOPWEN2DECBLJNZFORTH;东西路口黄灯再亮MOVDL,0FFH;**********************************检测是否有键按下,调用6号功能MOVAH,06HINT21H;执行键盘输入操作JZFIRSTMOVAH,4CHINT21H;返回操作系统CODEENDSENDSTART六.实验总结这是我们的首个微机原理实验,对实验箱以及TPC-2003集成开发环境都比较陌生,也没有事先编写好程序,因此时间很紧,今后一定要在实验前做好充分的预习工作,现根据实验指导书上的要求,编写好程序。这个实验主要是用8255的定时功能来定时,然后使用JZ、JNZ来实现闪烁和红绿灯转换等功能,运用循环进行延时,实验中还使用了6号功能来实现显示的功能。通过这次实验使我对8255的工作原理、定时功能有了进一步的了解,同时也对汇编的程序结构和调试方法更加熟悉。一开始,程序编译连接都没有错误,但是有一个红灯一直亮,其他功能均正常,我又去检查程序是否存在逻辑错误,并反调试运行,都不能解决问题,后来在别人的实验箱上就运行成功了,可靠的硬件保障是实验成功的首要条件。实验二可编程定时器/计数器一.实验目的通过实验了解可编程定时器/计数器的本质是计数,学会再设计应用系统中如何用接口芯片实现计数和定时功能,通过实验思考并比较标准TTL集成电路实现计数和可编程定时器/计数器有什么不同,各有哪些特点?思考计数器可以用哪些场合。〔1掌握8253A与X86微机处理硬件连接原理。〔2掌握8253A计数定时应用编程。〔3熟悉掌握8253A在PC机系统中典型应用方法并思考如何应用在其他系统中。二.实验容〔1利用单脉冲发生器作为8253A可编程计数定时器时钟信号,实现N个脉冲后产生输出高电平信号。〔2利用8253A可编程计数定时器实现产生1S钟定时输出程序设计,输入1MHZ。三.实验电路按图2.1虚线连接电路,将计数器0设置为方式0,计数器初值为N〔N≤0FH,用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化〔当输入N+1个脉冲后OUT0变高电平。图2.1可编程计时器/计数器电路图一按图2.2连接电路图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化〔频率为1MHz。图2.2可编程定时器/计数器电路图二四.实验原理8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。作计数器时,要求计数的次数可直接作为计数器的初值预置到减"1"计数器中。8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。方式0—计数结束终端:在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。在计数过程中,OUT一直保持低电平,直到计数达"0”方式3—方波发生器:OUT输出低电平,装入计数值后,OUT立即跳变为高电平。如果当GATE为高电平,则立即开始减"1"计数,OUT保持为高电平,若n为偶数,则当计数值减到n/2时,OUT跳变为低电平,一直保持到计数值为"0",系统才自动重新置入计数值n,实现循环计数。这时OUT端输出的周期为n×CLKi周期,占空比为1:1的方波序列;若n为奇数,则OUTi端输出周期为n×CLK周期,占空比为<<n+1>/2>/<<n-1>/2>的近似方波序列。8253动态分配地址:控制寄存器:0EC03H计数器0地址:0EC00H计数器1地址:0EC01HCLK0连接时钟:1MHZ五.程序流程图图2.3可编程定时器/计数器流程图六.源程序〔1DATASEGMENTN EQU 0BH ;定义计数器初值N,初值N在0到F之,便于字符显示简单STRINGDB0AH,0DH,'$';定义STRING用来换行,0DH回车,0AH换行,$是字符串的结尾标志DATAENDSSTACK1SEGMENTSTACKDW100DUP<0>STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START: MOVAX,DATA MOVDS,AX;*************************************************8253的初始化 MOVDX,0EC03H ;控制寄存器地址0EC03H MOVAL,10H ;计数器0:00,只读/写计数器的低字节:01,方式0:000,;二进制计数:0,所以控制字写00010000B OUTDX,AL ;写入控制字 MOVDX,0EC00H ;计数器0地址0EC00H MOVAL,N OUTDX,AL;写入计数初值为N,即0BH,11 MOVCL,N ;用CL控制计数N次 L00P:MOVDX,0EC00H INAL,DX ;读取当前数值 CMPAL,CL JNEL00P ;若AL不等于CL,则继续到L00P循环 DECCL ;更改CL值;*****************************************************单字符输出程序,先转换成ASIIC MOVDL,AL CMPDL,09H;转换为ASIIC,0~9的数字加30,A到F加37 JLEADD30 ADDDL,07H;A~F先加7,下一步再加30ADD30:ADDDL,30H MOVAH,02H;02号功能是单字符输出显示,显示计数器当前值 INT21H;****************************************************** MOVDX,OFFSETSTRING ;换行 MOVAH,09H;, INT21H CMPCL,0 JNLL00P ;循环至CL等于0,即N次 MOVAH,4CH INT21HCODEENDS ENDSTART〔2DATASEGMENTNDB07HDATAENDSSTACK1SEGMENTPARASTACKDB20DUP<0>STACK1ENDSCODESEGMENTASSUMECS:CODESTART:MOVAL,36H;设置8253计数器0为工作方式3,十进制计数MOVDX,0EC03HOUTDX,AL;送方式控制字到控制口MOVDX,0EC00HMOVAX,1000;计数初值为1000OUTDX,AL;送计数初值的低字节到计数器0的端口MOVAL,AHOUTDX,AL;送计数初值的高字节到计数器0的端口MOVAL,76H;设置8253计数器1为工作方式3,十进制计数MOVDX,0EC03HOUTDX,AL;送方式控制字到控制口MOVDX,0EC01HMOVAX,1000;计数初值为1000OUTDX,AL;送计数初值的低字节到计数器1的端口MOVAL,AHOUTDX,AL;送计数初值的高字节到计数器1的端口MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART七.实验总结经过第一次实验的教训后,我在实验前做了充足的预习工作,已经将程序写好,只需要在实验室连接外部电路,调试程序即可,因此实验进行得很顺利。这次实验是针对可编程定时时钟/计数器〔8253,8253有六种工作方式,我在实验中主要用到了8253的工作方式0和工作方式3,此外调用了02号功能单字符输出显示,以及09号功能输出显示字符串,我在做宏汇编研究性学习的时候就已经研究过这两个功能的使用方法,所以这次使用得心应手,要注意的是:执行02号功能必须进行ASSIC码转换,执行09号功能必须在字符串结尾写一个符号'$',表示字符串结束。此外,在实验老师的指导下,我进一步熟悉了调试的方法,之前只会F8单步调试,但是在遇到很长的循环程序时,就不能单步调试的了,通过这次实验我学会了如何使用F4让程序进行到任意指定位置,这样就可以跳过循环继续执行代码。实验三、可编程中断控制器一.实验目的通过实验了解中断是计算机系统最重要的工作方式之一,理解中断能实现系统协调工作,了解中断在操作系统,工业控制中的应用。通过实验可学会可编程中断控制器8259的结构、中断申请、中断响应、中断处理、中断返回等中断原理,掌握中断系统的编程与应用。〔1掌握PC机8259A可编程中断控制器中断基本原理。〔2掌握中断源、中断处理过程、中断向量表的建立、DOS的使用。〔3熟悉主程序、中断服务程序编写,了解中断相应过程。二.实验容〔1学习PC机系统中断原理〔2利用手动产单脉冲作为中断请求信号,要求每按一次开关产生一次中断在屏幕上显示一次"TPCpcicardInterrupt"中断10次后程序退出。三.实验原理PC机用户可使用的硬件中断只有可屏蔽中断由8259中断控制器管理中断控制器用于接收外部的中断请求信号经过优先级判别等处理后向CPU发出可屏蔽中断请求IBMPC、PC/XT机有一片8259中断控制器对外可以提供8个中断源中断源中断类型号中断功能IRQ008H时钟IRQ109H键盘IRQ20AH保留IRQ3OBH串行口2IRQ40CH串行口1IRQ50DH硬盘IRQ60EH软盘IRQ70FH并行打印机8个中断源的中断请求信号线IRQ0IRQ7在主机的62线ISA总线插座中可以引出系统已设定中断请求信号为边沿触发普通结束方式对于PC/AT及286以上微机又扩展了一片8259中断控制IRQ2用于两片8259之间级连对外可以提供16个中断源中断源中断类型号中断功能IRQ8070H实时时钟IRQ9071H用户中断IRQ10072H保留IRQ11O73H保留IRQ12074H保留IRQ13075H协处理器IRQ14076H硬盘IRQ15077H保留PCI总线中的中断线只有四根INTA#INTB#INTC#INTD#它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请四.编程提示1.由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。2.由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。〔也可使用自动获取资源分配的程序取得中断号3.在纯DOS环境下,有些微机的BIOS设置中有将资源保留给ISA总线使用的选项,致使在纯DOS环境〔WINDOWS环境下不会出现此问题下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为使用即插即用。4.在纯DOS环境下,有些微机的BIOS设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,BIOS将不会给TPC卡分配系统资源,致使在纯DOS环境〔WINDOWS环境下不会出现此问题下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。5.由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断inax,dxorax,0900houtdx,ax其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。〔也可使用自动获取资源分配的程序取得,+68H的偏移是关于中断使能的寄存器地址,设置含义如下:设置INTCSR<68H>寄存器中断模式设置BITS功能81:能够产生PCI中断0:禁止产生PCI中断111:能够LOCAL端输入的中断送到PCI端0:禁止LOCAL端输入的中断送到PCI端其它位为零即可更多容参看9054芯片数据手册程序退出前还要关闭9054的中断,代码如下:movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,关闭中断inax,dxandax,0f7ffhoutdx,ax6.PC机中断控制器8259的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零〔允许中断,中断服务结束返回前要使用中断结束命令:MOVAL,20HOUT20H,AL中断结束返回DOS时应将IMR对应位置1,以关闭中断。五.实验电路实验电路如图,直接用手动产单脉冲作为中断请求信号,只需连接一根导线。图3.1中断实验电路图六.流程图图3.2中断实验流程图五.源程序;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;*********************;;*中断*;;*********************;datasegmentint_vectEQU073H;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77hirq_mask_2_7equ11111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_9_15equ11110111b;中断0-7时全一,中断8-15时从低至高相应位为零ioport_centequ0E800h;tpc卡中9054芯片的io地址csregdw?ipregdw?;旧中断向量保存空间irq_timesdw00h;中断计数msg1db0dh,0ah,'TPCpcicardInterrupt',0dh,0ah,'$'msg2db0dh,0ah,'Pressanykeytoexit!',0dh,0ah,'$'msg3db0dh,0ah,'PressDMCtointerrupt10timesandexit!',0dh,0ah,'$'dataendsstacksegmentstack db100dup<?>stackendscodesegment assumecs:code,ds:data,ss:stack,es:datastart:;EnableLocalInterruptInput.386 cli movax,data movds,ax moves,ax movax,stack movss,ax movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断 inax,dx orax,0900h outdx,ax moval,int_vect;调用35号功能,保存原中断向量int_vect movah,35h int21h movax,es movcsreg,ax movipreg,bx;ipregcsreg是旧中断向量保存空间 movax,segint_proc;调用25号功能设置新中断向量 movds,ax;中断服务程序的的段基址送DX movdx,offsetint_proc;中断服务程序的的偏移地址送DX moval,int_vect movah,25h int21h inal,21h;设置中断掩码 andal,irq_mask_2_7;主片端口地址21H,D2允许中断11111011b out21h,al inal,0a1h andal,irq_mask_9_15;从片端口地址A1H,D3允许中断11110111b out0a1h,al movax,data movds,ax movdx,offsetmsg2 movah,09h;09号功能显示'Pressanykeytoexit!' int21h movdx,offsetmsg3;显示'PressDMCtointerrupt10timesandexit!' movah,09h int21h movirq_times,0ah sti;允许可屏蔽中断请求进入loop1: cmpirq_times,0;等待中断并判断中断10次后退出 jzexit movah,1;BIOS功能调用int16hah=01H检测字符是否准备好 int16h;ZF=0,表示无字符可接收,ZF=1,表示有字符可接收 jnzexit;按任意键退出IF=1 jmploop1exit:cli movbl,irq_mask_2_7;恢复中断掩码 notbl inal,21h oral,bl out21h,al movbl,irq_mask_9_15 notbl inal,0a1h oral,bl out0a1h,al movdx,ipreg;恢复原中断向量int_vect movax,csreg movds,ax movah,25h moval,int_vect int21h movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,关闭中断 inax,dx andax,0f7ffh outdx,ax movax,4c00h;返回操作系统 int21hint_procprocfar pushax pushdx pushds decirq_times movax,data;Interrupttodo movds,ax movdx,offsetmsg1 movah,09h int21h moval,20h;SendEOI out0a0h,al out20h,al popds popdx popax sti;开中断 iretint_procendpcodeends endstart六.实验总结这次的实验感觉比较难,首先是中断程序复杂,其次,要在纯DOS环境下运行。这次实验重点是要理解中断的概念和熟悉中断中8352主片和从片的如何级联工作,具体包括:知道如何查找中断源、确定中断类型,设置TPC卡中断使能、调用35号功能保护原中断向量、调用25号功能设置新的中断向量,设置中断屏蔽字等诸多容。虽然老师已经给了我们程序,但是要在短时间彻底地读懂全部程序,并透彻的理解每一句代码的意义还是比较困难的,尤其是使用微机中断前使能9054的中断功能这一部分的程序令人费解,特地请教了老师帮我解惑。通过此次试验。我对整个中断服务流程的理解更加清晰,对8352主片和从片的级联工作用以拓展中断源的工作方式有了进一步的认识。实验四模/数转换器A/DC0809实验目的通过实验了解计算机能直接处理的通常是数字信号,学会利用A/D器件把模拟信号转换成数字信号,学会A/D芯片如何与计算机连接,掌握有哪些主要参数影响采集的速度和精度,掌握软件编程实现模拟信号采集,思考如何解决实际多通道数据采集处理问题,思考数据采集后如何处理等问题,了解模/数转换的基本原理,掌握ADC0809的使用方法。掌握单通道模拟信号采集到数据处理的方法。掌握采集电路和计算机连接的硬件电路。熟悉多通道模拟信号采集到数据处理的方法。实验容实验电路原理图如图4.1。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0<IN0>,编程采集IN0输入的电压,在屏幕上显示出转换后的数据〔用16进制数三.实验电路图4.1模数转换电路四.参考流程图图4.2A/D转换流程图五,实验提示1、ADC0809的IN0口地址为298H,IN1口地址为299H。2、IN0单极性输入电压与转换后数字的关系为:其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。3、一次A/D转换的程序可以为MOVDX,口地址;启动转换OUTDX,AL;延时INAL,DX;读取转换结果放在AL中六.源程序CODESEGMENTASSUMECS:CODESTART:MOVAL,0MOVDX,0EC18H;IN0口动态地址OUTDX,AL;启动MOVDX,0FFFHMOVCX,0DELATE:LOOPDELATEDECDXJNZDELATE;延时WP:MOVDX,0EC18HINAL,DX;读IN0口MOVDL,ALMOVCL,4SHRDL,CL;右移4位CMPDL,9JGBIGADDDL,30H;ASCII显示0~9,并显示MOVAH,06HINT21HJMPNEXTBIG:ADDDL,37H;ASCII码A~F,并显示MOVAH,06HINT21HJMPNEXTNEXT:MOVDX,0EC18H;读IN0口INAL,DXMOVDL,ALANDDL,00001111B;屏蔽高4位CMPDL,9JGBIGSADDDL,30H;ASCII显示0~9,并显示MOVAH,06HINT21HJMPJUDGEBIGS:ADDDL,37H;ASCII码A~F,并显示MOVAH,06HINT21HJMPJUDGEJUDGE:MOVDL,0DH;加回车符,只显示一个两位数字INT21HMOVDL,0FFHMOVAH,06HINT21HJZSTART;有键按下返回DOSMOVAH,4CHINT21HCODEENDSENDSTART七.实验总结这次试验之前我也同样进行了预习,了解了模/数转换的基本原理,掌握ADC0809的使用方法。在将IN0口的输入电压显示在屏幕上时,通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0,调节电位器的阻值,屏幕上显示的数字随着电阻值的变化而变化,不需要按enter键换行,通过和老师的交流,才明白过来,这是因为程序的JUDGE段加了回车符,只显示一个两位数字,所以不需要按enter键进行换行,直接改变电阻值,即可显示出相应的输入电压值。通过这几次的实验,我发现微机实验其实很简单,在扎实掌握基本知识的基础上,灵活的做一些变动,就可以实现,这让我体会到面对难题,如果你不愿尝试就一定不会有突破,只要愿意思考,并且举一反三,不断尝试,才会有成功的机遇。五、PC机串行通讯实验一、实验目的1、进一步了解串行通信的基本原理。2、掌握串行接口芯片8250的工作原理和编程方法。3、熟悉PC机串行口的基本连接方法二、实验容1、PC机RS-232串口自发自收。按照PC机串口自发自收的连接方法连线。编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。2、两台PC机间RS-232串口通信。按照PC机RS-232串口直接互连的方法连接两台PC机。编写PC机直接互连串行通信程序;要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。当键入感叹号"!",结束收发过程。图5-1DB-9连接器图5-2双机近距离通信连接图三、实验原理〔1本实验为异步通信:以字符为单位进行传送,每传送一个字符,以起始位作为开始标志,以停止位作为结束标志。异步串行通信的工作过程是:传送开始后,接收设备不断地检测传输线是否有起始位到来,当接收到一系列的"1"〔空闲或停止位之后,检测到第一个"0",说明起始位出现,就开始接收所规定的数据位、奇偶校验位及停止位。经过接收器处理,将停止位去掉,把数据位拼装成一字节数据,并且经奇偶校验无错误,才算是正确地接收到了一个字符。当一个字符接收完毕,接收设备又继续测试传输线,监视"0"电平的到来〔下一个字符的开始。〔28250各部分功能说明8250片有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器〔LCR的最高位DLAB来决定。各寄存器的地址和格式如下所示:〔3数据发送和接收:四.源程序1.PC机RS-232串口自发自收。CODESEGMENT ASSUMECS:CODESTART: MOVAL,10000000B ;8250初始化,设DLAB=1 MOVDX,3FBH OUTDX,AL MOVAX,30H ;写入除数低字节 MOVDX,3F8H OUTDX,AL MOVAL,AH ;写入除数高字节 MOVDX,3F9H OUTDX,AL MOVAL,00001010B ;7位数据,1位停止,奇校验 MOVDX,3FBH OUTDX,AL ;写入线路控制寄存器 MOVAL,00010000B ;自检控制 MOVDX,3FCH OUTDX,AL ;写入Modem控制寄存器 MOVAL,0 MOVDX,3F9H OUTDX,AL ;写中断允许寄存器,屏蔽中断WAIT_FOR: MOVDX,3FDH ;读线路状态寄存器 INAL,DX TESTAL,00011110B ;出错否 JNZERROR ;出错,转ERROR TESTAL,00000001B ;接收数据就绪否 JNZRECEIVE ;就绪,转接受 TESTAL,00100000B ;发送寄存器空否,不空,返回等待 JZWAIT_FOR MOVAH,1 INT21H ;读键盘 MOVDX,3F8H ;发送 OUTDX,AL JMPWAIT_FOR ;返回等待RECEIVE:PUSHCXPUSHAXMOVCX,02000HT1:MOVAX,0FFFFHT2:DECAXJNZT2LOOPT1;延时程序 MOVDX,3F8H ;读接收数据 INAL,DX ANDAL,01111111B ;保留7位数据 CMPAL,03H ;是Ctrl+C? JNZCHAR MOVAH,4CH ;返回DOS INT21HCHAR:PUSHAX MOVDL,AL MOVAH,2H ;显示接收字符 INT21H POPAX JMPWAIT_FOR ;返回等待ERROR:MOVDX,3FDH ;出错则清除线路状态寄存器 INAL,DX MOVDL,'?' ;显示'?' MOVAH,02H INT21H JMPWAIT_FORCODEENDS ENDSTART2.两台PC机间RS-232串口通信。〔1发送端:CODESEGMENT ASSUMECS:CODESTART: MOVAL,80H ;8250初始化,设DLAB=1 MOVDX,3FBH OUTDX,AL MOVAX,0030H MOVDX,3F8H OUTDX,AL ;写入除数低字节 MOVAL,AH MOVDX,3F9H OUTDX,AL ;写入除数高字节 MOVAL,0AH ;7位数据,1位停止,奇校验 MOVDX,3FBH OUTDX,AL ;写入线路控制寄存器 MOVAL,03H ;数据终端就绪,请求发送数据 MOVDX,3FCH OUTDX,AL ;写入Modem控制寄存器 MOVAL,0 MOVDX,3F9H OUTDX,AL ;写中断允许寄存器,屏蔽中断WAIT_FOR: MOVDX,3FDH ;读线路状态寄存器 INAL,DX TESTAL,00100000B ;发送寄存器空否,不空,返回等待 JZWAIT_FORSEND: MOVAH,1 INT21H CMPAL,21H JZEXIT MOVDX,3F8H ;读键盘,若是'!',返回DOS,若不是,则发送 OUTDX,AL JMPWAIT_FOR ;返回等待EXIT: MOVAX,4C00H INT21HCODEENDS ENDSTART<2>接收端:CODESEGMENT ASSUMECS:CODESTART: MOVAL,80H ;8250初始化,设DLAB=1 MOVDX,3FBH OUTDX,AL MOVAX,0030H MOVDX,3F8H OUTDX,AL ;写入除数低字节 MOVAL,AH MOVDX,3F9H OUTDX,AL ;写入除数高字节 MOVAL,0AH ;7位数据,1位停止,奇校验 MOVDX,3FBH OUTDX,AL ;写入线路控制寄存器 MOVAL,03H ;数据终端就绪,请求发送数据 MOVDX,3FCH OUTDX,AL ;写入Modem控制寄存器 MOVAL,0 MOVDX,3F9H OUTDX,AL ;写中断允许寄存器,屏蔽中断WAIT_FOR: MOVDX,3FDH ;读线路状态寄存器 INAL,DX TESTAL,00000001B ;接收数据就绪否 JNZRECEIVE ;转接收 JMPWAIT_FOR ;返回等待RECEIVE: MOVDX,3F8H ;读接收数据 INAL,DX ANDAL,01111111B ;保留7位数据 CMPAL,21H ;是'!'? JNZCHAR MOVAX,4C00H ;返回DOS INT21HCHAR: PUSHAX MOVDL,AL MOVAH,2 ;显示接收字符 INT21H POPAX JMPWAIT_FOR ;返回等待CODEENDS ENDSTART实验总结在这次实验中,PC机RS-232串口自发自收实验进行得比较顺利,但是在两台PC机间RS-232串口通信时,遇到了问题:实验题目要求从键盘输入"!"时,结束双机通信,可是我作为发送端可以在输入感叹号时立即结束通信并返回DOS,而对方接收端确认就处于等待接收的状态。一开始,我认为一定是接收端的程序有漏洞,反复检查与调试运行都没有发现问题,然后冷静下来重新审查全部程序,发现竟然是发送端的错误,当判断出此刻输入的是感叹号时,没有将感叹号发送给对方,就立即结束了发送程序,接收方一直接收不到代表终止通信命令的感叹号,所以一直在等待接收。由此我认识到排查错误时一定要全面考虑,错误的发生点不一定是错因的根节点,某一环节出现错误或是有所遗漏,即使不会对当前部分有影响,也会埋下隐患,对其他环节造成不利影响,尤其是通信过程每一环节都要做到面面俱到,万无一失,才能保证提供可靠的通信质量。六、竞赛抢答器一.实验目的通过本实验锻炼接口技术完成一个较大的综合设计,学会综合使用本课程中的接口芯片、中断、定时、DOS功能调用等知识,学会多种接口的配合使用,掌握软件、硬件协同工作,掌握微机原理与接口技术的综合应用。〔1了解微机化竞赛抢答器的基本原理。〔2掌握微机通过8255A控制七段数码管的原理。〔3掌握并行接口8255、中断、定时、D0S功能综合应用。二.实验容下图为竞赛抢答器〔模拟的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置"1"时,相当某组抢答按钮按下。在七段数码管上将其组号〔0~7显示出来,并使喇叭响一下。从键盘上按空格键开始下一轮抢答,按其它键程序退出。图6—1竞赛抢答器电路图设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。根据读取数据可判断其组号。从键盘上按空格键开始下一轮抢答
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物技术药物研发合同
- 私人订制户外探险活动服务协议
- 智能家居系统与节能照明合作协议
- 数据挖掘技术在企业决策支持系统中的应用合作协议
- 精密电子元器件采购合同
- 离婚标准协议书车辆分配
- 装修公司合同保密协议
- 信用社借款展期合同协议书
- 教育培训合作项目实施协议
- 建筑施工临时承包合同
- 新部编版小学六年级下册语文第二单元测试卷及答案
- 2025年广东省深圳法院招聘书记员招聘144人历年高频重点提升(共500题)附带答案详解
- 2025年人教版新教材数学一年级下册教学计划(含进度表)
- GB/T 45107-2024表土剥离及其再利用技术要求
- 2025年春西师版一年级下册数学教学计划
- 企业员工退休管理规章制度(3篇)
- 小学生情绪调适课件
- 2025年华润电力招聘笔试参考题库含答案解析
- 2025蛇年中小学春节寒假安全教育课件模板
- 康复护士讲课课件
- 一年级家长会课件2024-2025学年
评论
0/150
提交评论