串行接口实验—双机通信
基于RS232双机通信实验

实验报告基于RS232双机通信实验一、实验目的1、理解串行通信的基本概念和51系列单片机的串行通信接口结构。
2、理解现场仪表的通讯过程二、实验内容1、使用串口实现单片机1与单片机2的数据通信,实现互相控制。
要求按下单片机1系统板上的按键,单片机2系统板上LED点亮。
三、实验环境1、编程软件keil2、仿真软件proteus四、实验原理MAX232芯片用于电平转换,实现RS232电平与TTL电平(单片机)的互相转换。
本次实验单片机之间通信不使用握手信号,只需3根信号线:TXD(发送线),RXD(接收线),GND(地线)。
单片机之间通信的原理图如图1所示,当单片机1(主机) 查询外接控制开关S3按下时,单片机1发送一个自定义信号给单片机2(从机),单片机2收到信号后点亮指示灯LED4。
图1 单片机之间通信的原理图五、实验过程1、实现实验要求(1)实验程序主机程序:#include<reg51.h>void main(){TMOD=0x20; //使用T1定时器工作方式2SCON=0X50; //使用串行接口方式一TH1=0XFD; //设置T1的初始值,使得波特率为9600TL1=0XFD;PCON=0x00;TR1=1; //启动T1定时器P1=0xff; //设置P1口初始值while(1) //开始死循环{SBUF=P1; //将P1值给SBUFwhile(!TI); //等待发送完成TI=0; //发送标志位置零等待下次发送}}从机程序:#include<reg51.h>void main(){TMOD=0x20; //使用T1定时器工作方式2SCON=0X50; //使用串行接口方式一TH1=0XFD; //设置T1的初始值,使得波特率为9600TL1=0XFD;PCON=0x00;TR1=1; //启动T1定时器P1=0xff; //设置P1口初始值while(1){P1=SBUF; //接受数据并用P1口显示while(!RI); //等待接受完成RI=0; //关闭接受使能位,等待下次接送}}(2)仿真图2、升级使得按钮按下闪三次并LED显示,每按下按钮显示加一,当LED达到15后重新开始计数。
实验六 双机通信

系别
计算机系
班级
B110507
学号
姓名
课程名称
பைடு நூலகம்单片机原理及其应用
实验日期
2013-10-28
实验名称
双机通信
成绩
实验目的:
掌握串行口通信工作原理。
实验原理:
实验电路原理图如图1所示,图中1#机的发送线与2#机的接收线相连,1#机的接收线与2#机的发送线相连,共阴极BCD数码管BCD_LED1和BCD_LED2分别接各机的P2口,两机共地(默认),晶振为11.0592MHz,波特率为2400bps,串口方式1。(实验电路所用元件见表1)
(3)在uVision3中进行C51串行通信程序的编写、编译及调试;
(4)启动ISIS的仿真运行,并进行联机调试。
仿真结果:
图3仿真结果
1#机发送程序:(查询法)
#include <reg51.h>
#define uchar unsigned char
void delay(unsigned int time) //定义延时函数
if(RI==1)
{
RI=0; //若接收完成,清RI标志位
receiv=SBUF; //取得接收值
SBUF=receiv; //结果返回1#机
P2=receiv; //显示接收值
}
}
实验小结:
经过这次的上机实验,我掌握了串行口通信的工作原理,熟悉C51单片机的编程与调试方法,掌握Proteus ISIS模块的原理图绘图方法及及单片机系统仿真运行方法。同时在实现串行通信功能时提高了程序的编写及调试能力,在1#机中用了查询RI和TI标志位的软件查询结果完成发送程序功能,在2#机中根据RI和TI的中断请求,在中断函数中完成接收程序功能,两种方法结合实现实验要求程序功能,灵活的应用课堂上学到的理论知识。
双机通讯实验报告

