首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于DS18B20与TMS320LF2407A的测温系统
来源:本站整理  作者:佚名  2010-02-26 15:27:20



  这些汇编语句所占用的时间可以计算成公式:DELAY=(9N+4)*单个指令周期。

  3、测试出一个指令周期

  系统所用晶振为20M,倍频以后的时钟频率为40M,定时器1的分频为1,也就是说定时器的计时周期为25ns。开启定时器,单步运行上面的汇编语句,看定时器每次运行后所增加的数值。测试得到,在每次单步运行占一个指令周期的汇编语句后,定时器的数值增加10。也就是说,每个单指令周期的指令占用的时间为:25ns*10=250ns,也就是0.25us。

  4、延时程序的最终计算公式为:

  DELAY =(9n+4)*0.25us。

  由公式可以看出,当n=0时,DELAY=1us,当n=65535时,DELAY= 150ms。

3.2 主要程序

  由于文章篇幅的关系,这里只给出复位程序、读字节程序和整个读温度的主程序,写命令字的程序可以根据上面所述的时序自行编写。

#define nop()   {asm( nop );}
#define DATA_PORT  PADATDIR
#define DATA_MODE  0x0040
#define  DATA_OUT   0x4000
#define  DATA_BIT   0x0040
#define PIN_HIGH()   {PADATDIR=PADATDIR|DATA_OUT|DATA_BIT;}
#define PIN_LOW()  {DATA_PORT=(PADATDIR|DATA_OUT)&(~DATA_BIT);}
#define PIN_LEAVE()  {DATA_PORT=DATA_PORT&(~DATA_OUT)|DATA_BIT;}
/* 传感器复位程序 */
unchar reset(void)
{  unchar retval;
unint loopindex="0";
    PIN_HIGH();
    nop();nop();nop();nop(); /* 延时1us*/
PIN_LOW();
for(loopindex=0;loopindex<213;loopindex++){;} /*置总线为低电平并保持至少480us */
PIN_HIGH();
for(loopindex=0;loopindex<26;loopindex++){;} /*等电阻拉高总线并保持15-60us */
PIN_LEAVE(); /*接受应答信号*/
nop();
if((DATA_PORT & DATA_BIT) == 0x0000)
{  retval = 0;  }
else
{  retval = 1;  }
PIN_HIGH();
    for(loopindex=0;loopindex<106;loopindex++){;} /*延时60-240us */
    return(retval); /*返回应答信号 */
}

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:113,898.40000 毫秒