串行接口 文档
- 格式:docx
- 大小:22.57 KB
- 文档页数:4
课程实验报告实验名称:串行接口专业班级:学号:姓名:同组人员:指导教师:报告日期:实验二1. 实验目的 (3)2. 实验内容 (3)3. 实验原理 (3)4. 程序代码 (6)5. 实验体会 (13)实验二1.实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2.实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。
2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。
3.实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4.8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟频率/(波特率×波特率因子)本实验:脉冲源=1MHz波特率=1200波特率因=16计数初值= 1000000/1200*16=527.程序流程框图4.程序代码Fxc.asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz nextmov dl,0ffh ;有键盘输入,读入字符mov ah,06hint 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend startSend .asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址buf3 byte 0mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz next; mov dl,0ffh ;有键盘输入,读入字符;mov ah,06h; int 21hmov dx,28ahin al,dxcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend start步进电机:1.K0=0,逆时针转;K0=1,顺时针转2.K1=0,慢转;K1=1,快转data segmentbuf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示buf2 byte 0 ;步进电机数据buf3 byte 0 ;保存开关数据buf4 byte 0 ;保存顺转数据buf5 byte 9 ;保存反转数据buf6 byte 0 ;开关机data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov buf2,00110011b ;步进电机数据mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;-----------------------------逆转控制----------------R0: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jnz kai ;转反转test al,01 ;测试K0=1?jnz L0 ;转反转mov al,buf4 ;走马灯开始一步顺转cmp al,9jnz S1call change9_0S1: inc al ;数据加1mov buf4,almov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;数据完成加1mov al,buf2 ;电机开始一步逆转ror al,1 ;数据左移mov buf2,almov dx,288h ;A口输出out dx,al ;电机完成一步逆转mov al,buf3 ;回复C口数据test al,02jnz R1 ;转快转call delay_s ;否则慢转jmp R0R1: call delay_q ;快转jmp R0;------------------------------顺转控制-----------------L0: mov al,buf5 ;走马灯开始一步顺转cmp al,0jnz S2T2: test al,03 ;测试K2=1?jnz T2call change0_9S2: dec al ;数据减1mov buf5,al ;mov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;走马灯结束一步顺转mov al,buf2 ;电机开始一步顺转rol al,1 ;数据右移mov buf2,almov dx,288h ;A口输出out dx,al ;电机结束一步顺转mov al,buf3 ;回复C口数据test al,02jnz L1 ;转快转call delay_s ;否则慢转jmp R0T3: test al,03 ;测试K2=1?jnz T3L1: call delay_q ;快转jmp R0kai: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jz L0 ;转反转jmp kaiexit: mov ah,4chint 21hdelay_s proc near ;长延时mov bx,20hlp1: mov cx,0ffffhlp2: loop lp2dec bxjnz lp1retdelay_s endpdelay_q proc near ;短延时mov bx,1lp11: mov cx,0ffffhlp22: loop lp22dec bxjnz lp11retdelay_q endpchange9_0 proc nearmov buf4,-1mov al,buf4retchange9_0 endpchange0_9 proc nearmov buf5,10mov al,buf5retchange0_9 endpcode endsend start5.实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。
串行就是只有一跟数据线,每个时钟脉冲下只能发送一位的数据,并行有多个数据线(几跟就是几位),在每个时钟脉冲下可以发送多个数据位(几位的并行口就发送几位),理论上并行是比串行快。
但是并行的比串行快那是以前的事情了,目前电脑的主流都是由串行取代了并行,比如PCI—E 总线取代PCI和AGP总线,SATA取代IDE,USB和IEEE 1394都是串行的。
因为在高速状况下,并行口的几跟数据线之间存在串扰,而并行口需要信号同时发送同时接受,任何一跟数据线延迟会引起问题。
而串行只有一跟数据线,不存在信号先之间的串扰,而且传行好可以采用低压差分信号,可以大大提高它的抗干扰性,所以速度可以做的很高,尽管并行可以一次传多个数据位,但是时钟远远低于传行的,所以目前串行传输是告诉传输的首选。
串行通信概述通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。
串行通信是其中一种数据通信方式,常使用于计算机与计算机、计算机与外设之间的远距离通信。
串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。
使用串口通信时,发送和接收到的每一个字符
目录
∙串行通信概述
∙串行通行的分类
∙串行通信的特点及与并行通信的区别
∙串行通信的数据传输方式
∙串行通信的调幅方式
∙串行通信的数据传输速率
串行通信概述
∙通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。
串行通信是其中一种数据通信方式,常使用于计算机与计算机、计算机与外
设之间的远距离通信。
串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的
串行传送。
使用串口通信时,发送和接收到的每一个字符实际上都是一次一
位的传送的,每一位为1或者为0。
串行通行的分类
∙1.同步通信
它是一种在发送端发送一个抑抑制载波的双边带信号,而在接收端恢复载波,再进行检波的通信方式。
因为恢复的载波与被接收的信号载波同频同相,故
取名为同步通信,也称抑制载波双边带通信。
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。
信息中含有若干个数据字符。
它们均由CRC即同步字符、数据字符和
校验字符组成。
同步字符位于帧开头,用于确认数据字符的开始;数据字符
位于同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验
字符一般有1到2个,用于接收端对接收到的字符序列进行正确性的校验。
同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
2.异步通信
异步通信有两个比较重要的指标:字符帧格式和波特率。
其数据通常以字符或者字节为单位组成字符帧传送,字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。
发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。
串行通信的特点及与并行通信的区别
∙其数据的传送按位顺序进行,最少只需。
要一根传输线即可完成,成本低,但速度慢。
计算机与远程终端或终端之间的数据通常都是串行的串行数据传送的距离可以从几米到几千公里。
而并行通信是各数据位同时传送,传送速度快、效率高。
但有多少数据位就需要有多少根数据线,因此传送成本高。
串行通信的数据传输方式
∙在串行通信中,数据是在两个站之间传送的。
按照数据传送方向,串行通信可分为单工、半双工和全双工。
1.在单工方式下,通信线的一端接发送器,他们形成单向连接,只允许数据
按照一个固定的方向传送。
2.在半双工方式下,系统中的每个通信设备都由一个发送器和一个接收
器组成,通过收发开关接到通信线上。
在这种方式下,数据能够实现双方向传送,但任何时刻只能由其中的一方发送数据,另一方接收数据。
3.在全双工方式下,不同于半双工方式下数据的交替发送和接收,而是
同是发送和接收。
全双工通信系统的每端都含有发送器和接收器,数据可以同时在两个方向上传送。
串行通信的调幅方式
∙串行数据在传输时通常采用调幅(AM)和调频(FM)两种方式传送数字信息。
远程通信时,发送的数字信息,如二进制数据,首先要调制成模拟信
息。
幅度调制是用某种电平或电流来表示逻辑“1”,称为传号(mark);而
用另一种电平或电流来表示逻辑“0”,称为空号(space)。
出现在传输线上
的mark/space的串行数据形式。
使用mark/space形式通常有四种标准,60mA电流环标准、20mA电流环标
准、RS-232标准和TTL标准。
1. 60mA电流环标准。
线路中存在60mA电流表示逻辑1,不存在60mA
电流表示逻辑0。
2. 20mA电流环标准。
线路中存在20mA电流表示逻辑1,不存在20mA
电流表示逻辑0。
3. RS-232标准:用-5V— -15V之间的任意电平表示逻辑“1” ;用+5V —
+15V电平表示逻辑“0”,这里采用的是负逻辑。
4. TTL标准:用+5V电平表示逻辑“1”;用0V电平表示逻辑“0”,这里采
用的是正逻辑。
串行通信的数据传输速率
∙数据传输率是指单位时间内传输的信息量。
它可分为两种表示方式:比特率(RB)和波特率(Rb)。
比特率是用单位时间内传输的二进制代码的有
效位(bit)数来表示,又称码率、数据带宽。
波特率是指每秒传输的符号数,
若每个符号所含的信息量为1比特,则波特率等于比特率。