51单片机双机串口通信 一个单片机控制12864显示程序模板

2024年11月20日 20:32
有1个网友回答
网友(1):

我这里只有  RS-485在单片机多机通信中的应用的,不过读懂程序就可以控制12864,不是很难,我同学都有做成功。

1、RS-485在单片机多机通信中的应用

主机程序

#include"reg52.h"

#define uint unsigned int

#define uchar unsigned char

sbit p10=P1^0;

sbit p11=P1^1;

void main(void)

{      

      uchar i=0;     

      TMOD=0X20;//设置定时器1工作模式2

      TH1=0XFF;

      TL1=0XFF;  //这里是假设晶振是11。0592的   波特率设置57600      

      SCON=0X40;  //设置方式1  只能发送 不能接受

      PCON=0X80;

      TR1=1;    // 启动T1  

      while(1)

      {  

   if(p10==0)                         

{       

SBUF=0x11;  //次LED单片机的针头

while(TI==0);

             TI=0;

while(p10==0);

             }

            if(p11==0)

    {        

SBUF=0x12;  //次闪单片机的针头

while(TI==0);

             TI=0;

             while(p11==0);

}      

  } 


}

从机2

#include"reg51.h"

#define uint unsigned int

#define uchar unsigned char

bit flag=0;

sbit p20=P2^0;

void main(void)

{     uchar i=0;

      TMOD=0X20;

      TH1=0XFF;

      TL1=0XFF;  //这里晶振频率同主机是11。0592的波特率设置57600      

      SCON=0X50;  //设置方式1  只能发送 不能接受

      PCON=0X80;

      TR1=1;    // 启动T1

      while(1)

  {  

         while(RI==0);//采用查询的方法判断时候接受到数据

  RI=0;

  i=SBUF;

if(i==0x12)

p20=~p20;  

                 i=0x00;         

}

}

从机1

       RS     BIT    P1.7

       RW     BIT    P1.6

       E      BIT    P1.5

       KOU    EQU    P2

       ORG    0030H

LOP:   MOV    SP,#5fH

       MOV    TMOD,#20H

       MOV    40H,#00H

       MOV    TH1,#0FFH

       MOV    TL1,#0FFH

       MOV    SCON,#50H

       MOV    PCON,#80H

       SETB   TR1 

       ACALL  LCD_MODEL         ;初始化的模块

       MOV    KOU,#81H

       ACALL  READY

       MOV    DPTR,#TAB

       ACALL  WRITE             ;显示的模块

       MOV    P2,#0C1H

       ACALL  READY

       MOV    DPTR,#TAB1

       ACALL  WRITE

   xt: jnb    RI,$

       CLR    RI

   x:  MOV    A,SBUF

       CJNE   A,#11H,rel  

       INC    40H 

       MOV    A,40H

       CJNE   A,#10,XTG

       MOV    40H,#0

XTG:   MOV    P2,#0C9H

       ACALL  READY

       MOV    DPTR,#TAB2

       ACALL  WRITEx

       AJMP   xt

 rel:  ajmp   xt 

 WRITEx:MOV   A,40H

       MOVC   A,@A+DPTR

       MOV    KOU,A

       ACALL  WRITE1

       RET

WRITE: MOV    A,#00H

       MOVC   A,@A+DPTR

       CJNE   A,#0FFH,s

       AJMP   EXIT

 S:    MOV    KOU,A

       ACALL  WRITE1

       INC    DPTR

       AJMP   WRITE

 EXIT: RET

WRITE1:SETB   RS

       CLR    RW

       CLR    E

       ACALL  DELAY

       SETB   E

       RET

LCD_MODEL: MOV     KOU,#01H

       ACALL  READY

       MOV    KOU,#03H

       ACALL  READY

       MOV    KOU,#00000110B

       ACALL  READY

       MOV    KOU,#00001100B

       ACALL  READY

       MOV    KOU,#38H

       ACALL  READY

       RET

READY: CLR   RS

       CLR   RW

       CLR   E

       ACALL DELAY

       SETB  E

       RET

DELAY: MOV   KOU,#0FFH            

       CLR   RS

       SETB  RW

       CLR   E

       NOP   

       SETB  E

       JB    KOU.7,DELAY

       RET 

TAB:   DB    "Proteus   7.1" ,0FFH       ;显示字库

TAB1:  DB    "Count:" ,0FFH

TAB2:  DB   "0123456789"

       END   

仿真图

2 两个单片机串行通信

单片机1的通信程序

/**************************************************************************

                          两个MCU通信

实现功能是   U1的按下的键,U2把对应的键用LED显示 

*********************************************************************/

#include"reg51.h"

#define uint unsigned int

#define uchar unsigned char

void main(void)

{     uchar i=0;

      TMOD=0X20;

      TH1=0XFF;

      TL1=0XFF;  //这里是假设晶振是11。0592的   波特率设置57600      

      SCON=0X40;  //设置方式1  只能发送 不能接受

      PCON=0X80;

      TR1=1;    // 启动T1

      P1=0XFF;     

       while(1)

      {  

         

     while(P1==0XFF);  //判断是否有键盘按下

                      i=P1;         //读取键值          

         SBUF=i;

    while(TI==0);

                                   TI=0;                               

while(P1!=0xff);  

  }

}

单片机2的通信程序

/*************************************************************************************

                           单片机2通信程序   两个MCU通信

 实现功能是   U1的按下的键,U2把对应的键用LED显示

****************************************************************************************/

#include"reg51.h"

#define uint unsigned int

#define uchar unsigned char

void main(void)

{

       uchar i=0;

      TMOD=0X20;

      TH1=0XFF;

      TL1=0XFF;  //这里是假设晶振是11。0592的   波特率设置57600

      SCON=0X50;  //设置方式1  只能发送 不能接受

      PCON=0X80;

      TR1=1;    // 启动T1

            while(1)

     {     while(RI==0);//采用查询的方法判断时候接受到数据

               

i=SBUF;

P1=i;

                                RI=0;  

 }

}