找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1475|回复: 0
打印 上一主题 下一主题
收起左侧

单片机串行通信接口的C51编程实验

[复制链接]
跳转到指定楼层
楼主
ID:583040 发表于 2020-2-11 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原理:
1.两个AT89c51单片机各自P0口接一个数码管,P1.0接一个按钮,单片机的TXD和RXD与对方单片机的RXD和TXD连接。
2.编程实现单片机的数码管显示另一个单片机的按钮按动次数。
步骤:
1.利用Proteus仿真软件按设计题目要求绘制电路。
2.按题目要求编写程序。
3.将程序下载到单片机中,进行调试运行。

#include<reg51.h>
#define ucharunsigned char
#define uintunsigned int
#define SegPort P0
sbit bit0=P2^0;
sbit bit1=P2^1;
uchar codetab[16]=
      {0x3F,0x06,0x5B,0x4F,0x66,
      0x6D,0x7D,0x07,0x7F,0x6F};
//0~9共阴极字型码
uchar datadisplaybuf[2];//定义显示缓冲区
bit Commflag;//定义通信标志
ucharReceiveData;//接收的数据
uchar counter;//按键的按动次数计数
ucharOldKey,NewKey;
//通信中断函数
void Txd_Rxd()interrupt 4
{
     if(TI)TI=0;
      else
      {
           RI=0;
               ReceiveData=SBUF;
           Commflag=1;
      }
}
voidDataChange(uchar m)
{
      displaybuf[1]=m/10;
      displaybuf[0]=m%10;
}
void delay()
{
      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;
}
void Key()
{
     NewKey=P1&0x01;
      if((OldKey==0x01)&&(NewKey==0x00))
      {
           counter++;
           SBUF=counter;
      }
      OldKey=NewKey;
}
void main()
{
      SCON=0x50;
      TMOD=0x20;
      TH1=0xFD;
      TL1=0xFD;
      TR1=1;
      ES=1;
      EA=1;
      while(1)
      {
           Key();
           if(Commflag)
           {
                 Commflag=0;
                 DataChange(ReceiveData);
           }
           display();
      }
}

1.左数码管显示且纪录右按键按动次数
2.右数码管显示且纪录左按键按动次数



串行通信接口的C51编程实验报告.rar

45.41 KB, 下载次数: 18, 下载积分: 黑币 -5

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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