课程设计--多级通信系统.doc
文本预览下载声明
多机通信系统
一.引言
随着单片机技术的不断发展,单片机的应用已经从单机向多机互联化方向发展。单片机在实时数据采集和数据处理方面,有着成本低,能满足一般要求,开发周期短等优点,其在智能家居,计算机的网络通信与数据传输,工业控制自动化等方面有着广泛的应用。
在多机通信系统中,要保证主机与从机间可靠的通信,必须要让通信接口具有识别功能,51单片机串行口控制寄存器SCON中的控制位SM2正是为了满足这一要求而设置的。
二.工作原理:
(1)数据的传递
主机发送信息,可以传送到各个从机或指定从机,各从机发送的信息只能被主机接收。机通信(关键是地址帧的识别)
主机发送:地址帧、数据帧的鉴别是通过第9位数据确定:
TB8=1,地址帧
TB8=0,数据帧
机接收:
各从机串行口工作在方式2、方式3下; (b)多机通信标志SM2(SCON.5)=1;
检查接收到的第9位RB8(SCON.2),当:
RB8=1:地址帧,将地址装入SBUF,置位RI,发出接收中断请求;判断主机发送地址是否与本机相符,若相符,则将从机SM2清0(变成直通方式),准备接收其后传送来的数据。
RB8=0:数据帧,对SM2=1,RB8=0的从机,接收数据丢弃,而对SM2=0的从机:直通方式,不论RB8是0还是1,都将接受到的数据送SBUF,并发出中断请求。
多机通信的过程总结如下:
(1)全部从机串行口工作方式初始化为2或3,置位SM2,允许中断;
(2)主机置位TB8,发送要寻址的从机地址;
(3)所有的从机均接收主机发送的地址,进入中断进行地址比较;
(4)确认寻址从机,自身SM2清0,向主机返回地址供主机核对;
(5)主机核对无误,向被寻址从机发送发送命令,通知从机进行一对一数据通信。 #include reg51.h
#define uchar unsigned char
#define uint unsigned int
uchar leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};
uchar Mode;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
void UART_init()
{
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
SCON = 0xd0;
ES = 1;
EX0 = 1;
IT0 = 1; //INT0下跳触发
EA = 1;
TI = 0;
}
void DelayMs(int ms)
{
uchar i;
while(ms--)
for(i=0; i120; i++);
}
void putc_to_SerialPort(uchar c)
{
SBUF = c;
while(TI == 0);
TI = 0;
}
void MasterControl(unsigned char Addr, unsigned char Comd)
{
TB8 = 1;
putc_to_SerialPort(Addr);
DelayMs(50);
TB8 = 0;
putc_to_SerialPort(Comd);
DelayMs(50);
}
Ex0_int(void) interrupt 0
{
while(P1==0xff);
if(P1==0xdf)
Mode=0;
else if(P1==0xbf)
Mode=1;
else
Mode=2;
P0 = leddata[Mode];
P20 = 0;
if(Mode == 0)
{ P2 = leddata[10];
P10 = 0;
P11 = 0;
DelayMs(500);
P10 = 1;
P11 = 1;
DelayMs(500);
P10 = 0;
P11 = 0;
DelayMs(500);
P10 = 1;
P11 = 1;
DelayMs(5
显示全部