当前位置:文档之家› 实验4(串行通行实验报告)

实验4(串行通行实验报告)

方案二:用到DS18B20,24C04,1602,测得的温度在四位数码管上显示,同样进行双机SPI通信和通过MCU的UART与PC通信
方案比较:方案一和方案二主要的区别就是数据的显示方式,方案一能显示出很精确的温度,方案二由于只有四位数码管,所以精度不高,但方案一的成本较高,对于精度要求不高的实验可以采用方案二,须要较高精度的,则采用方案一
sbitSCL=P3^6;//set clock io for24c04
sbitDQ=P1^7;//entrance for 18b20
sbitDS1=P1^5;//Serial datain 1
sbitST1=P1^4;//OutpuБайду номын сангаас flip-latch impulse 1
sbitSH1=P1^3;//Shift clock impulse 1
#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
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};
参考文献:
[1]《单片机基础》 李广弟 北京航空航天大学出版社
[2]24c04中文官方资料手册
[3]DS18B20资料手册
实验程序:
主机
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
从机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着程序循
环查询标志位SPIF,当SPIF==1时说明程序已经接受到完整的一个字节数据。
可以从数据寄存器中读取接受到的数据,接着进行下一个字节数据的接受。
5.从机通过UART与PC机相连,将数据显示到串口调试助手上
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地
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的访问过程。其具体程序流程如图
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
程序流程图如下:
2.EEPROM24C04的操作
硬件实现:24C04的串行数据口SDA口与单片机的P3.6口线相连,串行时钟线SCL口与单片机P3.7口线相连。用24C04来保存流水灯的状态电路图如下:
IIC总线的工作原理:IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
系统结构图说明:
整个系统分为两部分:主机部分和从机部分。下面我们分别进行这两方面的介绍:
一、通信主控部分(主机):它在整个系统中起核心控制地位,首先,主机通过操作操作具有IIC总线结构的EEPROM器件24C04,将主机上流水灯状态传给24C04。这样当单片机系统掉电时,能够保存最后掉电前的流水灯状态,以便当系统上电时,单片机从24C04中读取数据,从上一次的状态接着运行。其次,通过主机对温度传感器的控制来采集本地环境温度;然后,把采集到的数据送到单片机中进行分析处理,并通过LCD进行本地温度显示;最后,就是主机的通信部分,它主要包括发射部分:主要利用STC单片机的SPI总线,利用它进行双机SPI通信,主机将温度数据发给从机。
uchar data pcplay[10]={'0','1','2','3','4','5','6','7','8','9'};//used in UART
/******Declaration for the following functions********/
起始和终止信号:SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
四.测试
DS18B20测得一个温度(如23.3392^C),在主机和从机的1602上显示该温度值,通过串口线在计算机串口调试助手显示同样的数值,说明在温度的误差范围内,实验大致正确。
五.总结
总结:通过本次实验,我们了解了I2C器件24C04和OneWire器件DS18b20的基本性能以及对他们的操作,学会了双机SPI通信,通过MCU的UART与PC通信,了解了串行通信的原理,本次实验中有一点需要注意,在进行双机通信的时候,两块实验板必须共地。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TL和TH、高速暂存器。DS18B20管脚排列如图,从左到右管脚分别为1、GND;2、I/O;3、VDD。
温度传感器可以完成对温度的测量。内部高速暂存器包含8个连续字节。暂存器具体分布如表所示。
字节序号
寄存器名称
二、从机通过SPI总线接收主机传过来的温度数据,在LCD1602上显示温度。同时从机通过UART把接受到的数据传到PC机进行通信,PC机通过串口调试工具显示温度,并且存储分析。
三.软硬件的系统设计
1.温度采集
硬件实现:数据采集电路由温度传感器DS18B20采集被控对象的实时温度,提供给STC单片机的P3.0口作为数据输入。在本次设计中我们所控的对象为所处室温。
SPICLK, MOSI, MISO,通常和两个或更多的SPI器件连在一起,数据通
过MOSI由主机传送到从机,通过MISO由从机传送到主机。
软件实现
程序首先初始化特殊寄存器SPCTL=0xd7,SPSTAT=0xc0,这样就工作在主机模式下,SPI传输速度是晶振的128分频,传输时先高位传送。接着向数据寄存器SPDAT写入一个字节的数据,循环等待标志位SPIF=1为止,当SPIF==1时,说明一个字节数据已经传送完毕。将SPIF清0。接着发送下一个字节数据。
具体的电路如图所示。
软件实现
程序首先初始化一些特殊寄存器,将TMOD设为0x20,将PCON设为0X00
(波特率不增),将TH1和TL1设为0Xfd,这样波特率就设成为9600bps。将SCON设为0X50,使得串口工作在工作方式一下。然后程序向SBUF写入温度数据循环等待标志位TI为1,这样串口就发送了一个字节的数据,如此循环,直到送完所有数据为止。
4从机通过SPI总线接受主机传过来的温度数据
硬件实现:主机的MISO与从机的MISO相连,主机的MOSI与从机的MOSI相连,主机的SS与从机的SS相连,主机的SCLK与从机的SCLK相连。这样在主机发出的SCLK时钟脉冲下,主机将数据一位一位地传送给从机。
软件实现:
程序首先初始化特殊寄存器SPSTAT=0xc0,SPCTL=0xc7。这样就工作在
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
相关主题