实验8(串行接口)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验八串行接口应用实验一、实验目的1、熟悉8251的工作方式及应用编程2、学习RS-232C标准的串行通信接口电路及串行通信收/发程序的设计原理与方法二、实验内容甲乙两台微机之间,按RS-232C标准协议进行零MODEM方式,半双工串行通信。甲机通过键盘向乙机发送字符,发送的字符在甲机的屏幕上显示。乙机接收甲机发来的字符,接收的字符在乙机的屏幕上显示。接收方按任意键,程序退出。发送方按ESC键,程序退出。通信数据格式为1位停止位,7位数据位,无校验位,波特率因子为16,波特率为1200bps。三、实验原理RS232-C标准串行通信接口电路原理如图1所示。接口电路以8251为核心,利用8253提供8251所需的发送/接收时钟,8255的PC6控制8253的GATE2门。另外,还有MAX232作电平转换,MAX491作RS-232与RS-485的转换。端口地址有:8251:数据口=308H,命令/状态口=309H8253:304H~307H8255:300H~303H图1串行通信接口电路原理图1.19318MHz四、实验要求使用3芯屏蔽电缆线,直接将甲乙两机MFID平台板上的RS232-C串行接口插座J7连接起来,如图2所示。分别编写甲机的发送程序和乙机的接收程序,并进行调试,直至程序正常运行。图2RS232-C标准双机串行通信模块连接图五、实验步骤1、跳线设置:JP1JP2JP3JP4JP11跳接2-32-3空/跳接(RXD-TXD)跳接1-2说明零MODEMN方式选择RS232协议双机通信/自发自收收发时钟由OUT2提供用PC6接Gate2六、实验程序流程图七、写出接收端源程序(加注释)八、实验结果分析2、使用3芯屏蔽电缆线直接将甲乙两机MFID平台板上的RS232-C串行接口插座J7连接起来3、将平台的电源开关拨到“内”的位置上4、MF2KP环境下输入汇编源程序,编译、连接、运行,在甲机运行发送程序发送字符,在乙机运行接收程序接收字符。5、观察发送和接收现象编程提示:发送(接受)时钟频率传输率(波特率)波特率因子=发送(接受)时钟频率=波特率因子*波特率计数初始值n=输入脉冲时钟频率*t,t是定时时间=1.19318MHz发送(接受)时钟频率波特率因子*波特率=1.19318MHz检查有无键按下的DOS功能调用功能号:AH=0BH返回参数:AL=00;无键按下AL=0FFH;有键按下说明:若有键按下,该调用不断返回0FFH标志,直到有键盘输入的功能调用(如功能号01H)来实际取走该字符。lop:movah,0bh;检测有键按下?int21hcmpal,00jelop;无,等待movah,01h;有,检测是否是Esc键int21h...发送端程序流程图接收端程序流程图data51equ308h;8251A数据口ctrl51equ309h;8251A命令/状态口ctrl55equ303h;8255命令口timer2equ306h;8253的2号计数器端口timctlequ307h;8253的命令口clk00equ12h;8251输入时钟频率(十六进制表示)clk01equ34dehfactorequ16;波特率因子16【发送段参考程序】:datasegmentbps00dw(?)input_messagedb'nowentertheserialcommunication',0ah,0dhdb'endwithesc',0ah,0dhdb'pleaseinputcharacterstotransmit',0dh,0ah,'$'dataendscodesegmentassumecs:code,ds:datainit51procnear;8251A初始化子程序movdx,ctrl51;8251A命令口xorax,ax;空操作outdx,almoval,40h;8251A内部复位callcharoutmoval,4ah;8251A方式命令callcharoutmoval,23h;8251A工作命令callcharoutret;返回init51endp;以下是各子程序charoutprocnear;送数据子程序outdx,almovcx,100;延时gg:loopggretcharoutendpset_bpsprocnear;8253-5计数初值计算与装入子程序movdx,clk00;取8253-5输入时钟频率clk做被除数movax,clk01movbx,bps00;所选波特率做第一个除数divbx;除法运算,商数送axmovdx,0;余数清零movbx,factor;取波特率因子做第二个除数divbx;除法运算,的计数初值(商数)送axmovbx,ax;保存计数初值至bxmovdx,timctl;8253-5命令口moval,0b6h;8253-5初始化命令outdx,almovdx,timer2;8253-5计数器2的端口movax,bx;取计数初值outdx,al;取计数初值低字节moval,ah;取计数初值高字节outdx,alret;返回set_bpsendpmainprocfar;通信主程序begin:movbps00,1200;送传输率callset_bpscallinit51movdx,ctrl55;初始化8255Amoval,80houtdx,almoval,0dh;置PC6=1,打开8253的GATE2输出方波outdx,almovdx,seginput_message;提示输入信息movds,dxmovdx,offsetinput_messagemovah,09hint21hm0:movah,0bh;读取键盘int21hcmpal,0;有键按下?jem0;无键按下等待movah,01h;将字符在CRT上等待int21hmovbl,al;保存键值cmpal,1bh;是否为ESCjzover;是,则退出movdx,ctrl51;不是,则发送数据m1:inal,dxtestal,01h;发送准备好?RxRDY=1?jzm1;未准备好,则等待movdx,data51;已准备好,则将键入的字符发出去moval,bloutdx,aljmpm0;发送完,在转按键发送over:moval,0ch;关PC6=0,关闭8253的GATE2movdx,ctrl55outdx,almovah,4ch;程序退出int21hmainendpcodeendsendmain

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功