📄 demo.c
字号:
//Write By NCX
//为方便读本程序,本人采用单文档。
// 目标板 : ATMEGA16
// 采用板上晶振: 7.3728Mhz
#include <iom16v.h>
#include <macros.h>
/*********************************
设置一些全局变量
**********************************/
#define YES 0xff
#define NO 0x00
#define uchar unsigned char
#define uint16 unsigned short int
//警告距离30cm
#define MIN_DISTANCE 30
//用来标志是否刚开始运行
uchar The_Begin_OR_NOT = YES;
/*********************************
声明中断服务子程序
**********************************/
#pragma interrupt_handler ADC_handler:15
/*********************************
端口初始化
*********************************/
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x03; //输出口--前进(PORTB.0)和左转(PORTB.1)IO
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
/********************************
adc初始化
********************************/
void adc_init(void)
{
ADCSR = 0x00; //首先禁止ADC
ADMUX = 0xc0; //选择通道0,
//转换结构左对齐,
//采用内部参考电压2.56v
ACSR = 0x80; //禁止AD比较器
ADCSR = 0x8b; //使能ADC,等待转换,转换时间26US
//使能ADC中断
}
/********************************
关闭看门狗
*********************************/
void WDT_off(void)
{
_WDR();
WDTCR |=(1<<WDTOE)|(1<<WDE);
WDTCR = 0x00;
}
/*********************************
片上设备初始化
*********************************/
void init_devices(void)
{
CLI(); //首先禁止所有中断
port_init();
WDT_off();
adc_init();
MCUCR = 0x00;//禁止CPU休眠
GICR = 0x00;//中断向量位于FLASH中
TIMSK = 0x00; //禁止定时器中断源
SEI(); //开启所有中断
}
/*********************************
主程序入口
**********************************/
void main(void)
{
init_devices();
PORTB = 0x00;//停止运行
ADCSR|=(1<<ADSC);//启动第一次AD转换
while(1);//等待ADC转换完成并进行中断服务处理
}
/**********************************
中断服务子程序
**********************************/
void ADC_handler(void)
{
uint16 ADC_DATA;
CLI(); //首先禁止所有中断
ADC_DATA = ADCL;
ADC_DATA += (ADCH&0x03)<<8;
if(ADC_DATA>400)
{
PORTB =0x03;
}
else
{
PORTB =0x01;
}
/*
if(The_Begin_OR_NOT == YES)
{
//(2.56v/1024)*ADC_DATA
//30CM-1v-400
if(ADC_DATA>400)
{
PORTB &=0x02;
}
The_Begin_OR_NOT == NOT;
}
else
{
}
*/
ADCSR|=(1<<ADSC);//再次启动AD转换
SEI(); //开启所有中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -