⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 这是运行在AVR 单片机 mega48上的一个温度测量程序
💻 C
字号:
#include"main.h"
#include"init.h"
#include"18b20.h"

static   void     usart_init(void)   ; 
static   void     init_18B20(void)   ;
static   void     timer1_init(void)    ;
static   void     watch_dog(void)    ;
extern   uint     temperature ;


void  init(void)
{
	usart_init()  ; 
	init_18B20()  ;
	timer1_init() ;
        watch_dog()   ;
	DDRB |= 0x04  ;         //频率输出端口初始化 
}

static void timer1_init(void)
{
 
	TCCR1A = 0x10;
	TCCR1B = 0x09;        //普通端口操作,CTC模式 ,不分频    
	TCNT1H = 0x00;
	TCNT1L = 0x00;
	ICR1H  = 0x00;
	ICR1L  = 0x00;
	OCR1AH = 0x24;        //初始化输出200Hz       24
	OCR1AL = 0x00;
	OCR1BH = 0x00;
	OCR1BL = 0x00;
	//TIMSK1 = 0x02;        //T/C1 输出比较 A 匹配中断使能
	       
}

	
static void  usart_init(void) 
{
/* 设置波特率 2400 bps*/
	UBRR0H = 0x00  ;
	UBRR0L = 0x5F  ;     
/* 接收结束中断使能  发送器使能 , 接收使能*/
	UCSR0B = 0x98 ;   //8位数据   
/* 设置帧格式: 8 个数据位, 1 个停止位,偶校验 */
	UCSR0C = 0x26;
}


static  void  init_18B20(void)
{
  	
	while( init_bus() == 0)          //等待总线初始化完成
    ;            
    _SEI() ;
	_WDR()  ;
	write_18B20(0xCC);               //发送SKIP ROM指令
	write_18B20(0x4E);                //发送写寄存器指令
	write_18B20(0x64);                   //设置温度上限值为100
	write_18B20(0x00);               //设置温度下限值为0
	write_18B20(0x7F);               //写配置寄存器,12位分辨率
   
	
}


uchar  init_bus(void) 
{
//	DQ=0;
 //   _DINT() ;
    _CLI() ;
    TEMP_OUT   ;
	//NOP10 
    TEMP_RESET ;
//	Delay500(); //延时500us
	delay(48) ;
	delay(48)  ;
	delay(48) ;
	delay(48) ;
	delay(48) ;
	
//	DQ=1;
    TEMP_SET  ;  
	TEMP_IN ;
//	Delay90(); //延时90us
	
	delay(40) ;
    //	DQ=1;
    
    NOP10                      
    if( TEMP_READ != 0x80) 
	{
		TEMP_OUT  ;
      
        TEMP_SET  ;
//		Delay400(); //延时400us
		delay(48) ;
		delay(48) ;
		delay(48) ;
		delay(48) ;
//		PORTD =  tab[5];
	
		return 1;
	}
	else
	{
//	  PORTD =  tab[2];
	  //  if(DQ==1)
	  
      return 0; 
	}
	
}

void  delay(uint  time)       //time==88,为100us
{
     uint   j = 0  ;
     for(j = 0 ;j < time ;j++)
     ;
}

static  void  watch_dog(void)
{
/* 看门狗设置*/
	WDTCSR =  0x18 ;
	WDTCSR =  0x0F ;    // 2 S 打开看门狗  使能看门狗不能用 |=,必须要直接赋值=。
	WDTCSR &= 0xEF ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -