找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机间串口通信,仿真电路图+程序

[复制链接]
跳转到指定楼层
楼主

/****A单片机程序***/
#include<reg52.h>
#include"type.h"

uint8 SigNum[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//CC共阴极数码管0123456789

void Delay1s(void)
{
        uint8 h,i,j,k;
        for(h=5;h>0;h--)
                for(i=4;i>0;i--)
                        for(j=116;j>0;j--)
                                for(k=214;k>0;k--);
}

/*********************************************************
串口初始化函数  参数:无  返回值:无
*********************************************************/
void USART_Init(void)
{
        TMOD = 0x20;//将定时器1设置为方式2,8位自动重装模式
        SCON = 0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能
        PCON = 0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速
        TH1 = 0xfd;  //11.0592M晶振,波特率9600
        TL1 = 0xfd;
        TR1 = 1;//开启定时器1
        ES = 1;//开启串口中断
        EA = 1;//开启总中断
}

/******************************************************************
发送一个字节函数  输入参数:dat 返回值:无
******************************************************************/
void Send_Dat(uint8 dat)
{        
        SBUF = dat;
        while(TI==0);
        TI=0;
}

void main()
{
        uint8 a=0;
        USART_Init();
        while(1)
        {
                Send_Dat(SigNum[a]);
                Delay1s();
                a++;        
                if(a==10)
                {
                        a=0;
                }
        }
}

void USART_INTR() interrupt 4        //串口中断
{
        if(RI)
        {
                RI = 0;
                P1 = SBUF;
        }
}
/*********B单片机程序*************/
#include<reg52.h>
#include"type.h"

uint8 LedScan[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//LED从上到下依次变化

uint8 Num=0;//该变量用于计算接收到的数据的次数

/*void Delay1s(void)
{
        uint8 h,i,j,k;
        for(h=5;h>0;h--)
                for(i=4;i>0;i--)
                        for(j=116;j>0;j--)
                                for(k=214;k>0;k--);
}*/

/*********************************************************
串口初始化函数  参数:无  返回值:无
*********************************************************/
void USART_Init(void)
{
        TMOD = 0x20;//将定时器1设置为方式2,8位自动重装模式
        SCON = 0x50;//串口控制寄存器,使串口工作在方式1,并且接受使能
        PCON = 0x00;//该寄存器第一位为串口波特率倍速控制位,这里不倍速
        TH1 = 0xfd;  //11.0592M晶振,波特率9600
        TL1 = 0xfd;
        TR1 = 1;//开启定时器1
        ES = 1;//开启串口中断
        EA = 1;//开启总中断
}

/******************************************************************
发送一个字节函数  输入参数:dat 返回值:无
******************************************************************/
void Send_Dat(uchar dat)
{        
        SBUF = dat;
        while(TI==0);
        TI=0;
}

void main()
{
   uint8 a=0;
   USART_Init();
   while(1)
   {
                   if(Num==10)//接受9之后让LED变化一次
                {
                        Num=0;
                        Send_Dat(LedScan[a]);
                        a++;
                        if(a==8)
                        {
                                a=0;
                        }
                }        
   }
}

void USART_INTR() interrupt 4        //串口中断
{
        if(RI)
        {
                RI = 0;
                P1 = SBUF;
                Num++;
                //Delay1s();
        }
}

全部资料下载地址:
单片机间串口通信.rar (65.63 KB, 下载次数: 90)


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

使用道具 举报

沙发
ID:241242 发表于 2018-9-5 10:32 | 只看该作者
太厉害了!学习。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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