1、单片机原理及接口技术课程设计汇报课题名称两个单片机之间串行通讯接口设计学院自机学院专业机械设计制造及其自动化班级1班姓名学号 时间 目录一、 设计任务概述3(1)设计目标3(2)课程设计要求3(3)课程设计内容4 1、设计要求: 3 2、设计方案: 3二、硬件设计 3 1、51片机串行通信功效 3 2、MAX232芯 6 3、DS18B20温度传感 7 4、整体电路设计8三、软件设计10 1、串行通信软件实现 10 2串行通信传输方法103、串行通信工作方法104、程序步骤图 10四、联合调试 12附录 13一设计任务概述(1)设计目标单片机课程设计作为独立数学步骤,是自动化及相关专业集中实践
2、性步骤系列之一,是学习完单片机原理及应用课程后,并在进行相关课程设计基础上进行一次综合练习。单片机课程设计过程中,我们经过查阅资料、接口设计、程序设计、安装调试等步骤,完成一个基于MCS-51系列单片机,包含多个资源应用,并含有综合功效小应用系统设计。让我们不仅将课堂上学到理论知识和实际应用结合起来,而且能够对电子电路、电子元器件等方面知识深入加深认识,同时在软件编程、调试、相关仪器设备和相关软件使用技能等方面得到较全方面锻炼和提升。让我们增加了对单片机感性认识,加深对单片机理论方面了解,同时也加深单片机内部功效模块应用。使我们了解和掌握单片机应用系统软硬件设计过程、方法及实现,强化单片机应用
3、电路设计和分析能力。提升我们在单片机应用方面实践技能和科学作风;培育我们综合利用理论知识处理问题能力。(2)课程设计要求 经过对课题分析,进行系统功效设计,选择器件,划分软硬件功效,用Proteus软件在PC机上完成硬件原理图设计。用汇编语言,完成软件设计。然后使用Proteus仿真软件在PC机上进行系统仿真,调试电路和修改调试程序,直至达成设计要求和取得满意效果。(3)课程设计内容1).A机控制B机两个LED闪烁,B机控制A机数码管加一显示。2).使用DS18B20温度传感器,由B机测量温度后由A机显示. 二、关键步骤及方案(1)关键步骤1) 对题目进行分析2) 确定电路图需要元件3) 画出
4、电路图4) 写出运行程序5) 加载并调试修改程序(2)关键方案利用AT89C51芯片、复位电路、时钟电路、LED数码管等,使A机控制B机两个LED闪烁,B机控制A机数码管加一显示。使用DS18B20温度传感器,由B机测量温度后由A机显示. 把P1口高7位和数码管相连,绿灯表示通行方向。P2口和LED显示器相连,用来输出显示数字。 系统原理框图以下:AT89C51晶振电路复位电路电源LDE显示器LED数码管数码驱动芯片【摘要】串行通信是单片机一个关键应用。此次课程设计就是要利用单片机来完成一个系统,实现双片单片机串行通信。通信结果实用数码管进行显示。两个单片机之间采取RS232进行双机通信。在通
5、信过程中,使用通信协议进行通信。【关键字】52单片机,串行通信,接口,DS18B20一、总体设计1.设计要求:(1单片机之间进行串行通信,发送端将0f循环发送到接收端,并在接收端显示。(2)使用DS18B20温度传感器,由B机测量温度后由A机显示. 2.设计方案:此次设计,对于两片AT89C51,采取RS232进行双机通信。发送方数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号抵达接收方串行口接收端。接收方接收后,在数码管上显示接收信息及利用LED显示通信结果,和此同时由D
6、S18B20测量温度后由另一单片机显示。为提升抗干扰能力,还能够在输入输出端加光耦合进行光电隔离。软件部分,经过通信协议进行发送接收,主机先送信号给从机,从机接收信号后发出应答信号并显示对应内容.二、硬件设计151单片机串行通信图1.AT89C51计算机和外界信息交换称为通信,常见通信方法有两种:并行通信和串行通信。51单片机用4个接口和外界进行数据输入和数据输出就是并行通信,并行通信特点是传输信号速度快,但所用信号线较多,成本高,传输距离较近。串行通信特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输距离较远。51单片机串行接口是一个全双工接口,它能够作为
7、UART(通用异步接收和发送器)用,也能够作为同时移位寄存器用。51片机串行接口结构以下:(1)数据缓冲器(SBUF)接收或发送数据全部要先送到SBUF缓存。有两个,一个缓存,另一个接收,用同一直接地址99H,发送时用指令将数据送到SBUF即可开启发送;接收时用指令将SBUF中接收到数据取出。(2)串行控制寄存器(PCON)SCON用于串行通信方法选择,收发控制及状态指示,各位含义以下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方法选择位,这两位组合成00,01,10,11对应于工作方法0、1、2、3。串行接口工作方法特点见下表SM0SM1工作方法功效波特率 00
8、08位同时移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:多机通信控制位。REN:接收许可控制位。软件置1许可接收;软件置0严禁接收。TB8:方法2或3时,TB8为要发送第9位数据,依据需要由软件置1或清0。RB9:在方法2或3时,RB8位接收到第9位数据,实际为主机发送第9位数据TB8,使从机依据这一位来判定主机发送时呼叫地址还是要传送数据。TI:发送中止标志。发送完一帧数据后由硬件
9、自动置位,并申请中止。必需要软件清零后才能继续发送。RI:接收中止标志。接收完一帧数据后由硬件自动置位,并申请中止。必需要软件清零后才能继续接收。(3)输入移位寄存器接收数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。(4)波特率发生器波特率发生器用来控制串行通信数据传输速率,52系列单片机用定时器T1作为波特率发生器,T1设置在定时方法。波特率时用来表示串行通信数据传输快慢程度物理量,定义为每秒钟传送数据位数。(5)电源控制寄存器PCON其最高位为SMOD。(6)波特率计算当定时器T1工作在定时方法时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。因
10、为是定时方法,T1计数率= fORC/12。产生溢出所需机器周期数=模M-计数初值X。2.MAX232芯片用89C51串行接口通信,假如两台单片机之间距离很近(不超出1.5m),能够采取直接将两台单片机串行接口直接相连,利用其本身TTL电平(0-5V)直接传输数据信息。假如传输距离较远(超出1.5m),因为传输线阻抗和分布电容,会产生电平损耗和波形畸变,以至于检测不出数据或数据犯错。此时可利用 RS232标准总线接口,将单片机输出TTL电平转换为RS232标准电平(逻辑1为-15-5V;逻辑0为+5-+15V)。用RS232可将传输距离提升到15m,假如想远距离传输,能够采取RS422或RS4
11、85。电平转换芯片MAX232是美信企业(MAXIM)生产,专用于进行将TTL电平转换为RS232电平芯片,MAX232内部有泵电源,能将+5V电源电压在芯片内提升到RS232电平所需+10V或-10V电平。图2.电平转换芯片MAX2323.DS18B20温度传感器数字温度传感器DS18B20介绍 1、DS18B20关键特征 1.1、适应电压范围更宽,电压范围:3.05.5V,在寄生电源方法下可由数 据线供电 1.2、独特单线接口方法,DS18B20在和微处理器连接时仅需要一条口线即可实现微处理器和DS18B20双向通讯 1.3、 DS18B20支持多点组网功效,多个DS18B20能够并联在唯
12、一三线上,实现组网多点测温 1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管集成电路内 1.5、温范围55125,在-10+85时精度为0.5 1.6、可编程 分辨率为912位,对应可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 1.7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度愈加快 1.8、测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,含有极强抗干扰纠错能力 1.9、负压特征:电源极性接反时,芯片不会因发烧而
13、烧毁, 但不能正常工作。2、DS18B20外形和内部结构DS18B20内部结构关键由四部分组成:64位光刻ROM 、温度传感器、非挥发温度报警触发器TH和TL、配置寄存器。DS18B20外形及管脚排列以下图1: DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方法时接地)。 图2: DS18B20内部结构图 3、DS18B20工作原理 DS18B20读写时序和测温原理和DS1820相同,只是得到温度值位数因分辨率不一样而不一样,且温度转换时延时时间由2s 减为750ms。 DS18B20测温原理图3所表示。图
14、中低温度系数晶振振荡频率受温度影响很小,用于产生固定频率脉冲信号送给计数器1。高温度系数晶振 随温度改变其振荡率显著改变,所产生信号作为计数器2脉冲输入。计数器1和温度寄存器被预置在55所对应一个基数值。计数器1对 低温度系数晶振产生脉冲信号进行减法计数,当计数器1预置值减到0时,温度寄存器值将加1,计数器1预置将重新被装入,计数器1重 新开始对低温度系数晶振产生脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值累加,此时温度寄存器中数值即 为所测温度。图3中斜率累加器用于赔偿和修正测温过程中非线性,其输出用于修正计数器1预置值。 4.整体电路设计最终设计电路以下图3所表示,发
15、送方数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号抵达接收方串行口接收端。接收方接收后,经过P1口在数码管上显示接收信息。 A机控制B机LED,B机控制A机数码管加一显示 B机 DS18B20温度传感器检测温度送A 机显示三、软件设计1.串行通信软件实现(1)串行口工作于方法1;用定时器1产生9600bit/s波特率,工作于方法2。(2)功效:将本机ROM中数码表TAB16中16个数发送到从机,并保留在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。(3)
16、通信协议:主机首先发送连络信号(信号),从机接收到以后返回一个连络信号(BBH)表示从机已准备好接收。(4)通信过程使用第九位发送奇偶校验位。(5)从机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,不然返回FFH。(6)主机发送一个数据后,等候从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。(7) 经过通信协议进行发送接收,A机向B机发送操作代码A、B、C或停止发送,对应开关K1按一下两机 LED1全部亮,按第二下两机LED2全部亮,再按下时,LED1、LED2全亮,再按则四灯全灭。(8)K2控制B机向A机发送字符,依据按键次数逐次加1至9,10
17、为关闭状态,同时B机接收A机命令,受K1控制LED灯亮、灭。( 9) 由B机DS18B20测量温度后A机显示测量温度值.2串行通信传输方法串行通信传送方向通常有三种(1)单向(或单工)配置,只许可数据向一个方向传送;(2)半双向(或半双工)配置,许可数据向两个方向中任一方向传送,但每次只能有一个站点发送;(3)全双向(全双工)配置,许可同时双向传送数据,所以,全双工配置是一对单向配置,它要求两端通信设备全部含有完整和独立发送和接收能力。3、串行通信工作方法方法1接收时,数据从引脚RXD(P3.0)端输入。接收是在SCON寄存器中REN位置1前提下,并检测到起始位(RXD上检测到10跳变,即起始
18、位)而开始。接收时,定时信号有两种:一个是接收移位时钟(RX时钟),它频率和传送波特率相同,也是由定时器T1溢出信号经过16或32分频而得到;另一个是位检测器采样脉冲,它频率是RX时钟16倍,亦即在一位数据期间有16位检测器采样脉冲,为完成检测,以16倍于波特率速率对RXD进行采样。4程序步骤图(1) 发送端程序步骤图主程序开始从机应答程序初始化主机发送信号K1按下主机发送数据输出完成?清除标志位未应答未完成(2)接收方程序步骤图主程序开始接收完成?程序初始化K2按下,接收数据未完成发送信号接收完成?未完成清除标志位重新接收显示四、 联合调试在protues上进行仿真试验。首先使用KeilC将
19、编写完成程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真试验,结果以下图所表示,能够看到,接收端已将接收到数据完整显示了出来。附录A机控制B机LED#include#define uchar unsigned char#define uint unsigned int sbit LED1=P10; sbit LED2=P13;sbit K1=P17;uchar Operation_No;/操作代码/数码管代码uchar code DSY_CODE=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /延时void Delays
20、MS(uint ms) uchar i; while(ms-)for(i=0;i=0&SBUF=9)P0=DSY_CODESBUF; elseP0=0x00; B机控制A机数码管加一显示#include#define uchar unsigned char#define uint unsigned int sbit LED1=P10; sbit LED2=P13;sbit K2=P17;uchar NumX=-1; /延时void DelaysMS(uint ms) uchar i; while(ms-)for(i=0;i120;i+); /主程序void main() LED1=LED2=1
21、; P0=0x00; SCON=0x50;/串口模式一,许可接收 TMOD=0x20;/T1工作模式2 TH1=0xfd;/ 波特率9600 TL1=0xfd; PCON=0X00;/波特率不倍增 RI=TI=0; TR1=1; IE=0x90; while(1) DelaysMS(100);if(K2=0) while(K2=0); NumX=+NumX%11;/产生010范围内数字,其中10表示关闭 SBUF=NumX; while(TI=0); TI=0; void Serial_INT()interrupt 4 if(RI) /如收到则LED则动作 RI=0; switch(SBUF)
22、/依据所收到不一样命令字符完成不一样动作 case X: LED1=LED2=1; break; /全灭 case A: LED1=0;LED2=1; break;/LED1亮 case B: LED2=0;LED1=1; break;/LED2亮 case C: LED1=LED2=0; /全亮 B机 DS18B20温度传感器检测温度送A 机显示 A机程序#include#define uchar unsigned char#define uint unsigned int #include #define delayNOP() _nop_();_nop_();_nop_();_nop_()
23、;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;uchar code Temp_Disp_Title=Current Temp : ;uchar Current_Temp_Display_Buffer= TEMP: ;uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code df_Table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;uchar Temp_Value=
24、0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;int b;sbit DQ = P34; void DelayXus(uint x) uchar i;while(x-) for(i=0;i4) | (Temp_Value1&0x07)4);Display_Digit3 = CurrentT/100;/百位Display_Digit2 = CurrentT%100/10;/十位Display_Digit1 = CurrentT%10;/各位Current_Temp_Display_Buffer11 = Display_Dig
25、it0 + 0;Current_Temp_Display_Buffer10 = .;Current_Temp_Display_Buffer9 = Display_Digit1 + 0;Current_Temp_Display_Buffer8 = Display_Digit2 + 0;Current_Temp_Display_Buffer7 = Display_Digit3 + 0;if(Display_Digit3 = 0)Current_Temp_Display_Buffer7 = ;if(Display_Digit2 = 0&Display_Digit3=0)Current_Temp_Di
26、splay_Buffer8 = ;if(ng) if(Current_Temp_Display_Buffer8 = )Current_Temp_Display_Buffer8 = -;else if(Current_Temp_Display_Buffer7 = )Current_Temp_Display_Buffer7 = -;else Current_Temp_Display_Buffer6 = -;Set_LCD_POS(0x00);for(i=0;i16;i+)Write_LCD_Data(Temp_Disp_Titlei); Set_LCD_POS(0x40);for(i=0;i16;
27、i+)Write_LCD_Data(Current_Temp_Display_Bufferi); Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data(C);/延时void DelaysMS(uint ms) uchar i; while(ms-)for(i=0;i120;i+); void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B2
28、0();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;/主程序void main() SCON=0x50;/串口模式一,许可接收 TMOD=0x20;/T1工作模式2 PCON=0X00;/波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90;/许可串口中止 LCD_Initialise(); Read_Temperature(); while(1) if (RI) /RI
29、接收中止标志 RI=0; /清除RI接收中止标志 b=SBUF;/SUBF接收/发送缓冲器 Display_Temperature(b); B机程序 #include#define uchar unsigned char#define uint unsigned int #include #define delayNOP() _nop_();_nop_();_nop_();_nop_();uchar CurrentT = 0;uchar Temp_Value=0x00,0x00;uchar Display_Digit=0,0,0,0;bit DS18B20_IS_OK = 1;sbit DQ
30、= P34; /延时 void Delay(uint x) while(-x);void DelaysMS(uint ms) uchar i; while(ms-)for(i=0;i120;i+); void DelayXus(uint x) uchar i;while(x-) for(i=0;i200;i+);uchar Init_DS18B20() uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;uchar ReadOneByte() uchar i,dat=0;DQ =
31、1;_nop_();for(i=0;i= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;return dat;void WriteOneByte(uchar dat) uchar i;for(i=0;i= 1;Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Val
32、ue0 = ReadOneByte(); Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;/主程序void main()SCON=0x50;/串口模式一,许可接收 TMOD=0x20;/T1工作模式2 TH1=0xfd;/ 波特率9600 TL1=0xfd; PCON=0X00;/波特率不倍增 RI=TI=0; TR1=1; IE=0x90;while(1) Read_Temperature();if(DS18B20_IS_OK) SBUF=Read_Temperature(); while(TI=0); TI=0;五、参考文件1、智能电源和高级数字信号控制器设计 ,Bryan Kris,电子设计应用,-10-012、基于AVR单片机多功效电源设计 ,李雪莉, 张岩,现代电子技术,-09-013、一个箱式分区所及其电力智能电源监控装置研制 ,宁建斌,电力自动化设备,-09-254、基于80C196KC单片机智能型开关电源研