我这里只有 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;
}
}