《串行接口实验报告(共13页).doc》由会员分享,可在线阅读,更多相关《串行接口实验报告(共13页).doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上课 程 实 验 报 告实验名称: 串行接口 专业班级: 学 号: 姓 名: 同组人员: 指导教师: 报告日期: 实验二实验二1. 实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2. 实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验
2、箱的 8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。3. 实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4. 8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟
3、频率/(波特率 波特率因子)本实验:脉冲源=1MHz 波特率=1200 波特率因=16计数初值= /1200*16=52NYYN读入字符显示在屏幕上为ESC?接收准备好?NY发送字符接收字符从键盘接收一字符发送准备好?接收字符显示在屏幕上初始化8253,设置工作方式和计数初值初始化8251,先后传方式和工作命令字结束开始7.程序流程框图4.程序代码Fxc.asm;*;*8251串行通讯(自发自收)*;*;data segment io8253a equ 280h ;8253计数0端口地址 io8253b equ 283h ;8253控制端口地址 io8251a equ 2b8h ;8251数据
4、端口地址 io8251b equ 2b9h ;8251控制端口地址 mes1 db you can play a key on the keybord!,0dh,0ah,24h mes2 dd mes1data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,io8253b ;设置8253计数器0工作方式 mov al,16h ;控制字为B out dx,al mov dx,io8253a mov al,52 ;给8253计数器0送初值 out dx,al mov dx,io8251b ;初始
5、化8251 ;xor al,al ;mov cx,03 ;向8251控制端口送3个0 ;delay: call out1 ;loop delay mov al,40h ;向8251控制端口送40H,使其复位 call out1 mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1 mov al,27h ;向8251送控制字允许其发送和接收 call out1 lds dx,mes2 ;显示提示信息 mov ah,09 int 21hwaiti: mov dx,io8251b in al,dx test al,01 ;发送是否准备好 jz next mov
6、ah,0bh int 21h test al,0ffh ;检测是否有键盘输入 jz next mov dl,0ffh ;有键盘输入,读入字符 mov ah,06h int 21h cmp al,27 ;若为ESC,结束 jz exit mov dx,io8251a ;inc al out dx,al ;发送 ; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251b in al,dx test al,02 ;检查接收是否准备好 jz waiti ;没有,等待 mov dx,io8251a in al,dx ;准备好,接收 mov dl,al mov a
7、h,02 ;将接收到的字符显示在屏幕上 int 21h jmp waitiexit: mov ah,4ch ;退出 int 21hout1 proc near ;向外发送一字节的子程序 out dx,al ;push cx ;mov cx,40h;gg: loop gg ;延时 ; pop cx retout1 endpcode endsend startSend .asm ;*;*8251串行通讯(自发自收)*;*;data segment io8253a equ 280h ;8253计数0端口地址 io8253b equ 283h ;8253控制端口地址 io8251a equ 2b8h
8、;8251数据端口地址 io8251b equ 2b9h ;8251控制端口地址buf3 byte 0 mes1 db you can play a key on the keybord!,0dh,0ah,24h mes2 dd mes1data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,io8253b ;设置8253计数器0工作方式 mov al,16h ;控制字为B out dx,al mov dx,io8253a mov al,52 ;给8253计数器0送初值 out dx,al
9、mov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化 mov al,81h ;1000,0001 out dx,al ;xor al,al ;mov cx,03 ;向8251控制端口送3个0 ;delay: call out1 ;loop delay mov al,40h ;向8251控制端口送40H,使其复位 call out1 mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1 mov al,27h ;向8251送控制字允许其发送和接收 call out1 lds dx,mes2 ;显示提示信息 mov ah,
10、09 int 21hwaiti: mov dx,io8251b in al,dx test al,01 ;发送是否准备好 jz next mov ah,0bh int 21h test al,0ffh ;检测是否有键盘输入 jz next ; mov dl,0ffh ;有键盘输入,读入字符 ;mov ah,06h ; int 21hmov dx,28ahin al,dx cmp al,27 ;若为ESC,结束 jz exit mov dx,io8251a ;inc al out dx,al ;发送 ; mov cx,40h;s51: loop s51 ;延时next: mov dx,io825
11、1b in al,dx test al,02 ;检查接收是否准备好 jz waiti ;没有,等待 mov dx,io8251a in al,dx ;准备好,接收 mov dl,al mov ah,02 ;将接收到的字符显示在屏幕上 int 21h jmp waitiexit: mov ah,4ch ;退出 int 21hout1 proc near ;向外发送一字节的子程序 out dx,al ;push cx ;mov cx,40h;gg: loop gg ;延时 ; pop cx retout1 endpcode endsend start步进电机: 1.K0=0,逆时针转;K0=1,顺
12、时针转 2.K1=0,慢转;K1=1,快转data segment buf1 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 segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov buf2,b ;步进电机数据 mov dx,28bh ;8255控制口初始化
13、 mov al,81h ;1000,0001 out dx,al;-逆转控制-R0: mov dx,28ah ;读C口 in al,dx mov buf3,al ;保存C口数据 test al,04 ; jnz kai ;转反转 test al,01 ;测试K0=1? jnz L0 ;转反转 mov al,buf4 ;走马灯开始一步顺转 cmp al,9 jnz S1 call change9_0S1: inc al ;数据加1 mov buf4,al mov bx,offset buf1 xlat mov dx,289h ;B口输出 out dx,al ;数据完成加1 mov al,buf2
14、 ;电机开始一步逆转 ror al,1 ;数据左移 mov buf2,al mov dx,288h ;A口输出 out dx,al ;电机完成一步逆转 mov al,buf3 ;回复C口数据 test al,02 jnz R1 ;转快转 call delay_s ;否则慢转 jmp R0 R1: call delay_q ;快转 jmp R0;-顺转控制-L0: mov al,buf5 ;走马灯开始一步顺转 cmp al,0 jnz S2T2: test al,03 ;测试K2=1? jnz T2 call change0_9 S2: dec al ;数据减1 mov buf5,al ; mo
15、v bx,offset buf1 xlat mov dx,289h ;B口输出 out dx,al ;走马灯结束一步顺转 mov al,buf2 ;电机开始一步顺转 rol al,1 ;数据右移 mov buf2,al mov dx,288h ;A口输出 out dx,al ;电机结束一步顺转 mov al,buf3 ;回复C口数据 test al,02 jnz L1 ;转快转 call delay_s ;否则慢转 jmp R0T3: test al,03 ;测试K2=1? jnz T3 L1: call delay_q ;快转 jmp R0kai: mov dx,28ah ;读C口 in a
16、l,dx mov buf3,al ;保存C口数据 test al,04 ; jz L0 ;转反转 jmp kaiexit: mov ah,4ch int 21hdelay_s proc near ;长延时 mov bx,20h lp1: mov cx,0ffffh lp2: loop lp2 dec bx jnz lp1 retdelay_s endpdelay_q proc near ;短延时 mov bx,1 lp11: mov cx,0ffffh lp22: loop lp22 dec bx jnz lp11 retdelay_q endpchange9_0 proc near mov
17、buf4,-1 mov al,buf4 retchange9_0 endpchange0_9 proc near mov buf5,10 mov al,buf5 retchange0_9 endpcode ends end start5. 实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。专心-专注-专业