微机原理与接口实验报告

上传人:无*** 文档编号:46882420 上传时间:2021-12-16 格式:DOC 页数:29 大小:696KB
收藏 版权申诉 举报 下载
微机原理与接口实验报告_第1页
第1页 / 共29页
微机原理与接口实验报告_第2页
第2页 / 共29页
微机原理与接口实验报告_第3页
第3页 / 共29页
资源描述:

《微机原理与接口实验报告》由会员分享,可在线阅读,更多相关《微机原理与接口实验报告(29页珍藏版)》请在装配图网上搜索。

1、微机接口实验报告(2011-2012年第1学期考核要求)实验一 交通灯控制实验【实验目的】 通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。【实验仪器】 1.PC微机系统 一套 2.TPC-USB通用微机接口实验系统 一套【实验内容】 如下图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0、作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。 图1-1【实验要求】 1.8255控制寄存器端口地址 0EC0BH 8255C口地址 0EC0AH 2.十字路口交通灯的变化规律要求: (1)南北路口的绿

2、灯、东西路口的红灯同时亮3s左右; (2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮; (3)南北路口的红灯、东西路口的绿灯同时亮3s左右; (4)南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次; (5)转(1)重复。 实验流程图如下: 【实验程序和调试】1.源程序;*;C口连接灯:南北红灯东西黄灯10000010B=82H; 南北红灯东西绿灯10000001B=81H; 南北黄灯东西红灯01000100B=44H; 南北绿灯东西红灯00100100B=24H;;*;MY8255_C EQU 0EC0AH ;8255的C口地址MY8255_MODE EQU 0EC0BH ;8255

3、的控制寄存器地址STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENT LA DB ? ;定义数据变量LB DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV DX,MY8255_MODE ;定义8255工作方式 MOV AL,80H ;工作方式0,A口和C口为输出 OUT DX,ALLOOP1: MOV DX,MY8255_C ;写C口发出的数据,南北路口绿灯,东西路口红灯亮 MOV AL,24H ;00100100B,PC

4、5=PC2=1 OUT DX,AL CALL DALLY1 MOV CX,08HL1: MOV DX,MY8255_C ;写C口发出的数据,南北方向黄灯亮,东西方向红灯亮 MOV AL,44H ;01000100B,P6=P2=1 OUT DX,AL CALL DALLY2 MOV DX,MY8255_C ;写C口发出的数据,南北方向黄灯灭,东西方向红灯亮 MOV AL,04H OUT DX,AL CALL DALLY2 LOOP L1 MOV DX,MY8255_C ;写C口发出的数据,南北方向红灯亮,东西方向绿灯亮 MOV AL,081H OUT DX,AL CALL DALLY1 MOV

5、 CX,08HL2: MOV DX,MY8255_C ;写C口发出的数据,南北方向红灯亮,东西方向黄灯亮 MOV AL,082H OUT DX,AL CALL DALLY2 MOV DX,MY8255_C ;写C口发出的数据,南北方向红灯亮,东西方向黄灯灭 MOV AL,080H OUT DX,AL CALL DALLY2 LOOP L2 MOV AH,1 ;判断是否有按键按下,调用功能号1 INT 16H ;ROM BIOS 功能调用 JZ LOOP1 ;无按键则跳回继续循环,有则退出QUIT: MOV AX,4C00H ;结束程序退出 INT 21H ;DOS 系统功能调用DALLY PR

6、OC NEAR ;软件延时子程序 PUSH CX PUSH AX MOV CX,0FFFHD1: MOV AX,0FFFFHD2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RETDALLY ENDPDALLY1 PROC NEAR ;软件延时子程序,东西方向红灯亮,南北方向绿灯亮 PUSH CX PUSH AX MOV CX,1EHD3: CALL DALLY LOOP D3 POP AX POP CX RETDALLY1 ENDPDALLY2 PROC NEAR ;软件延时子程序,黄灯闪烁(即亮与灭)的时间间隔 PUSH CX PUSH AX MOV CX,0

7、2HD4: CALL DALLY LOOP D4 POP AX POP CX RETDALLY2 ENDPCODE ENDS END START2.实验过程和实验结果说明下面用*代替实际文件名(1)按上图连接好电路;(2)在TPC-IDE操作环境下,用文本编辑器编辑实验源程序(*.asm);(3)在IDE操作环境下,对源程序(*.asm)进行编译和连接,生成生成链接文件(*.obj)和可执行文件(*.exe);(4)运行IDE操作环境下的调式命令,调试可执行文件(*.exe);(5)运行IDE操作环境下的执行命令,运行可执行文件(*.exe),结果显示:红灯、绿灯长延时2.625s,黄灯闪烁8

8、次共2.8s。【实验体会总结】 本实验运用了3重循环来延时,DALLY1和DALLY2都调用了DALLY,DALLY是个总的延时,而其他两个分别是相应灯的亮的时间和次数。在实验过程中,由于是第一次接触微机实验,所以遇到了很多问题,比如程序逻辑上无错误但由于实验箱的原因运行不了,但自己还一直在看程序。后来我发现,这种情况可以试运行演示实验来检验箱子的好坏。 经过这次实验,我对并行接口8255有了更深的印象和理解,我觉得我有了很大的提高,至少学会了怎样正确应用实验箱。实验二 可编程定时器计数器(8253)【实验目的】1. 进一步学习掌握汇编程序的设计、掌握TPC-USB通用微机接口实验系统的使用方

9、法。2. 掌握8253的基本工作原理和编程方法,观察不同方式下的输出(波形)。【实验设备】1.PC微机系统 一套2.TPC-USB通用微机接口实验系统一套【实验要求】1实验前要作好充分准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。2熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)使用方法。在程序调试过程中,有意识地了解并掌握TPC-USB通用微机接口实验系统的软硬件环境及使用,掌握程序的调试及运行的方法技巧。【实验内容】1按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时

