设计一个进行串行数据传输_第1页
设计一个进行串行数据传输_第2页
设计一个进行串行数据传输_第3页
设计一个进行串行数据传输_第4页
设计一个进行串行数据传输_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 信息科学与技术学院微机原理与接口技术课程设计课题名称:设计一个进行串行数据传输学 生 姓 名: 刘 飞 学 号: 2009082189 专业 、年级: 计科09级1班 指 导 教 师: 裘祖旗 时 间: 2012.1.12 1、题目及要求:1.1题目:设计一个进行串行数据传输。(用程序管理两台计算机之间的传送)1.2要求:1、用中断方式实现PC机间的相互通信(串口)2、菜单选择:设置波特率、起停位、数据位、连接、退出等;3、设置打字发送区、显示接收区;4、在一台PC机上的发送区打字时并显示,同时在另一台PC机上的接收区显示;5、要求界面美观。2、功能设计:2.1、.功能模块:主程序模块mai

2、n 清屏开窗口初始化窗口模块face 输出界面。输入判断模块Get_char 根据输入的数字选择选项,进行跳转。设置波特率模块Baud 进行波特率的设置。 设置起始位模块Start_bit进行起始位的设置设置数据位Data_bits输入的数据宏的作用:清屏(clearscreen) 用于按要求清理屏幕。(不同颜色)定位(locate) 用于移动光标位置,以便按要求输入和输出。输入选择i选择界面选择设置设置完毕发送返回接收开始2.2、.功能图: 3、详细设计:3.1设计的原理(一)8251A的基本性能8251A是可编程的串行通信接口芯片,基本性能:1两种工作方式:同步方式,异步方式。同步方式下,

3、波特率为064K,异步方式下,波特率为019.2K。2同步方式下的格式每个字符可以用5、6、7或8位来表示,并且内部能自动检测同步字符,从而实现同步。除此之外,8251A也允许同步方式下增加奇/偶校验位进行校验。3异步方式下的格式每个字符也可以用5、6、7或8位来表示,时钟频率为传输波特率的1、16或64倍,用1位作为奇/偶校验。1个启动位。并能根据编程为每个数据增加1个、15个或2个停止位。可以检查假启动位,自动检测和处理终止字符。4全双工的工作方式其内部提供具有双缓冲器的发送器和接收器。5提供出错检测具有奇偶、溢出和帧错误三种校验电路。(二)8251A的内部结构1、发送器发送器由发送缓冲器

4、和发送控制电路两部分组成。采用异步方式,则由发送控制电路在其首尾加上起始位和停止位,然后从起始位开始,经移位寄存器从数据输出线TXD逐位串行输出。8251A内部结构图采用同步方式,则在发送数据之前,发送器将自动送出1个或2个同步字符,然后才逐位串行输出数据。如果CPU与8251A之间采用中断方式交换信息,那么TXRDY可作为向CPU发出的中断请求信号。当发送器中的8位数据串行发送完毕时,由发送控制电路向CPU发出TXE有效信号,表示发送器中移位寄存器已空。2接收器接收器由接收缓冲器和接收控制电路两部分组成。接收移位寄存器从RXD引腿上接收串行数据转换成并行数据后存入接收缓冲器。异步方式:在RX

5、D线上检测低电平,将检测到的低电平作为起始位, 8251A开始进行采样,完成字符装配,并进行奇偶校验和去掉停止位,变成了并行数据后,送到数据输入寄存器,同时发出RXRDY信号送CPU,表示已经收到一个可用的数据。同步方式:首先搜索同步字符。8251A监测RXD线,每当RXD线上出现一个数据位时,接收下来并送入移位寄存器移位,与同步字符寄存器的内容进行比较,如果两者不相等,则接收下一位数据,并且重复上述比较过程。当两个寄存器的内容比较相等时,8251A的SYNDET升为高电平,表示同步字符已经找到,同步已经实现。采用双同步方式,就要在测得输入移位寄存器的内容与第一个同步字符寄存器的内容相同后,再

