实验4(串行通行实验报告)
- 格式:doc
- 大小:235.00 KB
- 文档页数:22
串行通信实验报告串行通信实验报告引言:串行通信是一种数据传输方式,通过将数据一位一位地传输,相比并行通信具有更高的传输效率和更少的硬件成本。
本实验旨在通过搭建串行通信系统,了解串行通信的原理和应用,并探究不同参数对传输效果的影响。
一、实验目的本实验旨在:1. 了解串行通信的原理和基本概念;2. 掌握串行通信的实验搭建方法;3. 分析不同参数对串行通信传输效果的影响。
二、实验原理串行通信是一种将数据一位一位地传输的通信方式。
在串行通信中,数据以二进制形式传输,每一位的传输时间相等。
常见的串行通信方式有同步串行通信和异步串行通信。
同步串行通信中,发送端和接收端的时钟信号同步,以确保数据的准确传输。
发送端将数据按照一定的帧格式发送,接收端通过时钟信号进行同步,按照相同的帧格式接收数据。
异步串行通信中,发送端和接收端的时钟信号不同步,通过起始位和停止位来标识数据的开始和结束。
发送端在每个数据帧前加上一个起始位,接收端通过检测起始位来判断数据的开始。
三、实验步骤1. 搭建串行通信系统:将发送端和接收端连接,通过串口线进行数据传输。
2. 设置串行通信参数:根据实验要求,设置波特率、数据位、停止位等参数。
3. 编写发送端程序:通过编程语言编写发送端程序,实现数据的发送。
4. 编写接收端程序:通过编程语言编写接收端程序,实现数据的接收和显示。
5. 调试和测试:进行通信测试,观察数据的传输效果,记录实验结果。
四、实验结果与分析在实验中,我们通过设置不同的串行通信参数进行测试,观察数据的传输效果。
实验结果显示,在较低的波特率下,数据传输速度较慢,但传输稳定性较高;而在较高的波特率下,数据传输速度较快,但传输稳定性较差。
此外,我们还测试了不同数据位和停止位对传输效果的影响。
结果显示,增加数据位可以提高数据的传输精度,但也会增加传输的时间和成本。
增加停止位可以增加数据的传输稳定性,但也会降低传输速度。
五、实验总结通过本次实验,我们深入了解了串行通信的原理和应用,并通过实验搭建了串行通信系统。
【1.实验目的和要求】(1)掌握8051单片机串行口工作原理;(2)掌握串口编程与调试方法;(3)掌握TDS220示波器的使用【2. 实验工具与软件】计算机、Keil uVision4集成开发环境、Proteus 8 Professional仿真软件【3.主要原理和方法步骤】(1)任务说明➢单片机外连4*4的键盘矩阵,每次按击按键,串口自动将键值发送给上位机;➢上位机可下发数据(单字节,自定义)禁止或开启键盘扫描键值上传功能,并用一个发光二极管指示状态(点亮:代表键值允许上传;熄灭:代表键值禁止上传)。
➢开机时,系统默认为按键值禁止上传。
(2)仿真电路原理图(3)软件流程图(4)实例代码及注释分析#include <reg51.h>sbit LED_KEY = P2^0;unsigned char key_value=16; //键值unsigned char ascii_num[10] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39}; //数字0~9的ASCII码unsigned char flag, temp;void delay_ms(unsigned int ms) //ms延时函数(******************){unsigned int i;while(ms--)for(i = 0; i < 110; i++);}void putc_to_SerialPort(unsigned char c) //串口发送一个字符{SBUF = c;while(TI == 0);TI = 0;}void puts_to_SerialPort(unsigned char *s) //串口发送一个字符串{while(*s != '\0'){putc_to_SerialPort(*s);s++;delay_ms(5);}}char keys_scan() //按键扫描子程序{unsigned char temp, value;P1 = 0x0f;delay_ms(10);temp = P1 ^ 0x0f;//高4位输出,低4位输入delay_ms(5);switch(temp){case 1: value = 0; break;case 2: value = 4; break;case 4: value = 8; break;case 8: value = 12; break;}P1 = 0xf0;delay_ms(5);temp = P1 >> 4 ^ 0x0f;//高4位输入,低4位输出switch(temp){case 1: value += 0; break;case 2: value += 1; break;case 4: value += 2; break;case 8: value += 3;}while(P1!=0xf0);return value;}void main(){SCON=0x50; //方式1,10位异步收发(8位数据)PCON=0x00; //波特率不加倍TH1=0xFD; //设置波特率为9600TL1=0XFD;TMOD=0X20; //工作方式2,自动重载的8位的定时器/计数器EA=1; //总中断允许ES=1; //串口中断使能TR1=1; //开始计时while(1){if(flag == 1) //点亮LED,允许接收下位机数据{LED_KEY = 0;P1 = 0x0f;if(P1 != 0x0f) //如果有按键按下{delay_ms(10);if(P1 != 0x0f) //去抖动{key_value = keys_scan(); //按键扫描,获取键值if(key_value != 16) //如果有按键按下,向上位机发送键值{putc_to_SerialPort('S');if(key_value/10!=0)putc_to_SerialPort(ascii_num[key_value/10]);putc_to_SerialPort(ascii_num[key_value%10]);puts_to_SerialPort("\r\n");key_value = 16;}}}}Else //熄灭LED,不允许向上位机发送数据LED_KEY = 1;}}void intrr() interrupt 4{if(RI)//接收上位机发送的数据{temp = SBUF;if(temp == 0x31)flag=1;if(temp == 0x30)flag=0;RI=0;}}【4. 数据记录】(1)发光二极管处于熄灭状态,按下矩阵键盘的按键,不能向虚拟主机发送数据;(2)虚拟主机发送数据“1”给单片机,点亮发光二极管,表示允许上传功能,按下矩阵键盘的按键,将键值发送给虚拟主机,在虚拟窗口中显示接收到的键值;(3)虚拟主机发送数据“0”给单片机,熄灭发光二极管,表示禁止上传功能,按下矩阵键盘的按键,虚拟主机不能够接收到的键值;【5. 实验思考与小结】通过本次串口实验,我掌握8051单片机串行口工作原理以及串口编程与调试的方法,对串口通信的知识了解的更透彻,怎么去使用virtual terminal虚拟主机去仿真,其中特别要注意的就是串行通信的波特率要一致,以及测试程序和仿真器件的晶振频率要一致。
#### 实验目的1. 理解串行通信的基本原理和常用通信协议。
2. 掌握串行通信硬件设备的连接与配置。
3. 熟悉串行通信软件编程,实现数据传输。
4. 通过实验验证串行通信的稳定性和可靠性。
#### 实验时间2023年10月15日#### 实验地点电子实验室#### 实验设备1. 两台PC机2. 串行通信模块(如USB转串口模块)3. 串行通信软件(如PuTTY)4. 串行通信协议转换器(如RS-232转RS-485模块)5. 数据线、电源线等辅助连接线#### 实验原理串行通信是一种通信方式,将数据一位一位地依次传输,按位顺序组成字符或字节。
与并行通信相比,串行通信在传输距离、传输速率和设备复杂度上具有优势。
本实验采用RS-232协议进行串行通信。
#### 实验步骤1. 硬件连接:- 将两台PC机通过串行通信模块连接,确保通信模块与PC机的串口正确对应。
- 如果需要,使用RS-232转RS-485模块实现串行通信协议的转换。
2. 软件配置:- 在PC机上安装并运行串行通信软件,如PuTTY。
- 设置串行通信参数,包括波特率、数据位、停止位、校验位等,确保两台PC机的串行通信参数一致。
3. 编程实现:- 在PC机上编写串行通信程序,实现数据的发送和接收。
- 使用C语言或Python等编程语言,调用串行通信库函数进行编程。
4. 实验验证:- 在一台PC机上发送数据,另一台PC机上接收数据。
- 检查接收到的数据是否与发送的数据一致,验证串行通信的稳定性。
#### 实验结果与分析1. 硬件连接:- 成功连接了两台PC机,并使用串行通信模块进行通信。
2. 软件配置:- 串行通信软件成功运行,并设置好通信参数。
3. 编程实现:- 编写串行通信程序,实现数据的发送和接收。
4. 实验验证:- 发送数据成功,接收到的数据与发送的数据一致,验证了串行通信的稳定性。
#### 结论通过本次实验,我们成功实现了两台PC机之间的串行通信。
《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求1.熟练使用Keil C51 IDE集成开发环境,熟练使用Proteus软件。
2.掌握Keil与Proteus的联调技巧。
3.掌握串行通信在单片机系统中的使用。
4.掌握调度器设计的基础知识:函数指针。
二、实验设备1.PC机一套2.Keil C51开发系统一套3.Proteus 仿真系统一套三、实验容1.甲机通过串口控制乙机LED闪烁(1)要求a.甲单片机的K1按键可通过串口分别控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有的LED。
b.两片8051的串口都工作在模式1,甲机对乙机完成以下4项控制。
i.甲机发送“A”,控制乙机LED1闪烁。
ii.甲机发送“B”,控制乙机LED2闪烁。
iii.甲机发送“C”,控制乙机LED1,LED2闪烁。
iv.甲机发送“C”,控制乙机LED1,LED2停止闪烁。
c.甲机负责发送和停止控制命令,乙机负责接收控制命令并完成控制LED的动作。
两机的程序要分别编写。
d.两个单片机都工作在串口模式1下,程序要先进行初始化,具体步骤如下:i.设置串口模式(SCON)ii.设置定时器1的工作模式(TMOD)iii.计算定时器1的初值iv.启动定时器v.如果串口工作在中断方式,还必须设置IE和ES,并编写中断服务程序。
(2)电路原理图Figure 1 甲机通过串口控制乙机LED闪烁的原理图(3)程序设计提示a.模式1下波特率由定时器控制,波特率计算公式参考:b.可以不用使用中断方式,使用查询方式实现发送与接收,通过查询TI和RI标志位完成。
2.单片机与PC串口通讯及函数指针的使用(1)要求:a.编写用单片机求取整数平方的函数。
b.单片机把计算结果向PC机发送字符串。
c.PC机接收计算结果并显示出来。
d.可以调用Keil C51 stdio.h 中的printf来实现字符串的发送。
单片机串行通信实验结果描述一、引言单片机串行通信是嵌入式系统中常用的一种通信方式,通过串行通信可以实现单片机与其他外部设备的数据交换。
本文将详细描述单片机串行通信实验的结果。
二、实验目的本次实验的目的是通过单片机串行通信,实现与计算机之间的数据传输。
具体要求如下: 1. 使用串口通信模块与计算机进行数据交互; 2. 在计算机端编写相应的程序,实现数据的发送和接收; 3. 确保数据的准确传输和接收。
三、实验器材1.单片机开发板;2.串口通信模块;3.计算机。
四、实验步骤1. 连接硬件将单片机开发板与计算机通过串口通信模块连接,确保连接稳定。
2. 编写单片机程序在单片机开发板上编写程序,实现与计算机的串行通信。
具体步骤如下: 1. 初始化串口通信模块的相关参数,包括波特率、数据位、停止位等; 2. 设置串口通信模块为发送模式; 3. 通过串口发送数据。
3. 编写计算机程序在计算机上编写程序,实现与单片机的串行通信。
具体步骤如下: 1. 打开串口通信端口,并设置相关参数,与单片机的配置保持一致; 2. 接收串口发送的数据,并进行处理; 3. 将处理后的数据显示在计算机的界面上。
4. 运行实验将单片机程序烧录到开发板上,运行计算机程序。
观察数据的传输和接收情况,并记录实验结果。
五、实验结果与分析经过实验,我们得到了如下结果: 1. 数据传输稳定:通过串行通信,单片机与计算机之间的数据传输稳定可靠,没有出现丢失数据或传输错误的情况。
2. 传输速率较快:串行通信的传输速率较快,可以满足实际应用的需求。
3. 数据处理准确:计算机程序正确接收并处理了从单片机发送的数据,实现了数据的正确显示。
六、实验总结通过本次实验,我们掌握了单片机串行通信的基本原理和操作方法,实现了与计算机之间的数据传输。
实验结果表明,单片机串行通信是一种稳定可靠的通信方式,能够满足实际应用的需求。
在今后的实际工作中,我们可以利用串行通信实现更多功能,提高系统的性能和可靠性。
实验四 串行口实验预习报告一.4.1流程图.4.2程序试验4.1程序 ORG 0000H JMP MAIN ORG 001BH RETIORG 0023H JMP S_INTMAIN: ;初始化MOV R0,#30H ;R0发送起始地址 MOV R1,#40H ;R1接收起始地址 MOV R2,#0 ;R2用来判断按键值 MOV R3,#0 ;R3计按下次数 MOV SP,#60HMOV TMOD,#20H ;T1工作方式2通信A 班 洪俊强 0915231017MOV TL1,#0FAH ;在fosc=11.0592MHz 时 MOV TH1,#0FAH ;波特率为4800b/s MOV PCON,#00H MOV SCON,#50H SETB ET1 SETB TR1 SETB ES SETB EA LOP1:MOV P1,#0FFHACALL DELAY ;防抖 MOV A,P1CJNE A,#0FFH,LOP2 JMP LOP1LOP2: ;按键按下时计算按键值 RRC A JNC LOP3 INC R2 ; JMP LOP2 LOP3:MOV A,R2 ;按键值送AMOV @R0,A ;按键值存入发送区 MOV SBUF,A ;发送按键值 INC R0 ;放送地址指针加一 LOP4:MOV A,P1 ; 重新扫描判断按键 CJNE A,#0FFH,LOP4 MOV R2,#0INC R3 ;按键按下个数加一 JMP LOP1 RETS_INT: ; 串行口中断程序JB TI,SEND ;判断是发送还是接收 MOV A,SBUFMOV @R1,A ;把接收数据存入接收地址INC R1ACALL DISP ;调用显示子程序YNNY 开始初始化计数按键值计数返回接受并显示写入SBUF判断按键? 判断是发?CLR RI ;清发送标志位 RETISEND: ;清发送标志位 CLR TI RETIDISP: ;显示子程序 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A RETTABLE:db3fh,06h,5bh,4fh,66h,6DH,7DH,07H; 0 1 2 3 4 5 6 7DELAY: ;延时子程序 MOV 20H,#100H DEL1:MOV 21H,#100H DJNZ 21H,$ DJNZ 20H,DEL1 RET 二.4.2流程图4.2程序 ORG 0000H JMP MAIN ORG 0023H JMP S_INT MAIN:CLR F0 ;F0 用于区分接收到的数据是 MOV P0,#0 ;按键次数,还是按键值MOV P2,#0MOV R0,#30H ;R0发送起始地址 MOV R1,#40H ;R1接收起始地址 MOV R2,#0 ;R2用来判断按键值 MOV R3,#0 ;R3计按下次数 MOV SP,#60HNYYNNY开始初始化计数按键值返回送P0口按键值写入SBUF判断按键? 奇校验判断对? 按键次数写入SBUF接收显示判断是键值?MOV TMOD,#20H ;T1工作方式2MOV TL1,#0F4H ;在fosc=11.0592MHz时MOV TH1,#0F4H ;波特率为2400b/s MOV PCON,#00HMOV SCON,#0D0H ;工作方式3,允许接收SM2=0CLR ET1SETB TR1 ;开中断SETB ESSETB EALOP1:MOV P1,#0FFHACALL DELAY ;防抖MOV A,P1CJNE A,#0FFH,LOP2 ;等待按键按下JMP LOP1LOP2: ;按键按下时计算按键值RRC AJNC LOP3INC R2JMP LOP2LOP3:MOV A,R2MOV C,P ;进行奇校验CPL CMOV TB8,C ;把奇校验位送入TB8 MOV @R0,A ;按键值存入发送区ACALL DISPMOV SBUF,@R0 ;发送按键值JNB TI,$CLR TIINC R0 ;发送地址指针加一LOP4:MOV A,P1 ; 重新扫描按键CJNE A,#0FFH,LOP4MOV R2,#0INC R3 ;按键按下个数加一MOV P0,R3 ;按下次数送P0显示MOV A,R3MOV C,P ;奇校验CPL CMOV TB8,CMOV SBUF,R3 ;送按下次数JNB TI,$CLR TIJMP LOP1 RETS_INT: ; 串行口中断程序PUSH AJB TI,SEND ;TI=1则发送结束跳到SEND CPL F0CLR RI ;清接收标准位MOV A,SBUF ;接收取值MOV C,P ;进行奇校验JNC S1 ;JB RB8,REP ;AJMP S2 ;S1:JNB RB8,REPs2:JNB F0,GESHU ;F0=0则接收到按键个数数据MOV @R1,A ;把接收数据存入接收地址INC R1 ;接收地址指针加一ACALL DISP ;调用显示子程序REP:POP ARETIGESHU:MOV P0,SBUF ;把接收到的按键次数送显POP ARETISEND: ;发送结束POP ARETIDISP: ;显示子程序MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,ARETTABLE:db3fh,06h,5bh,4fh,66h,6DH,7DH,07H; 0 1 2 3 4 5 6 7DELAY: ;延时子程序MOV 20H,#100HDEL1:MOV 21H,#100HDJNZ 21H,$DJNZ 20H,DEL1RET三.表格实验1按键编号发送数据地址发送数据接收数据地址接收数据数码管显示值实验2发送按键编号发送动作次数接收按键编号接收动作次数。
串行通信实验报告串行通信实验报告引言:串行通信是一种在计算机科学和电子工程中广泛使用的通信方式。
与并行通信相比,串行通信通过逐位传输数据,具有更高的可靠性和稳定性。
本实验旨在研究串行通信的原理和应用,并通过实际操作来验证其性能。
一、实验目的本实验的主要目的是掌握串行通信的基本原理和操作方法,并通过实验验证串行通信的性能。
二、实验设备和材料1. 串行通信模块2. 电脑3. 串行通信线缆4. 示波器5. 逻辑分析仪三、实验步骤1. 连接串行通信模块和电脑,确保连接正确稳定。
2. 设置串行通信模块的波特率、数据位、停止位等参数,根据实际需求进行调整。
3. 编写电脑端的串行通信程序,实现数据的发送和接收功能。
4. 使用示波器和逻辑分析仪监测串行通信的信号波形,分析数据传输的过程和效果。
四、实验结果与分析通过实验,我们成功地建立了串行通信连接,并实现了数据的传输和接收。
通过示波器和逻辑分析仪的监测,我们可以清晰地观察到串行通信的信号波形和数据传输的过程。
在实验中,我们发现串行通信相较于并行通信,虽然传输速率较慢,但具有更高的可靠性和稳定性。
由于数据逐位传输,串行通信可以更好地应对信号干扰和传输错误的情况。
同时,串行通信可以通过调整参数来适应不同的传输距离和传输速率需求。
根据实验结果和分析,我们可以得出结论:串行通信是一种可靠且稳定的通信方式,广泛应用于计算机科学和电子工程领域。
在实际应用中,我们需要根据具体需求选择合适的串行通信参数,以确保数据的正确传输和接收。
五、实验总结通过本次实验,我们深入了解了串行通信的原理和应用。
实验结果表明,串行通信具有较高的可靠性和稳定性,适用于各种数据传输场景。
在今后的学习和工作中,我们将继续探索串行通信的更多应用领域,并不断提高串行通信技术的性能和效率。
六、参考文献[1] 张三, 串行通信技术研究, 电子通信学报, 2008.[2] 李四, 串行通信在计算机网络中的应用, 计算机应用技术, 2010.注:本实验报告仅供参考,如需引用请注明出处。
第1篇一、实验目的1. 理解串行通信的基本原理和方式。
2. 掌握串行通信接口电路的设计与调试方法。
3. 熟悉串行通信在实际应用中的使用。
二、实验原理串行通信是一种数据传输方式,它将数据一位一位地顺序传送,每位的持续时间远远大于数据信号的持续时间。
与并行通信相比,串行通信具有传输距离远、抗干扰能力强、成本低等优点。
串行通信方式主要有两种:同步串行通信和异步串行通信。
同步串行通信使用统一的时钟信号来同步发送和接收设备,而异步串行通信则使用起始位和停止位来同步。
三、实验器材1. 实验箱2. 串行通信模块3. 信号发生器4. 示波器5. 计算器四、实验步骤1. 连接电路根据实验要求,将串行通信模块、信号发生器、示波器等设备正确连接到实验箱上。
2. 设置参数根据实验要求,设置串行通信模块的波特率、数据位、停止位和校验位等参数。
3. 发送数据使用信号发生器生成要发送的数据信号,通过串行通信模块发送出去。
4. 接收数据通过示波器观察接收到的数据信号,分析其波形和参数。
5. 调试与优化根据观察到的波形和参数,对串行通信模块进行调试和优化,确保数据传输的准确性和可靠性。
五、实验结果与分析1. 发送数据波形观察到发送的数据信号波形符合要求,波特率、数据位、停止位和校验位等参数设置正确。
2. 接收数据波形观察到接收到的数据信号波形与发送端一致,说明数据传输过程中没有发生错误。
3. 调试与优化通过调整串行通信模块的参数,提高了数据传输的稳定性和抗干扰能力。
六、实验结论1. 通过本次实验,掌握了串行通信的基本原理和方式。
2. 熟悉了串行通信接口电路的设计与调试方法。
3. 了解了串行通信在实际应用中的重要性。
七、实验心得1. 串行通信在实际应用中具有广泛的应用前景,如工业控制、远程通信等。
2. 在设计和调试串行通信接口电路时,要充分考虑抗干扰能力和数据传输的稳定性。
3. 要熟练掌握串行通信模块的参数设置,以确保数据传输的准确性。
串行通信实验报告实验报告:串行通信实验一、实验目的本实验旨在通过搭建串行通信系统,了解串行通信的基本原理和工作方式,掌握串行通信的相关知识和技术。
二、实验仪器和材料1. Arduino开发板B数据线3.跳线若干4.电脑三、实验原理串行通信是一种通过连续的、位的形式传输数据的通信方式。
在串行通信中,数据通过一个数据线一位一位地传输,与并行通信相比,串行通信的线路数量较少,适用于数据传输距离较远的场景。
在本实验中,我们使用Arduino开发板作为串行通信的发送和接收端,通过USB数据线连接电脑与Arduino开发板进行数据交互。
四、实验步骤1. 连接电路:将Arduino开发板通过USB数据线连接至电脑,确保连接稳定。
2. 编写Arduino代码:使用Arduino IDE软件编写Arduino代码,实现数据发送和接收的功能。
代码示例://发送端void setuSerial.begin(9600); //设置串行通信波特率为9600void looString message = "Hello World!"; //待发送的消息Serial.println(message); //通过串行通信发送消息delay(2000); //延迟2秒//接收端void setuSerial.begin(9600); //设置串行通信波特率为9600void looif (Serial.available() { //如果串行通信接收到数据String message = Serial.readString(; //读取接收到的数据Serial.println("Received: " + message); //打印接收到的数据}3. 上传代码:将编写好的代码上传至Arduino开发板,使其开始工作。
4. 打开串行监视器:在Arduino IDE中点击“工具”菜单并选择“串行监视器”(或使用快捷键Ctrl+Shift+M)打开串行监视器。
串行通信实验报告班级姓名学号日期一、实验目的:1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的程序编写方法。
二、实验要求1.单机自发自收实验:实现自发自收。
编写相应程序,通过发光二极管观察收发状态。
2.利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
三、实验说明通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上。
连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。
波特率定为600,SMOD=0。
在第二个实验中,将两台实验箱的RXD和TXD交叉相连。
编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。
通过运行程序观察存储单元内数值的变化。
四、程序甲方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000HMAIN: MOV SP,#53HMOV 78H,#20HMOV 77H,00HMOV 76H,20HMOV 75H,40HACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1MOV SCON,#40H MOV IE,#00HCLR F0MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TIMOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TIMOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TIMOV SBUF,75H WAIT4: JNB TI,WAIT4CLR TIMOV IE,#90HMOV DPH,78HMOV DPL,77HMOVX A,@DPTRMOV SBUF,A WAIT: JNB F0,WAITRETCOM_INT: CLR TIINC DPTRMOV A,DPHCJNE A,76H,END1 MOV A,DPLCJNE A,75H,END1 SETB F0CLR ESCLR EARETEND1: MOVX A,@DPTRMOV SBUF,AEND乙方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000H MAIN: MOV SP,#53HACALL RECEI HERE: SJMP HERE RECEI: MOV R0,#78H MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1MOV SCON,#50H MOV IE,#90H CLR F0CLR 7FH WAIT: JNB 7FH,WAITCOM_INT: PUSH DPLPUSH DPHPUSH AccCLR RIJB F0,R_DATAMOV A,SBUFMOV @R0,ADEC R0CJNE R0,#74H,RETN SETB F0RETN: POP AccPOP DPHPOP DPLRETIR_DATA: MOV DPH,78HMOV DPL,77HMOV A,SBUFMOVX @DPTR,AINC 77HMOV A,77HJNZ END2INC 78HEND2: MOV A,76HCJNE A,78H,RETNMOV A,75HCJNE A,77H,RETNCLR ESCLR EASETB 7FHSJMP RETNEND五、实验过程中遇到的主要问题OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口HasRcv equ 20h.0 ; 接收标志位LEDBuf equ 40h ; 显示缓冲RCVBuf equ 50H ; 接收缓冲ORG 0000HLJMP START; 串行口中断程序ORG 0023HJNB TI,S0_RCLR TINOPSJMP S0_RETS0_R: ; 接收数据CLR RIMOV RCVBUF,SBUF ; 保存数据SETB HasRcv ; 提示收到数据NOPS0_RET:RETILEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, LoopretTestKey:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 输出线置为0mov dptr, #INmovx a, @dptr ; 读入键状态cpl aanl a, #0fh ; 高四位不用retKeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #6KLoop:mov a, r1 ; 找出键所在列cpl amovx @dptr, acpl arr amov r1, a ; 下一列movx a, @r0cpl aanl a, #0fhjnz Goon1 ; 该列有键入djnz r2, KLoopmov r2, #0ffh ; 没有键按下, 返回0ffhsjmp ExitGoon1:mov r1, a ; 键值= 列X 4 + 行mov a, r2dec arl arl amov r2, a ; r2 = (r2-1)*4mov a, r1 ; r1中为读入的行值mov r1, #4LoopC:rrc a ; 移位找出所在行jc Exitinc r2 ; r2 = r2+ 行值djnz r1, LoopCExit:mov a, r2 ; 取出键码mov dptr, #KeyTablemovc a, @a+dptrmov r2, aWaitRelease:mov dptr, #OUTBIT ; 等键释放clr amovx @dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retSTART:MOV SP, #60HMOV IE, #0 ; DISABLE ALL INTERRUPTMOV TMOD,#020H ; 定时器1工作于方式2 (8位重装)MOV TH1, #0F3H ; 波特率?2400BPS @ 12MHzMOV TL1, #0F3HANL PCON,#07FH ; SMOD 位清零orl PCON,#80hMOV SCON,#050H ; 串行口工作方式设置MOV LEDBuf, #0ffh ; 显示8.8.8.8.mov LEDBuf+1, #0ffhmov LEDBuf+2, #0ffhmov LEDBuf+3, #0ffhmov LEDBuf+4, #0mov LEDBuf+5, #0SETB TR1SETB ESSETB EA;mov sbuf,a;jnb ti,$MLoop:jb HasRcv, RcvData ; 收到数据?call DisplayLED ; 显示call TestKey ; 有键入?jz MLoop ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 通讯口输出键码MOV SBUF,ALJMP MLoopRcvData:clr HasRcv ; 是mov a, RcvBuf ; 显示数据mov b,aanl a,#0fh ; 显示低位mov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+5, amov a,bswap a ; 显示高位anl a,#0fhmov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+4, aljmp MLoopEND六、实验后的心得体会。