10、用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。图2-1 实验连接参考电路图之一2. 按图2连接电路,将计数器0、计数器1分别设置为方式3,计数初值均设为1000,用逻辑笔观察OUT1输出电平的变化(OUT1输出频率应为1Hz)。图2-2 实验连接参考电路图之二3. 参考流程图8253控制寄存器地址: 0EC03H;计数器0地址: 0EC00H;计数器1地址: 0EC01H;CLK0连接时钟 1MHz。 图2-3 实验电路之一参考流程图 图2-4 实验电路之二参考流程图【实验程序和调试】1. 源程序;*;8253方式0计数器实验;*;STACK1 SEGMENT PARA

11、 STACK DW 100 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK1START:MOV AL,14H ;设置8253通道0为工作方式0,二进制计数 MOV DX,283H OUT DX,AL MOV AL,0FH ;计数器初值为0FH MOV DX,280H OUT DX,ALIII:IN AL,DX ;读计数初值 CALL DISP ;读显示子程序 PUSH DX MOV AH,06H MOV DL,0FFH INT 21H POP DX JZ III MOV AH,4CH ;退出 INT 21HDISP PROC NEAR

12、 ;显示子程序 PUSH DX AND AL,0FH ;首先取低四位 MOV DL,AL CMP DL,9 ;判断是否9 JLE NUM ;若是则为0-9,ASCII码加30H ADD DL,7 ;否则为A-F,ASCII码加37HNUM:ADD DL,30H MOV AH,02H ;显示 INT 21H MOV DL,0DH ;加回车符 INT 21H MOV DL,0AH ;加换行符 INT 21H POP DX RET ;子程序返回DISP ENDP CODE ENDS END2.实验过程和实验结果说明下面用*代替实际文件名(1)按图2-1连接好电路;(2)在TPC-IDE操作环境下,用

13、文本编辑器编辑实验源程序(*.asm);(3)在IDE操作环境下,对源程序(*.asm)进行编译和连接,生成生成链接文件(*.obj)和可执行文件(*.exe);(4)运行IDE操作环境下的调式命令,调试可执行文件(*.exe);(5)运行IDE操作环境下的执行命令,运行可执行文件(*.exe),结果显示:屏幕开始显示字符为F,当每按压单拍脉冲按键一次,屏幕显示字符就减一,输出OUT0为低,直至减到1,输出OUT0变高,并在后续单拍脉冲输入时,OUT0又变低;如此循环。3.源程序;*;8253方式0计数器实验;*;STACK1 SEGMENT PARA STACK DW 100 DUP(?)S