6、继续检测此后输入移位寄存器的内容是否与第二个同步字符寄存器的内容相同。如果相同,则认为同步已经实现。在外同步情况下,同步输入端SYNDET加一个高电位来实现同步的。实现同步之后,接收器和发送器间就开始进行数据的同步传输。这时,接收器利用时钟信号对RXD线进行采样,并把收到的数据位送到移位寄存器中。在RXRDY引脚上发出一个信号,表示收到了一个字符。3数据总线缓冲器数据总线缓冲器是CPU与8251A之间的数据接口。包含3个8位的缓冲寄存器:两个寄存器分别用来存放CPU向8251A读取的数据或状态信息。一个寄存器用来存放CPU向8251A写入的数据或控制。4读/写控制电路读/写控制电路用来配合数据

7、总线缓冲器的工作。功能如下:(1) 接收写信号,并将来自数据总线的数据和控制字写入8251A;(2) 接收读信号,并将数据或状态字从8251A送往数据总线; (3) 接收控制/数据信号C/,高电平时为控制字或状态字;低电平时为数据。 (4) 接收时钟信号CLK完成8251A的内部定时; (5) 接收复位信号RESET,使8251A处于空闲状态。5调制解调控制电路调制解调控制电路用来简化8251A和调制解调器的连接。(三)8251A的引脚功能1、8251A和CPU之间的连接信号8251A和CPU之间的连接信号可以分为四类: a)片选信号 :片选信号,它由CPU的地址信号通过译码后得到。b)数据信

8、号D0-D7:8位,三态,双向数据线,与系统的数据总线相连。传输CPU对8251的编程命令字和8251A送往CPU的状态信息及数据。c)读/写控制信号 :读信号,低电平时, CPU当前正在从8251A读取数据或者状态信息。 :写信号,低电乎时, CPU当前正在往8251A写入数据或者控制信息。 C/:控制/数据信号,用来区分当前读/写的是数据还是控制信息或状态信息。该信号也可看作是8251A数据口/控制口的选择信号。由此可知,、C/这3个信号的组合,决定了8251A的具体操作,它们的关系如表7-3所示:注:数据输入端口和数据输出端口合用同一个偶地址,而状态端口和控制端口合用同一个奇地址。c)收

9、发联络信号 TXRDY:发送器准备好信号,用来通知CPU,8251A已准备好发送一个字符。 TXE:发送器空信号,TXE为高电平时有效,用来表示此时8251A发送器中并行到串行转换器空,说明一个发送动作已完成。 RXRDY:接收器准备好信号,用来表示当前8251A已经从外部设备或调制解调器接收到一个字符,等待CPU来取走。因此,在中断方式时,RXRDY可用来作为中断请求信号;在查询方式时,RXRDY可用来作为查询信号。 SYNDET:同步检测信号,只用于同步方式。28251A与外部设备之间的连接信号8251A与外部设备之间的连接信号分为两类:a) 收发联络信号 :数据终端准备好信号,通知外部设

10、备,CPU当前已经准备就绪。 :数据设备准备好信号,表示当前外设已经准备好。 :请求发送信号,表示CPU已经准备好发送。 :允许发送信号,是对的响应,由外设送往8251A。实际使用时,这4个信号中通常只有必须为低电平,其它3个信号可以悬空。b) 数据信号 TXD:发送器数据输出信号。当CPU送往8251A的并行数据被转变为串行数据后,通过TXD送往外设。 RXD:接收器数据输入信号。用来接收外设送来的串行数据,数据进入8251A后被转变为并行方式。3. 时钟、电源和地8251A除了与CPU及外设的连接信号外,还有电源端、地端和3个时钟端。 CLK:时钟输入,用来产生8251A器件的内部时序。同

11、步方式下,大于接收数据或发送数据的波特率的30倍,异步方式下,则要大于数据波特率的4.5倍。 TXD:发送器时钟输入,用来控制发送字符的速度。同步方式下,TXC的频率等于字符传输的波特率,异步方式下,TXC的频率可以为字符传输波特率的1倍、16倍或者64倍。 RXD:接收器时钟输入,用来控制接收字符的速度,和TXC一样。在实际使用时,RXC和TXC往往连在一起,由同一个外部时钟来提供,CLK则由另一个频率较高的外部时钟来提供。 VCC:电源输入 GND:地(四)8251A的编程编程的内容包括两大方面:一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;二是由8251A向CPU送出的状态

