多机通信技术(论文)-自写通信协议的多机通信.doc

上传人:椰子壳 文档编号:3924459 上传时间:2019-10-10 格式:DOC 页数:26 大小:594.50KB
返回 下载 相关 举报
多机通信技术(论文)-自写通信协议的多机通信.doc_第1页
第1页 / 共26页
多机通信技术(论文)-自写通信协议的多机通信.doc_第2页
第2页 / 共26页
多机通信技术(论文)-自写通信协议的多机通信.doc_第3页
第3页 / 共26页
多机通信技术(论文)-自写通信协议的多机通信.doc_第4页
第4页 / 共26页
多机通信技术(论文)-自写通信协议的多机通信.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《多机通信技术(论文)-自写通信协议的多机通信.doc》由会员分享,可在线阅读,更多相关《多机通信技术(论文)-自写通信协议的多机通信.doc(26页珍藏版)》请在三一文库上搜索。

1、江西理工大学3+1创新实验班项目设计论文 江 西 理 工 大 学 多机通信技术(论文)题 目:自写通信协议的多机通信学 院:电气工程学院专 业:自动化班 级:091班学 生: 学 号: 23指导教师:摘要通信技术和通信产业20世纪80年代以来发展最快的领域之一。不论是在国际还是在国内都是如此。这是人类进入信息社会的重要标志之一。通信包括人与人之间的语言表达,更包括电子产业中的通信。特别是在在嵌入式行业中,CPU与外设,CPU与CPU之间的信息交换等。在这些通信中,涉及到更种通信协议以及通信方式。包括串行通信:I2C,SPI,UART等,并行通信。本系统是基于PROTEUS软件仿真的UART双向

2、通信,即实现两个80C51单片机的双向通信。关键词: 80C51,UART双向通信,PROTEUS第1章 系统的总体设计4第2章 系统硬件模块概述52.1单片机80C51简介52.1.1硬件结构52.1.280C51中断控制系统62.1.380C51的串行通信62.2MAX232串行通信接口简介72.374HC595串行芯片简介8第3章 系统具体设计概述93.1 系统结构流程图93.2 系统硬件设计103.3 系统软件设计10第 4 章 系统性能测试134.1甲机向乙机发送数据测试134.2乙机向甲机发送数据测试131总 结152致 谢163参考文献174附 录18第1章 系统的总体设计本系统

3、实现的是两块单片机之间的双向通信,通信的方式为UART。在单片机甲和单片机乙中,都设置一个按键。当按下甲中的按键时,将单片机甲中的数据通过UART发送给单片机乙,乙接收后显示在数码管上。同理,按下乙中的按键时,将单片机乙中的数据通过UART发送给单片机甲,甲接收后显示在数码管上。UART通信通过MAX232进行。单片机甲单片机乙UART双向通信数码管显示数码管显示图1.1 系统结构图第2章 系统硬件模块概述2.1 单片机80C51简介80C51单片机属于美国Intel 公司的MCS-51系列 产品中的一个型号,采用CHMOS 工艺,功耗低,性能优良,在市场中获得了广泛的应用。80C51系列单片

4、机,泛指所有具有MCS-51指令系统,同时采用CHMOS工艺的单片机。在我国,80C51系列单片机因其性能价格比高、开发方式多、芯片功能适用、且为国内技术人员所熟知等特点得到了极其广泛的应用。 单片机的应用特点:l 常用来替代微机实现控制系统的在线应用l 用单片机代替模拟电路或数字电路,软硬件结合控制 可以提高控制系统的技术性能、技术含量和防盗能力。l 与PC机相比,能适应较为恶劣的工作环境 例如,民用单片机的环境适应温度范围是0+70。有些单片机芯片可以在2.2V甚至是0.9V到1.2V的低电压下正常工作(通常单片机的工作电压是+5V)。l 软件固化在程序存储器中,可以避免病毒侵袭和人为修改

5、,性能稳定2.1.1 硬件结构图 2.1.1 80C51硬件结构图CPU是80C51内部的1个字长为8位的中央处理单元,它由运算器、控制器两部分组成。实际上构成了单片机的核心。并行口有4个8位并行I/O口P0P3,均可并行输入输出8位数据。串行口有1个串行I/O口,用于数据的串行输入输出。80C51系列单片机有两个存储器:程序存储器(4KB ROM)和数据存储器(128B RAM),且各自独立编址。内置有2个16位定时器1,2,以及串行通信接口。靠总线来进行数据间的传递。2.1.2 80C51中断控制系统图2.12 80C51的中断控制系统在计算机系统中,CPU速度快,外设速度慢,这样CPU与

6、外设之间进行数据交换时,就遇到了CPU与外设之间的同步问题。目前,外围设备与CPU之间常用3中通信方式:查询,中断与直接存储器存储方式。由于查询方式CPU占有率高,应而采用中断形式会提高CPU的利用率。80C51中内嵌控制器可以管理具有2个中断优先级和5个中断源(2个外部中断,2个定时器中断,1个UART中断)。CPU在每个机器周期的S5P2时刻顺序采样各中断源,当发现某一中断有效时,相应中断标志置1,表明该对应事件发生了。16位定时0,1的中断标志位为TF0,TF1;外部中断0,1的中断标志为IE0,IE1;UART的接收中断与发送中断分别为RI和TI。2.1.3 80C51的串行通信图 2

7、.1.3 80C51串行通信接口内部结构根据数据传输的方式的不同,可以将串行通信分为同步通信和异步通信。由于同步通信必须保持同步,收发时钟相同,成本较高,应而多用于高速数字通信系统,单片机中异步通信得到了广泛运用。在异步通信方式中,发送方通关控制数据线的高低电平来完成数据的发送;接收方通过监测数据线的高低电平确认是否有数据传入以及接收的数据位是0还是1,只要发送速率与接收速率相同,就能准确的接收与发送,无需使用同一时钟信号。80C51内置了一个可编程的全双工通用异步通信接口,TXD与RXD。串行数据输出过程如下:在发送中断标志TI为0时,将数据写入寄存器SBUF中,系统自动启动发送,将SBUF

8、寄存器的内容由低位到高位依次输出到RXD引脚,同时TXD引脚输出移位脉冲,使外接的“串入并出”芯片逐一接受来自RXD引脚上的串行数据。当8位数据发送结束后,发送中断标志TI自动置1,引起系统发送中断,系统进入中断服务程序,可以通过查询TI是否置1就可以知道系统是否发送完毕。注意: CPU响应串行中断后不会自动清除TI,需要用“TI = 0”清除中断标志。串行数据输入过程如下:在REN(串行接受允许位)为1的情况下,系统在发送机的移位脉冲(来自TXD引脚)的作用下,74LS165(并转串芯片)的并行数据 B0B7 逐一移位到系统的RXD引脚上,并保存到CPU内的串行接收缓存器SBUF中,当接收到

9、B7位数据时,串行接收标志位RI置1,即已接收到一帧数据,同时RI = 1会引起系统的接收中断,系统进入中断服务程序,通过判断RI标志来确认接收过程是否结束。注意:CPU响应串行中断后不会自动清除RI,需要用“RI = 0”清除中断标志以便接受新的数据。2.2 MAX232串行通信接口简介MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、1

10、1脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电,15脚GND、16脚VCC(+5v)。 主要特点:1、符合所有的RS-232C技术标准 2、只需要单一 +5V电源供电 3、内部集成2个RS-232C驱动器 4、内部集成两个RS-232C接收器 5、高集成度,片

11、外最低只需4个电容即可工作。2.3 74HC595串行芯片简介 74HC595是硅结构的CMOS器件。兼容低电压TTL电路,遵守JEDEC标准。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SHcp的上升沿输入到移位寄存器中,在STcp的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电存储寄存器的数据输出到总线。8位串行输入/输出或者并行输出移位寄

12、存器。 图2.3 74HC595的真值表与时序图第3章 系统具体设计概述3.1 系统结构流程图该系统中甲乙两机本质上没有区别。在80C51单片机中,SBUF有两种。一个是接收寄存器,一个是发送接收器。当中断标志TI为0时,系统将数据写入SBUF中,系统自动启动发送数据,当8位数据发送结束后,发送中断标志TI自动置1,引起系统发送中断,系统进入中断服务程序,可以通过查询TI是否置1就可以知道系统是否发送完毕。 在接受过程,系统在发送机的移位脉冲(来自TXD引脚)的作用下,74LS165(并转串芯片)的并行数据 B0B7 逐一移位到系统的RXD引脚上,并保存到CPU内的串行接收缓存器SBUF中,当

13、接收到B7位数据时,串行接收标志位RI置1,引起UART中断,判断RI=1,即说明系统接收完毕。本系统数码管设计了两页,第1页为待发送的数据,第2页为接收的数据。在甲乙两机都设置了按键,当按键按下时,将数据写入SBUF中,同时将待显示的数据显示在数码管上,当判断到发送标志T1 = 1时,即表明数据发送完毕。乙机接收到收据后,会引起接收中断,乙机将接收的数据显示在数码管上。同理,甲机接收到乙机发送的数据后,引起甲机的接受中断,而后,甲机将数据显示在甲机的数码管上。3.2 系统硬件设计图3.2 系统硬件仿真结构图3.3 系统软件设计本系统关于UART通信的重要函数有初始化UART_Init(),发

