北京交通大学

北京交通大学
北京交通大学

北京交通大学

微机接口实验实验报告姓名:学号:班级: 1 目录实验一交通灯控制实验---------------------------------------------------------1 实验二实验三实验四实验五实验六可编程定时器/计数器-----------------------------------------5 中断--------------------------------------------------------------------------9 模/数转换器-------------------------------------------------------------15 PC机串行通讯实验----------------------------------------------------18 竞赛抢答器--------------------------------------------------------------24 2 实验一交通灯控制实验一、实验目的通过并行接口8255实现十字路

口交通灯的模拟控制,进一步掌握对并行口的使用。二、实验内容如图1,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律燃灭。L7L6L5L2L1L0 PC7 PC6 PC5PC2 PC1 PC0 288H—28FHCS8255 图 1 十字路口交通灯的变化规律要求:南北路口的绿灯、东西路口的红灯同时亮3秒左右。南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。南北路口的红灯、东西路口的绿灯同时亮3秒左右。南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。转重复。8255动态分配地址:控制寄存器:28BH 0EC0BH A口地址:288H 0EC08H C口地址:28AH 0EC0AH三、参考流程1 开始设置8255A口输出C口输出南北路口绿灯亮,东西路口红

灯亮长延时南北路口黄灯闪,东西路口红灯亮南北路口红灯亮,东西路口绿灯亮长延时南北路口红灯亮,东西路口黄灯闪是否有键按下返回DOS图 2 四、源程序及注释源程序:CODE SEGMENT ASSUME CS:CODE START: MOV DX,0EC0BH MOV AL,10010000B;C口方式0输出,A 口输入OUT DX,AL FIRST: MOV DX,0EC0AH MOV AL,00100100B OUT DX,AL;南北绿,东西红写入C口MOV CX,0;送入初值65536 MOV AX,4000H;软件长延时,经验值确定DELAY1:DEC AX JNZ DELAY1LOOP DELAY1 MOV BL,4;控制黄灯亮的次数SECOND:MOV DX,0EC0AH MOV AL,01000100B 2 OUT DX,AL;南北黄,东西红MOV CX,3000H MOV AX,0100H

LI1: DEC AX JNZ LI1 LOOP LI1 MOV DX,0EC0AH;软件短延时MOV AL,00000100B;南北黄灭OUT DX,AL MOV CX,3000H MOV AX,0100H WEN1: DEC AX JNZ WEN1LOOP WEN1 DEC BL JNZ SECOND THIRD: MOV DX,0EC0AH MOV AL,10000001B OUT DX,AL MOV CX,0 MOV AX,4000H DELAY2:DEC AX JNZ DELAY2 LOOP DELAY2MOV BL,4FORTH: MOV DX,0EC0AH MOV AL,10000010B OUT DX,AL MOV CX,3000H MOV AX,0100H LI2:DEC AX JNZ LI2 LOOP LI2MOV DX,0EC0AH MOV AL,10000000B OUT DX,AL MOV CX,3000H MOV AX,0100H WEN2:DEC AX JNZ WEN2 ;软件短延时;黄灯

闪烁4次;写入C口;南北红,东西绿;软件长延时;控制黄灯亮的次数;写入C口;南北红,东西黄;软件短延时;东西黄灭 3

LOOP WEN2 DEC BL JNZ FORTH;黄灯闪烁4次MOV DL,0FFH MOV AH,06H INT 21H;执行键盘输入操作JZ FIRST MOV AH,4CH INT 21H;返回操作系统CODE ENDS END START 五、总结在本次实验中,我主要学会了如何控制延时时间,加长延时时间可以是二极管的闪烁是肉眼可见的。还有就是尽管程序中有键盘输入后可以退出程序的语句,但是必须在程序恰好执行到这个语句时才能有效。总体上这个程序还是比较简单的,只要按照流程就可以写出程序。 4 实验二可编程定时器/计数器一、实验目的掌握8253的基本工作原

理和编程方法。二、实验内容1.按图3虚线连接电路,将计数器0设置为方式0,计数器初值为N,用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化。CLK0 8253280H-GATE0CS OUT0 图3 2.按图4连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化。OUT1 8253 GATE1280H-CLK1CS OUT0GATE0CLK01MHZ 图4 5 二、参考流程图开始开始设计数器0为工作方式0设计数器0为工作方式3送计数器初值读计数器值向计数器0送初值1000先送低字节后送高字节设计数器1为工作方式3N显示计数器有按键按下吗?Y向计数器1送初值1000先送低字节后送高字节结束结束图5图6 四、源程序及注释源程

