课程设计
题 目 学 院 专 业 班 级 姓 名 指导教师
双机并行通讯 自动化 电气工程及其自动化
2014 年 月 日
武汉理工大学《微机原理与接口技术》课程设计
课程设计任务书
学生姓名: 专业班级:
指导教师: 徐腊梅 工作单位: 武汉理工大学
题 目: 双机并行通讯 初始条件:
由甲乙两台微机之间并行传送1K字节数据。先甲机发送,乙机接收,后乙机发送,甲机接收。甲乙双方的8255A均采用方式2工作。8255A控制口地址为303。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明
书撰写等具体要求)
1、课程设计工作量:两周 2、技术要求:
(1)根据题目要求查找相关资料 (2)分析题目要求,画出程序流程图
(3)分别为甲乙两台微机设计接收和发送程序,以满足初始条件 的要求
(4)用Masm编译软件运行程序,改正错误,并记录结果 (5)用Protues进行仿真,并记录仿真结果
3、查阅相关参考文献。按《武汉理工大学课程设计规范》要求撰写设 计报告书。全文用A4纸打印,图形应符合绘图规范。
时间安排:
12月27日~12月31日:明确课题,收集资料,方案确定 1月1日~1月4日:整体设计,硬件电路调试 1月5日~1月9日;报告撰写,交设计报告,答辩
指导教师签名:
年 月 日
武汉理工大学《微机原理与接口技术》课程设计
摘 要............................................................................................ 错误!未定义书签。 1 问题的描述与分析.................................................................. 错误!未定义书签。 2 可编程并行接口芯片8255A .................................................. 错误!未定义书签。
2.1 并行通讯....................................................................... 错误!未定义书签。 2.2 8255A简介及引脚功能 ................................................ 错误!未定义书签。
2.2.1 8255A简介 ......................................................... 错误!未定义书签。 2.2.2 8255A的引脚功能 ............................................. 错误!未定义书签。 2.3 8255A的编程 .................................................................................................. 5 2.4 8255A的工作方式 ........................................................ 错误!未定义书签。 3 DOS常用功能的介绍................................................................................................ 9 4 系统方框图.............................................................................. 错误!未定义书签。 5 硬件连线.................................................................................. 错误!未定义书签。
5.1 8086CPU的引脚信号和功能 ....................................... 错误!未定义书签。 5.2 74LS138芯片 ................................................................ 错误!未定义书签。 5.3 电路连接图................................................................... 错误!未定义书签。 6 各部分程序设计...................................................................... 错误!未定义书签。
6.1 甲机源程序见附录1.................................................... 错误!未定义书签。 6.2 乙机源程序见附录2.................................................................................... 17 6.3 发送子程序................................................................... 错误!未定义书签。 6.4 接收子程序................................................................................................... 17 7 程序调试.................................................................................................................. 19
7.1 命令提示符窗口简介................................................................................... 19 7.2 汇编源程序................................................................................................... 19 7.3 程序调试....................................................................... 错误!未定义书签。 8 小结与体会.............................................................................. 错误!未定义书签。 参考文献...................................................................................... 错误!未定义书签。 附录1:甲机源程序代码........................................................... 错误!未定义书签。 附录2:乙机源程序代码........................................................... 错误!未定义书签。
武汉理工大学《微机原理与接口技术》课程设计
摘 要
本课程设计要求完成的任务是实现两台PC机之间1K数据的并行传输。为了使程序编写简单并便于进行调试,本设计采用DOS功能调用,由键盘输入字符串来模拟要传输的1K数据。因为传输包括发送和接收两方面内容,所以程序采用模块化思想,将整个程序分为发送和接收两个功能模块分别来进行编写,然后通过过调用来实现整体的功能。程序设计的关键部分是8255A的编程控制,本设计按要求采用方式2,在传输过程中通过查询相关端口来判断是否发送或接收完毕,从而实现1K数据的接收与发送。
关键词:并行通讯 发送 接收 8255A DOS功能调用
I
武汉理工大学《微机原理与接口技术》课程设计
双机并行通讯
1 问题的描述与分析
题目要求:由甲乙两台微机之间并行传送1K字节数据。先甲机发送,乙机
接收,后乙机发送,甲机接收。甲乙双方的8255A均采用方式2工作。8255A控制口地址为303。
本题属于双机并行通讯问题,应分为发送和接收两方面分别来进行研究。由于程序需要对地址进行直接操作,所以选择汇编语言来编写较为简单方便。在写程序的过程中,由于要用8255A芯片作为并行传输芯片,所以要熟练掌握8255A的控制方法;此外,程序多处还要用到DOS功能调用,所以还要对DOS的各种功能进行系统的学习。
两台PC各与一个8255A芯片相连,程序分为两部分,分别运行与两台PC机上以实现并行传输。连接图如下:
图1-1 双机通讯的连接图
程序分为两个部分,分别在甲机和乙机上面运行。甲机运行的程序是先发送后接收,乙机上运行的程序时先接收后发送,实现先从甲机到乙机传输1KB的数据,后从乙机到甲机传输1KB的数据的功能。我们在两台微机的内存中各开辟一个1KB的字符区BUF1,象征性的输入少许字符,来模拟要传输的1KB的数据,
1
武汉理工大学《微机原理与接口技术》课程设计
再各开辟一个1KB的字符区BUF2用来存储接收到的1KB数据。
2 可编程并行接口芯片8255A
2.1 并行通讯
并行通讯是指把一个字符的n个数位用n条线同时传输的机制,它的特点是传输速度快、效率高,但因为数据位要同时传送,所需电缆也多,并行通讯适用于传输速率要求高,且传输距离短的场合。CPU与存储器和I/O接口之间的通讯就是并行通讯工作方式。并行通讯主要由4位、8位、16位、32位、甚至是64位以上的数据组成。
2.2 8255A简介及引脚功能
2.2.1 8255A简介
8255A是一种通用的可编程并行I/O接口芯片,广泛用于几乎所有系列的微机系统中,如8086、MCS51、Z80等。8255A内部结构如图2-1所示,在8255A内部结构中,厂家除了把输入/输出接口电路集成在一块芯片之中,还包括了控制这些接口电路的控制部分以及与CPU接口的总线接口部分。8255A具有3个带锁存或缓冲的数据端口,可与外设并行进行数据交换。每个端口都有一个数据输入寄存器和一个数据输出寄存器,输入时端口有三态缓冲器的功能,输出时端口有数据锁存器功能。控制A、B和C3个端口的工作方式,A组控制A口和C口的上半部(PC7~PC4),B组控制B口和C口的下半部(PC3~PC0)的工作方式和输入/输出。作用:指定3个并行端口(PA、PB、PC)是作输入还是作输出端口以及选择8255的工作方式。利用按位置位/复位控制字可以使PC口的8根线中的任意一根置成高电平输出或低电平输出。
数据输入过程:当外设准备好数据输入后,发出STB信号,输入的数据送入缓冲器。然后IBF信号有效。如使用查询方式,则IBF即作为状态信号供CPU查询使用;如使用中断方式,当信号由低变高时,产生INTR信号,向单片微机发出中断。单片微机在响应中断后执行中断服务程序时读入数据,并使INTR信号变低,同时也使IBF信号同时变低。以通知外设准备下一次数据输入。
2
武汉理工大学《微机原理与接口技术》课程设计
图2-1 8255A内部结构图
数据输出过程:外设接收并处理完一组数据后,发回ACK*信号。该信号使
OBF*变高,表明输出缓冲器已空。如使用查询方式,则OBF*可作为CPU状态信号供查询使用;如使用中断方式,则当ACK*信号结束时,INTR有效,向单片微机发出中断请求。在中断服务过程中,把下一个输出数据写入8255A的输出缓冲器。写入后OBF*有效,表明输出数据已到,并以此信号启动外设工作,取走并处理8255A中的输出数据。
3
武汉理工大学《微机原理与接口技术》课程设计
2.2.2 8255A的引脚功能
8255A的芯片引脚图见图2-2:
图2-2 8255A的芯片引脚图
RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255A
4
武汉理工大学《微机原理与接口技术》课程设计
与CPU进行通讯。
RD:读信号线,当这个输入引脚为低电平时,允许8255A通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255A。
D0~D7:三态双向数据总线,8255A与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
A1、A0:端口地址总线,8255A中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。(A0、A1的组合与端口关系,见表2-1)
表2-1 8255A的端口选择操作
2.3 8255A的编程
所谓8255A编程,就是用户在使用8255A前,可用软件来定义端口的工作方式,选择所需要的功能。
8255A是将所有端口分为两组来控制的,因此方式控制字也分为了两部分:
5
武汉理工大学《微机原理与接口技术》课程设计
A组控制D6~D3和B组控制D2~D0。其具体格式见表2-2所示。
表2-2 工作方式控制字的格式
此外,方式控制字未规定C口的工作方式,只规定了C口数据的传输方向,这就表明C口要么作为联络线用,要么就只工作在方式0。8255A还有一个特殊的功能,即对C口直接进行置“1”或清“0”操作,这种方法使C口的控制变得更加简单、方便。其具体格式见表2-3。
表2-3 8255A的C口控制字
6
武汉理工大学《微机原理与接口技术》课程设计
2.4 8255A的工作方式
8255A有三种工作方式:
方式0——基本输入/输出方式 方式1——选通输入/输出方式 方式2——双向传输方式
方式0基本特点:方式0是一种基本输入或输出方式,该方式适合于通信双方不需要联络信号(应答信号)的简 单输入/输出场合,CPU可以随时用输入/输出指令对指定端口进行读写操作。
方式1基本特点:方式1为选通输入/输出方式,即可借助于选通(应答式)联络信号的I/O方式。PC3~PC0、PC6、PC7作为控制口。A口工作于方式1输出,所用的联络信号 线为PC7、PC6和PC3,而B口工作于方式1输出时,使用PC2~PC0作其联络信号线。
方式2基本特点:方式2是一种双向选通输入/输出方式,它把A口作为双向输入/输出口,把C口的5根线(PC3~PC7)作为专用应答线,所以,8255A只有A口才有2方式。
由于本题要求工作在方式2,所以这里只重点介绍方式2的工作原理。
方式2的双向传输方式是指在同一端口内分时进行输入/输出的操作,可用来在两台处理机之间实现双向并行通信。它需要5个控制信号进行“联络”,这5个控制信号由C口提供。由于方式2的A口既能发送,也能接收数据,所以A口的引脚在“空闲”状态下是三态的。A口在某一时刻下,输入或输出是由相应“联络”线确定的。工作时可用软件查询方式,也可用中断方式。A口工作在方式2时,C口的“联络”线既要提供A口的输入“联络”线STBA和IBFA,又要提供A口的输出“联络”线ACKA和OBFA,具体联络信号定义见图2-3,同时还要有一个处理A口中断的中断申请线INTRA,具体端口分配见表2-4。
7
武汉理工大学《微机原理与接口技术》课程设计
I/O PC2-PC0 PC3 & INTRA
& OBFA PC7 PC6 INTE1 ACKA & STBA INTE2 PC4 PC5 IBFA
图2-3 方式2下的A口联络线
当8255A的A口工作在方式2时,输入和输出共用同一个中断请求信号线。所以,当使用中断方式传输数据时,可以通过C口置“1”/清“0”控制字来设置中断屏蔽触发器INTE1和INTE2,实现对中断源的控制,禁止/允许输入时中断或输出时中断。
表2-4 8255A的方式控制字
D7 OBFA D6 ACKA D5 IBFA D4 STBA D3 INTRA D2 D1 B组或I/O口 D0 A组
INTRA——A口的中断请求信号。当其有效时,8255A的A口向CPU
申请中断。
STBA——A口的选通信号(外设发出,低电平有效)。当其有效时,外
8
武汉理工大学《微机原理与接口技术》课程设计
设把数据输入A口的输入缓冲器。
IBFA——A口的输入缓冲器“满”信号。当其有效时,表示A口的输
入缓冲器已经暂存一个有效数据。
ACKA——外设应答信号。由外设发出,低电平时有效。当其有效时,
表示外设已经接收数据。
OBFA——A口的输出缓冲器“满”信号。当其有效时表示A口的输出
缓冲器已经暂存一个有效数据。
3 DOS常用功能的介绍
DOS是美国Microsoft公司为IBM PC研制的磁盘操作系统。DOS不仅为用户提供了许多使用命令,而且还有用户可以直接调用的上百个常用子程序。对这些子程序的调用,称为系统功能调用。这些子程序的功能主要是进行磁盘读/写、控制管理、内存管理、基本输入/输出管理等。在使用时,用户不需要了解各种I/O接口硬件的详细情况就能直接完成对I/O接口的控制和管理。
其调用过程为:
在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数
执行指令INT 21H(或ROM-BIOS的中断向量号)实现中断服务程序的功能
调用
根据出口参数分析功能调用执行情况 其调用方法如下图所示
9
武汉理工大学《微机原理与接口技术》课程设计
DOS系统启动时,DOS层功能模块从系统盘被装入内存。调用这些功能模块称为DOS功能调用。DOS功能调用可以完成文件管理、存储管理、作业管理和设备管理等。表3-1列出了一些常用的DOS功能调用。
表3-1 常用DOS功能调用 AH 01 02 06 功能 键盘输入并回显 显示输出 直接控制台I/O 调用参数 DL=输出字符 DL=FF(输入) DL=字符(输出) 07 08 键盘输入(无回显) 键盘输入(无回显) 检测Ctrl-Break 09 显示字符串 DS:DX=串地址 '$'结束字符串 0A 键盘输入到缓冲区 DS:DX=缓冲区首地址 (DS:DX)=缓冲区最大字符数 0C 清除输入缓冲区并 请求指定的输入功能 4C 带返回码结束 AL=输入功能号 (1,6,7,8,A) AL=返回码 DS:DX+1)=实际输入的字符数 AL=输入字符 AL=输入字符 返回参数 AL=输入字符 AL=输入字符
10
武汉理工大学《微机原理与接口技术》课程设计
4 系统方框图
编写的程序有两种类型:甲机是先发送后接收类型,乙机是先接收后发送类型。这两种类型程序非常相似,只是在调用发送、接收子函数时,顺序有所不同。甲机程序的系统方框图如图4-1所示。
开始8255A初始化定义变量8255A初始化PC5 =0?Y接收数据N显示输入信息PUT1显示输入信息PUT2YPC7 =0?N发送数据键入传输 字符修改地址、计数器调用发送函数OUT1是否接 收完?Y返回结束调用接收 函数IN1返回N是否发 送完?Y修改地址、计数器N 图4-1 甲机程序的系统方框图
11
武汉理工大学《微机原理与接口技术》课程设计
5 硬件连线
5.1 8086CPU的引脚信号和功能
8086CPU信号和功能如图5-1所示,其引脚图如图5-2所示
(S2)M/IO RD (LOCK)WR (S0)DEN(S1)DT/R
总线(RQ0)HOLD 控制(RQ1)HLDA
READY
CPU TEST控制RESET
MN/MX
CLK
系统控制8086AD0~AD15A16/S3~A19/S6BHE/S7ALE(QS0)INTA(QS1)INTRNMI总线信号中断控制
VCCGND
图5-1 8086CPU信号和功能图
12
武汉理工大学《微机原理与接口技术》课程设计
图5-2 8086CPU引脚图
针对本次设计只介绍以下几个引脚功能:
AD15-AD0——分时复用的地址数据总线。传送地址时以三态输出,传送数据时
可以以双向三态输入/输出。
A19/S6、A18/S5、A17/S4、A16/S3——分时复用的地址/状态线。当它作为地址线
用时可以构成访问存储器的20位物理地址。
M/IO——存储器或I/O端口访问信号(三态输出)。M/IO为高电平时,表示
当前CPU正在访问存储器;M/IO为低电平时,表示当前CPU正在访问I/O端口。
13
武汉理工大学《微机原理与接口技术》课程设计
RD——读信号(三态输出,低电平有效),表示当前CPU正在读存储器或I/O
端口。
WR——写信号(三态输出,低电平有效),表示当前CPU正在写存储器或I/O
端口。
INTR——中断请求信号(由外部输入,电平触发,高电平有效)。INTR有效时,
表示外部设备向CPU发出中断请求,CPU在每条指令的最后一个时钟周期对INTR进行测试,一旦测试到有中断请求,并且当中断允许标志IF=1时,则暂停执行下条指令转入中断响应周期。
VCC(电源)——8086CPU只需要单一的+5V电源,由VCC输入。
5.2 74LS138芯片
74LS138芯片的引脚如图5-3所示
图5-3 74LS138芯片引脚图
A0、A1、A2——二进制输入端,它们共有8种状态的组合,即可译出8个输
出信号Y0-Y7。
S1、S2、S3——三个使能输入端,其中当S1=1、S2=0、S3=0时,译码器才能
14
武汉理工大学《微机原理与接口技术》课程设计
正常工作。
Y0-Y7——8个输出端。
VCC、GND——分别为电源和和接地线。
74LS138译码器功能表见表5-1。
表5-1 74LS138功能表
无论从逻辑图还是功能表我们都可以看到74LS138的八个输出引脚,任何时刻要么全为高电平1—芯片处于不工作状态,要么只有一个为低电平0,其余7个输出引脚全为高电平1。如果出现两个输出引脚同时为0的情况,说明该芯片已经损坏。
71LS138有三个附加的控制端、和。当、时,输出为高电平(S=1),译码器处于工作状态。否则,译码器被禁止,所有的输出端被封锁在高电平,如表3.3.5所示。这三个控制端也叫做“片选”输入端,利用片选的作用可以将多篇连接起来以扩展译码器的功能。
15
武汉理工大学《微机原理与接口技术》课程设计
5.3 电路连接图
由题目所给的控制口地址303H,可知8255A的A口地址为300H,由此可得如图5-4的硬件连线图。
图5-4 硬件接线图
其中,A19-A0为8086CPU的地址线。
6 各部分程序设计
6.1 甲机源程序见附录1
16
武汉理工大学《微机原理与接口技术》课程设计
6.2 乙机源程序见附录2 6.3 发送子程序
OUT1 PROC
MOV DX,303H ;对控制端口进行初始 化 MOV AL,0C9H OUT DX,AL
MOV AL,0FH ;将OBFA置1 OUT DX,AL
MOV CX,1024 ;设置循环次数 L1:
MOV DX,300H ;开始传输字符 MOV AL,[SI] OUT DX,AL INC SI L11:
MOV DX,302H IN AL,DX
AND AL,80H ;测试OBFA
JZ L11 ;OBFA有效,说明前一个
数还未传送完,则继续等待,否则传送下一个数
LOOP L1 RET OUT1 ENDP
6.4 接收子程序
IN1 PROC
17
武汉理工大学《微机原理与接口技术》课程设计
MOV DX,303H ;对控制端口进行初始 化 MOV AL,0F9H OUT DX,AL
MOV AL,0AH ;将IBFA置0 OUT DX,AL
MOV CX,1024 ;设置循环次数 L2:
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是否收到 数 JZ L2
MOV DX,300H ;读一个数到DX中 IN AL,DX MOV [DI],AL INC DI K2:
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是已存好 数 JNZ K2
LOOP L2 RET IN1 ENDP
18
武汉理工大学《微机原理与接口技术》课程设计
7 程序调试
7.1 命令提示符窗口简介
命令提示符窗口(cmd.exe)是Windows的“标配”组件,它可以实现用户与操作系统的直接交流,并负责用户输入的所有命令的解释和支持。使用命令提示符进行的操作往往更具有专业性——实际上很多Windows中的操作只能通过命令来实现。命令提示符也就是Windows95/98下的“MS-DOS方式”,虽然随着计算机的发展,Windows操作系统的应用越来越广泛,DOS面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般操作系统的各种版本都与之兼容,用户可以在Windows系统下运行DOS,另外,中文版的Windows XP的命令提示符进一步提高了与DOS下的操作命令的兼容性,用户可以在命令提示符中直接输入中文调用文件。
7.2 汇编源程序
汇编源程序检查程序对错并生成obj文件,见图7-1。
19
武汉理工大学《微机原理与接口技术》课程设计
图7-1 汇编源程序
7.3 程序调试
程序调试见图7-2。
20
武汉理工大学《微机原理与接口技术》课程设计
图7-2 程序调试图
从程序调试结果可以看出两机实现并行发送/接收1KB数据基本可以实现,故本次设计完成。
21
武汉理工大学《微机原理与接口技术》课程设计
8 小结与体会
本次课程设计中,有一些知识是我们在课堂上所没有讲过的,因此就需要我们查阅各种资料,而其中最主要的是去图书馆查阅资料和在网上搜索。通过这短短一周半左右的实践,我感觉到自己学到了很多课堂上无法学到的理论和实践知识。从程序的设计到调试、运行,任何一个步骤都是对自己巨大考验。通过本次课程设计,我较熟练的掌握了8255A芯片的使用方法,了解了双机并行通讯的基本原理,还学会了程序编写的一般步骤以及汇编语言的使用,更重要的时,本次课设很好的锻炼了我的思维严谨性,因为任何一个错误都会导致程序运行失败,哪怕只是小小的一个分号都将导致程序编译的错误。
总之,通过本次课设,我感觉自己受益匪浅,在这次课设上学到的东西也将在我以后的学习中是我终身受益。
22
武汉理工大学《微机原理与接口技术》课程设计
参考文献
[1] 邵玉祥. 汇编语言程序设计. 北京:科学出版社.2005
[2] 阳平. 汇编语言与微机原理. 北京:中国水利水电出版社.2006 [3] 胡蔷. 微机原理及应用. 北京:机械工业出版社.2006
[4] 钱晓捷 . 新版汇编语言程序设计. 北京:电子工业出版社.2007
[5] Barry B.BREA 著.80x86、奔腾机汇编语言程序设计.电子工业出版社.1998 [6] 朱金钧. 微机计算机原理及应用技术. 机械工业出版社.2006 [7] 杨记文. 汇编语言程序设计教程. 北京. 清华大学出版社 [8] 姚君遗. 汇编语言程序设计. 南京. 南京大学出版社
[9] (美)埃尔温. Assembly language for intel-board computers. 清华大学出版社 [10] (美)布鲁姆. Professional Assembly Language . 机械工业出版社 [11]彭虎.微机原理和接口技术(第3版).北京:电子工业出版社.2011
23
武汉理工大学《微机原理与接口技术》课程设计
附录1:甲机源程序代码
;***********************************************************************
; 主程序:由甲乙两台微机之间并行传送1K字节数据。甲机发送,乙机接收。 *
; 甲乙双方的8255A均采用方式2工作。 *
; 8255A控制口地址为303 *
;***********************************************************************
DATA SEGMENT
BUF DB 100 ;定义1KB的数据缓冲 区 DB ? DB 100 dup(1)
BUF1 DB 1024 DUP(0) ;表示甲PC要传输的 1KB数据
BUF2 DB 1024 DUP(0) ;表示甲PC接收的1KB 数据 PUT1 DB 0ah,0dh,'if you want to quit ,please press Q/q! ' DB 0ah,0dh,'press other key to start',0ah,0dh,' $' PUT2 DB 0aH,0dH,'input some words for transfer:' DB 0ah,0dh,'$' DATA ENDS
STACK1 SEGMENT STACK DB 1024 DUP(?) STACK1 ENDS
24
武汉理工大学《微机原理与接口技术》课程设计
CODE SEGMENT
ASSUME DS:DATA,SS:STACK1,CS:CODE START: MOV AX,DATA MOV DS,AX
T1: LEA DX,PUT1 ;输入提示信息PUT1 MOV AH,9 INT 21h
MOV AH,08h ;从键盘输入单个字符 INT 21h
CMP AL,'Q' ;输入字符与Q进行比较 JE exit
cmp al,'q' ;输入字符与q进行比较 je exit
T2: lea dx,PUT2 ;输入提示信息PUT2 mov ah,9 int 21h
lea dx,BUF ;输入一串字符到缓冲区 以供传输到乙pc机 mov ah,10 int 21h
lea di,[BUF+2] ;将缓冲区中字符串的 偏移 ;地址赋予di lea si,BUF1
next1: mov dl,[di] ;将缓冲区的字符移到寄 存器dl inc di
25
武汉理工大学《微机原理与接口技术》课程设计
cmp dl,0dh ;检测寄存器中的字符是 否为回车
jne aa1 ;不是回车就跳转到aa1 jmp T ;是回车就跳转到T aa1: mov [si],dl inc si jmp next1
T: LEA SI,BUF1 ;甲机开始传输数据 CALL OUT1
LEA DI,BUF2 ;甲机开始接收数据 CALL IN1 JMP T1
exit: MOV AH,4CH ;退出程序 INT 21H OUT1 PROC
MOV DX,303H ;对控制端口进行初始 化 MOV AL,0C9H OUT DX,AL
MOV AL,0FH ;将OBFA置1 OUT DX,AL
MOV CX,1024 ;设置循环次数 L1:
MOV DX,300H ;开始传输字符 MOV AL,[SI] OUT DX,AL INC SI L11:
26
武汉理工大学《微机原理与接口技术》课程设计
MOV DX,302H IN AL,DX
AND AL,80H ;测试OBFA
JZ L11 ;OBFA有效,说明前一个
数还未传 送完,则继续等待,否则传送下一个数
LOOP L1 RET OUT1 ENDP IN1 PROC
MOV DX,303H ;对控制端口进行初始 化 MOV AL,0F9H OUT DX,AL
MOV AL,0AH ;将IBFA置0 OUT DX,AL
MOV CX,1024 ;设置循环次数 L2:
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是否收到 数 JZ L2
MOV DX,300H ;读一个数 IN AL,DX MOV [DI],AL INC DI K2:
27
武汉理工大学《微机原理与接口技术》课程设计
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是已存好 数 JNZ K2
LOOP L2 RET IN1 ENDP CODE ENDS END START
附录2:乙机源程序代码
;***********************************************************************
; 主程序:由甲乙两台微机之间并行传送1K字节数据。乙机发送,甲机接收。 *
; 甲乙双方的8255A均采用方式2工作。 *
; 8255A控制口地址为303 *
;***********************************************************************
SEGMENT STACK DB 1024 DUP(?) STACK1 ENDS CODE SEGMENT
ASSUME DS:DATA,SS:STACK1,CS:CODE START: MOV AX,DATA MOV DS,AX
T1: lea dx,PUT1 ;输入提示信息PUT1
28
武汉理工大学《微机原理与接口技术》课程设计
mov ah,9 int 21h
mov ah,08h ;从键盘输入单个字符 int 21h
cmp al,'Q' ;输入字符与Q进行比较 JE exit
cmp al,'q' ;输入字符与q进行比较 je exit
T2: lea dx,PUT2 ;输入提示信息PUT2 mov ah,9 int 21h
lea dx,BUF ;输入一串字符到缓冲区 以供传输到甲pc机 mov ah,10 int 21h
lea di,BUF+2 ;将缓冲区中字符串的 ; 偏移地址赋予di lea si,BUF1
next1: mov dl,[di] ;将缓冲区的字符移到寄 存器dl inc di
cmp dl,0dh ;检测寄存器中的字符是 否为回车
jne aa1 ;不是回车就跳转到aa2 jmp T ;是回车就跳转到T aa1: mov [si],dl inc si
29
武汉理工大学《微机原理与接口技术》课程设计
jmp next1
T: LEA DI,BUF2 ;乙机开始接收数据 CALL IN1
LEA SI,BUF1 ;乙机开始传输数据
CALL OUT1 JMP T1
exit: MOV AH,4CH ;退出程序 INT 21H OUT1 PROC
MOV DX,303H ;对控制端口进行初始化 MOV AL,0C9H OUT DX,AL
MOV AL,0FH ;将OBFA置1 OUT DX,AL
MOV CX,1024 ;设置循环次数 L1:
MOV DX,300H ;开始传输字符 MOV AL,[SI] OUT DX,AL INC SI L11:
MOV DX,302H IN AL,DX
AND AL,80H ;测试OBFA
JZ L11 ;OBFA有效,说明前一个数
还未传送完,则继续等待,否则传送下一个数
LOOP L1
30
武汉理工大学《微机原理与接口技术》课程设计
RET OUT1 ENDP IN1 PROC
MOV DX,303H ;对控制端口进行初始 化 MOV AL,0F9H OUT DX,AL
MOV AL,0AH ;将IBFA置0 OUT DX,AL
MOV CX,1024 ;设置循环次数 L2:
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是否收到 数 JZ L2
MOV DX,300H ;读一个数 IN AL,DX MOV [DI],AL INC DI K2:
MOV DX,302H IN AL,DX
AND AL,10H ;测试IBFA,看是已存好 数 JNZ K2
LOOP L2
31
武汉理工大学《微机原理与接口技术》课程设计
RET IN1 ENDP CODE ENDS END START
32
武汉理工大学《微机原理与接口技术》课程设计
本科生课程设计成绩评定表
姓 名 专业、班级 性 别 课程设计题目:双机并行通讯 课程设计答辩或质疑记录: 成绩评定依据: 评 定 项 目 1.选题合理、目的明确(10分) 2.设计方案正确、具有可行性、创新性(20分) 3.设计结果(例如:系统设计程序、仿真程序) (20分) 4.态度认真、学习刻苦、遵守纪律(15分) 5.设计报告的规范化、参考文献充分(不少于5篇)(10分) 6.答辩(25分) 总 分 评分成绩 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字:
年 月 日
33
因篇幅问题不能全部显示,请点此查看更多更全内容