?? system_init._c
字號(hào):
#include <iom8v.h> //和單片機(jī)類型相對(duì)應(yīng)的頭文件,選擇Atmega8做實(shí)驗(yàn);
#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 設(shè)為輸入,即關(guān)閉
}
//串口通信初始化
void usart_init(void)
{
UCSRB = 0x00;//禁止中斷
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x0C;
UBRRH = 0x00;
UCSRB = 0x18;
}
//定時(shí)器T2初始化
void timer2_init(void)
{
TCCR2 = 0x00;//停止定時(shí)器
ASSR = 0x00;//異步時(shí)鐘模式
TCNT2 = 0x06;//初始值
OCR2 = 0x05;//匹配值
TIMSK |= 0x40;//中斷允許
TCCR2 = 0x06;//啟動(dòng)定時(shí)器
}
//定時(shí)T1初始化
void timer1_init(unsigned int a,unsigned int b,unsigned int top)
{
TCCR1B = 0x00;//停止定時(shí)器
TIMSK |= 0x00;//中斷允許
TCNT1H = 0x00;
TCNT1L = 0x00;//初始值
OCR1A=a;//匹配A值
OCR1B=b;//匹配B值
ICR1=top-1;//輸入捕捉匹配值
TCCR1A = 0x82;
TCCR1B = 0x19;//啟動(dòng)定時(shí)器 無分頻
}
/*
//定時(shí)器T0初始化
void timer0_init(void)
{
TCCR0 = 0x00;//停止定時(shí)器
TCNT0 = 0xFF;//初始值
}
void timer0_start(void)
{
TCNT0 = 0xFF;//初始值
TCCR0 = 0x05;//啟動(dòng)定時(shí)器
}
void timer0_stop(void)
{
TCCR0 = 0x00;//停止定時(shí)器
LCD_write_number(9,0,0,TCNT0,"us",0);//
}
*/
void AD_init(void)
{
ADCSRA=0X00;
ACSR =(1<<ACD);//關(guān)閉模擬比較器
ADMUX =(1<<REFS0)|(1&0x0F); //
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1);//ADC轉(zhuǎn)換 64分頻
}
unsigned int read_adc (uchar r,uchar m)
{
unsigned int adc_rel;
ADMUX=0;
ADMUX |=(m&0x0F);//選擇通道
ADMUX |=(r<<6);//選擇基準(zhǔn)
ADCSRA|=(1<<ADSC);//啟動(dòng)AD轉(zhuǎn)換
delay_nus(125);
adc_rel=ADC&0x3FF;
return(adc_rel);
}
void delay_nms(unsigned int n)//延時(shí)n毫秒
{
unsigned int i;
for (i=0;i<n;i++)//執(zhí)行n次1毫秒延時(shí)
{delay_nus(1000);}
}
void delay_nus(unsigned int n)//延時(shí)N微秒,N>=5 晶振:8MHz
{
unsigned int i;
for (i=5;i<n;i++)
{
asm("nop");
asm("nop");
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -