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

📄 adc._c

📁 ATMEG8单片机的自带10位AD转换器程序
💻 _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 + -