单片机串口通讯实验报告

时间:2024.4.21

实验十  单片机串行口与PC机通讯实验报告

                                

实验目的

1.  掌握串行口工作方式的程序设计,掌握单片机通讯的编制;

2.  了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议;

3.  了解PC机通讯的基本要求。

实验器材

1.  G6W仿真器                    一台

2.  MCS—51实验板             一台

3.  PC机                                一台

实验内容及要求

利用8051单片机串行口,实现与PC机通讯。

本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到PC机显示器上,再将PC机所接收的字符发送回单片机,并在实验板的LED上显示出来。

实验步骤

1.   编写单片机发送和接收程序,并进行汇编调试。

2.   运行PC机通讯软件“commtest.exe”,将单片机和PC机的波特率均设定为1200。

3.   运行单片机发送程序,按下不同按键(每个按键都定义成不同的字符),检查PC机所接收的字符是否与发送的字符相同。

4.   将PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检查实验板LED数码管所显示的字符是否与PC机发送的字符相同。


㈤ 实验框图


源程序代码:

ORG     0000H

AJMP    START

ORG     0023H

AJMP    SERVE

ORG     0050H

START:  MOV 41H,#0H        ;对几个存放地址进行初始化

 MOV 42H,#0H

 MOV 43H,#0H

 MOV 44H,#0H

 MOV SCON,#00H      ;初始化串行口控制寄存器,设置其为方式0

 LCALL DISPLAY      ;初始化显示

MOV     TMOD,#20H           ;设置为定时器0,模式选用2

MOV     TL1, #0E6H            ;设置1200的波特率

MOV     TH1, #0E6H

SETB    TR1                   ;开定时器

MOV     SCON,#50H            ;选用方式1,允许接收控制

SETB    ES

SETB    EA                    ;开中断

LOOP:  ACALL SOUT             ;键盘扫描并发送,等待中断

SJMP    LOOP

SERVE  JNB RI,SEND    ;判断是发送中断还是接收中断,若为发送中断则调用       

ACALL       SIN                ;发送子程序,否则调用接收子程序

RETI

SEND:  CLR      TI               ;发送子程序

RETI

SIN:      CLR      RI              ;接受子程序

MOV    SCON, #00H

MOV    A, SBUF        ;接收数据

LCALL XS              ;调用显示子程序

RETI

子程序:

SOUT:   CLR      TI         ;清发送中断标志位

LCALL   KEY              ;调用判断按键是否按下子程序

MOV     A,R0              ;将按键对应的数字存入A

MOV     SBUF,A            ;输出按键数字给锁存

 RET

KEY:     MOV     P1,#0FFH     ;将P1设置为输入口

MOV    A, P1

CPL      A            ;将A内值取反

ANL     A, #0FFH     

JZ   KEY          ;将A与FFH与后判断是否为0,若为0则表示无按键按下跳回KEY

LCALL D         ;调用延时子程序消抖

              MOV     A, P1

              CPL       A

              ANL      A, #0FFH

              JZ   KEY

              MOV     B,A          ;判断有按键按下,将值赋给B

KEY1:  MOV     A, P1

              CPL       A

              ANL      A,#0FFH

              JNZ      KEY1

              LCALL D

              MOV     A,B

              JB   ACC.0,PKEY1   ;依次判断A内数据每个位是否为1,并跳

              JB   ACC.1,PKEY2    ;转到相对应位的子程序

              JB   ACC.2,PKEY3

              JB   ACC.3,PKEY4

              JB   ACC.4,PKEY5

              JB   ACC.5,PKEY6

              JB   ACC.6,PKEY7

              JB   ACC.7,PKEY8

EKEY:  RET

PKEY1:       AJMP    K1

PKEY2:       AJMP    K2

PKEY3:       AJMP    K3

PKEY4:       AJMP    K4

PKEY5:       AJMP    K5

PKEY6:       AJMP    K6

PKEY7:       AJMP    K7

PKEY8:       AJMP    K8

K1: MOV     R0,#01H    ;将相应的数据赋给R0后跳转到EKEY

              SJMP     EKEY

K2: MOV     R0,#02H

              SJMP     EKEY

K3: MOV     R0,#03H

              SJMP     EKEY

K4: MOV     R0,#04H

              SJMP     EKEY

K5: MOV     R0,#05H

              SJMP     EKEY

K6: MOV     R0,#06H

              SJMP     EKEY

K7: MOV     R0, #07H

              SJMP     EKEY

K8: MOV     R0, #08H

              SJMP     EKEY

XS:MOV     SCON,#00H    ;显示子程序,采用同步移位寄存器

   CLR       TI

   MOV DPTR, #TAB

   MOVC   A,@A+DPTR   ;将相应数值的数码管显示数值送入SBUF

   MOV R5,#04H               ;共四位需要显示

   MOV 41H, A

   MOV R0, #41H

DISPLAY1: MOV A,@R0

         MOV SBUF, A

         JNB TI,$            ;是否传完了

         CLR TI           ;清除中断标志位

         INC R0

         DJNZ R5, DISPLAY1

         MOV SCON, #50H

         RET

D:                     ;延时子程序

   MOV R7, #10H

DELAY1: MOV R6, #0FFH

DELAY2: DJNZ R6, DELAY2

       DJNZ R7, DELAY1

       RET

TAB:  DB  0BBH, 09H, 0EAH, 6BH

      DB   59H, 73H, 0F3H, 0BH

      DB   0FBH

本次实验中解决了如何判断数据是发送还是接收的问题和如何判断数据是否发送或接受完毕的问题,通过实验中的讨论和研究书上关于串行口的内容,我们通过中断标志位和循环很好的解决了这个问题。这个实验让我认识到单片机中中断的巨大作用,它不仅可以省去很多繁琐的设计步骤,还可以帮助我们解决许多设计上的问题。

另外,我觉得这是一次较为综合性的实验,按键,消抖,数码管显示,定时,串行口中断,串行口数据的收发这些内容都在本次实验中体现出来了,也算是让我们进行了一个小复习,让我们站在一个更高的平台上去编写程序。

主要操作上的问题有两个:

问题:PC机可以根据按键的按下显示相应的符号,但是不是预期的数字

原因:PC机没有设置十六进制显示和十六进制接收

解决办法:在与PC机相关的软件下方,在设置十六进制显示和十六进制接收的选项的前面打勾

问题:输入的字符串只能在四个七段数码管的最右边的那个显示,其余三个处于随机状态。

原因:其余三个数码管未给初值

解决办法:在程序开始的地方加上数码管显示初始化语句


第二篇:单片机串口通讯及程序


单片机串口通讯

通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。

  测试方法:可以将串口调试助手的发送框写上 95 10 20 25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。

//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收

//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的

#include

#include

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3;

bit read_flag= 0 ;

void init_serialcomm( void )

{

SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr

TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload

PCON |= 0x80 ; //SMOD=1;

TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz

IE |= 0x90 ; //Enable Serial Interrupt

TR1 = 1 ; // timer 1 run

// TI=1;

}

//向串口发送一个字符

void send_char_com( unsigned char ch)

{

SBUF=ch;

while (TI== 0 );

TI= 0 ;

}

//向串口发送一个字符串,strlen为该字符串长度

void send_string_com( unsigned char *str, unsigned int strlen)

{

unsigned int k= 0 ;

do

{

send_char_com(*(str + k));

k++;

} while (k < strlen);

}

//串口接收中断函数

void serial () interrupt 4 using 3

{

if (RI)

{

unsigned char ch;

RI = 0 ;

ch=SBUF;

if (ch> 127 )

{

count3= 0 ;

inbuf1[count3]=ch;

checksum= ch- 128 ;

}

else

{

count3++;

inbuf1[count3]=ch;

checksum ^= ch;

if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )

{

read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,

//就置位取数标志

}

}

}

}

main()

{

init_serialcomm(); //初始化串口

while ( 1 )

{

if (read_flag) //如果取数标志已置位,就将读到的数从串口发出

{

read_flag= 0 ; //取数标志清0

send_string_com(inbuf1,INBUF_LEN);

}

}

}

串行通信虽然有其自身优点:如适合长距离通信,有一定的纠错能力等,但并行通信在短距离(数米范围内)传输过程中的优点是显而易见的。首先串行通信时要设置串口数据,如:串口号(Com1、Com2或者其他串口)、波特率、数据位数、停止位、校验位等等。而且单片机与PC机的串口数据必须一一对等,否则不能传输。而并行传输时,无需上述过程。其次,PC机的串口电平值为+12V~-12V,单片机是TTL电平(0~+5V),两者必须要经过电平转换芯片进行电平间的转换。而进行并行传输时,由于双方都是TTL电平,所以PC的并口可以与单片机或其他芯片直接相连;另外,串行传输速度慢,每次只能传送一位,而并行每次可以传送8位,速度上的差异显而易见。

而对于单片机,串口(UART)是最常用的端口,尤其对于存在两个或多个串口的单片机来说,充分利用串口进行通信是非常重要的。

输出输入接口的扩展

单片机串口实现"并行"通信,其原理就是将PC机传过来的并行数据转换成串行数据,送入单片机的串口再由其进行相应处理。实质上就是一个数据串-并、并-串转换的过程。

PC的并口为一个标准的25针插座,包含一个八位二进制数据端口(地址为378H),即第2脚到第9脚;一个输入控制端口(地址为379H),即第15脚、13脚、12脚、10脚、11脚,其另外低三位无定义;一个输出控制口(地址为37AH),即第1脚、14脚、16脚、17脚,其另外高四位无定义。由此可见后面两个端口都不是完全的8位。

输出接口电路扩展

这里使用常用的移位寄存器74LS164与单片机的RXD口构成输出接口电路。

双列直插式74LS164引脚定义如图1所示。

其中:QA~QH为并行输出的数据,送入PC机并口378H端口(接收数据的8个数据位);单片机串口输出的数据从AB输入;CLR信号用于清除输出数据(通常用在移位完成时);内部数据移位依靠时钟CLK信号上升沿(由单片机TX提供)控制。

表1是该芯片工作的真值表。

输入接口电路扩展

使用常用的移位寄存器74LS165与单片机的RXD口构成输入接口电路。

双列直插式74LS165引脚定义如图2所示。

其中:A~H为并行输入的数据,接PC机并口378H端口(接收数据的8个数据位);单片机串口接收的数据(RXD端口)从QH输入;SH/LD信号用于重新装载数据(通常用在数据完全移出后);SER是用于填充数据移出后的空位的逻辑电平信号(逻辑"1"或"0");而数据是否移动由CLK INH和CLK联合控制;内部数据移位依靠时钟CLK信号(仍由单片机的TXD提供)上升沿控制。

表2是该芯片工作的真值表。

其他软硬件准备工作

输入输出控制端口的连接。将单片机的P3.4、P3.5口分别与PC并口的第15脚、第16脚相连。这样在进行数据通信时,两者的握手信号传输就解决了:当并口的第16脚置高电平时,用来通知单片机接收PC机已准备就绪的数据,单片机收到以后就可以进行相应控制,接收数据;当单片机接收完数据时,会置P3.4为高电平并被379H的第15脚接收,于是PC机准备发送下一个数据……单片机向PC机发送数据时,情况与此类似,由P3.4发送信号给PC机,而由P3.5接收PC机发送过来的信号。

软件方面,由于是用串口进行"并行"通信,因此就不能将串口的工作方式设置为方式0(移位寄存器输入/输出方式)以外的其他方式。还要注意此时串口的波特率固定为单片机外接晶振频率的1/12。串行数据通过RXD输入/输出,TXD用于发送控制输入输出数据移位的时钟脉冲。收发的数据为8位,低位在前。

设计实例

由于这一并行通信实现方法非常简单,所以对于有一定单片机编程经验的开发人员来说,只要硬件电路确定下来,软件方面的问题就非常容易。图3为电路原理图。

需要说明的是:1、单片机与PC机并口要共地;2、由于并行通信存在应答信号(本图中由单片机的P3.4、P3.5实现此功能),所以不会出现RXD端口数据混乱的情况。

