欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    8251实验-10页精选文档.doc

    • 资源ID:33825940       资源大小:151.50KB        全文页数:10页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    8251实验-10页精选文档.doc

    如有侵权,请联系网站删除,仅供学习与交流8251实验【精品文档】第 10 页浙江工业大学计算机学院实 验 报 告 四实验名称 8251实验 教 师 雷艳静 日 期 2014.12.18 一、实验内容与要求1.1 实验内容 从键盘输入一个字符,将其ASCII码加3后串行发送出去,再从串行口接收回来在屏幕上显示,实现自发自收。将输入的字符ASCII码加3输出,假设输入的字符是A,那么加3后输出的就是D,以此类推,可以得出如1.1表: 表1.1 输入ABCDEFGHIGKLM输出DEFGHIGKLMNOP输入NOPQRSTUVWXYZ输出QRSTUVWXYZABC要注意的是输出到Z结束之后,A,B,C三个字母没有输出,所以此处实验应该循环到字母表开始,将A,B,C输出。1.2 实验要求 实验效果:(1)从键盘上随意输出一个字母,将其ASCII码加3后显示在屏幕上;(2)大小写要一致;(3)输入输出的字母要与表1.1一样;(4)由8253A计数器产生发送和接收时钟;由8251A的芯片功能实现自发自收。(5)8253A的计数初值设为52,计数器0。8251A的发送数据是1个停止位,8个数据位,波特率因子为16。二、实验原理与硬件连线2.1 实验原理 TCP-USB平台上有一块8251A串行接口芯片。它是一种可编程的通用同步/异步接收发送器,其基本性能如下: 可以工作在同步或异步串行通信方式。工作在同步方式时,波特率为064Kbout/s。工作在异步方式时,波特率为019.2Kbout/s。 具有独立的发送器和接收器,能以单工、半双工和全双工方式进行通信。 同步方式时,字符可选择为58位,可用内、外同步,自动插入同步字符。 异步方式时,字符可选择58位,波特率因子可选为1、16、64. 提供基本的控制信号,可方便的与Modem相连。 8251A的内部组成中有发送器和接收器。它们可以发生/接收控制电路和管理所有的发送/接收操作。数据总线缓冲器可以使8251A与CPU之间传送数据、状态和控制信息。读写控制逻辑可以接收CPU送来的控制信号。8251A的外部引脚包括发送引脚、接收引脚,读写控制逻辑引脚。发送引脚用来发送数据,接收引脚用来接收外部数据。读写控制逻辑来控制数据的读写,这里时钟信号输入端在异步和同步两种方式的下频率的大小与波特率会有变化。 上面是8251A的硬件结构功能,通过对8251A的初始化编程,可以进行各种应用。8251A的控制字:方式控制字,用来决定8251A工作在同步还是异步方式,以及数据格式。操作命令字,可是8251A工作在规定的状态。状态字,放在8251A的状态寄存器中,可由CPU读出。2.2 硬件连线 实验中需要将8251A的方式控制字,操作命令字送到控制端口,要连接8251A芯片的端口,8251A的复位信号连接实验板上的复位信号。而实验中要8253计数器用于产生8251的发送和接收时钟,所以连接的端口是280H287H,发送器也要相应的连接到8253的OUT端。8253芯片的时钟控制端也要与8251的时钟控制端相连。电路8251的控制口地址为2B9H,数据口地址为2B8H。8253计数器的计数初值=时钟频率/(波特率*波特率因子),这里的时钟频率为1MHz,波特率若选1200,波特率因子若选为16,则计数器初值为52。8253的GATE端输入高电平(高电平有效)。8251的VCC接高电平,GND、CTS两端接地。硬件连接图如图2.2 图2.2三、设计思路、步骤和程序流程图3.1 设计思路 首先写好数据项,将数据项送ds保存,然后设置8253A计数器0和工作方式送8253端口b(即283H)保存。给8253计数器0送初值,计数器初值为52,8253A初始化完成。 初始化8251,8251端口b(即2B9H)送dx保存。将al清0,以便之后数据送入。向8251控制端口送3个0,完成8251初始化。 写8251的发送程序:首先向8251控制端口送40H,使其复位。设置停止位,数据位,波特率因子。由实验要求可知设置为1个停止位,8个数据位,波特率因子为16。 向8251发送控制字允许其发送和接收,调用子程序out发送数据。显示提示信息。(这里lds指令是从存储器取出32位地址.),out子程序:向外发送字节的子程序 发送程序:从8251端口b读取设备状态。利用test指令检测发送是否准备好。(测试第0位是否为1,为1则从键盘上读取一个字符。否,则跳转进行test指令继续测试。这里从键盘上读入的字符的ASCII码和27(27是ESC的ASCII码)比较,如果相等,则跳出。如果不是,则将字符加3之后与5ah(Z的ASCII码)比较,如果相等,则跳转到子程序ll,如果不是则字符的ASCII码减26,然后跳转ll子程序,然后发送该字符。这里ll子程序是将字符送al保存,然后输出。因为发送需要一段时间,所以这里添加一段延时程序。接收程序:从5251端口b读取发送的字符。用test指令检测接收是否准备好,如果没有,跳回继续检测。准备好,从8251端口a接收。接收到后保存在al中调用2号功能,将接收到的字符显示在屏幕上。跳回发送程序。退出程序。3.2 实验步骤仔细阅读实验内容和预期所要达到的执行效果。参考8253A芯片的各种工作方式和计数器功能。8251的发送和接收功能,控制字等内容,然后根据实验内容写自发自收功能程序。熟悉各个硬件连接方式与8253A和8251芯片的连接。根据设计思路写好程序流程图,根据流程图编程。编程过程中可以根据程序适当的修改程序流程图。运行并观察实验结果,看是否与实验内容,预期效果一致,如果一致,实验完成。如果不一致,修改程序并再次运行。根据得到的实验结果了解8251芯片可以实现的各种功能,并考虑它可以实现其他功能3.3 程序流程图如图3.3四、程序清单与执行结果4.1 程序清单 data segment mess db 'you can play a key on the keybord!',0dh,0ah,24hdata endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,283h ;设置8253计数器0工作方式 mov al,16h out dx,al mov dx,280h mov al,52 ;给8253计数器0送初值 out dx,al mov dx,2b9h ;初始化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 mov dx,offset mess ;显示提示信息 mov ah,09 int 21hwaiti: mov dx,2b9h in al,dx test al,01 ;发送是否准备好 jz waiti mov ah,01 ;是,从键盘上读一字符 int 21h cmp al,27 ;若为ESC,结束 jz exit add al,03h cmp al,5ah jl ll sub al,26 jmp ll out dx,al ;发送 mov cx,40hll: mov dx,2b8h out dx,als51: loop s51 ;延时next: mov dx,2b9h in al,dx test al,02 ;检查接收是否准备好 jz next ;没有,等待 mov dx,2b8h in al,dx ;准备好,接收 mov dl,al mov ah,02 ;将接收到的字符显示在屏幕上 int 21h jmp waitiexit: mov ah,4ch ;退出 int 21hout proc near ;向外发送一字节的子程序 out dx,al push cx mov cx,40hgg: loop gg ;延时 pop cx ret jmp startout1 endpcode endsend start4.2 执行结果执行后的结果要与表1.1字母对应一致。如下图4.2五、程序调试说明和实验感想5.1 调试说明这次实验的代码有很多问题。首先,这次代码有几个子程序,在写代码之前没有理清楚,所以反反复复不知道应该从哪儿开始写。完成之后忘记测试接收器是否准备好接收,所以程序不断出错。通过向别人请教后发现要先测试。读入字符后也要先检查是否是ESC键,这里比较的是ASCII码,但是字符每次加3后计算结果需要经过ASCII码转换,大小写的ASCII码不一样,所以后面加减的数值是不一样的,所以这里转换调试出了很多问题,最后查清楚了字母表的ASCII码转换值才写出来,还有就是这里不能调用INT 21H的9号功能,因为9号功能输出的是字符串,而我们这里显示输出的是字符。5.2 实验感想与收获8251A作为串行通信接口,时序是非常重要的,输入输出之间的时间差必须控制得合适,否则就不能正常收发,这可以通过软件编程实现,当时序不符合时,可插入等待时间,即软件延时。仔细了解异步通信和同步通信的不同功能,这样才能加深8251A芯片的功能。 5.3 实验特色前面的8251A的初始化程序应该和大家的都差不多,最主要不同的是就是大家字母显示比较输出的是小写字母,而我的是大写字母,当然这里的不同仅仅是加减数值的不同而已,因为大小写的ASCII码不一样,解题思路和过程其实都是一样的,只是显示的时候有点变化而已。5.4 展望 这里的实验是根据8251A的串行自发自收的形式进行的,如果有时间的时候希望可以实验接收器和发送器分开来做,然后增加一些其他功能,如可以用到8255A的锁存器和缓冲器功能,发送器发送的时候可以检测接收器是否已将数据接收完毕,如果没有接收完则先锁存要发送的数据,等到接收器接收完后再发送。这样每次发送器发送完数据后就不用写延时程序了,可以用8255A完成该功能。

    注意事项

    本文(8251实验-10页精选文档.doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开