双机通讯实验报告双机通信实验报告一、实验目的通过本次实验,目的在于掌握双机通信的基本原理和实现方法,并学习使用标准通信协议。
二、实验原理1.双机通信的基本原理双机通信是指两台独立工作的计算机之间进行数据传输和交流的过程。
双机通信可以通过物理连接(如串口、并口等)或网络连接(如以太网、局域网等)进行。
2.串口通信原理串口通信是最常见的双机通信方式之一、串口通信是指通过串行接口进行数据传输。
在串口通信中,数据位、波特率、校验位等参数需要进行设置。
通过使用串口线将两台计算机的串口连接,可以实现数据的互传和通信。
三、实验步骤1.准备工作(1)在两台计算机上安装串口驱动程序。
(2)将两台计算机通过串口线连接。
2.设置参数(1)打开计算机的设备管理器,找到串口的端口号。
(2)在串口通信软件上,根据设备管理器上的端口号设置串口的属性,包括波特率、数据位、校验位等。
3.建立连接(1)在发送端的计算机上,打开串口通信软件。
(2)在接收端的计算机上,也打开串口通信软件,并设置与发送端相同的参数。
4.进行通信(1)在发送端的计算机上,输入要发送的数据。
(2)点击发送按钮,数据会通过串口线发送到接收端的计算机。
(3)接收端的计算机会接收到数据,并在串口通信软件中显示。
四、实验数据与结果通过本次实验,我们实现了两台计算机之间的双机通信。
在发送端的计算机上,我们输入了字符串“Hello, World!”并通过串口发送到接收端的计算机。
在接收端的计算机上,我们成功收到了发送的数据,并在串口通信软件中显示出来。
五、实验分析与讨论通过本次实验,我们学会了使用串口通信实现两台计算机之间的双机通信。
串口通信具有轻量级、传输速度快的特点,适用于小型数据的传输和通信。
但是串口通信的距离受限,通信距离较短。
六、实验总结通过本次实验,我们深入了解了双机通信的实现原理和方法,并了解了串口通信的基本原理和设置方法。
通过实际操作,我们掌握了串口通信的步骤和技巧。
单片机双机串行实验报告

单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理1.串行通信:串行通信是将数据一个个位发送或接收的方式。
数据通过一个线路逐位发送或接收,可以减少通信所需的线路数目。
2. UART串口通信:UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的简称,是一种最常用的串口通信方式,通常用于单片机与计算机、单片机与单片机之间的通信。
3.串口模块:串口模块是负责将数据转变为串行传输的硬件模块,包括发送端和接收端。
通过设置波特率、数据位、校验位和停止位等参数,可以实现数据的可靠传输。
4.单片机串口通信:单片机内部集成了UART串口通信接口,只需要通过相应的寄存器配置,可以实现串口通信功能。
5.双机串行通信:双机串行通信是通过串口将两台单片机进行连接,一台单片机作为发送端,负责将数据发送出去;另一台单片机作为接收端,负责接收并处理发送的数据。
三、实验器材与软件1.实验器材:两台单片机、USB转TTL模块、杜邦线若干。
2. 实验软件:Keil C51集成开发环境。
四、实验内容与步骤1.配置发送端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的TXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写发送端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口发送中断。
(4)循环发送指定的数据。
2.配置接收端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的RXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写接收端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
串行接口实验

串行接口实验一、实验目的✓熟悉串行接口芯片8251的工作原理✓掌握串行通讯接收/发送程序的设计方法二、实验内容✓实现串行接口的双机通讯通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过8251数据口发送,并在B电脑上的8251数据口接收到这个字符,然后在B电脑屏幕上显示。
2.将在第一次实验程序与前面双机通信程序组合在一起,从A试验箱上使用开关控制B试验箱上的步进电机转动,而从B试验箱上使用开关控制A试验箱上的扬声器模拟电子琴发声,实现双机双向控制。
三、实验原理3.18251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
3.1.2 工作指令(2B8H)3.28253控制字说明3.2.1 控制字(283H)3.2.2 计数初值(283H)3.3程序原理图啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊3.4程序流程图四、程序代码;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253aequ 280hio8253bequ 283hio8251aequ 2b8hio8251bequ 2b9hmes1db 'you can play a key on the keybord!',0dh,0ah,24hmes2dd mes1data endscode segmentassumecs:code,ds:datastart: movax,datamovds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16houtdx,almov dx,io8253amov al,52 ;给8253计数器0送初值outdx,almov dx,io8251b ;初始化8251xoral,almov cx,03 ;向8251控制端口送3个0delay: call out1loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hready:mov ah, 0BH ;0FFH是有键按下int 21hcmp al,0FFHjzwaiti ;有键按下就判断发送是否准备好jmp next ;没键按下就判断接收是否准备好waiti: mov dx,io8251binal,dxtest al,01 ;发送是否准备好jz next ;否,就看能否接受mov ah,01 ;是,从键盘上读一字符,获取发送数据int 21hmov dx,io8251a;inc alout dx,al ;发送mov cx,40hcmp al,27 ;若为ESC,结束jz exitjmp readys51: loop s51 ;延时next: mov dx,io8251binal,dxtest al,02 ;检查接收是否准备好jz ready ;没有,等待mov dx,io8251ain al,dx ;准备好,接收movdl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp readyloopa: cmp al,27 ;若为ESC,结束jz exitjmp nextexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,alpush cxmov cx,40hgg: loop gg ;延时pop cxretout1endpcode endsend start五、实验体会。
单片机串行口应用实验双机通信

