📄 adc._c
字号:
/******************************
NAME: ADC.C
DATA:2007/5/8
AUTHOR: DIP STIDIO
CPU: ATMEGA8
8.000MHz
******************************/
#include <iom8v.h>
#include <macros.h>
#pragma interrupt_handler USART_receive: 12
//------------------------------------------------------------------
// ADC初始化函数
//------------------------------------------------------------------
void initial_ADC(void)
{
ADMUX=0XE0; //使用片内2.56基准电压,左对齐模式。
// ADMUX=0XC0; //使用片内2.56基准电压,右对齐模式。
ADCSRA=0X80; //开启ADC功能,关中断,时钟为系统时钟的64分频(BIT2-BIT0确定分频数)
}
//-------------------------------------------------------------------
// ADC转换函数(8位精度,左对齐,单次采样)
//-------------------------------------------------------------------
unsigned char ADC_run8bit(unsigned char channel)//通道号为0X00--0X07
{
unsigned char result=0; //转换结果
ADMUX|=channel; //确定通道号
ADCSRA|=0X40; //启动AD转换(通过写ADSC位实现)
result=ADCH; //储存采样结果
return(result); //返回结果
}
/*
//-------------------------------------------------------------------
// ADC转换函数(10位精度,左对齐,单次采样)
//-------------------------------------------------------------------
int ADC_run16bit(unsigned char channel)//通道号为0X00--0X07
{
int result=0; //转换结果
int RESH=0,RESL=0; //存储高低位结果
ADCMUX|=channel; //确定通道号
ADCSRA|=0X40; //启动AD转换(通过写ADSC位实现)
RESH=ADCH; //储存高位结果
RESL=ADCL; //储存低位结果
result=(RESH<<8)|RESL;
return(result); //返回结果
}
*/
//------------------------------------------------------------------
// USART初始化函数
//------------------------------------------------------------------
void initial_USART(void)
{
//-----端口设置--------
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
//------USART设置-------
UCSRA=0X00; //波特率不加倍,同时清空一些标志位
UCSRB=0X98; //使能接收和发送,数据位为8位,开接收中断
UCSRC=0X86; //异步方式,禁止奇偶校验,数据位为8位
//时钟频率8M,波特率9600
UBRRH=0X00;
UBRRL=0X33;
//时钟频率8M,波特率57600
// UBRRH=0X00;
// UBRRL=0X08;
SEI(); //全局开中断
}
//--------------------------------------------------------------
// 发送函数
//--------------------------------------------------------------
void send(unsigned char DAT)
{
UDR=DAT; //发送数据
while ( !( UCSRA & (1<<TXC)) ); //检验TXC位,当TXC=1时可以表示发送完成
} //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
//--------------------------------------------------------------
// 接收中断服务函数
//--------------------------------------------------------------
void USART_receive(void)
{ unsigned char ADCdata=0X04;
unsigned char RECdata;
RECdata=UDR;
ADCdata=ADC_run8bit(RECdata);//AD转换
send( ADCdata);
}
//------------------------------------------------------------------
// 主函数
//------------------------------------------------------------------
void main(void)
{
initial_USART();
initial_ADC();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -