好文档 - 专业文书写作范文服务资料分享网站

单片机常用总线讲解

天下 分享 时间: 加入收藏 我要投稿 点赞

. . ..

RST=1;

_nop_(); _nop_();

Write_Ds1302_Byte(address); for (i=0;i<8;i++) //循环8次 读取数据

{

if(SDA) temp|=0x80; SCK=0; temp>>=1;

_nop_();

_nop_();

_nop_();

SCK=1;

}

RST=0;

_nop_();

_nop_(); RST=0; SCK=0; _nop_(); _nop_(); _nop_(); _nop_(); SCK=1; _nop_(); _nop_(); SDA=0; _nop_();

_nop_();

.v

//每次传输低字节

//右移一位 //以下为DS1302复位的稳定时间

.. ..

第八章 单片机常用总线讲解

}

/******************************************************************/ /* 读时钟数据 */

/******************************************************************/ void Read_RTC(void) //读取 日历 {

unsigned char i,*p;

p=read_rtc_address; //地址传递 for(i=0;i<7;i++) {

l_tmpdate[i]=Read_Ds1302(*p); p++; } }

/******************************************************************/ /* 设定时钟数据 */

/******************************************************************/ void Set_RTC(void) {

unsigned char i,*p,tmp; for(i=0;i<7;i++)

//设定 日历

//分7次读取 秒分时日月周年

SDA=1; _nop_(); _nop_(); return (temp);

//返回

{ //BCD处理

}

tmp=l_tmpdate[i]/10;

l_tmpdate[i]=l_tmpdate[i]; l_tmpdate[i]=l_tmpdate[i]+tmp*16;

. . ..

Write_Ds1302(0x8E,0X00); p=write_rtc_address; for(i=0;i<7;i++) {

Write_Ds1302(*p,l_tmpdate[i]); p++;

//传地址

//7次写入 秒分时日月周年

}

}

Write_Ds1302(0x8E,0x80);

/******************************************************************/ /* 定时器中断函数 */

/******************************************************************/ void tim(void) interrupt 1 using 1

//中断,用于数码管扫描 {

static unsigned char i,num; TH0=0xf5; TL0=0xe0;

P0=table[l_tmpdisplay[i]]; switch(i)

{

case 0:LS138A=0; LS138B=0; LS138C=0; break;

//查表法得到要显示数字的数码段

case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break;

case 4:LS138A=0; LS138B=0; LS138C=1; break; case 5:LS138A=1; LS138B=0; LS138C=1; break; case 6:LS138A=0; LS138B=1; LS138C=1; break; case 7:LS138A=1; LS138B=1; LS138C=1; break;

}

.v .. ..

第八章 单片机常用总线讲解

}

i++; if(i==8) { i=0; num++;

if(10==num) //隔段时间读取1302的数据。时间间隔可以调整 { }

ReadRTC_Flag=1; //使用标志位判断 num=0; }

8.3 单总线协议

8.3.1 单总线的介绍

单总线技术是美国Dallas半导体公司近年推出的新技术。它将地址线、数据线、控制线合为1根信号线,允许在这根信号线上挂接数百个单总线器件芯片。基于单总线的每个芯片内部均有1个出厂前被光刻好的64位ROM序列号,它可以看作是该芯片的地址序列码。开始8位是产品类型标号,如DS18B20为28H,DS2450为20H等;接着的48位是该芯片自身的序列号,用以保证在同类芯片中的唯一性;最后8位是前面56位的循环冗余校验码,以确保数据传输的可靠性。光刻ROM的作用是使每个\单总线\器件的地址都各不相同,这是定位和寻址器件实现单总线测控功能的前提条件,并以此为依据实现1根总线上挂接多个\单总线\芯片。芯片内部集成有收发控制电路和电源存储电路。与微处理器的接口非常简单,可节省大量的引线和逻辑电路。芯片的耗电量很小,从总线上\偷\一点电(空闲时几μW,工作时几mW)存储在片内的电容中就可正常工作,一般不用另附电源。最可贵的是这些芯片在检测点已把被测信号数字化了,因此在单总线上传送的是数字信号,这使得系统的抗干扰性能好、可靠性高、传输距离远。

单总线技术具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等优点,因此,在分布式测控系统中有着广泛应用。 8.3.2单总线实例应用(DS18B20)

. . ..

使用DS18B20温度传感器设计温控系统项目实现功能:使用TX-1C实验板上的DSI18B20温度传感器设计温控系统,要求如下:

(1)在前三个数码管上显示当前采集到的环境温度(O-99.9℃)。

(2)当环境温度低于27℃时,蜂鸣器开始以慢“滴”声报警,并且伴随P1.0口发光二极管闪烁〔模拟开启制热设备);当环境温度继续降低并低于25℃时,蜂鸣器以快“滴”声报警,并且伴随P1.0和P1.1口发光二极管一起闪烁(模拟加大制热设备功率)。

(3)当环境温度高于30℃时,蜂鸣器开始以慢“滴”声报警,并且伴随P1.2口发光二极管闪烁(模拟开启制冷设备);当环境温度继续升高并高于32℃时,蜂鸣器以快“滴”声报警,并且伴随P1.2和P1.3口发光二极管一起闪烁(模拟加大制冷设备功率)。

(4)用串口将采集到的温度数据实时发送至上位机,在上位机软件上显示当前温度值(关于上位机软件的编写请参考本篇第十一章(VB内容)。

关于温度变化的实现,大家可参考以下方法:室温通常在28℃左右,用手捏住温度传感器可使其温度上升,用温度低的物体接触温度传感器可使其温度降低,或在温度传感器上淋点水,然后对着温度传感器吹气可以使温度迅速下降,大家也可想其他办法使温度传感器周围温度在25℃-32℃变化。 温度传感器概述:

温度传感器是各种传感器中最常用的一种,早期使用的是模拟温度传感器,如热敏电阻,随着环境温度的变化,它的阻值也发生线性变化,用处理器采集电阻两端的电压,然后根据某个公式就可计算出当前环境温度。随着科技的进步,现代的温度传感器已经走向数字化,外形小,接口简单,广泛应用在生产实践的各个领域,为我们的生活提供便利。随着现代仪器的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向。美国DALLAS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即与单片机接口仅需占用一个I/O端口,无须任何外部元件,直接将环境温度转化成数字信号,以数字码方式串行输出,从而大火简化了传感器与微处理器的接口。

图8-22至8-29所示为一些温度传感器实物图。

.v .. ..

单片机常用总线讲解

....RST=1;_nop_();_nop_();Write_Ds1302_Byte(address);for(i=0;i<8;i++)//循环8次读取数据{if(SDA)
推荐度:
点击下载文档文档为doc格式
0xo5u5tf9k565jb3urou8mpoj7oc3w00zof
领取福利

微信扫码领取福利

微信扫码分享