单片机串行口应用实验_双机通信一.设计要求利用两个8031单片机实现甲乙两机间的信息串行通信。
二.设计作用和目的1、注重培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。
2、了解8031各脚的功能,工作方式,计数/定时,I/O口的相关原理,掌握双机通信的原理和方法,并巩固学习单片机的相关内容知识。
3、通过软硬件设计实现两片8031单片机间的信息串行通信,以及74LS373、62256和2764等芯片的应用。
4、掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
5、掌握双机通信的原理和方法,了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。
三.具体内容1、先在发送端1号机上显示班级号,然后送到接受端2号机上显示。
2、接下来在发送端1号机上输入学号显示,然后送到接受端2号机上显示。
如:某学生的班级号为050901,学号为0502030;则:3、先在发送端1号机上显示050901,然后送到接收端2号机上显示050901。
4、接下来在发送端1号机上输入学号0502030显示,然后送到接受端2号机上显示0502030。
四.硬件设计五.实验说明1、实验时需将1号机8031串行接收信号线(RXD)连到2号机8031串行发送信号线(TXD),1号机的(TXD)连到2号机的(RXD)。
2、两台实验机必须共地。
实验接线图P3.1 GND P3.0P3.0 GND P3.18031一号机8031二号机六、画出发送与接收程序流程图七、实验步骤1、用8芯排线将8279区JB51(a-h)连接到数码管显示区的CODE,JB53(BIT0-BIT7)连接到数码管显示区的BIT。
用4芯排线将8279区的JB52(RL0-RL3)连到键盘区的KH上;JB54(KBIT0-KBIT3)连到键盘区的KL上。
8279区8279CS2连到系统译码的Y6上,8279CLK连接到固定脉冲的1MHz。
双机通信实验报告

项目五单片机间的双机通信班级:学号:姓名:一、任务目的通过单片机之间的双机通信设计,进一步学习定时器的功能和编程应用,理解串行通信与并行通信两种通信方式的异同,掌握串行通信的重要指标:字符帧和波特率,初步了解MCS-51系列单片机串口的使用方法。
二、设计要求本任务是简历一个简单的单片机串行口双机通信测试系统。
系统中,发射与接收各用一套AT89C51单片机电路,称为甲机和乙机。
编制程序,使甲,乙双方能够进行串行通信。
要求将甲机内的多个数据(例如19921009)发送给乙机,并在乙机的8个数码管上显示出来。
三、系统硬件电路设计可分为最小系统、甲机发送、乙机接收显示三个单元电路,要求画出各部分电路图,写出工作原理。
最小系统:甲机发送:乙机接收显示:显示部分的:现实中的接线和显示:四、软件设计甲机的程序:#include <reg51.h>void main() //主函数{unsigned char i;unsigned char send[]={0x01,0x09,0x09,0x02,0x1,0x00,0x00,0x09}; //定义要发送的数据,数据为生日的八位数TMOD=0x20; //定时器1工作于方式2TL1=0xf4; //波特率为2400b/sTH1=0xf4;TR1=1;SCON=0x40; //定义串行口工作方式1for (i=0;i<8;i++){SBUF=send[i]; //发送第i个数据while(TI==0); //查询等待发送是否完成TI=0; //发送完成,TI由软件清零}while(1);}乙机的程序:#include <reg51.h>code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //定义0~9显示字码型unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义接收数据缓冲区void disp(void); //显示函数声明void main() //主函数{unsigned char i;TMOD=0x20; //定时器1工作于方式2TL1=0xf4; //波特率定义TH1=0xf4;TR1=1;SCON=0x40; //定义串行口工作方式1for(i=0;i<8;i++){REN=1; //允许接收while(RI==0); //查询等待接收标志位为1,表示接收到数据buffer[i]=SBUF; //接收数据RI=0; //RI由软件清零}for(;;) disp(); //显示接收数据}void disp(){unsigned char i,j;for(i=0;i<8;i++){ P2=i;P0=(tab[buffer[i]]); //送显示字码型,buffer[i]作为数组分量的下标for(j=100;j>5;j--); //显示延时}}五、系统调试画proteus图,了解单片机最小系统,选用的元件有AT89C51,编写程序。
实验七_双机通信实验