序1:CODE SEGMENT ASSUME CS:CODE START:MOV DX,0EC03H MOV AL,10H;设置控制字00010000 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 ;将0FFH存入DL INT 21H;调用21中断POP DX;将DX的内容推出栈段 6 JZ LP1;如果DX的内容是0,就跳转到LP1MOV 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: 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 ;设置控制字00110110OUT 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 ;设置控制字01110110 OUT DX,AL;将AL的值送入DX端口MOV AX,1000 ;向计数器1送初值1000 MOV DX,0EC01H ;把端口地址放在DX寄存器中OUT DX,AL;将AL的低字节送入DX端口MOV AL,AH OUT DX,AL;将AX的高字节送入DX端口MOV AH,4CH7 INT 21H;调用DOS21中断CODE ENDS END START

五、总结通过本次实验,我更加深入的了解到8253的工作方式。在实验中我用了计数器0,但是也可以改用计数器1,只需要改写控制字。在显示数字时,对于0~9,要加上30H,而对于大于9的数字,要加上37H。8

实验三中断一、实验目的1.掌握PC机中断处理系统的基本原理。2.学会编写中断服务程序。三、实验内容PC机用户可使用的硬件中断只有可屏蔽中断,8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:中断源中断类型号中断功能IRQ008H 时钟IRQ109H键盘IRQ2 0AH保留IRQ3OBH串行

口 2 IRQ40CH串行口 1 IRQ50DH硬盘IRQ60EH 软盘IRQ70FH并行打印机8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:中断源中断类型号中断功能IRQ8 070H实时时钟IRQ9071H 用户中断IRQ10072H保留IRQ11073H保留IRQ12 074H保留9 IRQ13075H协处理器IRQ14 076H硬盘IRQ15077H 保留PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。IRQ+5 图7 实验电路如图7,

直接用手动产单脉冲作为中断请求信号。要求每按一次开关产生一次中断,在屏幕上显示一次“TPC pci card Interrup t”,中断10次后程序退出。

三、参考流程图10 开始关中断设置TPC卡中断使能保存原中断向量设置新中断向量设置中断掩码显示提示信息开中断Y计数器为0?N 中断开始Y按任意键?N关中断计数器减一显示提示信息发出EOI结束中断开中断中断返回恢复中断掩码恢复原中断向量设置TPC卡中断关闭结束返回图8图9 四、源程序及注释源程序:data segment int_vect EQU 073H;中断0-7的向量为:08h-0fh,中断8-15的向量为:70h-77h irq_mask_2_7 equ 11111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零11 irq_mask_9_15 equ 11110111b ;中断0-7时全一,中断8-15时从低至高相应位

为零ioport_cent equ 0E800h ;tpc 卡中9054芯片的io地址csreg dw? ipreg dw?;旧中断向量保存空间irq_times dw00h;中断计数msg1db 0dh,0ah,’TPC pci card Interrupt’,0dh,0ah,’$’ msg2db 0dh,0ah,’Press any key to exit!’,0dh,0ah,’$’ msg3db 0dh,0ah,’Press DMC to interrupt 10 times and exit!’,0dh,0ah,’$’ data ends stack segment stack db 100 dup (?) stack ends code segment assume cs:code,ds:data,ss:stack,es:data

start: ;Enable Local Interrupt Input .386 cli mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax mov dx,ioport_cent+68h ;设置tpc 卡中9054芯片io口,使能中断in ax,dx or ax,0900h out dx,ax mov al,int_vect;保存原中断向量mov ah,35h int 21h mov ax,es mov csreg,ax

mov ipreg,bx mov ax,seg int_proc;设置新中断向量mov ds,ax mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h in al, 21h;设置中断掩码12 and al, irq_mask_2_7 out21h, al in al, 0a1h and al, irq_mask_9_15 out0a1h, al mov ax,data mov ds,ax mov dx,offset msg2 mov ah,09h int 21h mov dx,offset msg3 mov ah,09h int 21h mov irq_times,0ah sti loop1: cmp irq_times,0;等待中断并判断中断10次后退出jz exit mov ah,1 int 16h jnz exit;按任意键退出jmp loop1 exit: cli mov bl, irq_mask_2_7;恢复中断掩码not bl in al, 21h or al, bl out21h, al mov bl, irq_mask_9_15 not bl in al, 0a1h or al, bl out0a1h, al mov dx,ipreg;恢复原中断向量

