实验4(串行通行实验报告)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考文献:
[1]《单片机基础》 李广弟 北京航空航天大学出版社
[2]24c04中文官方资料手册
[3]DS18B20资料手册
实验程序:
主机
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
程序流程图如下:
2.EEPROM24C04的操作
硬件实现:24C04的串行数据口SDA口与单片机的P3.6口线相连,串行时钟线SCL口与单片机P3.7口线相连。用24C04来保存流水灯的状态电路图如下:
IIC总线的工作原理:IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
起始和终止信号:SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
四.测试
DS18B20测得一个温度(如23.3392^C),在主机和从机的1602上显示该温度值,通过串口线在计算机串口调试助手显示同样的数值,说明在温度的误差范围内,实验大致正确。
五.总结
总结:通过本次实验,我们了解了I2C器件24C04和OneWire器件DS18b20的基本性能以及对他们的操作,学会了双机SPI通信,通过MCU的UART与PC通信,了解了串行通信的原理,本次实验中有一点需要注意,在进行双机通信的时候,两块实验板必须共地。
从机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着程序循
环查询标志位SPIF,当SPIF==1时说明程序已经接受到完整的一个字节数据。
可以从数据寄存器中读取接受到的数据,接着进行下一个字节数据的接受。
5.从机通过UART与PC机相连,将数据显示到串口调试助手上
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地
进行串口通讯。但是需要经过MAX232电平转换,PC机和MAX232接口的连接非常简单,在一般的应用中,只需有三条线即可完成通信,分别是串口接头DB9的第2脚RXD与MAX232的输出相连,第3脚TXD与MAX232的输入相连,然后再共地,最后,通过串口线连接到电脑的串口上就可以实现单片机与PC机的串行通信了,不过在通信的过程中一定要特别注意双方的波特率一定要相同,否则,通信是不可能成功的
杭州电子科技大学
电子设计(A)实验
设计报告
实验名称
5
串行通信
实验次数
4
小组号
5
姓名学号
姓名学号
姓名学号
指导教师
5月13日下午18:45验收
2009 年5月13日
串行通信
一.方案论证与比较
举出敬重几种方案,进行比较
方案一:用到DS18B20,24C04,LCD1602,主机通过DS18B20测得温度在自己的LCD1602上显示,并且通过STC单片机的SPI口(P1_4,P1_5,P1_6,P1_7)将温度发送给丛机,从机接收主机传过来的温度数据,在自己的LCD1602上显示温度,并且通过串口线与PC机相连,PC机通过串口调试助手显示所测得的温度。于此同时,在主机上运行流水灯,流水灯的每一个状态保存在EEPROM24C04中,这样当单片机系统掉电时,24C04中保存了上次流水灯的状态,下次上电时,流水灯能够从接着上次状态开始运行。
sbitSCL=P3^6;//set clock io for24c04
sbitDQ=P1^7;//entrance for 18b20
sbitDS1=P1^5;//Serial datain 1
sbitST1=P1^4;//Output flip-latch impulse 1
sbitSH1=P1^3;//Shift clock impulse 1
uchar code scan_con[4]={0x07,0x0b,0x0d,0x0e}; //nixietube choose
uchar data temp_data[2]={0x00,0x00}; //buffer for temperature
uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //buffer for display
本实验中采用方案一来实现串行通信功能。
二.总体方案设计
本次系统设计的主要功能是实现数据的发射和接收,因此在设计过程中,主要围绕采集需要传输的数据、数据处理、数据发射、数据接收等方面来构建系统。
在系统设计时,为了有更好的可操作性,将系统分为主控和受控两个部分,下图就是我们本次系统的结构框图。
系பைடு நூலகம்结构图
具体的电路如图所示。
软件实现
程序首先初始化一些特殊寄存器,将TMOD设为0x20,将PCON设为0X00
(波特率不增),将TH1和TL1设为0Xfd,这样波特率就设成为9600bps。将SCON设为0X50,使得串口工作在工作方式一下。然后程序向SBUF写入温度数据循环等待标志位TI为1,这样串口就发送了一个字节的数据,如此循环,直到送完所有数据为止。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TL和TH、高速暂存器。DS18B20管脚排列如图,从左到右管脚分别为1、GND;2、I/O;3、VDD。
温度传感器可以完成对温度的测量。内部高速暂存器包含8个连续字节。暂存器具体分布如表所示。
字节序号
寄存器名称
#define OP_WRITE 0xa0// address & write
#define OP_READ 0xa1 // address & read
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
sbitSDA=P3^7;//set data io for24c04
sbitDS2=P1^2;//Serial datain 2
sbitST2=P1^1;//Output flip-latch impulse 2
sbitSH2=P1^0;//Shift clock impulse 2
sbitSCK=P2^0; // P2.0 simulate clock out
sbitMOSI=P2^1; // P2.1 simulate master out
软件实现:
程序首先通过将SDA,SCL线拉高来初始化24C04,接着单片机向24C04发出起始信号,等待器件的响应后,接着向24C04写寄存器地址,等待响应之后,向24C04写数据信号,之后单片机发出终止信号,延时之后单片机向24C04发出起始信号,等待响应之后从24C04读取数据,最后发出终止信号。
0
温度最低数据位
1
温度最高数据位
2
高温限制
3
低温限制
4
保留
5
保留
6
计数剩余值
7
计数器/℃
8
CRC校验
DS18B20与单片机相连,其DQ要接5K左右的上拉电阻来增加数据传输的准确性。其典型电路如图所示。
软件实现:
对DS18B20的操作一般包含下面四个步骤:1、初始化;2、ROM操作命令;3、存储器操作命令;4、执行/数据。其中的初始化如上面的时序中讲到的一样;然后就是对ROM的操作,DS18B20片内有光刻64位的ROM,它可以看成是该DS18B20的地址序列码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个的目的。由于我们此次系统设计在单总线上左右一个DS18B20,那我们就直接跳过匹配ROM(Skip ROM)的操作就行了。接下来就是对存储器的读写操作,其中读写“1”和“0”与上面的时序操作一样。 最后就是将接收到的数据进行微机处理;这样就完成了一次对DS18B20的访问过程。其具体程序流程如图
sbitMISO=P2^2; // P2.2 simulate master in
sbitSS1=P2^3; // P2.3 simulate choice
uinth,temp;
ucharDisdata,discan;
ucharcode ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//look decimal part from table
uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
uchar data pcplay[10]={'0','1','2','3','4','5','6','7','8','9'};//used in UART
/******Declaration for the following functions********/
方案二:用到DS18B20,24C04,1602,测得的温度在四位数码管上显示,同样进行双机SPI通信和通过MCU的UART与PC通信
方案比较:方案一和方案二主要的区别就是数据的显示方式,方案一能显示出很精确的温度,方案二由于只有四位数码管,所以精度不高,但方案一的成本较高,对于精度要求不高的实验可以采用方案二,须要较高精度的,则采用方案一
3.主机向从机通过SPI总线发送温度数据
硬件实现:主机的MISO与从机的MISO相连,主机的MOSI与从机的MOSI相连,主机的SS与从机的SS相连,主机的SCLK与从机的SCLK相连。这样在主机发出的SCLK时钟脉冲下,主机将数据一位一位地传送给从机。
电路图:
SPI总线工作原理:
SPI接口有四个脚:SPICLK/ P1.7,MOSI/ P1.5,MISO/ P1.6,SS/ P1.4
SPICLK, MOSI, MISO,通常和两个或更多的SPI器件连在一起,数据通
过MOSI由主机传送到从机,通过MISO由从机传送到主机。
软件实现
程序首先初始化特殊寄存器SPCTL=0xd7,SPSTAT=0xc0,这样就工作在主机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着向数据寄存器SPDAT写入一个字节的数据,循环等待标志位SPIF=1为止,当SPIF==1时,说明一个字节数据已经传送完毕。将SPIF清0。接着发送下一个字节数据。
4从机通过SPI总线接受主机传过来的温度数据
硬件实现:主机的MISO与从机的MISO相连,主机的MOSI与从机的MOSI相连,主机的SS与从机的SS相连,主机的SCLK与从机的SCLK相连。这样在主机发出的SCLK时钟脉冲下,主机将数据一位一位地传送给从机。
软件实现:
程序首先初始化特殊寄存器SPSTAT=0xc0,SPCTL=0xc7。这样就工作在
二、从机通过SPI总线接收主机传过来的温度数据,在LCD1602上显示温度。同时从机通过UART把接受到的数据传到PC机进行通信,PC机通过串口调试工具显示温度,并且存储分析。
三.软硬件的系统设计
1.温度采集
硬件实现:数据采集电路由温度传感器DS18B20采集被控对象的实时温度,提供给STC单片机的P3.0口作为数据输入。在本次设计中我们所控的对象为所处室温。
系统结构图说明:
整个系统分为两部分:主机部分和从机部分。下面我们分别进行这两方面的介绍:
一、通信主控部分(主机):它在整个系统中起核心控制地位,首先,主机通过操作操作具有IIC总线结构的EEPROM器件24C04,将主机上流水灯状态传给24C04。这样当单片机系统掉电时,能够保存最后掉电前的流水灯状态,以便当系统上电时,单片机从24C04中读取数据,从上一次的状态接着运行。其次,通过主机对温度传感器的控制来采集本地环境温度;然后,把采集到的数据送到单片机中进行分析处理,并通过LCD进行本地温度显示;最后,就是主机的通信部分,它主要包括发射部分:主要利用STC单片机的SPI总线,利用它进行双机SPI通信,主机将温度数据发给从机。
[1]《单片机基础》 李广弟 北京航空航天大学出版社
[2]24c04中文官方资料手册
[3]DS18B20资料手册
实验程序:
主机
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
程序流程图如下:
2.EEPROM24C04的操作
硬件实现:24C04的串行数据口SDA口与单片机的P3.6口线相连,串行时钟线SCL口与单片机P3.7口线相连。用24C04来保存流水灯的状态电路图如下:
IIC总线的工作原理:IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
起始和终止信号:SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
四.测试
DS18B20测得一个温度(如23.3392^C),在主机和从机的1602上显示该温度值,通过串口线在计算机串口调试助手显示同样的数值,说明在温度的误差范围内,实验大致正确。
五.总结
总结:通过本次实验,我们了解了I2C器件24C04和OneWire器件DS18b20的基本性能以及对他们的操作,学会了双机SPI通信,通过MCU的UART与PC通信,了解了串行通信的原理,本次实验中有一点需要注意,在进行双机通信的时候,两块实验板必须共地。
从机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着程序循
环查询标志位SPIF,当SPIF==1时说明程序已经接受到完整的一个字节数据。
可以从数据寄存器中读取接受到的数据,接着进行下一个字节数据的接受。
5.从机通过UART与PC机相连,将数据显示到串口调试助手上
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地
进行串口通讯。但是需要经过MAX232电平转换,PC机和MAX232接口的连接非常简单,在一般的应用中,只需有三条线即可完成通信,分别是串口接头DB9的第2脚RXD与MAX232的输出相连,第3脚TXD与MAX232的输入相连,然后再共地,最后,通过串口线连接到电脑的串口上就可以实现单片机与PC机的串行通信了,不过在通信的过程中一定要特别注意双方的波特率一定要相同,否则,通信是不可能成功的
杭州电子科技大学
电子设计(A)实验
设计报告
实验名称
5
串行通信
实验次数
4
小组号
5
姓名学号
姓名学号
姓名学号
指导教师
5月13日下午18:45验收
2009 年5月13日
串行通信
一.方案论证与比较
举出敬重几种方案,进行比较
方案一:用到DS18B20,24C04,LCD1602,主机通过DS18B20测得温度在自己的LCD1602上显示,并且通过STC单片机的SPI口(P1_4,P1_5,P1_6,P1_7)将温度发送给丛机,从机接收主机传过来的温度数据,在自己的LCD1602上显示温度,并且通过串口线与PC机相连,PC机通过串口调试助手显示所测得的温度。于此同时,在主机上运行流水灯,流水灯的每一个状态保存在EEPROM24C04中,这样当单片机系统掉电时,24C04中保存了上次流水灯的状态,下次上电时,流水灯能够从接着上次状态开始运行。
sbitSCL=P3^6;//set clock io for24c04
sbitDQ=P1^7;//entrance for 18b20
sbitDS1=P1^5;//Serial datain 1
sbitST1=P1^4;//Output flip-latch impulse 1
sbitSH1=P1^3;//Shift clock impulse 1
uchar code scan_con[4]={0x07,0x0b,0x0d,0x0e}; //nixietube choose
uchar data temp_data[2]={0x00,0x00}; //buffer for temperature
uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //buffer for display
本实验中采用方案一来实现串行通信功能。
二.总体方案设计
本次系统设计的主要功能是实现数据的发射和接收,因此在设计过程中,主要围绕采集需要传输的数据、数据处理、数据发射、数据接收等方面来构建系统。
在系统设计时,为了有更好的可操作性,将系统分为主控和受控两个部分,下图就是我们本次系统的结构框图。
系பைடு நூலகம்结构图
具体的电路如图所示。
软件实现
程序首先初始化一些特殊寄存器,将TMOD设为0x20,将PCON设为0X00
(波特率不增),将TH1和TL1设为0Xfd,这样波特率就设成为9600bps。将SCON设为0X50,使得串口工作在工作方式一下。然后程序向SBUF写入温度数据循环等待标志位TI为1,这样串口就发送了一个字节的数据,如此循环,直到送完所有数据为止。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TL和TH、高速暂存器。DS18B20管脚排列如图,从左到右管脚分别为1、GND;2、I/O;3、VDD。
温度传感器可以完成对温度的测量。内部高速暂存器包含8个连续字节。暂存器具体分布如表所示。
字节序号
寄存器名称
#define OP_WRITE 0xa0// address & write
#define OP_READ 0xa1 // address & read
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
sbitSDA=P3^7;//set data io for24c04
sbitDS2=P1^2;//Serial datain 2
sbitST2=P1^1;//Output flip-latch impulse 2
sbitSH2=P1^0;//Shift clock impulse 2
sbitSCK=P2^0; // P2.0 simulate clock out
sbitMOSI=P2^1; // P2.1 simulate master out
软件实现:
程序首先通过将SDA,SCL线拉高来初始化24C04,接着单片机向24C04发出起始信号,等待器件的响应后,接着向24C04写寄存器地址,等待响应之后,向24C04写数据信号,之后单片机发出终止信号,延时之后单片机向24C04发出起始信号,等待响应之后从24C04读取数据,最后发出终止信号。
0
温度最低数据位
1
温度最高数据位
2
高温限制
3
低温限制
4
保留
5
保留
6
计数剩余值
7
计数器/℃
8
CRC校验
DS18B20与单片机相连,其DQ要接5K左右的上拉电阻来增加数据传输的准确性。其典型电路如图所示。
软件实现:
对DS18B20的操作一般包含下面四个步骤:1、初始化;2、ROM操作命令;3、存储器操作命令;4、执行/数据。其中的初始化如上面的时序中讲到的一样;然后就是对ROM的操作,DS18B20片内有光刻64位的ROM,它可以看成是该DS18B20的地址序列码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个的目的。由于我们此次系统设计在单总线上左右一个DS18B20,那我们就直接跳过匹配ROM(Skip ROM)的操作就行了。接下来就是对存储器的读写操作,其中读写“1”和“0”与上面的时序操作一样。 最后就是将接收到的数据进行微机处理;这样就完成了一次对DS18B20的访问过程。其具体程序流程如图
sbitMISO=P2^2; // P2.2 simulate master in
sbitSS1=P2^3; // P2.3 simulate choice
uinth,temp;
ucharDisdata,discan;
ucharcode ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//look decimal part from table
uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
uchar data pcplay[10]={'0','1','2','3','4','5','6','7','8','9'};//used in UART
/******Declaration for the following functions********/
方案二:用到DS18B20,24C04,1602,测得的温度在四位数码管上显示,同样进行双机SPI通信和通过MCU的UART与PC通信
方案比较:方案一和方案二主要的区别就是数据的显示方式,方案一能显示出很精确的温度,方案二由于只有四位数码管,所以精度不高,但方案一的成本较高,对于精度要求不高的实验可以采用方案二,须要较高精度的,则采用方案一
3.主机向从机通过SPI总线发送温度数据
硬件实现:主机的MISO与从机的MISO相连,主机的MOSI与从机的MOSI相连,主机的SS与从机的SS相连,主机的SCLK与从机的SCLK相连。这样在主机发出的SCLK时钟脉冲下,主机将数据一位一位地传送给从机。
电路图:
SPI总线工作原理:
SPI接口有四个脚:SPICLK/ P1.7,MOSI/ P1.5,MISO/ P1.6,SS/ P1.4
SPICLK, MOSI, MISO,通常和两个或更多的SPI器件连在一起,数据通
过MOSI由主机传送到从机,通过MISO由从机传送到主机。
软件实现
程序首先初始化特殊寄存器SPCTL=0xd7,SPSTAT=0xc0,这样就工作在主机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着向数据寄存器SPDAT写入一个字节的数据,循环等待标志位SPIF=1为止,当SPIF==1时,说明一个字节数据已经传送完毕。将SPIF清0。接着发送下一个字节数据。
4从机通过SPI总线接受主机传过来的温度数据
硬件实现:主机的MISO与从机的MISO相连,主机的MOSI与从机的MOSI相连,主机的SS与从机的SS相连,主机的SCLK与从机的SCLK相连。这样在主机发出的SCLK时钟脉冲下,主机将数据一位一位地传送给从机。
软件实现:
程序首先初始化特殊寄存器SPSTAT=0xc0,SPCTL=0xc7。这样就工作在
二、从机通过SPI总线接收主机传过来的温度数据,在LCD1602上显示温度。同时从机通过UART把接受到的数据传到PC机进行通信,PC机通过串口调试工具显示温度,并且存储分析。
三.软硬件的系统设计
1.温度采集
硬件实现:数据采集电路由温度传感器DS18B20采集被控对象的实时温度,提供给STC单片机的P3.0口作为数据输入。在本次设计中我们所控的对象为所处室温。
系统结构图说明:
整个系统分为两部分:主机部分和从机部分。下面我们分别进行这两方面的介绍:
一、通信主控部分(主机):它在整个系统中起核心控制地位,首先,主机通过操作操作具有IIC总线结构的EEPROM器件24C04,将主机上流水灯状态传给24C04。这样当单片机系统掉电时,能够保存最后掉电前的流水灯状态,以便当系统上电时,单片机从24C04中读取数据,从上一次的状态接着运行。其次,通过主机对温度传感器的控制来采集本地环境温度;然后,把采集到的数据送到单片机中进行分析处理,并通过LCD进行本地温度显示;最后,就是主机的通信部分,它主要包括发射部分:主要利用STC单片机的SPI总线,利用它进行双机SPI通信,主机将温度数据发给从机。