14、TACK1 ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK1START: MOV DX, 283H ;向8253写控制字 MOV AL, 36H ;使0通道为工作方式3 OUT DX, AL MOV AX, 1000 ;写入循环计数初值1000 MOV DX, 280H OUT DX, AL ;先写入低字节 MOV AL, AH OUT DX, AL ;后写入高字节 MOV DX, 283H ;8253初始化 MOV AL, 76H OUT DX, AL ;通道1工作方式2 MOV AX, 1000 ;通道1初值1000 MOV DX, 281H OUT DX

15、, AL ;先写低字节 MOV AL, AH OUT DX, AL ;后写高字节 MOV AH, 4CH ;程序退出 INT 21HCODE ENDS END START END 4.实验过程和实验结果说明下面用*代替实际文件名(1)按图2连接实验电路;(2)在TPC-IDE操作环境下,用文本编辑器编辑实验源程序(*.asm);(3)在IDE操作环境下,对源程序(*.asm)进行编译和连接,生成生成链接文件(*.obj)和可执行文件(*.exe);(4)运行IDE操作环境下的调式命令,调试可执行文件(*.exe);(5)运行IDE操作环境下的执行命令,运行可执行文件(*.exe),结果显示:输

16、出OUT0交替为高和为低,频率约为1Hz。实验结果符合实验程序设计要求。 【实验体会总结】 第一个实验是利用8253的计数器功能,给它赋初值后计数达到额定值后进行电平翻转,这也可以扩展为人数达到上限后的报警。第二个实验是利用8253的定时功能进行1000*1000的分频,将高频率的信号分解为低频信号后输出,这利用其它芯片如8254等等也能实现。 这次实验也是经常遇到实验箱开始时可以运行演示实验,一段时间后就不能了,像老师咨询后我发现这是箱子自身的问题,它不稳定,工作一段时间后就会出现问题,这时我们就要重启电脑来使它能重新工作。实验三 中断实验(纯DOS) 【实验目的】1. 掌握PC机中断处理系

17、统的基本原理;2. 学会编写中断服务程序。 【实验设备】1.PC微机系统 一套2.TPC-USB通用微机接口实验系统一套 【实验要求】 1.实验原理 PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源: 中断源 中断类型号 中断功能 IRQ0 08H 时钟 IRQ1 09H 键盘 IRQ2 0AH 保留 IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘 IRQ6 0EH 软盘 IRQ7 0

18、FH 并行打印机 8个中断源的中断请求信号线IRQ0IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源: 中断源 中断类型号 中断功能 IRQ8 070H 实时时钟 IRQ9 071H 用户中断 IRQ10 072H 保留 IRQ11 O73H 保留 IRQ12 074H 保留 IRQ13 075H 协处理器 IRQ14 076H 硬盘 IRQ15 077H 保留 PCI总线中的中断线只有四根,INTA#、INTB#、INTC

19、#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。 图3-1【实验内容】实验电路如图3-1所示, 直接用手动产单脉冲作为中断请求信号只需连接一根导线要求每按一次开关产生一次中断在屏幕上显示一次 TPC pci card Interrupt 中断10次后程序退出。【编程提示】1.由于9054的驱动程序影响直写9054芯片的控制寄存器, 中断实验需要在纯DOS的环境中才能正常运行。2.由于TPC卡使用PCI总线, 所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置。获取方法是在纯DOS环境中,运行一个读PCI配置空间的程序“PORTR.

20、EXE”,该程序能够获得本机TPC板卡或所有PCI板卡的硬件资源,如IO、内存、中断占用情况。然后根据获得的中断请求号码来修改程序中的中断向量、中断掩码的参数,并重新编译链接后即可。 3.由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能代码如下: mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,使能中断 in ax,dx or ax,0900h out dx,ax4. 其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址 ,每台微机可能都不同, 编程时 需要了解当前的微机使用哪段并进行设置,获取方法请参看

21、汇编程序使用方法的介绍。+68H的偏移是关于中断使能的寄存器地址 设置含义如下: 设置INTCSR(68H)寄存器 中断模式设置 BITS 功能 8 1: 能够产生PCI中断 0 :禁止产生PCI中断 11 1: 能够LOCAL端输入的中断送到PCI端0: 禁止LOCAL端输入的中断送到PCI端其它位为零即可 更多内容参看9054芯片数据手册 5.程序退出前还要关闭9054的中断,代码如下: mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断in ax,dx and ax,0f7ffh out dx,ax 6.PC机中断控制器8259 的地址为20H

22、 21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断)中断服务结束返回前要使用中断结束命令: MOV AL 20H OUT 20H AL 中断结束返回DOS时应将IMR对应位置1, 以关闭中断。 【参考流程图】【实验程序和调试】data segmentint_vect EQU 73H ;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h.中断类型号:73是在本微机设备管理器中查出的.irq_mask_2_7 equ 011111011b ;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_9_1

23、5 equ 011110111b ;中断0-7时全一,中断8-15时从低至高相应位为零ioport_cent equ 0e800H ;tpc 卡中9054芯片的io地址,地址0c000H是在本微机设备管理器中查出的.csreg dw ?ipreg dw ? ;旧中断向量保存空间irq_times dw 00h ;中断计数msg1 db 0dh,0ah,TPC pci card Interrupt,0dh,0ah,$msg2 db 0dh,0ah,Press any key to exit!,0dh,0ah,$msg3 db 0dh,0ah,Press DMC to interrupt 10 t

24、imes and exit!,0dh,0ah,$data endsstacks segment stackdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axmov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmo

25、v al,int_vect ;保存原中断向量mov ah,35hint 21hmov ax,esmov csreg,axmov ipreg,bxmov ax,cs ;设置新中断向量mov ds,axmov dx,offset int_procmov al,int_vectmov ah,25hint 21hin al, 21h ;设置中断掩码and al, irq_mask_2_7out 21h, alin al, 0a1hand al, irq_mask_9_15out 0a1h, almov ax,datamov ds,axmov dx,offset msg2mov ah,09hint 21

26、hmov dx,offset msg3mov ah,09hint 21hmov irq_times,0ahstiloop1:cmp irq_times,0 ;等待中断并判断中断10次后退出jz exithlt mov ah, 01h int 16h jnz exit;jz loop1 ;按任意键退出 jmp loop1exit: climov bl, irq_mask_2_7 ;恢复中断掩码not blin al, 21hor al, blout 21h, almov bl, irq_mask_9_15not blin al, 0a1hor al, blout 0a1h, almov dx,i

27、preg ;恢复原中断向量mov ax,csregmov ds,axmov ah,25hmov al,int_vectint 21hmov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断in ax,dxand ax,0f7ffhout dx,axmov ah,4chint 21hint_proc proc farclipush axpush dxpush dsdec irq_timesmov ax,data ;Interrupt to domov ds,axmov dx,offset msg1mov ah,09hint 21hmov al,20h ;Se

28、nd EOIout 0a0h,alout 20h,alpop dspop dxpop axstiiretint_proc endpcode endsIRQ2IRQ3end start【实验体会总结】1. 中断响应过程所用芯片排列:90548259(从片)8259(主片)。中断的过程为:中断申请,经9054从IRQ3传给8259从片,8259从片经IRQ2给主片,主片像CPU申请,CPU判断优先级后进行中断响应,中断处理完后再经响应管脚返回。这就是中断的一个过程,实验中我们的中断是用电平触发来产生。2. BIOS的16H功能键能处理按任意键返回,而DOS的06H 功能在这个实验过程中不能完成该功

29、能。实验四 模/数转换器【实验目的】1. 了解模/数转换的基本原理,掌握ADC0809的使用方法。【实验内容】实验电路原理图如图4-1所示。通过实验台左下角电位器RW1输出05直流电压送入ADC0809通道0(IN0),编程采集IN0输入的电压,在屏幕上显示转换后的数据(用16进制数)。图4-1【实验提示】1ADC0809的IN0口地址为298H,IN1口地址为299H。 2. IN0单极性输入电压与转换后数字的关系为: 其中Ui为输入电压,UREF为参考电压,这里的参考电压为机的电源。 3.一次A/D转换的程序可以为 MOV DX,口地址 OUT DX,AL ;启动转换 ;延时 IN AL,

30、DX ;读取转换结果放在AL中【参考流程图】图4-2【实验程序和调试】ioport equ 0ec00H-280Hio0809a equ ioport+298h code segment assume cs:code start: mov dx,io0809a ;启动A/D转换器 out dx,al mov cx,0ffh ;延时 delay:loop delay in al,dx ;从A/D转换器输入数据 mov bl,al ;将AL保存到BL mov cl,4 shr al,cl ;将AL右移四位 call disp ;调显示子程序显示其高四位 mov al,bl and al,0fh c

31、all disp ;调显示子程序显示其低四位 mov ah,02h mov DL,0Dh;加回车符int 21hmov dl,0ah;加换行符int 21H push dx mov ah,06h ;判断是否有键按下 mov dl,0ffh int 21h pop dx je start ;若没有键按下转START mov ah,4ch ;有则退出 int 21h disp proc near ;显示子程序 mov dl,al cmp dl,9 ;比较DL是否9 jle ddd ;若不大于则为0-9,加30h为其ASCII码 add dl,7 ;否则为A-F,再加7 ddd: add dl,30

32、h ;显示 mov ah,02H int 21h RET disp endp code ends end start【实验体会总结】本次实验的思想是将5V电压均分为256份后,在将输入电压按该比例转换为响应的数字量显示。转换后将该8位二进制数先显示高四位,再显示低四位。我们的程序用了一层循环1us*0ffh=255us来延时显示,但从结果可以看出,这样的延时时间还是不够,所以我们在数据转换后与显示程序间又加了循环来增加延时时间,这样屏幕显示的数据就会更稳定。我们也发现可以通过更改回车符(0dh)和换行符(oah)以及20h来更改屏幕的显示方式。实验五 PC机串行通讯实验【实验目的】1进一步了解

33、串行通信的基本原理。2掌握串行接口芯片8250的工作原理和编程方法。3熟悉PC机串行口的基本连接方法。【实验内容】1PC机RS232串口自发自收。按照PC机串口自发自收的连接方法连线。编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由次串口将字符接收回来并在屏幕上显示,实现自发自收。要求:键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。2两台PC机间RS232串口通信按照PC机RS232串口直接互连的方法连接两台PC机。编写PC机直接互联串行通信程序。要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接

34、收字符并显示再屏幕上。当键入感叹号“!”,结束收发过程。要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。当键入感叹号“!”,结束收发过程。【实验电路】自发自收只需要将本机的2和3号端口短路即可。以下是双机近距离通信连接图:【程序设计及实验调试】首先是8250芯片的初始化,初始化流图如下:置线路状态寄存器DLAB=1写除数寄存器写线路控制寄存器写Modem控制寄存器写中断允许寄存器按照书上的通信程序,采用查询方式编自发自收程序。初始化之后,先读线路状态寄存器,再检测发送寄存器是否为空,出错则清除线路状态寄存器,接收就绪否,接收数据等。若自发自收未做好准备,则显示

35、?。除数=1.8432M/(2400*16)=48=30H实验1 自发自收: CODE SEGMENTASSUME CS:CODESTART: MOV AL,10000000B ;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL MOV AX,30H ;波特率为2400,基准时钟频率为1.8432MHz,除数为30H MOV DX,3F8H OUT DX,AL ;写入除数低字节 MOV AL,AH MOV DX,3F9H OUT DX,AL ;写入除数高字节 MOV AL,0AH ;7位数据,1位停止,奇校验 MOV DX,3FBH OUT DX,AL ;写入线路控制

36、寄存器 MOV AL,00001111B MOV DX,3FCH OUT DX,AL ;写入Modem控制寄存器 MOV AL,0 MOV DX,3F9H OUT DX,AL ;写入中断允许寄存器,屏蔽中断WAIT_FOR: MOV DX,3FDH ;读线路状态寄存器,屏蔽中断 IN AL,DX TEST AL,00011110B ;出错否 JNZ ERROR TEST AL,00000001B ;接收数据就绪否 JNZ RECEIVE ;转接收 TEST AL,01000000B ;发送寄存器空否,不空,返回等待 JZ WAIT_FOR MOV AH,1 INT 21H ;读键盘 MOV D

