单片机双机通信系统-毕业论文设计.doc_第1页
单片机双机通信系统-毕业论文设计.doc_第2页
单片机双机通信系统-毕业论文设计.doc_第3页
单片机双机通信系统-毕业论文设计.doc_第4页
单片机双机通信系统-毕业论文设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成都信息工程学院电子工程学院成都信息工程学院电子工程学院 电子技术综合设计 总结报告总结报告 题题 目:目: 单片机双机通信系统单片机双机通信系统 专专 业:业: 生物医学工程生物医学工程 班班 级:级: 2012 级级 1 班班 姓姓 名:名: 指导教师:指导教师: 胡老师胡老师 评评 分:分: 2014 年 12 月 20 日 目录目录 1 1项目计划项目计划 1 1 1.1 项目背景 1 1.2 方案设计可行性分析 1 1.2.1 需求分析 .1 1.2.2 可行性分析 .1 1.3 项目执行计划 2 2 2设计说明设计说明 3 3 2.1 方案设计 3 2.2 硬件设计原理 4 2.2.1 单片机系统 .4 2.2.2 DS1302 时钟模块 5 2.2.3 MAX232 电平转换 6 2.2.4 数码管显示.7 2.2.5 按键模块 .7 2.3 各单元模块设计流程图 8 2.3.1 硬件总设计框图 .8 2.3.2 DS1302 程序设计 9 2.3.3 按键程序设计.9 2.3.4 串口程序设计 11 3 3调试说明调试说明 1111 3.1 调试方法及步骤 .11 3.2 调试数据 .12 3.3 故障分析 .14 3.4 设计注意事项: .14 4 4总结总结 1515 5 5参考文献参考文献 1515 6 6附录附录 1616 单片机双机通信系统 第 0 页 1项目计划 1.1项目背景 单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多 优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广 泛的应用,随着集成电路技术的不断发展,单片机的性能也在不断提高其应用 的范围必将越来越宽广。然而,随着单片机在工业自动化控制、智能仪器中的 广泛应用,单片机已经逐渐满足需要,多机协同工作已经成为重要的发展趋势, 多机应用的关键就在于多级之间的互相通信、互传数据信息。单片机和计算机 的共同发展下,单片机的应用从独立的单片机向网络发展,由计算机和单片机 构成的多机网络系统也是单片机技术发展的一个方向。 单片机多机通信是指由两台以上的单片机组成的网络结构,可以通过串行 通信方式共同实现对某一过程的最终控制。随着计算机技术的发展,多机通信 技术也在不断的发展,现在发展比较成熟的还有光纤通信等。由于计算机的飞 速发展和控制系统的复杂化,多机通信已经越来越成为人们热门话题之一。目 前,单片机多机通信的形式较多,但通常可分为星型、环型、串行总线型和主 从式多机型四种。 1.2方案设计可行性分析 1.2.1 需求分析 1.设计任务 a.设计两个单片机系统; b.两单片机之间可以进行远距离通信; c.能够通过数码管显示时间; d.能够通过按键设置本机和对方的时间。 2.设计要求 a.基本要求:设计两个小系统,能实现有线互相通信(互设时间+数据共享) 。 b.扩展要求:远距离通信或无线通信,并能实现校验。 1.2.2 可行性分析 单片机双机通信系统 第 1 页 a. 市场可行性分析 单片机作为微型计算机的一个分支,其功能强、体积小、应用灵活等诸多 优点,在工业控制、仪器仪表、通信、家用电器和国际科技等各个领域得到广 泛的应用。 b. 技术可行性分析 本项目在设计上思路简单,已设计出合理的实际方案,可以实现基础要求 和扩展要求,并达到比较好的效果。 c. 资源可行性分析 资源有人力资源和材料资源,已考虑到各个阶段所需人才类型及数量,完 全可以保证项目实施的有条不紊。 d. 经济成本可行性分析 本项目设计结构简单,材料在原理图设计完成后导师派发。材料易购,成 本还是较为合适。 e. 项目风险分析 从项目整体上来说考虑各方面较为全面,风险指数已经降到最低,可以实 施。 1.3项目执行计划 下表为本项目进行的时间进度及人员分配情况: 表 1.1 工程进度 工程名称 工期(天) 开始时间提交时间人员安排 原理图设计32014.10.082014.10.11彭跃秒 PCB 布局32014.10.162014.10.19彭跃秒 程序设计32014.10.202014.10.23钮丽媛 设计说明书22014.10.022014.10.04张惠琳 安装、调试22014.11.022014.11.04钮丽媛 安装调试说明书12014.11.142014.11.15张惠琳 项目提交12014.12.032014.12.03钮丽媛 表 1.2 材料清单 序号名称型号规格号位数量 1 单片机STC89C52RC40C(PDIP40) U1 2 片 2 接口芯片 MAX232CPEU2 2 片 3 四联数码管 3461ASSEG1 2 个 4 时钟芯片 DS1302NLY1 2 个 单片机双机通信系统 第 2 页 5 二极管 D1 2 个 5 按键立式 6*6*5(4 脚黑)S1、S2、S36 个 6 电池 LITIUM CELLCR1220 3V 2 个 7 晶振11.0592MHz、32.765MHzY1、A14 个 8 电阻 10KR1 2 个 9 电解电容10uF、100uFC3、C64 个 10 瓷片电容30pF、104C5、C714 个 11 连接线DB9 公头 1.5m DB9 1 根 12 上拉电阻 1KP1 2 个 11 底座DIP40、DIP16、DIP8U1、U2、NLY13 个 12 指示灯LED 显示灯、红 LED 2 个 13 排针若干 2设计说明 2.1方案设计 通过两个 STC89C52 单片机为核心设计通信系统。单片机都带有串口,系 统要求远距离通信,所以有对外连接的串口相互之间的数据共享。单片机的并 行端口也能相互连接来进行数据通信。要求互设时间,可以在 IO 口连接一时钟 模块,这里选择 DS1302 时钟芯片实现,需要用到按键对时间设置,显示则各 自需要数码管。 在本次设计中硬件部分:对于两片 89C52 采用 RS232 进行双机通信硬件的 连接方法如图所示。电平转换芯片采用 MAX232,其连接一般采用双绞线。发 送方的数据由串行口 TXD 段输出,经过电平转换芯片 MAX232 将 TTL 电平转 换为 RS232 电平输出,经过传输线将信号传送到接收端。接收方也使用 MAX232 芯片进行电平转换后,信号到达接收方串行口的接收端。接受方接收 后在数码管上显示接收的信息。为提高抗干扰能力,还可以在输入输出端加光 耦合进行光电隔离。 软件部分:通过通信协议进行发送和接收。初始时两个数码管显示初始值。 单片机 A 对 B 进行时间设置前要先对自己设置时间,此时显示标志;设置之后 需对 B 设时间,再显示标志开始。通过通信协议进行发送接收,A 机在设置时 可在 B 机上同时看到显示。与主机发送来的检验和进行比较,若检验和相同则 发送字符给主机 TXD AT89C52 RXD T2INT2OUT MAX232 R2OUT R2IN R2INT2IN MAX232 T2OUTR2OUT TXD AT89C52 RXD 单片机双机通信系统 第 3 页 2.2硬件设计原理 2.2.1 单片机系统 STC89C52 芯片:有 8k 字节 Flash,512 字节 RAM, 32 位 I/O 口线,看门 狗定时器,内置 4KB EEPROM,MAX810 复位电路,3 个 16 位定时器/计数器, 4 个外部中断,一个 7 向量 4 级中断结构(兼容传统 51 的 5 向量 2 级中断结构) ,全双工串行口。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、 串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单 片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率 35MHz,6T/12T 可选。单片机有 32 根输入/输出线,组成 4 个 8 位并行输入/输 出接口,分别称为 P0 口、P1 口、P2 口、P3 口。每个接口都由锁存器、输出驱 动器和输入缓冲器组成。P0 口和 P2 口还可用于对外部存储器访问的地址和数 据总线。P0 口作为 I/O 接口使用时,输出级属于开漏电路,必须接上拉电阻才 有高电平输出。在 TXD 和 RXD 处接一个下载口下载程序。 单片机最小系统或称为最小应用系统,是指利用单片机自身的资源,用最 少的辅助元件组成一个可以工作的系统。包括电源(地) 、晶振(一般使用 11.0592MHz 或者 12MHz)和复位电路。 图 2.1 单片机最小系统 振荡电路:如图可见,由两个 30pF 的电容与 11.0592MHz 的晶振构成稳定 单片机双机通信系统 第 4 页 的自激振荡器,属于内时钟方式。这两个电容对频率有微调的作用,为减少寄 生电容,振荡器和电容应尽可能安装得与单片机芯片靠近。 复位电路:在 RST 复位输入上接入 10uF 电容至 VCC 端,在接一个 10K 电阻接地,组成上电复位电路。上电原理是,在加电时,Vcc 通过电容提供给 RST 端一个短暂的高电平信号,此后该高电平信号随 Vcc 对电容的充电过程而 逐渐回落,即 RST 高电平持续时间取决于电容的充电时间。上电时,vcc 的上 升时间约为 10ms,而振荡器的起振时间取决于振荡频率。 2.2.2 DS1302 时钟模块 芯片简介:实时时钟电路 DS1302 是一种具有涓细电流充电能力的电路, 主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并 且可以关闭充电功能。采用普通 32.768kHz 晶振。工作电压为 2.5V5.5V。本 项目采用三线接口通过 5、6、7 脚与 CPU 进行同步通信。 DS1302 内部有一个 318 的用于临时性存放数据的 RAM 寄存器。 DS1302 的引脚排列,其中 Vcc2 为主电源,VCC1 为后备电源。在主电源关 闭的情况下,也能保持时钟的连续运行。DS1302 由 Vcc1 或 Vcc2 两者中的较 大者供电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当 Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。RST 是复位/片选线,通过把 RST 输入驱动置 高电平来启动所有的数据传送。当 RST 为高电平时,所有的数据传送被初始化, 允许对 DS1302 进行操作。如果在传送过程中 RST 置为低电平,则会终止此次 数据传送,I/O 引脚变为高阻态。上电运行时,在 Vcc2.0V 之前,RST 必须保 持低电平。只有在 SCLK 为低电平时,才能将 RST 置为高电平。I/O 为串行数 图 2.2DS1302 电路图 据输入输出端(双向)。 SCLK 为时钟输入端。 备用电源 Vcc1,可以用电池或者超级电容器(0.1F 以上)。如果要长时间保 证时钟正常,选用小型充电电池。可以用老式电脑主板上的 3.6V 充电电池。如 果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。 单片机双机通信系统 第 5 页 100 F 就可以保证 1 小时的正常走时。DS1302 在第一次加电后,必须进行初始 化操作。初始化后就可以按正常方法调整时间。本项目有 100 F 电解电容,也 采用了在备用电源处使用 3V 的电池供电。二极管的作用是给 100uF 的电容充 放电。下图是 DS1302 在本设计中的原理图: 2.2.3 MAX232 电平转换 用 8051 串行接口通信,如果两台 8051 单片机之间的距离很近(不超过 1.5m) ,可以采用直接将两台 8051 单片机的串行接口直接相连,利用其自身的 TTL 电平(0-5V)直接传输数据信息。如果传输距离较远(超过 1.5m) ,由于 传输线的阻抗与分布电容,会产生电平损耗和波形畸变,以至于检测不出数据 或数据出错。 RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定。 在 TxD 和 RxD 上:逻辑 1(MARK)=-3V-15V ,逻辑 0(SPACE)=+315V 。在 RTS、CTS、DSR、DTR 和 DCD 等控制线上:信号有效(接通,ON 状态,正 电压)+3V+15V ,信号无效(断开,OFF 状态,负电压)=-3V-15V 。 为了能够同计算机接口或终端的 TTL 器件连接,必须在 EIA-RS-232C 与 TTL 电路之间进行电平和逻辑关系的变换。 图 2.3MAX232 模块原理图 最大直接传输距离说明:RS-232C 标准规定,若不使用 MODEM,在码元 畸变小于 4%的情况下,DTE 和 DCE 之间最大传输距离为 15m(50 英尺。 DB-9 连接器 : 用 RS-232 总线连接系统有近程通讯方式和远程通讯方式两种,近程通讯 是指传输距离小于 15 米的通讯,可以用 RS-232 电缆直接连接。15 米以上的长 单片机双机通信系统 第 6 页 距离通讯,需要采用调制调解器。 计算机和终端用 RS-232 连接的交叉“发送数据”与“接收数据”是交 叉相连的,使得两台设备都能正常的发送和接收。 在于 DB9 相连时需要考虑 RS232 串口接线是公头还是母头,因为两单片机的 TXD 与 RXD 必须交叉相连。 数据发送与接收线: 发送数据(TxD)通过 TxD 终端将串行数据发送到 MODEM。 接收数据(RxD)通过 RxD 线终端接收从 MODEM 发来的串行数据。 2.2.4 数码管显示 数码管段选与位选接口如图所示,设置强推挽输出,使数码管显示亮度增 加。P0 口与数码管段选之间接入 1k 的排阻限流,相比加上拉电阻会减少单片 机的功耗。 因为上拉电阻在 IO 口输出低电平时也会有电流,如果接入限流电阻就会避 免这种情况,从而减少功耗。 图 2.4 数码管显示原理图 2.2.5 按键模块 本项目有六个按键,每个单片机三个。按键一端接地另一端接单片机的 I/O 口。S1、S2、S3 分别标志点移位键、加 1 键、菜单键。 单片机双机通信系统 第 7 页 图 2.5 按键原理图 2.3各单元模块设计流程图 2.3.1 硬件总设计框图 两个单片机通信,每个单片机由四个模块组成。该项目原理图及 PCB 图是 在 Altium Deigner 软件下设计的。设计框图如下图所示。 图 2.6 总设计框图 2.3.2 主程序设计 该项目软件设计使用的是 Keil 编程软件。 单片机双机通信系统 第 8 页 图 2.7 主程序流程图 UartInit(); /串口初始化 Init_DS1302(5555); /初始化 1302 KeyScan(); /按键扫描 DisPlayKey(); /按键响应操作 GetTime( ); /获取当前 ds1302 的时间 display(DisNum); /显示当前调整的时间 display(SendNum); /显示对目标单片机的调整的时间 SendString(UartNum); /发送调整时间到目标单片机 2.3.2 DS1302 程序设计 主要是对时间的设置函数: Write_Data(0x8e,0x00); /写保护关 Write_Data(0x80,Sec); /初始秒值为 50 Write_Data(0x82,Min);/初始分钟值为 59 Write_Data(0x90,0x01); /充电 Write_Data(0xc0,0xf0); /初始化一次标示 Write_Data(0x8e,0x80); 2.3.3 按键程序设计 按键扫描: 单片机双机通信系统 第 9 页 图 2.8 按键扫描框图 if( (P1 /读出键值 while( (P1 /等待按键松开 按键响应: 图 2.9 按键响应框图 void DisPlayKey(void) /按键响应 /如果是对自己设置时间就将自己的时间装入调整数组 if (flag = 1) temp0 = DisNum / 1000; temp1 = DisNum % 1000 / 100; temp2 = DisNum % 100 / 10; temp3 = DisNum % 10; /如果是对对方设置时间就将发送时间装入调整数组 /根据键值调整 调整数组里的数字 /组合调整后的数字 /更改调整模式 单片机双机通信系统 第 10 页 2.3.4 串口程序设计 图 2.10 串口中断流程图 SCON = 0X50;/串口工作方式 1 TMOD = 0x20;/设定定时器 1 的工作方式为方式 2(8 位自动重装) TH1 = -3;/设置串口波特率为 9600 TL1 = -3; TR1 = 1; /开启定时器 ES = 1; /开串口中断 /判断数据是否结束,校验 if (uart_datanum-1 = * uint8_t UartNum10; UartInit(); /串口初始化 Init_DS1302(5555);/初始化 1302 EA = 1;/开总中断 while(1) KeyScan(); /按键扫描 DisPlayKey(); /按键响应操作 if (flag = 0) /菜单 0 GetTime( ); /获取当前 ds1302 的时间 /转换时间 秒 timenum = (DateTime04)*10+(DateTime0 /转换时间 分 timenum += (DateTime14)*1000+(DateTime1 display(timenum); /显示当前时间 DisNum = 3333; /初始化标志位 3333 SendNum = 4444; /初始发送标志位 4444 if(flag = 1) /菜单 1 display(DisNum); /显示当前调整的时间 Init_DS1302(DisNum); /用当前调整的时间初始化 ds1302 if (flag = 2) /菜单 2 display(SendNum); /显示对目标单片机的调整的时间 /将调整的时间转换成字符 UartNum0 = (SendNum / 1000) + 0; UartNum1 = (SendNum % 1000 / 100) + 0; UartNum2 = (SendNum % 100 / 10) + 0; UartNum3 = (SendNum % 10) + 0; UartNum4 = *; /通信结束标志位 单片机双机通信系统 第 19 页 UartNum5 = *; UartNum6 = 0; SendString(UartNum); /发送调整时间到目标单片机 if (uart_flag = 1) /串口接收标志位 NewTime = 0; /接收到的设置时间 /将接收到的字符时间转换成数字 NewTime = (uart_data0- 0)*1000 +(uart_data1- 0)*100 +(uart_data2- 0)*10 +(uart_data3- 0); Init_DS1302(NewTime); /用接收到的新时间初始化 1302 uart_flag = 0; /标志位置零 /*串口程序*/ #include “uart.h“ static uint8_t num = 0; bit busy = 0; uint8_t uart_flag; uint8_t uart_data20; void UartInit(void) SCON = 0X50; /串口工作方式 1 TMOD = 0x20; /设定定时器 1 的工作方式为方式 2(8 位自动重装) TH1 = -3;/设置串口波特率为 9600 TL1 = -3; TR1 = 1; /开启定时器 ES = 1; /开串口中断 void SendData(uint8_t dat) while (busy); /等待当前字符发送结束 SBUF = dat; /发送数据 busy = 1; 单片机双机通信系统 第 20 页 /* /*函数名称:字符串发送函数 /*函数功能:发送一串字符 /*入口参数:字符串首地址 /*调用方式:SendString(“asdfghjk“); */ void SendString(uint8_t *s) while (*s != 0) SendData(*s+); /发送字符 void UART_SER(void) interrupt 4 /串口中断 if (RI) /判断若为收 RI = 0; uart_datanum = SBUF; /读取 SBUF 到 uart_DATA 数组 num+; /判断数据是否结束,校验 if (uart_datanum-1 = * /将串口新数据标志位置 1 num = 0;/清零数组 num if (TI) /判断若为发 TI = 0; busy = 0; /*DS1302 */ #include “ds1302.h“ uint8_t DateTime7; void Write_A_Byte_TO_DS1302(uint8_t dat) 单片机双机通信系统 第 21 页 uint8_t i; SCLK=0;/初始时钟线置为 0 _nop_(); _nop_(); _nop_(); /开始传输 8 个字节的数据 for(i=0; i=1;/数据右移一位,准备传输下一位数据 uint8_t Get_A_Byte_FROM_DS1302(void) uint8_t i, dat; _nop_(); _nop_(); _nop_(); for(i=0;i=1; /要返回的数据左移一位 if(IO=1) /当数据线为高时,证明该位数据为 1 dat|=0x80; /要传输数据的当前值置为 1,若不是,则为 0 SCLK=1; /拉高时钟线 _nop_(); _nop_(); _nop_(); SCLK=0; /制造下降沿 单片机双机通信系统 第 22 页 _nop_(); _nop_(); _nop_(); return dat;/返回读取出的数据 uint8_t Read_Data(uint8_t addr) uint8_t dat; RST = 0; SCLK=0; RST=1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); SCLK=1; RST=0; return dat; void GetTime(void) uint8_t i,addr = 0x81; for(i=0;i7;i+) DateTimei=Read_Data(addr); _nop_(); _nop_(); _nop_(); addr+=2; void Init_DS1302(uint16_t num) uint8_t temp4, Sec, Min; temp0 = num / 1000; temp1 = num % 1000 / 100; temp2 = num % 100 / 10; temp3 = num % 10; Min = temp0*16+temp1; 单片机双机通信系统 第 23 页 Sec = temp2*16+temp3; Write_Data(0x8e,0x00); /写保护关 Write_Data(0x80,Sec); /初始秒值为 50 Write_Data(0x82,Min); /初始分钟值为 59 /Write_Data(0x84,0x17); /初始为 24 小时模式 初始时间为 23 点 /Write_Data(0x86,0x19); /19 日 Write_Data(0x90,0x01); /充电 Write_Data(0xc0,0xf0); /初始化一次标示 Write_Data(0x8e,0x80); void Write_Data(uint8_t cmd, uint8_t dat) RST=0; /初始 CE 线置为 0 SCLK=0; /初始时钟线置为 0 RST=1; /初始 CE 置为 1,传输开始 /传输命令字,要写入的时间/日历地址 Write_A_Byte_TO_DS1302(cmd); /写入要修改的时间/日期 Write_A_Byte_TO_DS1302(dat); SCLK=1; /时钟线拉高 RST=0; /读取结束,CE 置为 0,结束数据的传输 /*按键程序*/ #include “key.h“ uint8_t wei = 0; uint16_t DisNum = 0; uint16_t SendNum = 1234; uint8_t cKey = 7; uint8_t flag = 0; void KeyScan(void) /扫描按键管脚是否有电平变化 if( (P1 /读出键值 while( (P1 /等待按键松开 if(cKey = 0xc0) / P2.1 按下 - 单片机双机通信系统 第 24 页 wei+; if (wei = 4) wei = 0; if(cKey = 0xa0) / P2.2 按下 + cKey = 3; if(cKey = 0x60)/ P2.2 按下 + cKey = 5; void DisPlayKey(void) /按键响应 uint8_t temp4; /如果是对自己设置时间就将自己的时间装入调整数组 if (flag = 1) temp0 = DisNum / 1000; temp1 = DisNum % 1000 / 100; temp2 = DisNum % 100 / 10; temp3 = DisNum % 10; if (flag = 2) /如果是对对方设置时间就将发送时间装入调整数组 temp0 = SendNum / 1000; temp1 = SendNum % 1000 / 100; temp2 = SendNum % 100 / 10; temp3 = SendNum % 10; /根据键

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论