51单片机串口通讯实验
串行口通信实验 单片机实验报告

实验六串行口通信实验一、实验内容实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。
本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。
二、实验目的掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。
三、实验原理51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。
进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。
为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。
单片机串行接口有两个控制寄存器:SCON和PCON。
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。
由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。
待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。
单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。
在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。
WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。
如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。
51单片机的串口通信程序(C语言)

51单片机的串口通信程序(C语言) 51单片机的串口通信程序(C语言)在嵌入式系统中,串口通信是一种常见的数据传输方式,也是单片机与外部设备进行通信的重要手段之一。
本文将介绍使用C语言编写51单片机的串口通信程序。
1. 硬件准备在开始编写串口通信程序之前,需要准备好相应的硬件设备。
首先,我们需要一块51单片机开发板,内置了串口通信功能。
另外,我们还需要连接一个与单片机通信的外部设备,例如计算机或其他单片机。
2. 引入头文件在C语言中,我们需要引入相应的头文件来使用串口通信相关的函数。
在51单片机中,我们需要引入reg51.h头文件,以便使用单片机的寄存器操作相关函数。
同时,我们还需要引入头文件来定义串口通信的相关寄存器。
3. 配置串口参数在使用串口通信之前,我们需要配置串口的参数,例如波特率、数据位、停止位等。
这些参数的配置需要根据实际需要进行调整。
在51单片机中,我们可以通过写入相应的寄存器来配置串口参数。
4. 初始化串口在配置完串口参数之后,我们需要初始化串口,以便开始进行数据的发送和接收。
初始化串口的过程包括打开串口、设置中断等。
5. 数据发送在串口通信中,数据的发送通常分为两种方式:阻塞发送和非阻塞发送。
阻塞发送是指程序在发送完数据之后才会继续执行下面的代码,而非阻塞发送是指程序在发送数据的同时可以继续执行其他代码。
6. 数据接收数据的接收与数据的发送类似,同样有阻塞接收和非阻塞接收两种方式。
在接收数据时,需要不断地检测是否有数据到达,并及时进行处理。
7. 中断处理在串口通信中,中断是一种常见的处理方式。
通过使用中断,可以及时地响应串口数据的到达或者发送完成等事件,提高程序的处理效率。
8. 串口通信实例下面是一个简单的串口通信实例,用于在51单片机与计算机之间进行数据的传输。
```c#include <reg51.h>#include <stdio.h>#define BAUDRATE 9600#define FOSC 11059200void UART_init(){TMOD = 0x20; // 设置定时器1为模式2SCON = 0x50; // 设置串口为模式1,允许接收TH1 = 256 - FOSC / 12 / 32 / BAUDRATE; // 计算波特率定时器重载值TR1 = 1; // 启动定时器1EA = 1; // 允许中断ES = 1; // 允许串口中断}void UART_send_byte(unsigned char byte){SBUF = byte;while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志位}unsigned char UART_receive_byte(){while (!RI); // 等待接收完成RI = 0; // 清除接收完成标志位return SBUF;}void UART_send_string(char *s){while (*s){UART_send_byte(*s);s++;}}void main(){UART_init();UART_send_string("Hello, World!"); while (1){unsigned char data = UART_receive_byte();// 对接收到的数据进行处理}}```总结:通过以上步骤,我们可以编写出简单的51单片机串口通信程序。
单片机串行通信实验报告(实验要求、原理、仿真图及例程)

《嵌入式系统原理与实验》实验指导实验三调度器设计基础一、实验目的和要求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来实现字符串的发送。
51单片机串口通信实例

51单片机串口通信实例一、原理简介51 单片机内部有一个全双工串行接口。
什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。
串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。
其缺点是传输速度较低。
与之前一样,首先我们来了解单片机串口相关的寄存器。
SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。
从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。
串行口控制寄存器SCON(见表1) 。
表1 SCON寄存器表中各位(从左至右为从高位到低位)含义如下。
SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。
经验分享:学习单片机重要的是实践,所以开发板是很重要,给大家推荐些淘宝上信誉良好并且软硬件及小零件等、售前售后服务良好的皇冠级金钻店铺给大家,在硬件购买上少走弯路。
按住Ctrl键单击即可:慧净电子单片机(一皇冠)【天津商盟】天津锐志(电子)单片机经营部(两皇冠)金沙滩工作室(5钻)深圳育松电子元件,模块,传感器,批发部:淘宝最全最平价(5皇冠)志宏电子(4钻)表2 串行口工作方式控制位其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。
SM2 :多机通信控制位。
该仅用于方式2 和方式3 的多机通信。
其中发送机SM2 = 1(需要程序控制设置)。
接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。
当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。
51单片机双机串行通信设计

51单片机双机串行通信设计51单片机是一款广泛应用于嵌入式系统中的微控制器,具有高性能和低功耗的特点。
在一些场景中,需要使用51单片机之间进行双机串行通信,以实现数据传输和协同工作。
本文将介绍51单片机双机串行通信的设计,包括硬件连接和软件编程。
一、硬件连接1.串行通信口选择:51单片机具有多个串行通信口,如UART、SPI 和I2C等。
在双机串行通信中,可以选择其中一个串行通信口作为数据传输的接口。
一般来说,UART是最常用的串行通信口之一,因为它的硬件接口简单且易于使用。
2.引脚连接:选定UART口作为串行通信口后,需要将两个单片机之间的TX(发送)和RX(接收)引脚相连。
具体的引脚连接方式取决于所使用的单片机和外设,但一般原则上是将两个单片机的TX和RX引脚交叉连接。
二、软件编程1.串行通信初始化:首先需要通过软件编程来初始化串行通信口。
在51单片机中,可以通过设置相应的寄存器来配置波特率和其他参数。
具体的初始化代码可以使用C语言编写,并根据所使用的开发工具进行相应的配置。
2.发送数据:发送数据时,可以通过写入相应的寄存器来传输数据。
在51单片机中,通过将数据写入UART的发送寄存器,即可将数据发送出去。
发送数据的代码通常包括以下几个步骤:(1)设置发送寄存器;(2)等待数据发送完成;(3)清除数据发送完成标志位。
3.接收数据:接收数据时,需要通过读取相应的寄存器来获取接收到的数据。
在51单片机中,可以通过读取UART的接收寄存器,即可获取到接收到的数据。
接收数据的代码通常包括以下几个步骤:(1)等待数据接收完成;(2)读取接收寄存器中的数据;(3)清除数据接收完成标志位。
4.数据处理:接收到数据后,可以进行相应的数据处理。
根据具体的应用场景,可以对接收到的数据进行解析、计算或其他操作。
数据处理的代码可以根据具体的需求进行编写。
5.中断服务程序:在双机串行通信中,使用中断可以提高通信的效率。
51单片机串口通信程序。。含详细例子

{ P3_4=0; P3_3=1;
} void RstPro()//编程器复位 {
pw.fpProOver();//直接编程结束 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同 }
void ReadSign()//读特征字 {
} void serial () interrupt 4 using 3 //串口接收中断函数 {
if (RI) { RI = 0 ; ch=SBUF; read_flag= 1 ; //就置位取数标志 }
} main()
{ init_serialcom(); //初始化串口 while ( 1 ) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清 0 send_char_com(ch); } }
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
SendData(); } else break;//等待回应失败 } pw.fpProOver();//操作结束设置为运行状态 ComBuf[0]=0;//通知上位机编程器进入就绪状态 SendData(); }
void Lock()//写锁定位
{
pw.fpLock();
SendData();
双击串行通讯实验

实验四、双击串行通讯实验一、实验目的该实验需要两套MPC100B配合完成。
1.掌握单片机串行口工作方式;2.掌握双机通讯的接口电路设计及程序设计。
二、实验设备1.仿真器;2.单片机最小系统教学实验模块;3.外部数据存储器模块;三、实验要求由两套单片机试验装置(两个实验小组)共同完成该实验。
我们称装置1为甲机,装置2为乙机。
甲机发送一个字节的呼叫信号给乙机,乙机正确地收到该呼叫信号后,返回一个字节的应答信号。
当甲机收到正确的应答信号后,再发送规定格式的数据帧。
数据帧必须包括以下内容:数据长度(1字节)+数据(n字节)+校验和(1字节)乙机收到完整的数据帧后,发送一个表明接收正确或错误的应答字节。
要求每个字节的发送帧格式为:起始位(1bit)+数据位(8bit)+停止位(1bit)。
要求通讯波特率为4800bps,二以上个信号和数据帧的具体数据内容,可以自行规定。
四、实验原理4.1 串行通讯的方式在串行通讯中,有两种基本的通讯方式:异步通讯,同步通讯。
异步串行通讯规定了字符数据的传送方式,即每个数据以相同的帧格式发送。
每个帧信息由起始位、数据位、奇偶校验位和停止位组成。
本实验主要学习异步通讯的实现方法。
按照通讯方式,又可以将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
4.2 单片机串行口工作方式单片机串行口工作方式一共4种,从方式1到方式3均用于串行异步通讯。
在异步串行通讯的一个字节的传送中,必须包括了起始位(0)和停止位(1)。
除此之外,方式1具有8位(1个字节)的数据位(低位在先),方式2、3则除这8位之外,还具有一个课编程的第9位,这个第9位编程通常被编程为奇偶校验位。
本实验采用方式1,利用MOV SCON,#50H来设置SCON。
4.3 波特率的设置在异步串口通讯中,一个很重要的工作就是进行串口波特率的设置。
波特率是指串口通讯中每秒传送的位数,单位为bps,它反应了串口通讯的速度;同时,通讯双方的速度必须一致,才能够顺利进行通讯。
串行通信接口的C51编程实验报告.doc

int i;
for(i=500;i>0;i--); } void display() {
SegPort=0xff; SegPort=~tab[displaybuf[0]]; bit0=0;bit1=1; delay(); SegPort=0xff; SegPort=~tab[displaybuf[1]]; bit0=1;bit1=0; delay(); SegPort=0xff; }
实 验 #include<reg51.h> 原 始 #define uchar unsigned char 数据 #define uint unsigned int
#define SegPort P0 sbit bit0=P2^0; sbit bit1=P2^1; uchar code tab[16]=
Key(); if(Commflag) {
Commflag=0; DataChange(ReceiveData); } display(); }
}
实验 数据 整理 与分 析
实 验 1.左数码管显示且纪录右按键按动次数 结论 2.右数码管显示且纪录左按键按动次数
佛山职业技术学院
电子信息工程技术专业
《 串行通信接口的 C51 编程实验
》课程实验报告
班别
姓
学号 01 实验室 5—209
日期 2011.3.22 名
组号
同组人员
实验
串行通信接口的 C51 编程实验
成绩评定
名称
教师签名
主 要 计算机
仪器
设备
实验 目的
1、 掌握单片机的串行通信接口软件编程方法 2、 掌握单片机的串行通信接口调试技术。
51单片机串口通信试验汇编程序

