历史上的今天

今天是:2024年11月14日(星期四)

2019年11月14日 | ICC-AVR DS1821S温度报警程序

发布者:painter 来源: 51hei关键字:ICC-AVR  DS1821S  温度报警 手机看文章 扫描二维码
随时随地手机看文章

用DS1821的测温报警输出功能,已经过实测,可以用的,已批量用于产品。

//ICC-AVR application builder : 2015-10-8 14:15:46

// Target : M8

// Crystal: 8.0000Mhz

/*新片烧录程序,电容加热温度高低设置成0x14,0x13;化雪板设置成0X02,0X00*/

#include

#include



#define uchar         unsigned char 

#define uint         unsigned int

#define sint         short int

#define uint8        uchar

#define uint16        unsigned short 

#define        uint32        unsigned int   

#define bool        uchar


#define DS1620 0      

#define CLK           1          

#define        RST           2

#define        LEDL   3

#define        LEDH   2

#define TEMPH  0x02             

#define TEMPL  0x00                


void Delay_ms(uint ms)

{

        unsigned int i,j;

        for(i=0;i                for(j=0;j<1141;j++);        //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值

}


void Delay_us(uint us)/////6us

{

        unsigned int i,j;

        

        for(i=0;i                //for(j=0;j<1;j++);        //114是在8MHz晶振下,通过软件仿真反复实验得到的数值


}

void Delay(uint ms)//////60us

{

        unsigned int i,j;

        for(i=0;i                for(j=0;j<60;j++);        //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值

}

void Delay40(uint ms)//////60us

{

        unsigned int i,j;

        for(i=0;i                for(j=0;j<40;j++);        //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值

}

void Delay_1slot(unsigned int x)/////5us

{

                unsigned int i;

                i=x;

                while(i>0)i--;

}

void Delay_1us(uint ms)

{

        unsigned int i;

        i=0;

        i=0;

        i=0;

        i=0;

        

}


void port_init(void)

{

PORTB = 0x07;

DDRB  = 0x07;

PORTC = 0x00; //m103 output only

DDRC  = 0x00;

PORTD = 0x0f;

DDRD  = 0x0f;

}

void led_rotation(void)

{

    uchar j;

        for(j=0;j<4;j++)//循环点亮

        {

                PORTD&=~BIT(3-j);

                Delay_ms(60);

                PORTD|=BIT(3-j);

        }

}


//UART0 initialize

// desired baud rate: 9600

// actual: baud rate:9615 (0.2%)

// char size: 8 bit

// parity: Disabled

void uart0_init(void)

{

UCSRB = 0x00; //disable while setting baud rate

UCSRA = 0x00;

UCSRC = BIT(URSEL) | 0x06;

UBRRL = 0x33; //set baud rate lo

UBRRH = 0x00; //set baud rate hi

UCSRB = 0x18;

}


//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

// uart0_init();

MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x00; //timer interrupt sources

// SEI(); //re-enable interrupts

//all peripherals are now initialized

}


/****************************************************************************

* 名称:UartSendByte()

* 功能:向串口发送字节数据。

* 入口参数:data                要发送的数据

* 出口参数:无

****************************************************************************/

void  uart0SendByte(uint8 data)

{  

        while( !( UCSRA & (1<        UDR = data;                               //发送数据

}

/****************************************************************************

* 名称:UartSendString()

* 功能:向串口发送字符串。

* 入口参数:data                要发送的数据

* 出口参数:无

****************************************************************************/

void  uart0SendString(uint8 *ptr)

{

        while(*ptr)

        {

                uart0SendByte(*ptr++);

        }

        uart0SendByte(0x0D);

        uart0SendByte(0x0A);        //结尾发送回车换行

}

/****************************************************************************

* 名称:UartRcvByte()

* 功能:从串口接收字节数据。

* 入口参数:无

* 出口参数:data                接收到的数据

****************************************************************************/

uint8 uart0RcvByte(void)        //接收采用查询方式

{

        while( !( UCSRA & (1<        return UDR;                                              //获取并返回数据

}


void ds1821_reset()

{

//uchar ack;

DDRB|=BIT(DS1620);

PORTB&=~BIT(DS1620);                //是低则将单总线拉低

Delay_us(600);

PORTB|=BIT(DS1620);                        //是高则将单总线拉高

//Delay(1);

DDRB&=~BIT(DS1620);

while((PINB&BIT(DS1620)));

while(!(PINB&BIT(DS1620)));

//  Delay_us(150);

// ack=PINB;

//  ack&=0x01;

  Delay_us(50);

// return ack;

}


void DS1821_WriteByte(uint8 dat)

{

uint8 i;

DDRB|=BIT(DS1620);

for(i=0;i<8;i++)

{

        PORTB&=~BIT(DS1620);

        Delay_1slot(0);

        Delay_1slot(0);

    if (dat&0x01)

        { // bit = 1 LSB first

           PORTB|=BIT(DS1620);

    } 

        else 

        { // bit = 0

      PORTB&=~BIT(DS1620);

    }

        Delay40(1);

        PORTB|=BIT(DS1620);

        Delay_1slot(0);

    dat >>= 1;

        

        

  }

DDRB&=~BIT(DS1620); 

}


uint8 DS1821_ReadByte(void)

{

uint8 dat,i; 

dat=0;

for(i=0;i<8;i++)

{

  dat >>= 1; 

  DDRB|=BIT(DS1620);//设置p01为输出状态

  PORTB&=~BIT(DS1620);

  PORTB|=BIT(DS1620);

  DDRB&=~BIT(DS1620);;//设置p01为输入状态

  PORTB&=~BIT(RST);

  PORTB|=BIT(RST);

  if(PINB&BIT(DS1620))   

  {

    dat|=0x80; // msb 優先

  }

   Delay40(1);//等40us, 加上其它程式碼, 每個bit有80us

}     

return dat;

}


void DS1821_switchmode(void)

{

  uint8 i;

  DDRB|=BIT(DS1620);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

//  Delay_ms(3000);

        Delay_1slot(1);

  PORTB&=~BIT(CLK);

  Delay_1slot(2);

  

  for(i=0;i<16;i++)

  {

   PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  //Delay_1slot(1);

          PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  //Delay_1slot(1);

  

  

  }

  /*

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);

  

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);

  

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);

  

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);

  

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);


  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);


  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

  PORTB|=BIT(DS1620);                        //是高则将单总线拉高

  Delay_1slot(1);

  

  PORTB&=~BIT(DS1620);                //是低则将单总线拉低

  Delay_1slot(1);

[1] [2]
关键字:ICC-AVR  DS1821S  温度报警 引用地址:ICC-AVR DS1821S温度报警程序

上一篇:avr继电器+1602程序
下一篇:AVR I2C通信程序

推荐阅读

小编带大家一起来看看YuMi机器人如何校准!其实,YuMi机器人可以和普通机器人一样校准,通过示教器校准来完成。1)校准时,先移动机器人到校准刻度线附近,注意校准位置左右手不对称,对于7轴,左手对准L刻度位置,右手对准R刻度位置。2)YuMi每个关节内置霍尔传感器,即机器人在校准位置时,霍尔传感器信号为0,其他位置为1,所以可以运行程序自动找校准...
每个人都不喜欢简单重复、没有创造力的工作,用机器人取代人的基础劳动不仅是大势所趋,而且伴随着新一轮产业革命蓬勃发展正在席卷而来。尤其在制造业领域,从生产加工到内部物流运输,随着人口红利流失及用人成本不断攀升,机器人取代人的步伐不断加快。为满足当前市场需求,仙知机器人重磅推出了AMB系列无人搬运底盘。AMB系列无人搬运底盘通过搭载移动机...
2020年上半年,在股价形成了阶段性低点之后,“扫地机器人第一股”科沃斯,市值一路狂奔开启,短短6个月时间,价格翻了近4倍,市值一度也接近400亿元。当我尝试去寻找支撑它暴涨背后的逻辑支点时,旗下的高端智能家电品牌——TINECO添可,突然闪现进了视线里:正面硬刚戴森、高端路线卖爆品、增长势如破竹,一下子就让我对科沃斯的高成长势能,有了恍然大悟的认知。相...

史海拾趣

问答坊 | AI 解惑

LCD Scope 40MSPS

网上找到的一个示波器网站 http://www.eosystems.ro/…

查看全部问答∨

有调通过marvell wifi 8686 sdio接口驱动来讨论下???

正在调sdio接口的wifi 8686驱动,sdio确认好的,读写寄存器,加载固件都没问题。有以下问题: 1. 我是直接把驱动放在bsp中编的,wince启动后自动加载wifi驱动, 并且这个wifi驱动会自行搜索热点。我的理解是wifi驱动加载固件启动完wifi芯片注册网络 ...…

查看全部问答∨

protel 99se中,sp232E在哪个库中?

如题。 protel 99se中,SP232E所在的库叫什么?…

查看全部问答∨

求救,自己定制系统不能显示中文??

奇怪,在pb5.0自己定制的系统不能显示中文,只能显示"_",但用mobile Hansheld作系统的话就能显示中文,什么回事呢? …

查看全部问答∨

看看我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答∨

STM32的FLASH使能和禁止半周期访问对运行有什么区别吗

                                 如题…

查看全部问答∨

f2812AD转换波动很大,不知是什么原因?

用电位器输出一个电压值,从我watch窗口看到的ADCresult值都在变化,变化比较大。如0xabc0,b为都会能差4,帮忙分析一下可能那里设置不对。谢谢!…

查看全部问答∨

LM3S811使用心得之ADC

从参加抢LM3S811的活动后,每天都期待啊,终于在4.26的下午,顺风快递发来信息去取快递,其实已经料到是811到啦,好兴奋的跑到校门口外迎接顺风,领到包裹后,回寝室迫不及待的打开它,没错是811 。用811把我以前的LCD有重新驱动了起来,下面是我这 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved