📄 init.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 + -