51单片机串口通信试验汇编程序(今天是硬生生的把它给抠出来了):PC 通过串口助手向单片机系统传递命令和数据:以A5开始,以5A结束;中间是数据,长度不一,要求把数据部分用led灯显示出来;并且要求循环显示;//This is my x_Ed program code//we use it as the pc communicated with the mcu//At the same time,we want to see the result by LCD;STFLAG BIT 00H //收到起始码标志,1为收到起始码EDFLAG BIT 01H //到结束码标志,1为收到结束码TMFLAG BIT 02H //定时时间到标志,1为定时时间到ORG 0000HSJMP Initialize//主程序入口(初始化程序)ORG 000BH //定时器0入口LJMP TIMER0 //定时器0中断ORG 0023H //串口中断程序的入口地址LJMP Transfer //跳转到接受中断入口///////////////////////////////////////////////////////////////ORG 0050HInitialize:MOV SP,#70H //设置堆栈MOV TMOD,#21H //T1工作方式2 T0工作MOV TH1,#0FDH //波特率9600MOV TL1,#0FDH //波特率9600 自动重装载MOV TH0,#3CH //定时50msMOV TL0,#0BH //定时50msMOV SCON,#50H //串口工作方式1MOV R6,#00H //定时次数计数器20一秒MOV R5,#00H //接收数据长度计数器MOV R4,#00H //控制输出控制寄存器MOV R0,#30H //数据存储地址MOV R1,#30H //控制输出的数据缓存CLR STFLAG //清起始标志位CLR EDFLAG //清结束标志位CLR TMFLAG //清时钟标志位SETB PS //提高串口中断的优先级SETB TR1 //打开定时器1;SETB ES //打开串口中断允许位SETB ET0 //定时器0中断允许位SETB EA //打开全局中断允许位/////////////////等待接受命令//////////////////////// Main: JB STFLAG,NODE3 //已经收到起始位SJMP Main //未起始继续等待NODE3: JB EDFLAG,NODE4 //已经收到结束位SJMP Main //未结束继续等待NODE4: SETB TR0 //打开定时器0;NODE5: JB TMFLAG,OUTPUTSJMP NODE5///////////////////等待上位机传送数据并记录//////// Transfer: CLR ESMOV A,SBUFCJNE A,#0A5H,NODE0 //检测到起始位SETB STFLAGSJMP JIEDIANNODE0: CJNE A,#05AH,NODE1 //检测到结束位SETB EDFLAGMOV DPH,R5MOV R4,DPHclr ES //打开串口中断允许位SJMP ret00NODE1: MOV @R0,A //既非起始码,又非结束码,则为数据INC R0INC R5MOV SBUF,#055HJIEDIAN: CLR TICLR RISETB ESret00: RETITIMER0: CLR TR0MOV TH0,#3CHMOV TL0,#0B0HINC R6CJNE R6,#20,RTNSETB TMFLAGMOV R6,#00HRTN: SETB TR0RETIOUTPUT: CLR TR0clr TMFLAGMOV A,@R1MOV P1,AINC R1DJNZ R4,NODE4MOV R1,#30HCLR TMFLAGMOV DPH,R5MOV R4,DPHSJMP NODE4RETIEND。
51单片机模拟串口通讯

