实验项目:串口通信系统设计
实验目的:本系统设计的目的是使学生掌握单片机的串行通信技术。深刻理解单片机串行通信系统的功能和运行原理,掌握单片机软硬件系统开发的技巧。
具体要求两片单片机都工作于串口模式1,甲单片机的K1按键每按一下可通过串口分别依次控制乙单片机的LED1闪烁,LED2闪烁,LED1和LED2同时闪烁,关闭所有LED。
实验器材:protues,keil uvisio5
- 实验仿真器材
- 实验原理(硬件电路图)
实验代码
c语言:
send程序
#include<reg51.h>
#define uchar unsigned char
sbit K1=P1^0;
sbit LED1=P0^0;
sbit LED2=P0^3;
void delay()
{
uchar i,j;
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
void conveysymbol(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
void main()
{
uchar model=0;
SCON=0x40;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
TI=0;
TR1=1;
while(1)
{
if(K1==0)
{
while(K1==0);
model=(model+1)%4;
}
switch(model)
{
case 0: LED1=LED2=0; break;
case 1: conveysymbol('A');LED1=~LED1;LED2=0; break;
case 2: conveysymbol('B');LED2=~LED2;LED1=0; break;
case 3: conveysymbol('C');LED1=~LED1;LED2=LED1;break;
}
delay();
}
}
recieve程序
#include<reg51.h>
#define uchar unsigned char
sbit LED1=P0^0;
sbit LED2=P0^3;
void delay();
void main()
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
LED1=LED2=1;
while(1)
{
if(RI)
{
RI=0;
switch(SBUF)
{
case 'A': LED1=~LED1;LED2=1;break;
case 'B': LED2=~LED2;LED1=1;break;
case 'C': LED1=~LED1;LED2=~LED2;
}
}
else LED1=LED2=1;
delay();
}
}
void delay()
{
uchar i,j;
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
汇编语言代码
send程序
ORG 0000H
START:
MOV SCON,#50H
MOV PCON,#00H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
CLR RI
SETB TR1
MOV P0,#0FFH
LOOP1:
JNB RI,LOOP2
CLR RI
M1:
MOV A,SBUF
CJNE A,#'A',M2
MOV A,P0
ORL A,#08H
XRL A,#0F7H
MOV P0,A
H1:
JNB RI,H1
CLR RI
ACALL DELAY
LJMP LOOP1
M2:
MOV A,SBUF
CJNE A,#'B',M3
MOV A,P0
ORL A,#01H
XRL A,#0FEH
MOV P0,A
LJMP H1
M3:
MOV A,P0
XRL A,#0FFH
MOV P0,A
LJMP H1
LOOP2:
MOV P0,#0FFH
ACALL DELAY
LJMP LOOP1
DELAY: ;@11.0592MHz
PUSH 30H
MOV 30H,#218
NEXT:
DJNZ 30H,NEXT
POP 30H
RET
END
recieve程序
ORG 0000H
START:
MOV SCON,#40H
MOV PCON,#00H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
CLR TI
SETB TR1
MOV R2,#00H
MOV R3,#04H
MOV P1,#0FFH
MOV P0,#0FFH //1111 1111
LOOP1:
ACALL DELAY
MOV A,P1
CJNE A,#0FEH,M1
D1:
MOV A,P1
CJNE A,#0FFH,D1
INC R2
MOV A,R2
MOV B,R3
DIV AB
MOV A,B
MOV R2,A
M1:
CJNE R2,#00H,M2
MOV P0,#0FFH
ACALL DELAY
LJMP LOOP1
M2:
CJNE R2,#01H,M3
MOV A,P0
ORL A,#08H
XRL A,#0F7H
MOV P0,A
MOV SBUF,#'A'
H1:
JNB TI,H1
CLR TI
ACALL DELAY
LJMP LOOP1
M3:
CJNE R2,#02H,M4
MOV A,P0
ORL A,#01H
XRL A,#0FEH
MOV P0,A
MOV SBUF,#'B'
LJMP H1
M4:
MOV A,P0
XRL A,#0FFH
MOV P0,A
MOV SBUF,#'C'
LJMP H1
DELAY: ;@11.0592MHz
PUSH 30H
MOV 30H,#218
NEXT:
DJNZ 30H,NEXT
POP 30H
RET
END