《微型计算机接口技术课程设计双机通信-.pdf》由会员分享,可在线阅读,更多相关《微型计算机接口技术课程设计双机通信-.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微型计算机接口技术课程设计报告任课教师:指导教师:学生学号:学生姓名:所学专业:年月日目录一、设计题目 -1 二、设计目的 -1 三、设计原理及方案 -1 1.8251的基本性能-1 2.8251的内部结构及外部引脚-1 3.8251 在异步方式下的 TXD 信号上的数据传输格式-3 4.8251 的编程-3 四、实现方法 -6 五、实施结果 -6 1.实验程序-6 2.实验步骤-13 六、其他 -13 七、设计体会 -15 一、设计题目 8251A串行通信一、设计目的1.掌握 8251 的工作方式及应用;2.了解有关串口通讯的知识。三、设计原理及方案1.8251的基本性能8251 是可编程的
2、串行通信接口,可以管理信号变化范围很大的串行数据通信。有下列基本性能:(1)通过编程,可以工作在同步方式,也可以工作在异步方式;(2)同步方式下,波特率为064K,异步方式下,波特率为019.2K;(3)在同步方式时,可以用58 位来代表字符,内部或外部同步,可自动插入同步字符;(4)在异步方式时,也使用58 位来代表字符,自动为每个数据增加1个启动位,并能够根据编程为每个数据增加1 个、1.5 个或 2个停止位;(5)具有奇偶、溢出和帧错误检测能力;(6)全双工,双缓冲器发送和接收器。注意:8251尽管通过了 RS-232 规定的基本控制信号,但并没有提供规定的全部信号。2.8251的内部结
3、构及外部引脚8251 的内部结构图如图1 所示,可以看出,8251 有 7 个主要部分,即数据总线缓冲器、读/写控制逻辑电路、调制/解调控制电路、发送缓冲器、发送控制电路、接收缓冲器和接收控制电路,图中还标识出了每个部分对外的引脚。图 6-1 8251内部结构图8251的外部引脚如图2 所示,共 28 个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。图 6-2 8251外部引脚图3.8251在异步方式下的 TXD 信号上的数据传输格式图 3 示意了 8251 工作在异步方式下的TXD 信号上的数据传输格式。数据位与停止位的位数可以由编程指定。图 3 8251工作在异地方式下TXD 信号
4、的数据传输格式4.8251的编程对 8251 的编程就是对 8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4所示。图 4 8251方式控制字(2)命令控制字命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图5 所示的是 8251 命令控制字各位的定义。图 5 8251 命令控制字格式(3)状态字CPU 通过状态字来了解8251当前的工作状态,以决定下一步的操作,8251 的状态字如图 6 所示。图 6 8251状态字格
5、式(4)系统初始化8251的初始化和操作流程如图7 所示。a)芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式寄存器。b)如果模式字中规定了8251A 工作在同步模式,c)由 CPU 用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的值将作为数图 7 8251 初始化流程图四、实现方法8251A 的引脚上有一“控制/信号”信号 C/D,此信号和“读/写”信号合起来通知8251A 当前读写的是数据还是控制字.状态字。当 C/D=0进行读写时,读出和写入的是数据。当C/D=1进行写入时,写入的是控制字、方式字和同步字符;C/D=1进行读出时,是从状态寄存器中读出的状态。
6、那么,在 C/D=1写入时,到底写到哪一个寄存器呢?这涉及 8251A 初始化的有关约定。这个约定有三条:(1)芯片复位后,第一次用 C/D=1写入的值是方式字;(2)如果方式字中规定了同部方式,接着用 C/D=1写入的就是同部字符;(3)在此之后,以 C/D=1写入的都被作为命令字。从原则上来说,象8251A 这样的 8位接口芯片,连接在 16位系统时,低8位的数据总写到偶地址,高8位的数据总写到奇地址.STD5221也遵从这个原则,不将地址总线的最低位A0连到8251A 的地址线上,而将地址总线A1作为8251A 的地址最低位地址总线A0 经过反相后连到 8251A 的 C/D 端.(在常
7、见的具有 USART 的PC系统中,A0是直接连接到 8251A 的 C/D 端,与 STD5221相反,这一点在应用时要注意)。注:据实验结果,在 C/D=1写入的第一个命令字之后,先向数据口写同步字符,才能启动同步发送(在流程图中有标示)。五实施结果2.实验程序OUTBIT equ 08002h;位控制口OUTSEG equ 08004h;段控制口IN_KEY equ 08001h;键盘读入口CS8251D equ 09000h;串行通信控制器数据口地址CS8251C equ 09001h;串行通信控制器控制口地址data segment LEDBuf db 6 dup(?);显示缓冲Nu
8、m db 1 dup(?);显示的数据DelayT db 1 dup(?)RBuf db 0 TBuf db 0 LEDMAP:;八段管显示码db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71h KeyTable:;键码定义db 16h,15h,14h,0ffh db 13h,12h,11h,10h db 0dh,0ch,0bh,0ah db 0eh,03h,06h,09h db 0fh,02h,05h,08h db 00h,01h,04h,07h code segment assume cs:code,ds
9、:data Delay proc near push ax;延时子程序push cx mov al,0 mov cx,ax loop$pop cx pop ax ret Delay endp DisplayLED proc near mov bx,offset LEDBuf mov cl,6;共6个八段管mov ah,00100000b;从左边开始显示DLoop:mov dx,OUTBIT mov al,0 out dx,al;关所有八段管mov al,bx mov dx,OUTSEG out dx,al mov dx,OUTBIT mov al,ah out dx,al;显示一位八段管pus
10、h ax mov ah,1 call Delay pop ax shr ah,1 inc bx dec cl jnz DLoop mov dx,OUTBIT mov al,0 out dx,al;关所有八段管ret DisplayLED endp TestKey proc near mov dx,OUTBIT mov al,0 out dx,al;输出线置为 0 mov dx,IN_KEY in al,dx;读入键状态not al and al,0fh;高四位不用ret TestKey endp GetKey proc near mov ch,00100000b mov cl,6 KLoop:
11、mov dx,OUTBIT mov al,ch;找出键所在列not al out dx,al shr ch,1 mov dx,IN_KEY in al,dx not al and al,0fh jne Goon_;该列有键入dec cl jnz KLoop mov cl,0ffh;没有键按下,返回 0ffh jmp Exit1 Goon_:dec cl shl cl,2;键值=列 X 4+行mov ch,4 LoopC:test al,1 jnz Exit1 shr al,1 inc cl dec ch jnz LoopC Exit1:mov dx,OUTBIT mov al,0 out dx
12、,al mov ch,0 mov bx,offset KeyTable add bx,cx mov al,bx;取出键码mov bl,al WaitRelease:mov dx,OUTBIT mov al,0 out dx,al;等键释放mov ah,10 call Delay call TestKey jne WaitRelease mov al,bl ret GetKey endp IInit proc near;8251初始化mov dx,CS8251C mov al,01001111b;1停止位,无校验,8数据位,x64 out dx,al mov al,00010101b;清出错标志
13、,允许发送接收out dx,al ret IInit endp Send proc near;串口发送mov dx,CS8251C mov al,00010101b;清出错,允许发送接收out dx,al WaitTXD:in al,dx test al,1;发送缓冲是否为空jz WaitTXD mov al,TBuf;取要发送的字mov dx,CS8251D out dx,al;发送push cx mov cx,0ffffh loop$pop cx ret Send endp Receive proc near;串口接收mov dx,CS8251C WaitRXD:in al,dx test
14、 al,2;是否已收到一个字je WaitRXD mov dx,CS8251D in al,dx;读入mov RBuf,al ret Receive endp start proc near mov ax,data mov ds,ax call IInit mov LEDBuf,0ffh;显示 8.8.8.8.mov LEDBuf+1,0ffh mov LEDBuf+2,0ffh mov LEDBuf+3,0ffh mov LEDBuf+4,0 mov LEDBuf+5,0 MLoop:call DisplayLED;显示mov dx,CS8251C in al,dx;是否接收到一个字test
15、 al,2 jnz RcvData call TestKey;有键入?je MLoop;无键入,继续显示call GetKey;读入键码and al,0fh;显示键码mov TBuf,al call Send jmp MLoop RcvData:call Receive;读入接收到的字mov al,RBuf and al,0fh;只显示低四位mov ah,0 mov bx,offset LEDMAP add bx,ax mov al,bx;转换成显示码mov LEDBuf+5,al jmp MLoop Start endp code ends end start 2.实验步骤(1)按图 10
16、连接实验线路;(2)为两台机器分别编写实验程序,编译、链接后装入系统;(3)为发送机初始化发送数据;(4)首先运行接收机上的程序,等待接收数据,然后运行发送机上的程序,将数据发送到串口。(5)观察接收机端屏幕上的显示是否与发送机端初始的数据相同,验证程序功能。六、改进意见和建议在做这次课程设计时,我就在思考,既然已经实现了两台计算机的通信,那应该如何实现多台计算机的通信那?我会更多的学习接口知识,完成对本次课程设计的改进。七、其他1.完成设计的关键技术要想顺利完成这次课程设计,首先要对8251A芯片有充分的认识,对其基本性能,内部结构,外部引脚以及它的初始化流程等等要十分清楚。正确的编写两台计
17、算机之间通信的实验员程序代码,并根据实验程序连接电路,是本次课程设计成功完成的关键。2.程序设计流程图收到中断的程序流程图如图:Y 开始从 8251A数据口取入一个将此字节显示在微机屏幕上清除 8259A中 ISR的标志接受的字节为“!”?中断结束 IRET 置 IRQ2的中断屏蔽位为 1,即禁止 IRQ2中断开中断 STI 用 INT 21H 的 4CH功能调用返回 DOS N 主程序流程图:3.在本次课程设计中,我和我们组的同学齐心协力,大家一起努力完成了这一次的课程设计。我和王昊同学完成了一台计算机实验箱的连接,其他三名同学完成另一台的连接。实验程序代码是大家共同编写,修改完成的。开始置
18、 8253定时器 1 为模式 3,并赋予其初始值初始化 8251 为 8 个数据位,1 个停止位,波特率因子为16,无奇偶校验,并处于允许接收和发射状态提示用户:“在主机键盘上输入字符”,将显示在终端屏幕上;键入“!”则结束发送过程主机从键盘上输入一个字符并存入BL 从 8251 命令端口取状态字节放入AL 状态字节最低位 TXRDY=1?通过 8251数据口,主机把 BL 中字节送出该字节为“!”吗?显示提示信息:用户在键盘上输入字符,将显示在显示器上,用“!”结束程序将接受中断服务程序的入口地址,写入中断矢量表0AH中断位置开放 IRQ2对应的中断屏蔽位开中断死循环等待硬件中断N N Y Y 七、设计体会课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,微型计算机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握微型计算机的开发技术是十分重要的。通过这次的学习,了解了计算机之间串口通信的原理,以及熟悉了8251A芯片的功能特性和编程方法。