论坛新老朋友们。
祝大家新年快乐。
在新的一年开始的时候,给大家一点小小的玩意。
工程师经常碰到需要多个串口通信的时候,而低端单片机大多只有一个串行口,甚至没有串口。
这时候无论是选择高端芯片,还是更改系统设计都是比较麻烦的事。
我把以前搞的用普通I/O口模拟串行口通讯的程序拿出来,供大家参考,希望各位兄弟轻点拍砖。
基本原理:我们模拟的是串行口方式1.就是最普通的方式。
一个起始位、8个数据位、一个停止位。
模拟串行口最关键的就是要计算出每个位的时间。
以波特率9600为例,每秒发9 600个位,每个位就是1/9600秒,约104个微秒。
我们需要做一个精确的延时,延时时间+对IO口置位的时间=104微秒。
起始位是低状态,再延时一个位的时间。
停止位是高状态,也是一个位的时间。
数据位是8个位,发送时低位先发出去,接收时先接低位。
了解这些以后,做个IO模拟串口的程序,就是很容易的事。
我们开始。
先上简单原理图:就一个MAX232芯片,没什么好说的,一看就明白。
使用单片机普通I/ O口,232数据输入端使用51单片机P3.2口(外部中断1口,接到普通口上也可以,模拟中断方式的串行口会有用。
呵呵)。
数据输出为P0.4(随便哪个口都行)。
下面这个程序,您只需吧P0.4 和P3.2 当成串口直接使用即可,经过测试完全没有问题.2、底层函数代码如下:sbit TXD1 = P0^4; //定义模拟输出脚sbit RXD1 = P3^2; //定义模拟输入脚bdata unsigned char SBUF1; //定义一个位操作变量sbit SBUF1_bit0 = SBUF1^0;sbit SBUF1_bit1 = SBUF1^1;sbit SBUF1_bit2 = SBUF1^2;sbit SBUF1_bit3 = SBUF1^3;sbit SBUF1_bit4 = SBUF1^4;sbit SBUF1_bit5 = SBUF1^5;sbit SBUF1_bit6 = SBUF1^6;sbit SBUF1_bit7 = SBUF1^7;void delay_bps() {unsigned char i; for (i = 0; i < 29; i++); _nop_(); _nop_();} //波特率9600 模拟一个9600波特率unsigned char getchar2() //模拟接收一个字节数据{while (RXD1);_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); delay_bps();SBUF1_bit0 = RXD1; //0delay_bps();SBUF1_bit1 = RXD1; //1delay_bps();SBUF1_bit2 = RXD1; //2delay_bps();SBUF1_bit3 = RXD1; //3delay_bps();SBUF1_bit4 = RXD1; //4delay_bps();SBUF1_bit5 = RXD1; //5delay_bps();SBUF1_bit6 = RXD1; //6delay_bps();SBUF1_bit7 = RXD1; //7delay_bps();return(SBUF1) ; //返回读取的数据}void putchar2(unsigned char input) //模拟发送一个字节数据{SBUF1 = input;TXD1 = 0; //起始位delay_bps();TXD1 = SBUF1_bit0; //0delay_bps();TXD1 = SBUF1_bit1; //1delay_bps();TXD1 = SBUF1_bit2; //2delay_bps();TXD1 = SBUF1_bit3; //3delay_bps();TXD1 = SBUF1_bit4; //4delay_bps();TXD1 = SBUF1_bit5; //5delay_bps();TXD1 = SBUF1_bit6; //6delay_bps();TXD1 = SBUF1_bit7; //7delay_bps();TXD1 = 1; //停止位delay_bps();}3、实现串行通讯。
51单片机实验报告

51单片机实验报告一、引言51单片机是一种广泛应用于嵌入式系统开发的微控制器芯片。
本实验旨在通过对51单片机的实验研究,加深对该芯片的理解和应用。
二、实验一:LED灯闪烁控制本实验通过编写程序,控制51单片机上的LED灯以特定的频率闪烁。
为了实现这个目标,我们首先需要了解51单片机的引脚布局,确定LED灯的连接方式。
然后,通过编写相应的汇编程序,控制引脚的电平变化,从而实现LED灯的闪烁。
三、实验二:数码管显示数码管是一种常见的输出设备,通过控制引脚的输出来显示特定的数字。
本实验中,我们通过编写程序,实现通过51单片机控制数码管的显示。
通过对数码管的驱动原理和编程的学习,我们可以灵活地控制数码管的显示内容和频率。
四、实验三:蜂鸣器发声蜂鸣器是一种常见的声音输出设备,通过控制引脚的输出来产生特定的声音。
本实验中,我们通过编写程序,实现通过51单片机控制蜂鸣器的发声。
通过学习蜂鸣器的驱动原理和编程,我们可以根据需要产生不同频率和节奏的声音。
五、实验四:温湿度检测温湿度检测是一种常见的环境监测需求。
本实验中,我们通过引入温湿度传感器,实现通过51单片机获取环境的温度和湿度信息。
通过编写程序和读取传感器的数据,我们可以实时监测环境的温湿度,并进行相应的控制和反馈。
六、实验五:红外遥控红外遥控是一种常见的无线通信方式,通过发送和接收红外信号来实现远程控制。
本实验中,我们通过引入红外发射和接收模块,实现通过51单片机进行红外遥控。
通过编写相应的程序,设置红外遥控的编码和解码方式,我们可以实现对外部设备的遥控操作。
七、实验六:定时器应用定时器是51单片机中的重要模块,它可以实现定时和计数等功能。
本实验中,我们通过学习定时器的工作原理和编程,实现通过51单片机进行定时和计数的应用。
通过编写相应的程序和设置定时器的参数,我们可以实现不同的定时和计数功能,满足各种需要。
八、实验七:串口通信串口通信是一种常见的数据通信方式,通过串口接口发送和接收数据。
8051单片机 串口通讯实验

实验五串口通讯实验1 实验目的——学习MCS-51单片机串口的工作原理及程序设计2 实验原理MCS-51单片机内部的全双工串行接口部分,包含有串行接收器和串行发送器。
有两个物理上独立的接收缓冲器和发送缓冲器。
接收缓冲器只能读出接收的数据,但不能写入。
发送缓冲器只能写入发送的数据,但不能读出。
因此可以同时收、发数据,实现全双工通讯。
此外,还有两个寄存器SCON 和PCON 分别用于控制串行口的工作方式以及波特率,定时器T1 可以用作波特率发生器。
SST89E554RC提供了增强型全双工串行接口,具有帧错误检测和自动地址识别的功能。
3 实验内容编写实验程序,每隔一定的时间单片机向串口发送一次数据“HUT CSE.”实验步骤实验参考程序:(Serial.C)#include "REG51.h"#include "stdio.h"/************************************************************* 函数原型: void Init_Serial(void) ** 函数描述: 初始化串口,晶振为11.0592MHz,波特率为19200bps *************************************************************/void Init_Serial(void){SCON = 0x50; // 串口工作方式1TMOD = (TMOD&0x0F)|0x20; // 选择定时器1方式2PCON = 0x80; // 波特率倍增TH1 = 0xFD; // 计数初值, 19200bpsTR1 = 1; // 启动定时器1ES = 0;}void delay(void){unsigned int i;for(i=0; i<35000; i++);}void main(void){Init_Serial();SBUF=0x00;while(1){printf("Xi'an Tangdu Corp.\n"); delay();}}实验步骤:(1)串口通讯实验电路如图3-7-2所示;(2)编写实验程序,经编译、链接无误后启动调试;(3)进入调试界面,点击命令,打开串口1 监视窗口;(4)运行实验程序,观察此时有如图3-7-2所示输出。
51单片机串口通信实现16 16点阵显示

