51개의 단일 칩 마이크로컴퓨터 듀얼 컴퓨터 직렬 포트 통신. 하나의 단일 칩 마이크로컴퓨터가 12864 디스플레이 프로그램 템플릿을 제어합니다.
저는 단일 칩 다중 컴퓨터 통신에 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;
?//여기서 수정 발진기는 57600으로 설정되어 있다고 가정합니다. >
? SCON=0X40; ?//설정 방법 1 ?송신은 가능하지만 수신은 불가능합니다.
? PCON=0X80;
// TR1=1; ?
? 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?송신만 가능하고 수신은 불가능합니다
? >
? TR1=1; // T1 시작
? while(1)
?while(RI==0) ;// 데이터 수신 시기를 결정하기 위해 쿼리 방법을 사용합니다.
RI=0;
? i=SBUF;
if(i==0x12 )
p20=~p20; ?
?i=0x00
}
}
슬레이브 1 p>
RS BIT P1.7
RW BIT P1.6
E ?BIT P1.5
KOU EQU P2 p>
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
p>ACALL ?WRITE
xt: jnb RI,$
CLR RI
x: ?MOV A,SBUF
CJNE ? A,#11H,rel ?
INC 40H?
MOV A,40H
CJNE ? /p>
MOV 40H,#0
XTG: ? MOV P2,#0C9H
ACALL ?준비
MOV DPTR,#TAB2 p>
ACALL ?WRITEx
AJMP ? xt rel: ?ajmp ? xt? A,40H
MOVC ? >
MOV KOU,A
ACALL ?WRITE1
RET
쓰기: MOV A,#00H
MOVC A ,@A +DPTR
CJNE ? A,#0FFH,s
AJMP ? EXIT S: MOV KOU,A
ACALL ?WRITE1
INC DPTR
AJMP ? 쓰기 종료: RET
WRITE1:SETB ? RS
CLR RW
CLR E p>
ACALL ?DELAY
SETB ? E
RET
LCD_MODEL: MOV KOU,#01H
ACALL ?준비
MOV KOU,#03H
ACALL ?준비
MOV KOU,#00000110B
ACALL ?준비
MOV KOU ,#00001100B
ACALL ?준비
MOV KOU,#38H
ACALL ?준비
RET
준비: 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 "개수:" ,0FFH
TAB2: ?DB ?
END ?
시뮬레이션 다이어그램
2 두 마이크로 컨트롤러 간의 직렬 통신
마이크로 컨트롤러 1의 통신 프로그램
/*** *** *********************************************** **** ******************
? 두 MCU 간의 통신
에서 누른 키는 무엇입니까? U1, U2가 누른 키 해당 키가 LED로 표시되나요?
**************************** ******** *********************************/
# include"reg51.h" p>
#define uint unsigned int
#define uchar unsigned char
void main(void)
{ uchar i=0;
? TMOD=0X20;
? TH1=0XFF;
?//이것은 수정 발진기 11.0592입니까? 전송 속도 설정은 57600입니다. ?
? SCON=0X40; ?//설정 방법 1 ?보내기만 할 수 있고 수락할 수는 없습니다.
? p> ? TR1=1; // T1 시작
? P1=0XFF 동안(1)
? > ?
?while(P1==0XFF); ?//키보드 누르기가 있는지 확인
? //키 값을 읽습니까? >
?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;
? ;
? TH1=0XFF;
?//여기에서는 수정 발진기가 11.0592로 설정되어 있다고 가정합니다.
? SCON=0X50; ?//설정 방법 1 ?송신만 허용됩니다.
? PCON=0X80;
? TR1=1; p>
while(1)
? { while(RI==0);//데이터 수신 시기를 결정하기 위해 쿼리 메소드 사용
i=SBUF;
P1=i;
RI=0 ?
?}
}