• [芯片] 4、接口技术·实验四·串行接口8251A


    目录

    一、实验目的和要求... 2

    二、实验原理与背景... 3

    三、实验具体的内容... 3

    四、实验的代码说明... 4

    五、实验结果的分析... 6

    附录资料


    一、实验目的和要求

    学会8251芯片和微机接口原理和方法。

    掌握8251串口芯片的基本工作原理、工作方式和编程原理。

    二、实验原理与背景

    TPC-USB平台上有一块8251A串行接口芯片,除了片选引脚,其他信号都已接好。

    三、实验具体的内容

    从键盘输入一个字符,将其ASCII码加 1 后串行发送出去,再从串行口接收回来在屏幕上显示,实现自发自收。收发均采用查询方式。

    步骤如下:

    1)按图3.1连接好电路,(8251插在通用插座上)。其中8253计数器用于产生8251的发送和接收时钟,TxD和RxD连在一起。图示电路8251的控制口地址为2B9H,数据口地址为2B8H。2、8253计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。

     

                图3.1  TPC-USB平台串行实验连接 

     

        2)根据流程图3.2,编程并运行,观察实验结果。 

            图3.2  TPC-USB平台串行实验流程

     

    四、实验的代码说明

     1 data segment
     2  mes1 db 'you can play a key on the keybord!',0dh,0ah,24h
     3  mes2 dd  mes1
     4 data ends
     5 code segment
     6    assume cs:code,ds:data
     7 start:      mov ax,data
     8       mov ds,ax
     9       mov dx,283h       ;设置8253计数器0工作方式3
    10       mov al,16h
    11       out dx,al
    12       
    13       mov dx,280h
    14       mov al,52         ;给8253计数器0送初值
    15       out dx,al
    16      
    17       mov dx,2b9H       ;初始化8251
    18       xor al,al
    19       mov cx,03         ;向8251控制端口送3个0  预处理
    20  delay:     call out1        ;连续发送3个0
    21       loop delay
    22       mov al,40h        ;向8251控制端口送40H,使其复位
    23       call out1
    24       mov al,4eh        ;设置为1个停止位,8个数据位,波特率因子为16
    25       call out1
    26       mov al,27h        ;向8251送控制字允许其发送和接收
    27      call out1
    28       lds dx,mes2       ;显示提示信息
    29       mov ah,09
    30       int 21h
    31 waiti:   mov dx,2b9H
    32 
    33      in al,dx
    34      test al,01         ;发送是否准备好
    35      jz waiti
    36      mov ah,01          ;是,从键盘上读一字符
    37      int 21h
    38      cmp al,27          ;若为ESC,结束
    39      jz exit
    40      
    41      mov dx,2B8H
    42      inc al
    43      mov dl,al
    44      mov ah,02h
    45      int 21h
    46      out dx,al          ;发送
    47      mov cx,40h
    48 s51:       loop s51     ;延时
    49 next:  mov dx,2B9H
    50      in al,dx
    51      test al,02         ;检查接收是否准备好
    52      jz next            ;没有,等待
    53      mov dx,2B8h
    54      in al,dx           ;准备好,接收
    55      mov dl,al
    56      mov ah,02          ;将接收到的字符显示在屏幕上
    57      int 21h
    58      jmp waiti
    59 exit:      mov ah,4ch   ;退出
    60      int 21h
    61 out1 proc near          ;向外发送一字节的子程序
    62       out  dx,al
    63       push cx
    64       mov  cx,40h
    65 gg:       loop gg       ;延时
    66       pop  cx
    67       ret
    68 out1 endp
    69 code ends
    70 end start

    五、实验结果的分析

    从键盘输入一个字符,将其ASCII码加 1 后串行发送出去,再从串行口接收回来在屏幕上显示,实现了自发自收。

     

    附录资料

     

    本文链接:http://www.cnblogs.com/zjutlitao/p/4181380.html

    更多精彩:http://www.cnblogs.com/zjutlitao/p/4125085.html

    文档下载:http://pan.baidu.com/s/1eQcS7Nc

     

  • 相关阅读:
    mybatis 绑定 statement 失败
    JDBC链接Mysql失败
    Mysql 链接数据库时区错误
    mybatis 延迟加载
    C++ 虚函数表解析
    运行错误:error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or
    QComboBox的activated与currentIndexChanged的区别
    QT 文件对话框(QFileDialog)
    VS2010 ERROR:c1xx fatal error c1083
    django 在字符串[str(list)]中精确查找
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/4181380.html
Copyright © 2020-2023  润新知