51单片机开发的点阵实验附录2中讲到Proteus调试单片机串口的方法附录1中讲到8*8点阵的显示原理以下程序有本人编写,请参考:用串口调试助手发送个16进制01是个笑脸;02是个哭脸。
可以用上图,基于proteus做仿真。
C51程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit le1=P1^0;sbit le2=P1^1;sbit le3=P1^2;sbit le4=P1^3;uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar code tac[8][8]={{0x00,0x00,0xf8,0x04,0x32,0x4a,0x02,0x02},{0x02,0x12,0x22,0xc2,0x04,0xf8,0x00,0x00},{0x00,0x00,0x1f,0x20,0x4c,0x52,0x40,0x40},{0x40,0x48,0x44,0x43,0x20,0x1f,0x00,0x00},//笑脸{0x00,0x00,0xf8,0x04,0x02,0x4a,0x32,0x02},{0x02,0x02,0xc2,0x22,0x04,0xf8,0x00,0x00},{0x00,0x00,0x1f,0x20,0x40,0x52,0x4c,0x40},{0x40,0x40,0x43,0x44,0x20,0x1f,0x00,0x00},//哭脸uchar a=0;int b=0,c=0,flag=0,i; void init()//初始化{TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SM0=0;SM1=1;REN=1;EA=1;ES=1;}void delay(uint n) {uint i,j;for(i=n;i>0;i--)for(j=80;j>0;j--); }void display()//显示if(b==1)c=0;if(b==2)c=4;P1=0xff;P0=0x00;P2=0xff;le2=0;le4=0;for(i=0;i<8;i++) {P2=tab[i];P0=tac[0+c][i];delay(1);}P1=0xff;P0=0x00;P2=0xff;le1=0;le4=0;for(i=0;i<8;i++) {P2=tab[i];delay(1);}P1=0xff;P0=0x00;P2=0xff;le1=0;le3=0;for(i=0;i<8;i++) {P2=tab[i];P0=tac[2+c][i];delay(1);}P1=0xff;P0=0x00;P2=0xff;le2=0;le3=0;for(i=0;i<8;i++) {P2=tab[i];delay(1);}}void main(){init();while(1){if(flag==1){if(b==1||b==2)display();}}}void ser()interrupt 4//串口中断{RI=0;a=SBUF;if(a==0x01)b=1;if(a==0x02)b=2;flag=1;}附1:目前我会的有3种1.单片机+虚拟终端(作为串口输入设备)+串口2.单片机+虚拟终端(作为串口输入设备)+MAX232+串口3.单片机+串口+虚拟串口程序(virtual serial port)+串口调试助手4.单片机+MAX232+串口+虚拟串口程序(virtual serial port)+串口调试助手(这个不会,主要是不知道该怎么在Proteus中连线,理论上方法4和3的连线方法是没有太大差别的,我也不知道哪里设置不对,一直没弄成功,问题出在加入了MAX232后)方法1和2的区别不大,只是在串口和单片机中间多接个MAX232,因为是仿真软件,所以串口有和没有MAX232的仿真结果是一样的,就是细节上的设置不同方法1连线如下:方法2连线图如下:方法1和方法2的区别在PCT(虚拟终端输入串口的PCT计算机发送端)的一个设置参数不同,(当波特率改变的时候虚拟终端里面的波特率设置也要改变)方法1设置如下方法2设置如下不同的地方在PCT,串口这边的虚拟终端的RX/TX Polarity的设置不同,当在单片机和串口间没接入MAX232,该项设置为normal,当在其间接入了MAX232该项设置为inverted。
实验四 串行通信实验

实验四 串行通信实验一、实验目的1.了解51单片机串行口的结构、串行通讯的原理。
2.掌握51单片机与PC 机之间通讯的方法。
3. 学习系统应用程序的设计和调试二、实验设备PC 机一台 、 实验教学板一块。
三、实验原理51单片机的串行接口是全双工的,它能做异步接收器/发送器(UART ),也能做同步移位寄存器使用。
在做UART 使用时,相关的寄存器有SBUF 、SCON 、和PCON 中的波特率倍增位SMOD 。
SBUF 是数据发送缓冲器和接收缓冲器,逻辑上用同一个地址,物理上是分开的,用读写操作来选择。
SCON 是串行口控制寄存器,用于设定串行口的工作方式;保存方式2和方式3的第9位数据;存放发送、接收的中断标志。
在串行通讯的方式1和方式3中,通信的波特率是可以设置的,满足下式:2/132SMOD=⨯波特率(定时器计数器的溢出率)PC 机的串行通讯口是借助通用异步接收发送器8250(或16C550等)实现的,可使用comdebug.exe 等提供了有关串行口的收、发操作窗口的软件实现通讯。
PC 机的串行通讯采用RS232电平,因此要求单片机的实验板也要配置RS232接口,解决逻辑电平的配接。
如果通讯距离较远,则要配接调制解调器。
四、实验内容1, 自发自收用一根短路线,将实验板中RS232插口的RXD 和TXD 两个插孔短路。
然后编程设定串行口为工作方式1,传送55H 和0AAH 两个数据。
实验要求:程序采用查询方式。
每传送、接收一个数据,做一次检查,看是否正确,若两次都正确,则在显示器上显示“GOOD”,若不正确,则不显示,并要重新传送。
2, 单片机与PC 机的通信先使用通讯电缆将单片机的RS232接口与PC 机的COM1口连接,PC 机起动并运行comdebug.exe 软件,窗口上设置波特率为1200,8位数据、一个停止位。
单片机端也采用工作方式1,波特率为1200,完成单片机与PC 机的通信。
51单片机的2个串口分别通信的方法

51单片机的2个串口资源分别通信的方法当使用51单片机的2个串口资源进行通信时,比如用一个串口与PLC的串口使用RS485协议通信,一个串口通过蓝牙模块和另一个单片机无线通信时,该如何处理呢?传统的51单片机只有1个串口资源,只能采用分时复用的方法。
STC的15系列增强版51单片机具有多个串口资源,本文将描述如何使用IAP15W4K58S单片机用一个串口资源与PLC的RS485有线通信,另一个串口资源与Arduino单片机通过蓝牙模块无线通信,该通讯连接过程中PLC作为主机,IAP15W4K58S作为中间机,Arduino单片机作为最低层级。
工作过程是按下启动按键,PLC发信息给IAP15W4K58S单片机发高速脉冲控制步进电机驱动的机械臂运动取走货物,当货物取走后,IAP15W4K58S单片机通过蓝牙模块通知Arduino单片机控制的小车将新货物运送过来。
连接结构示意图如下图所示。
本例程使用的单片机型号为:IAP15W4K58S,该单片机有4个采用UART 工作方式的全双工异步串行通信接口(分别为串口1、串口2、串口3和串口4),每个串行口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和1个波特率发生器等组成。
本项目使用串行口1和串行口2。
串行口1的两个缓冲器共用寄存器SBUF (99H),串行口2的两个缓冲器共用寄存器S2BUF(9BH)。
10位(1起始位,8位数据位,1停止位)可变波特率(9600)。
串口1对应的硬件部分是TxD和RxD,串行口2对应硬件部分是TxD2和RxD2。
串口1选择引脚P3.0(RxD)和P3.1(TxD),串口2选择引脚P1.0(RxD)和P1.1(TxD)。
串口1既可以选择T1作为波特率发生器,也可以选择T2作为波特率发生器。
本文串口1提供2个选择(T1和T2),串口2只能选择T2作波特率发生器。
但是当串口1和串口2的波特率相同时,可以共用T2作为波特率发器,当T2工作在1T模式时,串行口1的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4,SYSclk表示系统时钟频率,[RL_TH2,RL_TL2]表示T2H,T2L的定时初值设置值。
单片机双机之间的串行通信设计

单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理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)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
单片机串口应用实验报告

