📄 main.c
字号:
#define ENABLE_BIT_DEFINITIONS
#include <iom16.h>
#include <math.h>
#include "ATMEGA16.H"
unsigned char adc_mux = 0x00 ,timer=0,a=0;
unsigned int count=0;
unsigned long data=0;
int temp=0;
unsigned long mux;
//初始化定时器
void InitTimer(void)
{
/*------------timer0------------*/
/* TCCR0 = (1<<WGM01)|(1<<CS01)|(1<<CS00);
OCR0 = FREQUENCY/64/1000-1;
TIMSK |= (1<<OCIE0);*/
/*------------timer1------------*/
/*------------timer2------------*/
TCCR2 = (1<<WGM21)|(1<<CS20);
OCR2 = 0xfa;
TIMSK |= (1<<OCIE2);
}
//定时器中断
#pragma vector = TIMER2_COMP_vect
__interrupt void TOver0_isr( void )
{
timer++;
if(timer==180)
{
a++;
if(a == 32)
a = 0;
//PORTB = ~PORTB;
AD_START;
timer = 0;
//temp=127;
mux=temp*temp;//temp;
data+=mux;
count++;
if(count==9600)
{
count=0;
data=data/9600;
data=sqrt(data);
data = 0;
}
}
}
void init_adc(void)
{
AD_RESET;
ADMUX =(adc_mux&0x1f)|(1<<REFS0)|(1<<REFS1); //参考电压为内部2.56
SET_ADCLK_64 ;//64分频,AD时钟187.5KHz
//ADchanel(0);
}
#pragma vector=ADC_vect
__interrupt void adc_isr( void )
{
temp=ADC-512;
}
//初始化通讯口
void InitCOM(void)
{
//初始化寄存器
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<TXCIE); //允许发送和接收及发送和接收中断
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //异步操作无校验位+8位数据位+1位停止位
UCSRC &= 0x7f;
UBRRH = 0x00;
UBRRL = 0x77;
}
void main(void)
{
InitTimer();
init_adc();
DDRB = 0xff;
DDRC = 0xff;
// InitCOM();
_EINT;
while(1)
{
/*temp=127;
mux=temp*temp;//temp;
data+=mux;*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -