北京交通大学 ―― 微机实验_第1页
北京交通大学 ―― 微机实验_第2页
北京交通大学 ―― 微机实验_第3页
北京交通大学 ―― 微机实验_第4页
北京交通大学 ―― 微机实验_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机接口实验实验报告姓名: 学号: 班级: 目录实验一 交通灯控制实验 -1实验二 可编程定时器/计数器(8253)-5实验三 中断 -9实验四 模/数转换器 -15 实验五 PC机串行通讯实验 -18实验六 竞赛抢答器 -24实验一 交通灯控制实验一、 实验目的通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。二、实验内容如图1,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。图1十字路口交通灯的变化规律要求:(1) 南北路口的绿灯、东西路口的红灯同

2、时亮3秒左右。(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。(3) 南北路口的红灯、东西路口的绿灯同时亮3秒左右。(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。(5) 转(1)重复。8255动态分配地址: 控制寄存器: 28BH 0EC0BHA口地址: 288H 0EC08HC口地址: 28AH 0EC0AH三、参考流程图2四、源程序及注释源程序:CODE SEGMENTASSUME CS:CODE START: MOV DX,0EC0BH MOV AL,B ;C口方式0输出,A口输入 OUT DX,ALFIRST: MOV DX,0EC0AH MOV AL,B

3、OUT DX,AL ;南北绿,东西红写入C口 MOV CX,0 ;送入初值65536 MOV AX,4000H ;软件长延时,由经验值确定DELAY1: DEC AX JNZ DELAY1 LOOP DELAY1 MOV BL,4 ;控制黄灯亮的次数SECOND:MOV DX,0EC0AH MOV AL,B OUT DX,AL ;南北黄,东西红 MOV CX,3000H MOV AX,0100H LI1: DEC AX JNZ LI1 LOOP LI1 MOV DX,0EC0AH ;软件短延时 MOV AL,B ;南北黄灭 OUT DX,AL MOV CX,3000H MOV AX,0100H

4、WEN1: DEC AX JNZ WEN1 ;软件短延时 LOOP WEN1 DEC BL JNZ SECOND ;黄灯闪烁4次THIRD: MOV DX,0EC0AH ;写入C口 MOV AL,B OUT DX,AL ;南北红,东西绿 MOV CX,0 MOV AX,4000HDELAY2: DEC AX ;软件长延时 JNZ DELAY2 LOOP DELAY2 MOV BL,4 ;控制黄灯亮的次数FORTH: MOV DX,0EC0AH ;写入C口 MOV AL,B OUT DX,AL ;南北红,东西黄 MOV CX,3000H MOV AX,0100HLI2: DEC AX JNZ L

5、I2 ;软件短延时 LOOP LI2 MOV DX,0EC0AH MOV AL,B OUT DX,AL ;东西黄灭 MOV CX,3000H MOV AX,0100HWEN2: DEC AX JNZ WEN2 LOOP WEN2 DEC BL JNZ FORTH ;黄灯闪烁4次 MOV DL,0FFH MOV AH,06H INT 21H ;执行键盘输入操作 JZ FIRST MOV AH,4CH INT 21H ;返回操作系统CODE ENDSEND START五、总结 在本次实验中,我主要学会了如何控制延时时间,加长延时时间可以是二极管的闪烁是肉眼可见的。还有就是尽管程序中有键盘输入后可以

6、退出程序的语句,但是必须在程序恰好执行到这个语句时才能有效。总体上这个程序还是比较简单的,只要按照流程就可以写出程序。实验二 可编程定时器/计数器(8253)一、实验目的掌握8253的基本工作原理和编程方法。二、实验内容1 按图3虚线连接电路,将计数器0设置为方式0,计数器初值为N(N0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。图32 按图4连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。 图4二、 参考流程图 图5 图6四、源程序及

7、注释源程序1:CODE SEGMENT ASSUME CS:CODE START:MOV DX,0EC03H MOV AL,10H ;设置控制字(计数器0,方式0,写两个字节,二进制计数) OUT DX,AL ;对控制寄存器写入控制字 MOV DX,0EC00H MOV AL,0FH ;将0FH存入AL寄存器 OUT DX,AL ;将此时AL的值送入DX端口LP1: IN AL,DX ;从DX端口读入8位,放在AL寄存器中 CALL DISP ;调用DISP PUSH DX ;将DX内容保存到堆栈段 MOV AH,06H ;将06H存入AH,为了下句调用21中断 MOV DL,0FFH ;将0

8、FFH存入DL INT 21H ;调用21中断 POP DX ;将DX的内容推出栈段 JZ LP1 ;如果DX的内容是0,就跳转到LP1 MOV AH,4CH INT 21H ;调用中断DISP PROC NEAR ;定义一个名为DISP的子程序 PUSH DX ;把DX的内容保存到堆栈段中 AND AL,0FH ;将AL寄存器的内容与0FH进行“与”运算,再把结果存入AL中 MOV DL,AL ;将AL的值送入DL寄存器 CMP DL,9 ;比较DL中的值与9的大小 JLE NUM ;如果DL的值小于或等于9时,则跳转到NUM ADD DL,7 ;将DL的值与7进行相加后,再送入DL中NUM

9、: ADD DL,30H ;将DL的值与30H进行相加后,得到ASCII值 MOV AH,02H ;在屏幕上显示DL INT 21H ;调用DOS21中断 MOV DL,0DH ;回车 INT 21H ;调用中断指令 MOV DL,0AH ;换行 INT 21H ;调用DOS21中断 POP DX ;将DX的内容推出栈段 RET ;子程序在功能完成后返回调用程序继续执行 DISP ENDP CODE ENDS END START 源程序2:CODE SEGMENT ASSUME CS:CODE START:MOV DX,0EC03H MOV AL,36H ;设置控制字(计数器0,方式3,写两个

10、字节,二进制计数) OUT DX,AL MOV AX,1000 ;向计数器0送初值1000 MOV DX,0EC00H ;把计数器0地址放在DX寄存器中 OUT DX,AL ;将AL的低字节送入DX端口 MOV AL,AH OUT DX,AL ;将AX的高字节送入DX端口 MOV DX,0EC03H ;把端口地址放在DX寄存器中 MOV AL,76H ;设置控制字(计数器1,方式3,写两个字节,二进制计数) OUT DX,AL ;将AL的值送入DX端口 MOV AX,1000 ;向计数器1送初值1000 MOV DX,0EC01H ;把端口地址放在DX寄存器中 OUT DX,AL ;将AL的低

11、字节送入DX端口 MOV AL,AH OUT DX,AL ;将AX的高字节送入DX端口 MOV AH,4CH INT 21H ;调用DOS21中断CODE ENDS END START 五、总结 通过本次实验,我更加深入的了解到8253的工作方式。在实验中我用了计数器0,但是也可以改用计数器1,只需要改写控制字。在显示数字时,对于09,要加上30H,而对于大于9的数字,要加上37H。实验三 中断一、实验目的掌握PC机中断处理系统的基本原理。 学会编写中断服务程序。三、 实验内容PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判

12、别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源: 中断源 中断类型号 中断功能 IRQ0 08H 时钟 IRQ1 09H 键盘 IRQ2 0AH 保留 IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘 IRQ6 0EH 软盘 IRQ7 0FH 并行打印机 8个中断源的中断请求信号线IRQ0IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中

13、断源: 中断源 中断类型号 中断功能 IRQ8 070H 实时时钟 IRQ9 071H 用户中断 IRQ10 072H 保留 IRQ11 073H 保留 IRQ12 074H 保留 IRQ13 075H 协处理器 IRQ14 076H 硬盘 IRQ15 077H 保留 PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。图7实验电路如图7,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“TPC pci card Interrupt”,中断10次后程序退

14、出。三、参考流程图 图8 图9四、源程序及注释源程序 :data segment int_vect EQU 073H ;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h irq_mask_2_7 equ b ;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零 irq_mask_9_15 equ b ;中断0-7时全一,中断8-15时从低至高相应位为零 ioport_cent equ 0E800h ;tpc 卡中9054芯片的io地址 csreg dw ? ipreg dw ? ;旧中断向量保存空间 irq_times dw 00h ;中断计数 msg1

15、 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 times and exit!,0dh,0ah,$data endsstack segment stackdb 100 dup (?)stack endscode segmentassume cs:code,ds:data,ss:stack,es:datastart:;Enable Local Interrupt Input.

16、386climov ax,datamov ds,axmov es,axmov ax,stackmov ss,axmov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmov al,int_vect ;保存原中断向量mov ah,35hint 21hmov ax,esmov csreg,axmov ipreg,bxmov ax,seg int_proc ;设置新中断向量mov ds,axmov dx,offset int_procmov al,int_vectmov ah,25hint 21hin a

17、l, 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 21hmov dx,offset msg3mov ah,09hint 21hmov irq_times,0ahstiloop1:cmp irq_times,0 ;等待中断并判断中断10次后退出jz exitmov ah,1int 16hjnz exit ;按任意键退出jmp loop1exit: climov bl,

18、 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,ipreg ;恢复原中断向量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 ax,4c00hint 21hint_proc proc

19、farpush axpush dxpush dsdec irq_timesmov ax,data ;Interrupt to domov ds,axmov dx,offset msg1mov ah,09hint 21hmov al,20h ;Send EOIout 0a0h,alout 20h,alpop dspop dxpop axstiiretint_proc endpcode endsend start五、总结 本次实验的程序比较复杂,所以我用的是老师所准备的程序。但是仍花了很多的时间在程序上。在程序中,有很多的中断掩码、中断向量的设置和保存,感觉有些糊涂。但是在看了几遍之后也是可以理解

20、的。这次实验让我了解到很多程序都是比较复杂的。我还有很多要去学习。实验四 模/数转换器一、 实验目的了解模/数转换的基本原理,掌握ADC0809的使用方法。 二、 实验内容实验电路原理图如图10。通过实验台左下角电位器RW1输出05直流电压送入ADC0809通道0(IN0),编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。 图10三、参考流程图 图11 图12四、源程序及注释源程序:code segment assume cs:code start:mov dx,0ec18h ;启动A/D转换器 out dx,al nopnopnopnopin al,dx ;从A/D转换

21、器输入数据 mov bl,al ;将AL保存到BL mov cl,4 shr al,cl ;将AL右移四位 call disp ;调显示子程序显示其高四位 mov al,bl and al,0fh call disp ;调显示子程序显示其低四位 mov ah,02hmov dl,20hint 21hmov dl,20hint 21hpush 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 cm

22、p dl,9 ;比较DL是否9 jle ddd ;若不大于则为0-9,加30h为其ASCII码 add dl,7;否则为A-F,再加7 ddd: add dl,30h ;显示 mov ah,02 int 21h ret disp endp code ends end start五、总结 本次实验也不是很难,碰到的问题主要是屏幕的显示。当我改动mov ah,02hmov dl,20hint 21hmov dl,20hint 21h这一部分的程序时,屏幕显示十分混乱,但仍是正确的。经过研究,是因为空格的个数改变了导致显示有重叠。实验五 PC机串行通讯实验 一、实验目的1、 进一步了解串行通信的基本

23、原理。2、 掌握串行接口芯片8250的工作原理和编程方法。3、 熟悉PC机串行口的基本连接方法二、实验内容1、PC机RS-232串口自发自收。按照PC机串口自发自收的连接方法连线。编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。2、两台PC机间RS-232串口通信。按照PC机RS-232串口直接互连的方法连接两台PC机。 编写PC机直接互连串行通信程序;要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。当键入感叹号“!”,结束收发过程。3、连线图: 图13 图14三、源程序及

24、注释1、PC机RS-232串口自发自收源程序:DATA SEGMENT CHLDB 0AH,0DH,$;换行字符串DATA ENDSSTACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AXMOV DX,3FBH;MOV AL,80H;DLAB=1 OUT DX,AL MOV AX,0CH;N=12 BAUD=9600bpsMOV DX,3F8H;低位 OUT DX,ALMOV AL,AHINC DX OUT DX,AL

25、MOV AL,03H;八位数据,1停止,无校验MOV DX,3FBH;线路控制REG OUT DX,ALMOV AL,0;屏蔽全部中断MOV DX,3F9H OUT DX,ALWAIT1: MOV DX,3FDH;读线路状态寄存器IN AL,DXTEST AL,1EH;判断是否有错JNZ ERRORTEST AL,01H;判断是否收到JNZ RECEIVETEST AL,20H;判断发送端是否空JZ WAIT1MOV DL,0FFH;六号功能调用读入待发送数据MOV AH,06HINT 21HJZ WAIT1MOV DX,3F8H;写发送REGOUT DX,AL PUSH AX MOV DL,

26、AL MOV AH,02HINT 21HJMP WAIT1;返回 WAIT1CHAR: PUSH AXMOV DL,AL;显示接收MOV AH,02HINT 21HMOV DX,OFFSET CHL;输出字符串换行MOV AH,09HINT 21HPOP AXJMP WAIT1ERROR:MOV DX,3FDHIN AL,DXMOV DL,?;对于错误显示?MOV AH,02HINT 21HJMP WAIT1RECEIVE:MOV DX,3F8HIN AL,DX;读数据接收寄存器 CMP AL,!;判断是否结束JNE CHAR MOV AH,4CH INT 21HCODE ENDS END S

27、TART2、两台PC机间RS-232串口通信发送源程序:CODE SEGMENT ASSUME CS:CODESTART: MOV AL,80H ;8250初始化,设DLAB=1 MOV DX,3FBH OUT DX,AL MOV AX,30H MOV DX,3F8H OUT DX,AL ;写入除数低字节 MOV AL,AH INC DX OUT DX,AL ;写入除数高字节 MOV AL,0AH ;7位数据,1位停止,奇校验 MOV DX,3FBH OUT DX,AL ;写入线路控制寄存器 MOV AL,03H MOV DX,3FCH OUT DX,AL ;写入Modem控制寄存器 MOV

28、AL,0 MOV DX,3F9H OUT DX,AL ;写中断允许寄存器,屏蔽所有中断 WAIT1: MOV DX,3FDH ;读线路状态寄存器 IN AL,DX TEST AL,1EH ;出错否 JNZ ERROR TEST AL,01H ;接收数据就绪否 JNZ SEND ;发送 TEST AL,20H ;发送寄存器空否,不空,返回等待 JZ WAIT1 SEND: MOV AH,1 INT 21H ;读键盘 CMP AL,21H ;是!? JZ EXIT ;是,返回操作系统 MOV DX,3F8H ;不是,则发送 OUT DX,AL JMP WAIT1 ;返回等待 ERROR: MOV

29、DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX MOV DL,? ;显示? MOV AH,02H INT 21H JMP WAIT1 EXIT: MOV AH,4CH INT 21H CODE ENDS END START接收源程序:CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H ;8250初始化 MOV DX,3FBH OUT DX,AL MOV AX,30H ;写除数 MOV DX,3F8H OUT DX,AL ;写入除数低字节 MOV AL,AH INC DX MOV DX,3F9H OUT DX,AL ;写入除数高字节 MOV

30、AL,0AH MOV DX,3FBH OUT DX,AL ;写入线路控制寄存器 MOV AL,03H MOV DX,3FCH OUT DX,AL ;写入Modem控制寄存器 MOV AL,0 MOV DX,3F9H OUT DX,AL ;写中断允许寄存器,屏蔽所有中断 WAIT1: MOV DX,3FDH ;读线路状态寄存器 IN AL,DX TEST AL,1EH ;出错否 JNZ ERROR TEST AL,01H ;接收数据就绪否 JNZ RECEIVE ;转接收 TEST AL,20H ;发送寄存器空否,不空,返回等待 JZ WAIT1 JMP WAIT1 ;均返回等待 RECEIVE: MOV DX,3F8H ;读接收数据 IN AL,DX AND AL,B ;保留位数据 CMP AL,21H ;是!? JNZ CHAR MOV AH,4CH ;返回操作系统 INT 21H CHAR: PUSH AX MOV DL,AL MOV AH,2 ;显示接受字符 INT 21H POP AX JMP WAIT1 ;返回等待 ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX MOV DL,? ;显示? MOV AH,02H INT 21H JMP WAIT

温馨提示

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

评论

0/150

提交评论