14、送数据函数Putc_UART(),以及UART中断服务程序Serial_INT()。最后,还有数码管用74HC595驱动的程序。首先是系统UART初始化。程序如下:/* 函数名称: UART_Init ()* 函数功能: UART初始化*/void UART_Init(void)SCON |= 0x50; /* 串口模式1,允许接收*/TMOD |= 0x20; /* TH1,TL1自动装载 */PCON = 0x00; /* 波特率不倍增 * /TH1 = 0xfd; /* 波特率为9600 */TL1 = 0xfd; TI = 0; /* 清除发送标志 */RI = 0; /* 清除接受标

15、志 */TR1 = 1; /* 启动定时器1 */ES = 1; /* 允许UART中断 * /当系统要发送数据时,只要调用发送函数Putc_UART就可以了。程序如下:/* 函数名称: Putc_UART ()* 函数功能: 将数据发送出去* 入口参数: C_DAT : 待发送的数据*/void Putc_UART (uint8 C_DAT) SBUF = C_DAT;while(TI = 0);TI = 0; /* 将TI清零,以便下次发送*/ 当系统有UART中断时,UART接收中断或UART发送中断,系统进入该中断服务程序。/* 函数名称: Serial_INT()* 函数功能: UA

16、RT中断服务程序*/void Serial_INT() interrupt 4 if(RI) RI = 0; /* 将RI清零,以便下次接收 */Get_data = SBUF; /* 将接受的数据存入Get_data */本系统用串转并芯片74HC595来驱动数码管,在驱动74HC595时,系统用的是模拟的SPI时序,将位码与段码写入74HC595中。程序如下:/* 函数名称: MSPI_SendData()* 函数功能: 向SPI总线发送数据。* 入口参数: Data0 位码 Data1 段码 RCK0:74HC595片选信号 SCK0:74HC595时钟信号 DAT0:74HC595数据

17、信号* 出口参数: void*/void MSPI_SendData(uint8 Data0,uint8 Data1) short i = 7; RCK0 = 0; for(i=7; i=0; i-) SCK0 = 0; if(Data0 & (1=0; i-) SCK0 = 0; if(Data1 & (1i) DAT0 = 1; else DAT0 = 0; SCK0 = 1; RCK0 = 1; 通过对上述模块的调用即可实现所要求的功能。第 4 章 系统性能测试4.1 甲机向乙机发送数据测试甲机没按发送键时,乙机显示0,甲机显示待发送的数据 26甲机按下发送键时,乙机显示接受数据26,甲

18、机显示发送的数据 264.2 乙机向甲机发送数据测试乙机没按发送键时,甲机显示0,乙机显示待发送的数据 237乙机按下发送键时,甲机显示接收数据237,乙机显示发送数据 237通过以上测试,系统完美的实现了两块80C51的UART双向通信,达到了预期的目标,顺利的完成了本次嵌入式接口技术的学习。1 总 结本设计认真学习了了UART通信,80C51中断系统等方面的知识,较好的完成了课题的设计、制作与调节,基本达到了要求的指标技术。通过这些过程,我加深了对单片机UART的串行通信的理解,还有80C51中断过程的认识:即UART很好地解决了双机通信的问题,在接受与发送方面,完全可以理解为两个一模一样

19、的CPU之间的通信,再者,对于80C51中的中断执行的过程有了清楚地认识。我们深切体会到,理论与实践相结合的极端重要性。本系统的研制主要应用到了C语言编程、单片机控制技术以及PROTEUS软件的应用。所设计的基于单片机UART双向通信,达到了题目要求,同时也使我的动手能力和电子设计能力得到了极大锻炼。系统输出实际测试结果表明完全符合要求。本次设计,为我提供了展示自我能力的舞台,也使我深切认识到自身知识能力尚存在许多不足,更让我们体会到了嵌入式技术与设计的趣味,以及其强大深远的实用性,并且让我对CAN-BUS通信有了一定的了解。今后,我将更加努力学习,在嵌入式行业施展自己的才华,拥有一席之地,为

20、建设和谐社会和中华民族的伟大复兴做出自己应有的贡献。2 致 谢在本次设计期间,得到了刘晖老师的精心教导,多次寻找相关资料,为我们指点迷津,帮助我们开拓思路。刘老师以其严谨求实的治学态度,高度的敬业的精神,兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。他渊博的知识、开阔的视野和敏锐的思维给了我们深深的启迪。持续三个星期的忙碌,本次项目设计已经接近尾声,虽然不是特别完美,但它凝聚了多方的心血,作为本科生的我们,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,同学们的支持合作,想要完成这个设计是难以想象的。在此深深得感谢刘老师,和一直在过程中帮助的老师,以及指

21、导,关心和帮助的同学和朋友,感谢你们使得我不断的在学习中进步,成长。谢谢!3 参考文献1 刘晖.嵌入式接口技术2 潘永雄.新编单片机原理与应用, 2007年3 彭伟.单片机C语言程序设计实训100例. 电子工业出版社, 2009年4月4 谭浩强.C程序设计(第三版),2007年5 周立功.新编计算机基础教程.北京航天大学出版社,2008年6 周立功.项目驱动单片机应用设计基础,北京航天大学出版社,2008年4 附 录系统总程序如下:/*作者: 自动化091班 李嘉功能: UART 通信时间: 2011.12.13*/#include #include #define Page_MAX 2 #d

22、efine Key_Num_MAX 4/* * 用74HC595模拟SPI * */sbit SCK0 = P21;sbit DAT0 = P20;sbit RCK0 = P22; sbit KEY = P23;sbit K1 = P37;/* * 与翻页有关的参数*/void (*KEY_MondifyKey_Num_MAX)(void);uint8 Page_Number = 0; uint8 Scan_Number = 0; uint8 Key_Num = 0x09; uint8 Mondify_Number = 7; uint8 Mondify_EN = 0;uint8 codedig

23、itable12=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00; /* 段码 */ uint8 code selectable8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /* 位码 */uint8 DATAPage_MAX8= 11,11,11,11,11, 0, 2, 6, 11,11,11,11,11,11,11,11 ;uint8 T0flag = 1;uint8 Get_data = 0; /* 接收回来的数据*/uint8 Send_data = 26; /* 待发送的

24、数据 */* 函数名称: MSPI_SendData()* 函数功能: 向SPI总线发送数据。* 入口参数: Data0 位码 Data1 段码* 出口参数: void*/void MSPI_SendData(uint8 Data0,uint8 Data1) short i = 7; RCK0 = 0; for(i=7; i=0; i-) SCK0 = 0; if(Data0 & (1=0; i-) SCK0 = 0; if(Data1 & (1= Page_MAX) Page_Number = 0; Mondify_EN = 0; Mondify_Number = 7;/* 函数名称: KE

25、Y1(void)* 函数功能: 按键1 修改键* 入口参数: void* 出口参数: void*/void KEY1(void) Mondify_EN = (Mondify_EN+1)%2; /* 函数名称: KEY2(void)* 函数功能: 按键2 修改移位键* 入口参数: void* 出口参数: void*/void KEY2(void) if(Mondify_EN = 1) Mondify_Number +; if (Mondify_Number=8) switch (Page_Number) case 0 :Mondify_Number = 5;break; case 1 :brea

26、k; default:break; /* 函数名称: KEY3(void)* 函数功能: 按键3 参数自加键* 入口参数: void* 出口参数: void*/void KEY3(void) if (Mondify_EN = 1) DATAPage_NumberMondify_Number+; if(DATAPage_NumberMondify_Number = 10) DATAPage_NumberMondify_Number = 0; /* 函数名称: The_Modify_Start()* 函数功能: 修改数据* 入口参数: void* 出口参数: void* 按键说明: case 0:

27、 翻页键 case 1: 需要修改 case 2: 修改移位 case 3: 修改位自加*/ void The_Modify_Start(void) if (KEY = 0) Key_Num = Scan_Number; else if ( Key_Num=Scan_Number & Key_NumKey_Num_MAX) KEY_MondifyKey_Num(); if (0 = Mondify_EN) Send_data = DATA05*100+DATA06*10+ DATA07; Key_Num = 10; /* 函数名称: DATA_Change()* 函数功能: 将要现实的数据保存

28、至数组(*p)8中* 入口参数: P : 数组的首地址 Page: 要显示的页数 Data: 带显示的数据* 出口参数: void*/uint8 DATA_Change(uint8 (*p)8,uint8 Page,uint16 Data) uint8 i = 0; uint8 j = 0; if(0 = Data) for(j=2;j=6;j+) *(*(p+Page)+j) = 11; *(*(p+Page)+7) = 0; return 0; else for(i = 0;i 6;i+) *(*(p+Page)+7-i) = Data%10; Data /= 10; for(i=2;i8

29、;i+) if(*(*(p+Page)+i)!=0) for(j=2;ji;j+) *(*(p+Page)+j) = 11; break; return 1;/* 函数名称: Auto_Data_Dsply()* 函数功能: 显示动态数据* 入口参数: P : 数组的首地址 Page : 要显示的页数* 出口参数: void*/void Auto_Data_Dsply(uint8 (*p)8, uint8 Page,uint8 Which) static uint16 shing = 0; uint8 data0 = 0; if(Page_Number = Page) if(1=Which) *(*(p+Page)+0) = Page; *(*(p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1