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

📄 init.c

📁 AVR16源代码 ICC编译器
💻 C
字号:


#include <iom16v.h>
#include <macros.h>
#include	"Uart.h"
#include	"init.h"
//============================================================
//计算和设置16的特率参数 覃道堂 2007-01-16
#define   BAUD 		    9600
#define   CRYSTAL 	    4000000
#define   BAUD_SETTING 	(unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define   BAUD_H 	    (unsigned char)(BAUD_SETTING>>8)
#define   BAUD_L 	    (unsigned char)BAUD_SETTING

/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:
	PD0:串口接收 主要用于232/485的接收
	PD1:串口发送 主要用于232/485的发送
	PD2:主要用于对超声波变送器的收到回波的检测(连到Pin5)
	PD3:主要用于对超声波的开始检测的触发(连到Pin3)
	PD4:主要用于485收发的使能
	PD5:用于超声波范围控制引脚1(置为内部上拉)
	PD6:用于超声波范围控制引脚2(置为内部上拉)
**************************************/
void port_init(void)    //ATMEGA16口的初始化
{
 PORTA = 0x20;
 DDRA  |= 0x20;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; 
 DDRC  = 0x00;
 PORTD = 0x80;
 DDRD  = 0x80;//口初始化,初始化PD.3口为输出
}
//============================================================
//函	数:void Init_Com(void)
//功	能:初始化串口设置
//入口参数:无 
//返 回 值:无  
//设 计 者:覃道堂 
//创作时间:2007-01-16
//修改时间:
//修改目的:
//============================================================
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL =BAUD_L;//设置波特率为9600
 UBRRH =BAUD_H;
 UCSRB = 0x18;
}
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:对定时器0进行初始化,使定时器0的溢出频率为40HZ
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
void timer0_init(void)//定时器初始化
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x3D; //set count
 OCR0  = 0xC3;  //set compare
}
/**************************************
**芯片类型:ATmega16
**时钟频率:4M
**硬件接口说明:无
**函数功能说明:对定时器1进行初始化,计数初值为0
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x00; //setup
 TCNT1L = 0x00;
 OCR1AH = 0xFF;
 OCR1AL = 0xFF;
 OCR1BH = 0xFF;
 OCR1BL = 0xFF;
 TCCR1A = 0x00;
}
/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:对外部中断0进行初始化,设置为下降沿触发
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:无
**修改人:
**修改日期:
**修改说明:
**************************************/

void ext_init(void)
{
MCUCR=0x02;
GICR=0x40;   //设置外中断0为下降沿触发
}

/**************************************
**芯片类型:ATmega16
**时钟频率:8M
**硬件接口说明:无
**函数功能说明:对端口、串口、定时器0、1进行初始化
**函数输入参数及说明:无
**函数返回值:无
**在本函数以外定义的变量:无
**调用的函数说明:port_init()、uart0_init()、timer0_init()、timer1_init()
**修改人:
**修改日期:
**修改说明:
**************************************/
void init_devices(void)
{
 CLI(); //关中断
 port_init();
 uart0_init(); 
 timer0_init();
 timer1_init();
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x05; //T/C0、1中断中断使能
 
SEI(); //开中断 
}
//============================================================
//看门狗初始化函数
//
//
//
//
//============================================================
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
}

⌨️ 快捷键说明

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