12、字。1方式选择控制字(模式字)方式选择控制字的格式如图所示。2操作命令控制字(控制字)操作命令控制字的格式如下:3、状态字状态字的格式如下: 48251A的初始化 a)芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式寄存器。b)如果模式字中规定了8251A工作在同步模式,c)由CPU用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的值将作为数据送到数据输出缓冲寄存器。3.2设计方案硬件原理图如图5-1所示图5-1 硬件原理图连线图3.2、各功能模块及流程图设置波特率设置开始位设置数据位开始传输退出主菜单设置波特率1bit16bits64bit起始位1bit1.5bi

13、ts2bits数据位5bits6bits7bits8bits3.3重点难点及解决办法: 刚开始拿到这个题目的时候,感觉无从着手,第一难点就是不知道怎么变化状态字,在同学的帮助下,终于知道这是怎么回事!通过查阅书解决了问题。我认为这个程序的重点就是状态字的变化和发送接收。4、总结:学生学习完理论后就要进行课程设计,因为理论课程学习是让学生学习基本理论知识,对课程内容和原理有比较深刻的理解,只要从理论上理解,不用考虑实际的可行性,而课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,不仅需要在理论上能实现而且还要考虑

14、实际的可行性,不能纸上谈兵。随着科学技术发展的日新日异,微型计算机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握微型计算机的开发技术是十分重要的。尤其是在现在这个金融危机的时刻,找工作越来越难,只有加强自身的能力才能有一席立足之地。此次微机原理课程设计,学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思

15、考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说8251A芯片的使用,对汇编语言掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。5、参考文献:1 IBM-PC汇编语言程序设计 沈美明 清华大学出版社 2001年8月第2版2 IBM-PC汇编语言程序设计例题习题集 沈美明 清华大学出版社 1991年6月第1版3微机计算机技术及应用第4版 戴梅萼 史嘉权 2008年2月第4版6、附: 源程序发送程序Cursor macro dh1,dl

16、1,bh1;定位光标 mov ah,2 mov dh,dh1 mov dl,dl1 mov bh,bh1 int 10h endmclear macro ch1,cl1,dh1,dl1,bh1;定义清屏宏 mov ah,6 mov al,0 mov ch,ch1 mov cl,cl1 mov dh,dh1 mov dl,dl1 mov bh,bh1 int 10hendmdata segment esc_key equ 1bh;退出键 len db 10;定义10个字节数组 JUP dw 0,A1,A2,A3,A4 menu1 db =,$ menu2 db Curriculum design

17、 ,$ menu3 db *1.Set Baud rate,$ menu4 db *2.Set Start bit,$ menu5 db *3.Set Data bits,$ menu6 db *4.start transference$ menu7 db *0.exit,$ menu8 db *please enter 0-4: ,$ menu9 db =,$ menuBaud db =,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah db *1-1 bit,0dh,0ah db *2-16 bits,0dh,0ah db *3-64 bits,0dh,0ah db *

18、please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db =,$ menuStart db =,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah db *1-1 bit,0dh,0ah db *2-1.5 bits,0dh,0ah db *3-2 bits,0dh,0ah db *please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db =,$ menuData db =,

19、0dh,0ah db 0dh,0ah,0dh,0ah db *0-5 bits,0dh,0ah db *1-6 bit,0dh,0ah db *2-7 bits,0dh,0ah db *3-8 bits,0dh,0ah db *please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db =,$ menuStart1 db =,0dh,0ah db 0dh,0ah,0dh,0ah db 0dh,0ah db please enter the data:,0dh,0ah db 0dh,0ah db

