找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3032|回复: 0
收起左侧

单片机串行通讯方式3的Proteus仿真+发射+接收程序

[复制链接]
ID:455671 发表于 2018-12-27 12:38 | 显示全部楼层 |阅读模式
串行口方式3的运用
一、 设计要求
甲乙两个单片机进行方式3(或方式2)串行通讯。甲机将8个流水灯控制数据发送给乙机,乙机再利用该数据点亮其P1口的8个LED。方式3比方式1多了一个可编程位TB8,该位一般作奇偶校验位。乙机接收到的8位二进制数据有可能出错,需进行奇偶校验,其方法是将乙机的RB8和PSW的奇偶校验位P进行比较,如果相同,接收数据;否则拒绝接收。

二、 系统方案
本系统主要由单片机控制模块、AT80C51模块、灯组模块、电源模块组成,下面分别论证这几个模块的选择。

1、主控制器件的论证与选择
1.1.1控制器选用
单片机比较
方案一:采用传统的51系列单片机。
传统的51单片机5个中断源,12T模式,内部没有或很少4K或8K的程序存储器51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
方案二:采用以增强型80C51内核的STC系列单片机
80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。80C51内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故采用来作为控制核心
STC单片机是1T的单片机,比传统的51单片机要快很多,而且也增加了很多新的功能,增加了内部EEPROM存储器,更方便保存数据。另一个特点,就是用串行口下载程序,使得烧录程序更方便。
通过比较,我们选择方案二。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  1. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

  2. typedef unsigned int u16;          //对数据类型进行声明定义
  3. typedef unsigned char u8;
  4. u8 data_send;

  5. void usart_send(u8 data_send)
  6. {
  7.         ACC=data_send;
  8.         TB8=P;
  9.         SBUF=data_send;
  10.         while(!TI);
  11.         TI=0;
  12.        
  13.        
  14. }


  15. void UsartInit()
  16. {
  17.   SCON=0xd0;                        //设置为工作方式3
  18.         TMOD=0X20;                        //设置计数器工作方式2
  19.         //PCON=0X80;                        //波特率加倍
  20.         TH1=0XFd;                                //计数器初始值设置,注意波特率是4800的
  21.         TL1=0XFd;
  22.         SM0=1;
  23.         SM1=1;
  24.         REN=1;
  25.         ES=1;                                                //打开接收中断
  26.         EA=1;                                                //打开总中断
  27.         TR1=1;                                        //打开计数器
  28. }


  29. void delay(u16 j)                        //1ms?????
  30. {
  31.         u8 i=250;
  32.         for(;j>0;j--)
  33. {
  34.                 while(--i);
  35.                 i=249;
  36.                 while(--i);
  37.                 i=250;
  38.         }
  39. }

  40. void main()
  41. {       
  42.         UsartInit();  //        串口初始化
  43.         while(1)
  44.         {

  45.         }
  46. }


  47. void Usart_rec() interrupt 4
  48. {
  49.         RI=0;
  50.         ACC=SBUF;//出去接收到的数据       
  51.         if(RB8==P)
  52.         {
  53.                 P1=SBUF;
  54.         }else{
  55.                 }
  56.        
  57. }
复制代码

所有资料51hei提供下载(发射+接收):
串行通讯.zip (93.25 KB, 下载次数: 26)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表