实验七、双机通信实验 一、实验目的掌握单片机串行口的工作原理及编程。
二、实验内容用两台单片机进行双机通讯,主控制器识别到按键按下,控制从机显示0-9字符。
三、实验接线图四、实验程序1、程序流程图如图7-1所示。
主机识别到键按下,向从机发送数据块长度、0-9数据及校验和。
从机接收到数据后,显示数据并向主机发应答码00H ,主机根据应答信号,显示通信状态代码。
2、波特率计算选fosc=11.0592MHz, 波特率=2400bps ,通信为方式1,(SMOD)为1,(TMOD)=0x20;( PCON) =0x80; 由波特率计算公式算得 (TH1)≈e8H 。
图7-1 实验接线图[](TH1)-25612T1T1322osc SMOD⨯=⨯=f 溢出率溢出率,波特率3、源程序 1)主机源程序// 识别到按键按下,发送0-9数据给从机,并显示通信状态码 #include<reg51.h> #include<intrins.h>#define uint unsigned int #define uchar unsigned charsbit K=P3^2; //定义按键K ,用于控制U2void SEND(uchar s_data)//发送一个字节数据 {SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据 {while(RI==0); RI=0; return(SBUF);}void D_1S(void) {uint N=500,i;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar dis)//显示dis 中字形码对应的字符 { P0=dis; D_1S(); P0=~0x00;}void MAIN(void){ uchar data SUM,LEN;// SUM,校验和;LEN ,数据块长度; uchar i,ans; //ans 接收的应答数据图7-2 主机程序流程图 图7-3 从机程序流程图SP=0x5f; P0=~0x00; //数码块消隐TMOD=0x20; //T1:8位自动重装定时器TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1;//F=11.0592MHz,BPS=2400SCON=0x40; //10位,禁止接收//-------扫描按键-------key0:K=1; if(K!=0) goto key0;//-------发送数据块和校验和-------S_0:SUM=0x00; LEN=10; SEND(LEN);for(i=0;i<LEN;i++){SEND(i); SUM+=i; }SEND(SUM);//-------接收从机发来的响应数据-------REN=1; ans=RCV(); REN=0;if(ans==0x00) //发送正常,显示“0”{ DIS(~0x3f); goto key0;}else //发送异常,显示“1”,并重新发送数据{ DIS(~0x06); goto S_0;}}2)从机源程序// 接收数据0-9,并用数码块显示,之后接收正常向主机发00H,否则发送01H#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar data LS0[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};void SEND(uchar s_data)//发送一个字节数据{SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据{while(RI==0); RI=0; return(SBUF);}void D_1S(void){uint i,N=500;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar LEN,uchar r_data[11])//显示0-9{uchar data i;for(i=0;i<LEN;i++) {P0=LS0[r_data[i]]; D_1S(); P0=~0x00;}}void MAIN(void){ uchar data SUM,LEN; //SUM,校验和;LEN,数据块长度;ID,从站地址uchar data i,r_data[10],RSUM;//r_data接收的数据,RSUM接收的校验和SP=0x5f; P0=~0x00; TMOD=0x20;TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1; SCON=0x40;R_D:REN=1;SUM=0x00;LEN=RCV();for(i=0;i<LEN;i++){r_data[i]=RCV(); SUM+=r_data[i];}RSUM=RCV();if(RSUM==SUM){DIS(10,r_data);SEND(0x00);goto R_D;}else {SEND(0x01);goto R_D;}}五、实验步骤1、按图7-1接线;2、用keil软件编辑、编译源程序,生成两个hex文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与信息技术学院《计算机应用课程设计》设计报告摘要微机与外部的信息交换称为通信,基本方式有并行与串行两种。
本文主要说明串行方式,主要掌握微机串行通信的连接方法,熟悉其工作方式及其功能,运用程序流程图说明了其工作过程详细介绍了使用串行接口芯片8251A实现双CPU系统数据传输的设计和方法,接着从8251A的基本原理、工作方式,以及硬件和软件设计方面进行了详细的说明。
并在两台微处理器的目标机上,用串口通信模式实现了两机之间的高效通信。
关键词: 8251A;串口通信;数据传送AbstractExchange of information between computer and external as communications.Basic methods are both parallel and serial.This paper shows the serial mode, the main control computer serial communication connection method, familiar with their work and their functions, the use of process flow chart illustrates the process of their work.Described in detail using the serial interface chip 8251A dual CPU system design and method of data transmission, then the basic principle from 8251A, work, and hardware and software design aspects in detail. Two microprocessors in the target machine, achieved with a serial communication mode efficient communication between the two machines.Keywords: 8251A; serial communication; data transfer目录摘要 (2)Abstract (3)第一章系统的功能 (5)第二章系统的设计方案 (6)2.1硬件设计 (6)2.1.1涉及的芯片 (6)2.1.2 8251A芯片 (6)2.1.3 8279芯片 (8)2.2软件设计 (9)2.2.1设计简单介绍 (9)2.2.2 模块设计详细分析 (9)第三章操作说明 (11)第四章总结 (12)参考文献 (13)附: (14)1、硬件原理图 (14)2、程序流程图 (15)3、源程序清单及注释 (17)第一章系统的功能随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。
于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。
另一方面,在某计算机的软磁盘驱动器万一出现故障的情况下,也可以通过它将计算机硬盘的数据或程序拷贝出来。
文件传输程序可以用来在两个计算机之间传输任何类型的文件(包括二进制文件),对于那些有不同类型的计算机特别有用。
网络的发展,局域网的建立,使得一个文件服务器以及允许其他计算机从服务器中装入文件或将它们存入文件服务器也可以通过串口来实现。
第二章系统的设计方案2.1硬件设计2.1.1涉及的芯片1. 8251A接口芯片用于实现微机间的通信,发送数据;2. 8279芯片用于微机间接受数据和显示数据;2.1.2 8251A芯片8251A是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。
由于近距离传输,所以可以不用MODEM,而直接互连。
同时采用查询方式,故接收/发送程序中只需检查发送/接收的准备好状态是否置位,在准备好时就发送或接收一个字节。
(1)在实验过程中,数据通信的基本方式可分为并行通信与串行通行,而我们的实验正是采用了串行通行方式,这种方式通信线路简单,利用线路就可实现通信,这样实验易于实现并且降低了成本,而且适合远距离通信。
(2)实验中用到的8251A就是一个可编程的通用串行通信接口芯片,在使用时必须对它进行初始化编程。
编程的内容包括两大方面:一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;另一方面是由8251A向CPU送出的状态字。
①8251A的方式控制字和命令控制字方式控制字确定8251A的通信方式(同步/异步)、校验方式(奇校/偶校/不校)、字符长度及波特率等,格式如下图5-16所示。
命令控制字使8251A处于规定的状态以准备收发数据,格式如下图。
方式控制字和命令控制字无独立的端口地址,8251A 根据写入的次序来区分。
CPU对8251A初始化时先写方式控制字,后写命令控制字。
方式选择控制字的格式如图所示。
操作命令控制字的格式如下:②状态寄存器状态寄存器用于寄存8251A的状态信息,供CPU查询。
各位定义如下:TXRDY位:当数据缓冲器空时置位,而TXRDY引脚只有当条件( 数据缓冲器空·/CTS·TXE)成立时才置位。
溢出错误:CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。
帧错误:在字符结尾没检测到停止位,称为帧错误。
状态字的格式如下:2.1.3 8279芯片8279芯片介绍:8279是一种可编程键盘/显示接口芯片,它共有3种工作方式:编码扫描方式、传感器扫描方式、时钟脉冲选通方式。
固只需通过编程就可用8279来实现各种键盘/显示器的接口,几乎不需附加任何电路。
本系统8279接口规定的小键盘的键名和键值对照表及数码管组显示代码表如下。
键名键值对照表:键名 0 1 2 3 4 5 6 7 8 9 A键值 00 01 02 03 04 05 06 07 08 09 0A键名 B C D E F EXEC NEXT MOV MON LAST STEP键值 0B 0C 0D 0E 0F 10 11 12 13 14 15显示代码表:显示值 0 1 2 3 4 5 6 7显示代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H显示值 8 9 A B C D E F显示代码 7FH 6FH 77H 7CH 39H 5EH 79H 71H2.2软件设计2.2.1设计简单介绍本系统的软件设计流程图参见附录部分(图2)。
系统设计代码分为以下几个部分:初始化8251A、发送数据、接收数据、键盘输入、数值转换、LED显示。
2.2.2 模块设计详细分析1. 初始化8251A:8251A工作在同步方式下,方式选择控制字为00H,工作命令控制字为40H.代码如下:KEYLED: MOV AL,00HOUT DX,ALOUT DX,ALOUT DX,ALMOV AL,40HOUT DX,ALMOV AL,4EHOUT DX,ALMOV AL,27HOUT DX,AL2. 键盘输入键盘的输入由8279控制,再输入之前要现判断键盘是否允许按键,则只需读取8279的状态即可;通过数据口读取键值。
然后对输入的数据进行判断,若为数字键,只需判断其高四位,高四位为零,则为数字键;不为零则不是数字键;再判断是否为EXEC键,此时只需和10H比较,相同则为EXEC键。
KEY0: MOV DX,CONTPORT ;读8279状态IN AL,DXTEST AL,07H ;判断是否有键按下JZ KEY0MOV CX,0FFFHDELAY1: LOOP DELAY1MOV DX,DATAPORT ;读取键值IN AL,DXMOV DI,AXAND AL,0F0H ; 判断是否为数字键JZ KEY1MOV AX,DICMP AL,10H ; 判断是否为EXEC键JNZ KEY0CMP WORD PTR DS:[0601H],0000H ;判断按EXEC键前是否按过数字键JZ SERERR1MOV SI,DATA3CALL LEDDISP3. 数值转换数值转换就是将输入的键值转换成发送代码。
转换代码实现部分:CONVERS:MOV BH,0HMOV AX,DIAND AL,0FHMOV BL,ALMOV AL,CS:[BX+DATA4]MOV BYTE PTR DS:[0602H],ALRET4. 发送数据1号机用于键盘的控制以及数据的发送。
首先判断1号机器键盘的状态,由8279控制,则只需读取8279的状态即可;再判断按键值,若为数字键,则计算次数,再将按键值转换为显示代码;若为EXEC键,再判断按此键之前是否按过数字键,若没按过,则调用显示,显示Errl,若按过再将按键值转换为显示代码。
接下来就是判断是否允许发送数据了,发送数据由8251控制,则只需读取8251的状态。
允许发送就开始发送数据。
部分代码如下:WATTXD: MOV DX,SECOPORTIN AL,DX ;读取8251状态TEST AL,01H ;判断是否允许发送JZ WATTXDMOV AL,BYTE PTR DS:[0602H] ;显示代码送给ALMOV DX,SEDAPORT ;发送显示代码OUT DX,ALMOV CX,0FFFFHDELAY2: LOOP DELAY2JMP KEY0SEREND: JMP SEREND5. 接收数据并显示2号机用于接受1号机发送的数据并将其显示出来。
数据接收由8251控制,则先判断其状态,允许接收则转入接收程序,从数据口读取数据,然后将接收到的数据存入到RAM区暂存。
再将数据发送到控制口进行显示。
接收数据部分代码如下:WATRXD:MOV DX,SECOPORT ;读取8251状态IN AL,DXTEST AL,02H ;判断是否允许接受JZ WATRXDMOV DX,SEDAPORT ;接受数据IN AL,DXMOV BYTE PTR DS:[0600H],AL ;将接受的数据存入RAM区MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV AL,BYTE PTR DS:[0600H] ;从RAM区取出数据?MOV DX,DATAPORTOUT DX,AL ;显示接受的数据MOV AL,00HOUT DX,ALJMP WATRXD详见源程序清单及注释附录部分。
第三章操作说明1、准备2台本系统,确定1号为发送,2号为接收。
2、将1号RXD插孔和2号的TXD插孔相连。
3、将1号TXD插孔和2号的RXD插孔相连。