串行通信基础
计算机通信大多是指计算机与外部设备或者是计算机之间进行相关信息或者数据进行互换、交换。
串行通信主要有并行通信和串行通信两种方式。在两个或者多个微系统交换信息中多采用串行通信方式。

并行通信:通常是将数据字节的各位用多条数据线同时进行数据的传输。控制比较简单,传输速度较快;长距离传输成本较高。

串行通信:是将数据字节分成一位一位的方式在一根传输线上逐个传输;传输速度没有并行通信速度快,长距离传输成本较低。

串行通信方式
AT89C52单片机的串口一共有4种工作方式,其中工作方式0为同步通信方式外,其余的3种均为异步通信方式。本文章主要讲的是异步通信方式中的一种,方式一。

串行通信数据传输的方向
数据传输方向可分为三种:单工、半双工、全双工。
单工指的是数据在传输的时候只能一个方向进行传输,不可以实现反向传输。简单的说就是只能 A的数据传输到B,而B的数据不能传输到A。
半双工指的是数据在传输的时候两个方向都可以进行传输,不过要分时进行。也就是说只有 A的数据传输到B完成以后 B的数据才可以进行传到A。
全双工指的是数据可以同时进行双向传输。也就是在A发送数据给B时,B也可以传送数据个A。

本文主要介绍的是单工通信的使用示例,程序编写与相关的仿真电路设计。

仿真电路设计以及单工传输工作原理
仿真电路通过proteus仿真软件进行设计,矩阵键盘输入1~16数字到单片机A,然后单片机A将数据发送到单片机B,通过单片机B连接的数码管显示出相应的数字。具体电路设计如下图所示:

电路工作原理
如图所示,单片机A、B双机进行串行通信,双机的RXD和TXD相互交叉相连,单片机A的P1 IO口连接矩阵按键,单片机B的P0 IO口连接一个2*8的数码管,数码管段选与位选通过74HC573八路输出锁存器进行控制。单片机A只设置为只能发送数据数据但不能接收数据的单工方式。当单片机A读入到P1口有状态变化后(也就是有数距输入),读取到后通过单片机A串行口发送到单片机B;当单片机B接收到数据后将数据送到P0进行输出显示。其中要注意的一点是双方的晶振频率均为11.0592MHz。

程序编写
在编写相关程序之前我们要先弄清楚单片机A、B两者各要做什么事情。单片机A需要做的是发送数据和按键处理,单片机B需要做的是接收数据和显示相关数据。所以我们编写程序可以分开进行编写。先写单片机A后写单片机B。

单片机A程序编写
单片机A程序编写可以分为两个部分来处理,一是数据发送程序。二是按键处理程序。

主程序
//定义头文件
#include <reg52.h>//定义相关数据类型
typedef unsigned int u16;
typedef unsigned char u8;#define DPIO_Key P1     //定义按键IO端口sbit Key1=P2^2;    //数码管停止显示按键u8 num=0;    //存储按键值
u8 dat;
//定义相关子程序
void scen(u8 dat);
void UARTint();
void dis_Key();
void dis();
//毫秒级延时函数
void delay(u16 i)
{while(i--);
}//主程序
void main()
{UARTint();while(1){dis();dis_Key();scen(num);}
}

按处理程序