单片机串口应用实验报告
实验名称:单片机串口应用实验
实验目的:
1. 学习串口通信的基本原理和工作机制;
2. 掌握单片机串口通信的配置方法和编程技巧;
3. 实现单片机与电脑的数据传输和通信。
实验器材和软件:
1. 单片机:STC89C52RC(或其他型号的单片机);
2. 串口模块:MAX232(或其他型号的转换电路);
3. USB转串口模块;
4. 电脑;
5. Keil C51开发环境;
6. 串口调试助手。
实验原理和步骤:
1. 硬件连接:将单片机的RX和TX引脚分别连接到串口模块的TX和RX引脚,并连接串口模块的VCC和GND引脚到单片机的VCC和GND引脚。
将串口模块的TX和RX引脚分别连接到USB转串口模块的RX和TX引脚,并将USB转串口模块插入电脑的USB接口。
2. 软件配置:
a. 打开Keil C51开发环境,选择对应的单片机型号;
b. 配置串口通信参数,如波特率、数据位、停止位等;
c. 编写程序,实现串口通信的功能;
d. 编译、烧录程序到单片机中。
实验结果:
在串口调试助手中输入数据,单片机接收到数据后进行处理,并将结果反馈给电脑进行显示。
实验总结和体会:
通过本实验,我了解了串口通信的原理和工作机制,掌握了单片机串口通信的配置方法和编程技巧。
实现了单片机与电脑的数据传输和通信,对单片机串口应用有了更深的理解和实践经验。
单片机串口通讯实验报告

