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

📄 system_init._c

📁 这是一个电池放电器
💻 _C
字号:
#include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
#include <macros.h>
#include "discharge.h"
#include <stdio.h>
#include "LCD_1602.h"

void init_devices(void)
{
 CLI(); //禁止所有中断
 MCUCR  = 0x00;
 MCUCSR = 0x80;//禁止JTAG
 GICR   = 0x00;
 port_init(); 
 usart_init();
 timer1_init(10,10,4000);//PWM上限 4000
 timer2_init();
 AD_init(); 
 LCD_init();
 delay_nms(10);
 SEI();//开全局中断
}

//端口初始化
void port_init(void)
{	 
   DDRB&=~(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 输入
   PORTB|=(1<<0)|(1<<3)|(1<<4)|(1<<5);//KEY 开上拉
   DDRC|=(1<<4)|(1<<5);//LED_G  LED_R  
   DDRB&=~(1<<1)|(1<<2);//PWMA PWMB 设为输入,即关闭
}

//串口通信初始化
void usart_init(void)
{
 UCSRB = 0x00;//禁止中断
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL = 0x0C;
 UBRRH = 0x00;
 UCSRB = 0x18;
}

//定时器T2初始化
void timer2_init(void)
{
 TCCR2  = 0x00;//停止定时器
 ASSR   = 0x00;//异步时钟模式
 TCNT2  = 0x06;//初始值
 OCR2   = 0x05;//匹配值
 TIMSK |= 0x40;//中断允许
 TCCR2  = 0x06;//启动定时器
}

//定时T1初始化
void timer1_init(unsigned int a,unsigned int b,unsigned int top)
{
 TCCR1B = 0x00;//停止定时器
 TIMSK |= 0x00;//中断允许
 TCNT1H = 0x00;
 TCNT1L = 0x00;//初始值
 OCR1A=a;//匹配A值
 OCR1B=b;//匹配B值
 ICR1=top-1;//输入捕捉匹配值
 TCCR1A = 0x82;
 TCCR1B = 0x19;//启动定时器 无分频
}
/*
//定时器T0初始化
void timer0_init(void)
{
 TCCR0  = 0x00;//停止定时器
 TCNT0  = 0xFF;//初始值
}

void timer0_start(void)
{
  TCNT0  = 0xFF;//初始值
  TCCR0  = 0x05;//启动定时器
}

void timer0_stop(void)
{
  TCCR0  = 0x00;//停止定时器
  LCD_write_number(9,0,0,TCNT0,"us",0);//
}
*/
void AD_init(void)
{   	
    ADCSRA=0X00; 
	ACSR  =(1<<ACD);//关闭模拟比较器   
    ADMUX =(1<<REFS0)|(1&0x0F); //
    ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1);//ADC转换 64分频
}

unsigned int read_adc (uchar r,uchar m)
{
 unsigned int adc_rel;
 ADMUX=0;
 ADMUX |=(m&0x0F);//选择通道
 ADMUX |=(r<<6);//选择基准
 ADCSRA|=(1<<ADSC);//启动AD转换
 delay_nus(125);
 adc_rel=ADC&0x3FF;
  return(adc_rel);
}

void delay_nms(unsigned int n)//延时n毫秒
{
  unsigned int i;
  for (i=0;i<n;i++)//执行n次1毫秒延时
   {delay_nus(1000);}
}

void delay_nus(unsigned int n)//延时N微秒,N>=5  晶振:8MHz
{
  unsigned int i;
  for (i=5;i<n;i++)
  	  {
	  asm("nop");
	  asm("nop");	 
  	  } 
}

⌨️ 快捷键说明

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