//8x8矩阵按键
void dis()
{u8 a;DPIO_Key=0x0f;if(DPIO_Key!=0x0f){delay(1000);// 消抖if(DPIO_Key!=0x0f){DPIO_Key=0x0f;  //列扫描switch(DPIO_Key){case(0x0e) : num=4;break;case(0x0d) : num=3;break;case(0x0b) : num=2;break;case(0x07) : num=1;break;}DPIO_Key=0xf0;   //行扫描switch(DPIO_Key){case(0xe0) : num=12+num;break;case(0xd0) : num=8+num;break;case(0xb0) : num=4+num;break;case(0x70) : num=num;break;}while((a<50)&&(DPIO_Key!=0xf0)) //判断是否松开{delay(1000);a++;}}  }
}
//数码管停止显示
void dis_Key()
{if(Key1==0){delay(1000);  //消抖if(Key1==0){num=0;}while(!Key1);   //判断按键是否松开}
}

串行通信发送数据程序

//串口通信初始化
void UARTint()
{TMOD=0x20;   //设置定时器1的工作方式,8位自动重装TH1=253;TL1=253;     //设置9600比特率TR1=1;     //启动定时器1PCON=0x00;  //设置比特率不倍增SCON=0x40;    //设置通信方式一,并设置成禁止接收数据
}
//发送数据
void scen(u8 dat)
{SBUF=dat;    //将需要发送的数据赋给SBUF发送寄存器进行发送while(TI==0);   //判断数据是否发送完成,TI是发送标志位TI=0;    //软件清零数据发送完成标志位
}

单片机B程序编写
单片机B程序编写也可以分为两个部分来编写,一是数码管显示程序,二是串行口数据接收程序。

主程序

//定义头文件
#include <reg52.h>//定义数据类型
typedef unsigned int u16;
typedef unsigned char u8;#define LED P0    //数码管段码位码输出sbit duan=P2^0;    //段码输出选择
sbit wei=P2^1;     //位码选择输出u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //定义数码管位码
u8 code smgwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //定义数码管段码0~9
u8 shi,ge;     //数据拆分收存储值
u8 dat;     //数据接收存储变量//定义相关子程序
u8 receive();
void UARTint();
void dispaly();//毫秒级延时函数
void delay(u16 i)
{while(i--);
}//主程序
void main()
{UARTint();      //串行口初始化while(1){dispaly();    //调用数码管显示程序receive();     //调用串行口接收程序}
}

数码管显示程序

void dispaly()
{if(dat==0)     //当dat变量等于0时数码管不显示,否则就显示数值{LED=0xff;     //消隐wei=1;LED=smgwei[0];    //发送位码wei=0;duan=1;LED=0x00;     //发送段码duan=0;delay(50);LED=0xff;    //消隐wei=1;LED=smgwei[1];    //发送位码wei=0;duan=1;LED=0x00;    //发送段码duan=0;delay(50);}else     //当dat不等于0数码管显示相应数值{LED=0xff;     //消隐wei=1;LED=smgwei[0];wei=0;duan=1;LED=smgduan[shi];     //显示十位duan=0;delay(50);LED=0xff;    //消隐wei=1;LED=smgwei[1];wei=0;duan=1;LED=smgduan[ge];    //显示个位duan=0;delay(50);}
}

数据接收程序

void UARTint()
{wei=0;duan=0;TMOD=0x20;  //设置定时器1的工作方式,8位自动重装TH1=253;TL1=253;     //设置9600比特率TR1=1;    //启动定时器1PCON=0x00;      //设置比特率不倍增SCON=0x50;   //设置通信方式一,并且设置成允许接收模式}u8 receive()     //带返回参数的数据接收程序
{while(RI==0);     //RI接收标志{  RI=0;}dat=SBUF;      //接收数据存储到datshi=dat/10;    //数据拆分出十位ge=dat%10;    //数据拆分出个位return dat;     //将数据返回出去,存储到dat变量
}

以上就是单工串行通信的资料,写的不好,有不懂的和意见都可以留言哦。大家也可以根据这个实力进行修改成半双工的串行通信。

基于AT89C52单工串行通信系统设计相关推荐

  1. 基于AT89C52单片机的温湿度检测设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87704704 源码获取 主要内容: ...

  2. 基于AT89C52单片机的数字电压表设计

    一.系统组成及工作原理 1.1 系统组成 该基于AT89C52单片机的数字电压表设计由AT89C51单片机,ADC0809芯片(A/D转换器),LED数码管显示电路以及蜂鸣器电路等几部分组成.(用到得 ...

  3. 基于matlab fdma传输系统设计,基于MATLAB的通信系统设计(本科毕业论文).doc

    本科毕业设计(论文) 基于MATLAB的通信系统设计 2009年 6 月 摘要 随着现代通信系统的飞速发展,计算机仿真已经成为今天分析和设计通信系统的重要工具,在通信系统的研发和教学中具有越来越重要的 ...

  4. 基于微型计算机的步进电机系统设计,基于微型计算机的步进电机系统设计本科毕业论文.doc...

    基于微型计算机的步进电机系统设计 摘 要 如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中.本文设计了基于STC89C52单片机的步进电机驱动系统.本系统中,主要完成了按键控制步进电机起停. ...

  5. 基于微型计算机的步进电机系统设计,毕业论文-基于微型计算机的步进电机系统设计.doc...

    文档介绍: 毕业论文-基于微型计算机的步进电机系统设计基于微型计算机的步进电机系统设计摘要如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中.本文设计了基于STC89C52单片机的步进电机驱动 ...

  6. 基于微型计算机的步进电机系统设计,基于微型计算机的步进电机系统设计毕业论文...

    基于微型计算机的步进电机系统设计毕业论文 内蒙古大学鄂尔多斯学院 2008 级自动化专业学年论文I基于微型计算机的步进电机系统设计摘 要如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中.本文 ...

  7. 基于RFID的防伪系统设计

    基于RFID的防伪系统设计 近几年来,由于茶叶质量安全危机频繁发生,引起了广大消费者的关注,如何对茶叶质量安全进行有效追踪与追溯,已成为一个急需解决的课题.利用RFID技术建立一个茶叶质量安全追踪与追 ...

  8. matlab基于dct的图像压缩编码解码_基于FPGA的扩频系统设计(下)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  9. 基于java的订餐系统设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的订餐系统设计与实现 客户端详细设计 1.设计分析 顾客模块的主要功能是浏览,订餐. ...

最新文章

  1. 改变div php,js改变div样式
  2. beego mysql session_关于go中beego/session的小总结
  3. python3月新增知识点
  4. Git无法检测到文件名大小写的更改
  5. 每天一道LeetCode-----将m × n矩阵按照顺时针螺旋顺序转化成一维数组
  6. C# 类的几种方法调用
  7. 编程语言也环保?C语言领跑,Python、Perl垫底
  8. js splice坑_JavaScript的splice()方法在for循环中使用可能会遇到的坑!!!
  9. 单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会
  10. Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP
  11. Arcgis自动编号实现
  12. spring和jdbctemplate
  13. 微软3月补丁星期二修复71个漏洞,其中3个是0day
  14. python中的递归思想_使用python语言表达分形与递归
  15. 洛谷——P1146 硬币翻转
  16. crossApp初级-CAView类-5
  17. ERP是属于系统还是软件?
  18. openxml 给word添加table,复制样式和字体
  19. (附源码)springboot大学医学生毕业实习分配系统 毕业设计212 002
  20. python util

热门文章

  1. HTML特殊字符显示实体
  2. 孤陋寡闻的我刚知道怎么debug远程服务
  3. ACCA的详细介绍以及报名条件,这里全的有!
  4. DSO windowed optimization 代码 (2)
  5. VideoDownloadhe无限制_网络视频解析下载_MP4_支持多平台
  6. 精品软件 推荐 Able2Extract Professional 多功能的 PDF 转换器
  7. Python办公自动化——提取pdf文件中表格并到Excel
  8. 复合函数求导经典例题_复合函数求导练习试题.doc
  9. test指令两个操作数一样
  10. 基于EP4CE10F17C8的以太网数据回环(UDP)