试验十单片机串行口与PC机通讯试验汇报㈠试验目旳1.掌握串行口工作方式旳程序设计, 掌握单片机通讯旳编制;2.理解实现串行通讯旳硬环境, 数据格式旳协议, 数据互换旳协议;3.理解PC机通讯旳基本规定。
㈡试验器材1.G6W仿真器一台2.MCS—51试验板一台3.PC机一台㈢试验内容及规定运用8051单片机串行口, 实现与PC机通讯。
本试验实现如下功能, 将从试验板键盘上键入旳字符或数字显示到PC 机显示屏上, 再将PC机所接受旳字符发送回单片机, 并在试验板旳LED上显示出来。
㈣试验环节1.编写单片机发送和接受程序, 并进行汇编调试。
2.运行PC机通讯软件“commtest.exe”, 将单片机和PC机旳波特率均设定为1200。
运行单片机发送程序, 按下不一样按键(每个按键都定义成不一样旳字符), 检查PC机所接受旳字符与否与发送旳字符相似。
将PC机所接受旳字符发送给单片机, 与此同步运行单片机接受程序, 检查试验板LED数码管所显示旳字符与否与PC机发送旳字符相似。
㈤试验框图源程序代码:ORG 0000HAJMP STARTORG 0023HAJMP SERVEORG 0050HSTART: MOV 41H,#0H ;对几种寄存地址进行初始化MOV 42H,#0HMOV 43H,#0HMOV 44H,#0HMOV SCON,#00H ;初始化串行口控制寄存器, 设置其为方式0LCALL DISPLAY ;初始化显示MOV TMOD,#20H ;设置为定期器0, 模式选用2MOV TL1, #0E6H ;设置1200旳波特率MOV TH1, #0E6HSETB TR1 ;开定期器MOV SCON,#50H ;选用方式1, 容许接受控制SETB ESSETB EA ;开中断LOOP: ACALL SOUT ;键盘扫描并发送, 等待中断SJMP LOOPSERVE JNB RI,SEND ;判断是发送中断还是接受中断, 若为发送中断则调用ACALL SIN ;发送子程序, 否则调用接受子程序RETISEND: CLR TI ;发送子程序RETISIN: CLR RI ;接受子程序MOV SCON, #00HMOV A, SBUF ;接受数据LCALL XS ;调用显示子程序RETI子程序:SOUT: CLR TI ;清发送中断标志位LCALL KEY ;调用判断按键与否按下子程序MOV A,R0 ;将按键对应旳数字存入AMOV SBUF,A ;输出按键数字给锁存RETKEY: MOV P1,#0FFH ;将P1设置为输入口MOV A, P1CPL A ;将A内值取反ANL A, #0FFHJZ KEY ;将A与FFH与后判断与否为0, 若为0则表达无按键按下跳回KEYLCALL D ;调用延时子程序消抖MOV A, P1CPL AANL A, #0FFHJZ KEYMOV B,A ;判断有按键按下, 将值赋给BKEY1: MOV A, P1CPL AANL A,#0FFHJNZ KEY1LCALL DMOV A,BJB ACC.0,PKEY1 ;依次判断A内数据每个位与否为1, 并跳JB ACC.1,PKEY2 ;转到相对应位旳子程序JB ACC.2,PKEY3JB ACC.3,PKEY4JB ACC.4,PKEY5JB ACC.5,PKEY6JB ACC.6,PKEY7JB ACC.7,PKEY8EKEY: RETPKEY1: A JMP K1PKEY2: A JMP K2PKEY3: A JMP K3PKEY4: A JMP K4PKEY5: A JMP K5PKEY6: A JMP K6PKEY7: A JMP K7PKEY8: A JMP K8K1: MOV R0,#01H ;将对应旳数据赋给R0后跳转到EKEY SJMP EKEYK2: MOV R0,#02HSJMP EKEYK3: MOV R0,#03HSJMP EKEYK4: MOV R0,#04HSJMP EKEYK5: MOV R0,#05HSJMP EKEYK6: MOV R0,#06HSJMP EKEYK7: MOV R0, #07HSJMP EKEYK8: MOV R0, #08HSJMP EKEYXS:MOV SCON,#00H ;显示子程序, 采用同步移位寄存器CLR TIMOV DPTR, #TABMOVC A,@A+DPTR ;将对应数值旳数码管显示数值送入SBUF MOV R5,#04H ;共四位需要显示MOV 41H, AMOV R0, #41HDISPLAY1: MOV A,@R0MOV SBUF, AJNB TI,$ ;与否传完了CLR TI ;清除中断标志位INC R0DJNZ R5, DISPLAY1MOV S CON, #50HRETD: ;延时子程序MOV R7, #10HDELAY1: MOV R6, #0FFHDELAY2: DJNZ R6, DELAY2DJNZ R7, DELAY1RETTAB: DB 0BBH, 09H, 0EAH, 6BHDB 59H, 73H, 0F3H, 0BHDB 0FBH本次试验中处理了怎样判断数据是发送还是接受旳问题和怎样判断数据与否发送或接受完毕旳问题, 通过试验中旳讨论和研究书上有关串行口旳内容, 我们通过中断标志位和循环很好旳处理了这个问题。
80c51单片机串口通讯实验总结

80c51单片机串口通讯实验总结SCON是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志,在我的学习过程中,选用了方式1来实现串口通信(SM0=0 SM1=1)这种方式波特率可变而且为发送8为数据的工作方式。
REN为接收控制位,软件置1后,允许接收;TI为发送中断位,RI为接收中断位,均由软件置1方可继续工作;由于物理地址上存在两个SBUF寄存器……但软件地址上只存在一个,所以串行口的收发均由SBUF控制。
设所要发送的字符为“a”,“a”的ACSII码为0x98H,则发送所用的命令行为SBUF=“a”;,计算机接收端就会收到98H;相反接收时方式则为b=SBUF;(b为无符号char型变量).在实际操作时由于单片机发送有延时所以发送多位数据时,以及接受多位数据时,不能直接罗列这些命令行,应加入检测TI RI并软件置0的命令。
以发送为例:SBUF=“b”;while(TI!=1);TI=0;SBUF=“a”;while(TI!=1);TI=0;SBUF=“c”;while(TI!=1);TI=0;SBUF=“k”;while(TI!=1);TI=0;即可发送“back”至串口。
在使用串口通信的同时,波特率的同步有单片机定时器实现,由于反复使用波特率,8位自动重装的定时器工作方式2最为合适TMOD=0x20;TH1=0xfe;TL1=oxfe;TR1=1;即可产生晶振为11.0592mhz的9600波特率……控制串行口接收的方式有两种~中断法和查询法查询发采用while语句每当有数据传送时,通过RI 判断中断法采用EA=1;ES=1;的串行口中断中断子程序中对RI置0。