adc_avr._c

来自「AVR单片机采集AD,并通过串口发回上位机。」· _C 代码 · 共 176 行

_C
176
字号
/*ad转换,利用串口调试;输出为电压的伏特数;
    2005.7.12*/ 
#include "iom16v.h"
#include "macros.h"
#define uint unsigned char
#define uchar unsigned int

uchar data_temp;
uchar tmpUDR,tmp;

void delay(char);
//void _ADC(uchar);

#pragma  interrupt_handler  ad_handler:15
void ad_handler(void)
{      
       char i,j,k,l; 
       int  data_temp;
       ADCSR&=~0x08;
	   data_temp=ADC;

       data_temp=(int)(data_temp*5.00/1024*1000);
	   l=data_temp/1000+0x30;
	   k=(data_temp%1000)/100+0x30;
	   j=(data_temp%100)/10+0x30;
	   i=data_temp%10+0x30;
	   
		UDR=l;
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
		UDR='.';
	    while(!(UCSRA&0X40));
		UCSRA|=0x40;
		UDR=k;
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
	    UDR=j;
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
		UDR=i;
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
		UDR=' ';
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
		UDR='V';
		while(!(UCSRA&0X40));
		UCSRA|=0x40;
		
		//ADCSR|=0x08;
} 

#pragma  interrupt_handler  rx_handler:12
void rx_handler(void)
{
 	 UCSRB&=~0x10;
 	 tmpUDR=UDR;
	 if(tmpUDR=='P')
	 {
	  ADMUX=0x40;
	  ADCSR|=BIT(ADSC);
	  //tmpUDR&=0x07;
	  //ADMUX+=tmpUDR;
	  //ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	  //while(1)
	  //{
	  //UDR='V';
	  //while(!(UCSRA&0X40));
	  //UCSRA|=0x40;
	  //}
	 }

	 if(tmpUDR=='Q')
	 {
	  ADMUX=0x41;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='R')
	 {
	  ADMUX=0x42;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='S')
	 {
	  ADMUX=0x43;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='T')
	 {
	  ADMUX=0x44;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='U')
	 {
	  ADMUX=0x45;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='V')
	 {
	  ADMUX=0x46;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }

	 if(tmpUDR=='W')
	 {
	  ADMUX=0x47;
	  ADCSR|=BIT(ADSC);
	  //ADCSR|=0x08;
	  //UCSRB|=0x10;
	 }
	 ADCSR|=0x08;
	 UCSRB|=0x10;
}

void main(void)
{
//disable the Interrupt bit.
	SREG=0x00; 		 
	
///// Initialize the USART ///////				 
    UCSRB=0x00;
    UCSRA=0x00;
    UBRR=12;
    UCSRB=0x98;
///// Initialize the ADC /////////
	ADCSR=0X8b;

	
tmpUDR=UDR;
////Enable the Interrupt bit.
	
	SREG=0x80;
	while(1)
	{

	}
 
 
}


void delay(char i)
{
  uchar j;
  for(j=1;j<i;j++)
  asm("nop");
}   

/*
void _ADC(uchar N)
{

	 ADCSR|=BIT(ADSC);
	 //ADCSR|=0x08;
}

*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?