小结

现在单片机的应用越来越广泛,单片机与PC之间的通信是一个非常重要的应用。如果单纯的从实现单片机与PC的并行通信的角度来说,该实现方法并不是最简单的。最简单的方法是将PC的并口对应引脚与单片机的P1口和P3口直接相连,然后软件上实现。本文的目的是充分利用单片机的串口资源与PC机进行通信。

更多相关推荐:
单片机串行通信实验报告

实验六串行通信实验报告班级学号姓名教师一双机通信由两套单片机试验装置两个实验小组共同完成该实验我们U1为甲机U2为乙机甲机发送本机学生本人学号后8位给乙机乙机接收该8位数据并显示在8位数码管上电路如图1所示要求...

单片机-实验三-串行口通信实验

实验三串行口通信实验一实验目的1掌握单片机串行口的工作原理及工作方式2掌握单片机串行口波特率的设置方法3掌握单片机串行口查询方式程序的设计方法二实验内容及要求1单片机的串行口经RS232电平变换后和PC机相连2...

单片机串口通讯实验报告

单21选题背景在国内外以PC机作为上位机单片机作为下位机的控制系统中PC机通常以软件界面进行人机交互以串行通信方式与单片机进行积极交互而单片机系统根据被控对象配置相应的前向后向信息通道工作时作为主控机测对象作为...

单片机与PC机串口通信实验报告

单片机与PC机串口通讯学生何绍金学号专业班级自动化1202指导老师杨东勇20xx年12月一实验目的学习PC机的串口通讯原理二实验设备统一电子开发平台三实验要求单片机与电脑串口通讯将单片机与电脑相连借助串口调试助...

单片机串行通信实验报告

单片机实验报告三实验名称姓名学号班级时间串行通信张昊110404247通信2班20xx11南京理工大学紫金学院电光系一实验目的1理解单片机串行口的工作原理2学习使用单片机的TXDRXD口3了MAX232解芯片的...

串行通信实验,南京理工大学紫金学院单片机实验报告

单片机实验报告实验名称姓名学号班级时间串行通信实验通信20xx11南京理工大学紫金学院电光系一实验目的1理解单片机串行口的工作原理2学习使用单片机的TXDRXD口3了解MAX232芯片的作用二实验原理MCS51...

单片机实验报告串行口

单片机实验报告实验名称姓名学号班级实验时间串行通信实验魏冶090402105光电一班20xx1129南京理工大学紫金学院电光系一实验目的1理解单片机串行口的工作原理2学习使用单片机的TXDRXD口3了解MAX2...

串口通信实验报告

基于LabwindowsCVI的串行通信接口实验报告一实验目的通过软件LabwindowsCVI编写仪器面板通过该面板实现计算机与外围设备的串口通信设置好通信端口波特率等参数后在TextBox控件中输入数据字符...

单片机与PC机串口通讯实验报告

单片机与PC机串口通讯实验报告自动化1003徐磊20xx03120xx51电路图2程序流程图3程序清单ORG0000HAJMPMAINORG0023HAJMPINTRP串口中断入口地址MAINMOVSCON50...

单片机课程设计实验---单片机间串行通信

单片机原理及应用课程设计报告课程设计题目单片机间串行通信原理专业班级20xx级电子信息科学与技术学生姓名罗滨志学号120xx20xx051成绩20xx年12月27日目录摘要11设计任务111功能要求212总体方...

rs232串口通信实验报告

计算机网络实验实现RS232串口通信程序及MODBUS协议的编程一实验目的1熟悉并掌握RS232串口标准及原理2实现PC机通过RS232串口进行数据的收发3掌握MODBUS协议4掌握MODBUS协议编程的编写二...

串口通信实验报告

华南农业大学实验报告目录1实验任务和目的12实验准备13实验步骤14实验分析与总结11分析12总结31实验任务和目的了解串行通信的背景知识后通过三线制制作一条串口通信线PCPC并编程实现两台PC间通过RS232...

单片机串口通信实验报告(19篇)