20、0dh,0ah db 0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db =,$data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax;定义默认模式字为7e mov bl,7ehmain proc far ;清屏开窗口 mov ah,6 mov al,0 mov ch,4 mov cl,19 mov dh,20 mov dl,61 mov bh,13h int 10h mov ah,6;小窗口 mov al,0 mov ch,5 mov

21、 cl,20 mov dh,19 mov dl,60 mov bh,30h int 10h a0: call face;调用菜单 get_char: mov ah,1;从键盘读入 int 21h cmp al,esc_key;比较,是否退出 jz exit cmp al,0 jnb b1;不小于0jmp a0b1: cmp al,4;不大于4 jna b2 jmp a0b2: cmp al,0 je exitand al,0fhshl al,1cbwmov si,axjmp JUPsiA1: call Baud;调用设置波特率的界面jmp a0A2: call Start_bit;调用设置起始

22、位的界面jmp a0A3: call Data_bits;调用设置数据位的界面jmp a0A4:;传送clear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0lea dx,menuStart1mov ah,09h;显示菜单界面int 21hCursor 12,38,0 lea dx,len;输入一串字符 mov ah,0ah int 21h jmp start1 exit: mov ax,4c00h int 21h main endp face proc nearCursor 5,20,0 lea dx,menu1 mov ah,09hin

23、t 21hCursor 6,20,0lea dx,menu2 mov ah,09hint 21hCursor 7,20,0lea dx,menu3 mov ah,09hint 21hCursor 8,20,0 lea dx,menu4 mov ah,09hint 21hCursor 9,20,0 lea dx,menu5 mov ah,09hint 21h Cursor 10,20,0 lea dx,menu6 mov ah,09h int 21hCursor 11,20,0 lea dx,menu7 mov ah,09hint 21hCursor 12,20,0 lea dx,menu8 m

24、ov ah,09h int 21hCursor 19,20,0 lea dx,menu9 mov ah,09hint 21hCursor 12,39,0ret face endp Baud proc near clear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0 lea dx,menuBaud mov ah,09h int 21h Cursor 12,38,0mov ah,01hint 21hcmp al,1je C1 cmp al,2 je C2cmp al,3je C3C1: and bl,11111100B;清除低2位 or bl

25、,00000001B;设置波特率jmp a0C2: and bl,11111100B or bl,00000010B jmp a0C3: or bl, 00000011B jmp a0 Baud endp Start_bit proc near clear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0lea dx,menuStartmov ah,09h int 21h Cursor 12,38,0mov ah,01hint 21hcmp al,1je d1 cmp al,2 je d2 cmp al,3je d3d1: and bl,001

26、11111B;清除高2位 or bl,01000000B;设置起始位 jmp a0d2: and bl,00111111B or bl,10000000B jmp a0d3: or bl, 11000000B jmp a0Start_bit endpData_bits proc nearclear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0lea dx,menuData mov ah,09hint 21h Cursor 12,38,0 mov ah,01hint 21hcmp al,0 je e0cmp al,1 je e1 cmp al

27、,2 je e2 cmp al,3je e3e0: and bl,11110011B;设置数据位jmp a0e1: and bl,11110111B or bl,00000100B jmp a0e2: and bl,11111011B or bl,00001000B jmp a0e3: or bl,00001100B jmp a0Data_bits endp start1: mov al,76h;8253初始化 out 43h,al mov al,0ch out 41h,al mov al,00h out 41h,al call init;8251复位 call dally;延时 mov al

28、,bl;写入模式字 out 81h,al call dally mov al,34h;写入控制字 out 81h,al call dally mov di,dx mov cx,0000aha11: mov al,di;传数 call send call dally inc di loop a11a22: jmp a22;定屏幕init: mov al,00h;先输入3个0 out 81h,al call dally out 81h,al call dally out 81h,al call dally out 80h,al call dally out 80h,al call dally mo

29、v al,40h;再输入40h out 81h,al retdally: push cx;延时 mov cx,3000ha44: push ax pop ax loop a44 pop cx retsend: push ax mov al,31h;拿出来发送 out 81h,al pop ax out 80h,al;输出a33: in al,81h and al,01h;判断状态是否准备好 jz a33 code ends end start接收程序Cursor macro dh1,dl1,bh1 mov ah,2 mov dh,dh1 mov dl,dl1 mov bh,bh1 int 10

