串行接口实验报告(共13页).doc

上传人:飞****2 文档编号:13653799 上传时间:2022-04-30 格式:DOC 页数:13 大小:161.50KB
返回 下载 相关 举报
串行接口实验报告(共13页).doc_第1页
第1页 / 共13页
串行接口实验报告(共13页).doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《串行接口实验报告(共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两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