37、X,3F8H ;发送 OUT DX,AL JMP WAIT_FORRECEIVE: MOV DX,3F8H ;读接收数据 IN AL,DX AND AL,01111111B ;保留7位数据 CMP AL,21H ;是”!”? JNZ CHAR MOV AH,4CH ;返回DOS INT 21HCHAR: PUSH AX MOV DL,AL MOV AH,02H ;显示接收字符 INT 21H POP AX JMP WAIT_FORERROR: MOV DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX MOV DL,? ;显示? MOV AH,02H INT 21H JMP WAIT

38、_FORCODE ENDSEND START实验中遇到问题及分析:在软件编程的过程中,因为是参考书上的程序,所以没有报错。在运行结果时,一开始,我总没有得到自发自收的结果,我换了几根短路线和插头,还是没有结果出现,后来我换了一台电脑,终于得到了理想的结果。实验2 互发互收:互发互收程序由收程序和发程序组成,初始化后,发程序先读线路状态寄存器,再检测发送寄存器空否,是否出错,读键盘等操作实现发送功能。接程序则先初始化后再读线路状态寄存器,再检查是否做好准备及检错。若互发互收未做好准备,则显示?。参考书上的自发自收程序改编。 除数=1.8432M/(2400*16)=48=30H发送端程序:COD

39、E SEGMENT ;发送端ASSUME CS:CODESTART: MOV AL,10000000B ;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL MOV AX,30H ;波特率为2400,基准时钟频率为1.8432MHz,除数为30H MOV DX,3F8H OUT DX,AL ;写入除数低字节 MOV AL,AH MOV DX,3F9H OUT DX,AL ;写入除数高字节 MOV AL,0AH ;7位数据,1位停止,奇校验 MOV DX,3FBH OUT DX,AL ;写入线路控制寄存器 MOV AL,00001111B MOV DX,3FCH OUT

40、DX,AL ;写入Modem控制寄存器 MOV AL,0 MOV DX,3F9H OUT DX,AL ;写入中断允许寄存器,屏蔽中断WAIT_FOR: MOV DX,3FDH ;读线路状态寄存器,屏蔽中断 IN AL,DX TEST AL,00011110B ;出错否 JNZ ERROR TEST AL,01000000B ;发送寄存器空否,不空,返回等待 JZ WAIT_FOR MOV AH,1 INT 21H ;读键盘 MOV DX,3F8H ;发送 OUT DX,AL CMP AL,21H ;是”!”否 JZ EXIT JMP WAIT_FOR ;返回等待ERROR: MOV DX,3F

41、DH ;出错则清除线路状态寄存器 IN AL,DX MOV DL,? ;显示? MOV AH,02H INT 21H JMP WAIT_FOREXIT: MOV AH,4CH INT 21HCODE ENDSEND START接收端程序:CODE SEGMENT ;接收端ASSUME CS:CODESTART: MOV AL,10000000B ;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL MOV AX,30H ;波特率为2400,基准时钟频率为1.8432MHz,除数为30H MOV DX,3F8H OUT DX,AL ;写入除数低字节 MOV AL,AH M

42、OV DX,3F9H OUT DX,AL ;写入除数高字节 MOV AL,0AH ;7位数据,1位停止,奇校验 MOV DX,3FBH OUT DX,AL ;写入线路控制寄存器 MOV AL,00001111B MOV DX,3FCH OUT DX,AL ;写入Modem控制寄存器 MOV AL,0 MOV DX,3F9H OUT DX,AL ;写入中断允许寄存器,屏蔽中断WAIT_FOR: MOV DX,3FDH ;读线路状态寄存器 IN AL,DX TEST AL,00011110B ;出错否 JNZ ERROR TEST AL,00000001B ;接收数据就绪否 JNZ RECEIVE