30、h endmclear macro ch1,cl1,dh1,dl1,bh1;定义清屏宏 mov ah,6 mov al,0 mov ch,ch1 mov cl,cl1 mov dh,dh1 mov dl,dl1 mov bh,bh1 int 10hendmdata segment esc_key equ 1bh len db 11 JUP dw 0,A1,A2,A3,A4 menu1 db *,$ menu2 db Welcome to enter this interface!,$ menu3 db *1-Set Baud rate,$ menu4 db *2-Set Start bit,$

31、 menu5 db *3-Set Data bits,$ menu6 db *4-start transference$ menu7 db *0-exit,$ menu8 db *please enter 0-4: ,$ menu9 db *,$ menuBaud db *,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah db *1-1 bit,0dh,0ah db *2-16 bits,0dh,0ah db *3-64 bits,0dh,0ah db *please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0a

32、h,0dh,0ah,0dh,0ah db *,$ menuStart db *,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah db *1-1 bit,0dh,0ah db *2-1.5 bits,0dh,0ah db *3-2 bits,0dh,0ah db *please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db *,$ menuData db *,0dh,0ah db 0dh,0ah,0dh,0ah db *0-5 bits,0dh,0ah db *1-6 bit

33、,0dh,0ah db *2-7 bits,0dh,0ah db *3-8 bits,0dh,0ah db *please enter 1-3:,0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah db *,$ menuStart1 db *,0dh,0ah db 0dh,0ah,0dh,0ah db 0dh,0ah db the data is:,0dh,0ah db 0dh,0ah db 0dh,0ah db 0dh,0ah db 0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah

34、 db *,$data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov bl,7ehmain proc far mov ah,6 mov al,0 mov ch,4 mov cl,19 mov dh,20 mov dl,61 mov bh,13h int 10h mov ah,6 mov al,0 mov ch,5 mov cl,20 mov dh,19 mov dl,60 mov bh,30h int 10h a0: call face get_char: mov ah,1 int 21h cmp

35、al,esc_key jz exit cmp al,0 jnb b1jmp a0b1: cmp al,4 jna b2 jmp a0b2: cmp al,0 je exitand al,0fhshl al,1cbwmov si,ax jmp JUPsi A1: call Baud jmp a0A2: call Start_bit jmp a0A3: call Data_bitsjmp a0A4: clear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0lea dx,menuStart1mov ah,09hint 21hCursor 12,3

36、8,0 jmp start1 exit: mov ax,4c00h int 21h main endp face proc near Cursor 5,20,0 lea dx,menu1 mov ah,09hint 21hCursor 6,20,0 lea dx,menu2 mov ah,09hint 21hCursor 7,20,0lea dx,menu3 mov ah,09hint 21hCursor 8,20,0lea dx,menu4 mov ah,09hint 21hCursor 9,20,0 lea dx,menu5 mov ah,09h int 21h Cursor 10,20,

37、0 lea dx,menu6 mov ah,09hint 21h Cursor 11,20,0 lea dx,menu7 mov ah,09h int 21h Cursor 12,20,0 lea dx,menu8 mov ah,09hint 21hCursor 19,20,0 lea dx,menu9 mov ah,09h int 21hCursor 12,39,0ret face endp Baud proc near clear 4,19,20,61,13h clear 5,20,19,60,30h Cursor 5,20,0lea dx,menuBaudmov ah,09hint 21h Cursor 12,38,0mov ah,01hint 21hcmp al,1je C1cmp al,2je C2cmp al,3je C3C1: and bl,11111101B or bl,00000001B jmp a0C2: and bl,11111110B or bl,00000010Bjmp a0C3: or bl, 00000011B jmp a0Baud endpStart_bit proc near clear 4,19,20,61,13h clear 5,20,19,60,30

温馨提示

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

最新文档

评论

0/150

提交评论