文档详情

课程设计--多级通信系统.doc

发布:2018-05-10约6.25千字共11页下载文档
文本预览下载声明
多机通信系统 一.引言 随着单片机技术的不断发展,单片机的应用已经从单机向多机互联化方向发展。单片机在实时数据采集和数据处理方面,有着成本低,能满足一般要求,开发周期短等优点,其在智能家居,计算机的网络通信与数据传输,工业控制自动化等方面有着广泛的应用。 在多机通信系统中,要保证主机与从机间可靠的通信,必须要让通信接口具有识别功能,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
显示全部
相似文档