43、;转接收 JMP WAIT_FOR ;返回等待RECEIVE: MOV DX,3F8H ;读接收数据 IN AL,DX AND AL,01111111B ;保留7位数据 CMP AL,21H ;是!? JNZ CHAR MOV AH,4CH ;返回DOS INT 21HCHAR: PUSH AX MOV DL,AL MOV AH,02H ;显示接收字符 INT 21H POP AX JMP WAIT_FORERROR: MOV DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX MOV DL,? ;显示? MOV AH,02H INT 21H JMP WAIT_FORCODE END

44、SEND START实验中遇到问题及分析:一开始,我并没有实现互发互收的效果,在发的一方有数据显示,在收的一方却没有数据显示。我想了一下原因,我首先的检查一下程序的问题,我发现自己在编程序的时候忘记写入二号功能显示。写完程序后,我再运行了一遍,结果还是没有受到发送的字母,这是为什么呢?我的接受的屏幕上显示的时一大片的不稳定的字符。我打算等运行程序稳定下来再接收数据,过了些时间,我再次接收字母,这次终于成功了。【实验结果及分析】PC机RS-232串口自发自收时,当键盘按下一个键屏幕上马上显示接收到的字符。此时显示的是发送的前一个字符。相当于按下一个字母几乎同时显示两个相同的字母。两台PC机间RS

45、-232串口互相通信时,在发送端按下一个键,接收端的屏幕上立即显示接收的字符。自发自收和互发互收都是通过串行通信芯片8250实现的。【实验总结】本次实验考察了PC机RS-232串口的自发自收和两台PC机间RS-232串口的互相通信,没有用到实验箱。整个编程过程通过思考感觉很有收获,而最后显示结果也较为顺利。老师在我们实验时提出了一个问题,如果计算机不显示刚才输入数据,需要键入一个字符才能显示上一个字符该怎么办?我仔细想了一下程序的执行过程,然后将TEST AL,00100000改为TEST AL,01000000即将检查数据发送寄存器改为检查数据移位发送寄存器,最后收到了较为满意的结果。在双机

46、通信中,通过对8250的编程实现两台计算机的相互传送数据,我在编程过程中,只是在自发自收基础上做一定修改,具体来说,对两台参与通信的计算机分别编程,一台用来发送数据,另一台用来接收数据。 通过微机实验,我对课堂的一些知识更加深入理解,我也对一些基本控制和基本通信方式有了一定的了解。我认为微机实验重在实践,同时也重在创新,我觉得这个课堂可以增加一些拓展,如让学生做一些他们自己感兴趣的实验,提出他们自己的方法或者是见解。实验六 竞赛抢答器(8255)【实验目的】、了解微机化竞赛抢答器的基本原理。、进一步学习使用并行接口。【实验内容】图5-4为竞赛抢答器(模拟)的原理图,逻辑开关K0K7代表竞赛抢答

47、按钮07号,当某个逻辑电平开关置“”时,相当某组抢答按钮按下。在七段数码管上将其组号(07)显示出来,并使喇叭响一下。从键盘上按空格键开始下一轮抢答,按其它键程序退出。【编程分析】1、设置8255为口输入、口输出,读取口数据,若为0表示无人抢答,若不为0则有人抢答。根据读取数据可判断其组号。从键盘上按空格键开始下一轮抢答,按其它键程序退出。2、计算组号的算法: 组号=C口数据连续除以2得到商为零的除法运算次数 MOV AH,0 MOV DL,2 MOV CL,0 JISUAN: DIV DL INC CL CMP AL,0 JNZ JISUAN DEC CL MOV AL,CL 3、响铃的DOS功能调用: MOV DL, 7 ; 响铃ASCII码为07 MOV AH ,2 INT 21H4、 程序设计流程图 【汇编语言程序】DATA SEGMENT LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDATA ENDSSTACK1 SEGMENT PARA STACK DB 20 DUP(0)STACK1 ENDSCODE SEGMENTSTART:ASSUME CS:CODE,DS:DATA,SS:STACK1 MOV AX,DATA MOV DS,AX MOV BX,OFFSET LIST MOV DX,0ec0bH;8255初始化 MOV AL,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!