mov ax,csreg mov ds,ax mov ah,25h mov al,int_vect int 21h 13

mov dx,ioport_cent+68h;设置tpc 卡中9054芯片io口,关闭中断in ax,dx and ax,0f7ffh out dx,ax mov ax,4c00h int 21h int_proc proc far push ax push dx push ds dec irq_times mov ax,data;Interrupt to do mov ds,ax mov dx,offset msg1 mov ah,09h int 21h mov al,20h;Send EOI out 0a0h,al out 20h,al pop ds pop dx pop ax sti iret int_proc endp code ends end start 五、总结本次实验的程序比较复杂,所以我用的是老师所准备的程序。但是仍花了很多的时间在程序上。在程序中,有很多的中断掩码、中断向量的设置和保存,感觉有些糊涂。但是在看了几遍之后也是可以理解的。这次实验让我了解到很多程序都是比较复杂的。

我还有很多要去学习。14 实验四模/数转换器一、实验目的了解模/数转换的基本原理,掌握ADC0809的使用方法。二、实验内容实验电路原理图如图10。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),编程采集IN0输入的电压,在屏幕上显示出转换后的数据。Ref(+)msb 2-1+5VCC2-2 2-3GND2-4Ref(-)2-5 2-62-7 CLOCK lsb 2-8IN-2ADD-C ADD-BIN-1 ADD-A EOC ALED7D6D5D4D3D2D1D0A2A1A0EO CIOWU8:A1MHz+5IN1IN0+5 STARTIN-0ENABLE RW 110KCSIOR298HU9

ADC0809U8:B74LS02 图10 三、参考流程图15 开始启动A/D转换延时读入转换后数据所读数据赋给BL将数据

右移四位调显示子程序显示其高四位从BL中取出数据和OFH相与调显示子程序显示其低四位有键按下吗?NY结束图11四、源程序及注释源程序:code segment assume cs:code start:mov dx,0ec18h ;启动A/D转换器out dx,al nop nop nop nop 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 开始将AL赋给DLDL大于9吗?NYDL 加7DL加30H显示ASCII码为DL的字符结束图12 16 call disp ;调显示子程序显示其低四位mov ah,02h mov dl,20h int 21h mov dl,20h 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,30h ;显示mov ah,02 int 21h ret disp endp code ends end start 五、总结本次实验也不是很难,碰到的问题主要是屏幕的显示。当我改动mov ah,02h mov dl,20h int 21h mov dl,20h int 21h 这一部分的程序时,屏幕显示十分混乱,但仍是正确的。经过研究,是因为空格的个数改变了导致显示有重叠。17 实验五PC机串行通讯实验一、实验目的1、进一步了解串行通信的基本原理。2、掌握串行接口芯片8250的工作原理和编程方法。3、熟悉PC机串行口的基本连接方法二、实验内容1、PC机RS-232串口自发自收。按照PC机串口自发自收的连接方法连线。编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再

此串口将字符接收回来并在屏幕上显示,实现自发自收。2、两台PC机间RS-232串口通信。按照PC机RS-232串口直接互连的方法连接两台PC机。编写PC机直接互连串行通信程序;要求:甲机键盘键入字符经串口发送给乙机,再乙机通过串口接收字符并显示在屏幕上。当键入感叹号“!”,结束收发过程。3、连线图:图13 图14 18

三、源程序及注释

1、PC机RS-232串口自发自收源程序:DATA SEGMENT CHL DB 0AH,0DH,’$’ ;换行字符串DATA ENDS STACK1 SEGMENT STACK DW 100 DUP(0) STACK1 ENDS CODE SEGMENT ASSUME

CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV DX,3FBH ; MOV

AL,80H ;DLAB=1OUT DX,AL MOV AX,0CH ;N=12 BAUD=9600bps MOV DX,3F8H ;低位OUT DX,AL MOV AL,AH INC DX OUT DX,AL MOV AL,03H ;八位数据,1停止,无校验MOV DX,3FBH ;线路控制REG OUT DX,AL 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 19 MOV DL,0FFH ;六号功能调用读入待发送数据MOV AH,06H INT 21H JZ WAIT1 MOV DX,3F8H ;写发送REG OUT DX,AL PUSH AX MOV DL,AL MOV AH,02H INT 21H JMP WAIT1 ;返回WAIT1 CHAR: PUSH AX MOV DL,AL ;显示

相关主题
相关文档
最新文档