標題: 單片機間串口通信,仿真電路圖+程序 [打印本頁]

作者: 843995188    時間: 2017-5-31 03:19
標題: 單片機間串口通信,仿真電路圖+程序

/****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;//開啟總中斷
}

/******************************************************************
發(fā)送一個字節(jié)函數  輸入參數: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;//開啟總中斷
}

/******************************************************************
發(fā)送一個字節(jié)函數  輸入參數: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)



作者: todaljy    時間: 2018-9-5 10:32
太厲害了!學習。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1