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

📄 adc._c

📁 adc检测串口反馈到PC上,数据不断发送
💻 _C
字号:
#include <iom16v.h>
#include <macros.h>
#include <stdio.h>
#include "..\includeH\Init.h"

//uchar count;
void main(void)
{ 	uint Voltage,k,number[3];
    uint ADCVoltage;
  	OSCCAL=0xff;                   //系统时钟校准,不同的芯片和不同的频率,200%
	PORTA = 0x00;DDRA  = 0xff;  PORTB = 0x00;DDRB  = 0x00;
    PORTC = 0x00;DDRC  = 0x00;  PORTD = 0xff;DDRD  = 0x00;
	WDT_ON();              //使能watchdog,并且采用2048K分频,典型溢出时间5V时2.1S
    ADCSRA=0x00;                    ////ADC转换全置0
	ADC_Init();            //采用内部2.56参考电压,ADC3输入,ADC转换 64分频
	
	INT1_init();   ///外中断0使能
	
	SEI();                 //开放中断
	USART_InitM1681(9600);
	Red_LedON;Green_LedON;
	delay_nms(500);        //延时1秒
	Red_LedOFF; Green_LedOFF;
	USART_Transmit8(0x0d); //发送一个回车
    USART_Transmit8(0x0a); //发送一个换行
  	while(1) 
     {    	delay_nms(500); 
	         WDR();
			 USART_Transmit_2();
			 delay_nms(500); 
	 	    // ADCSRA|=(1<<ADSC);
		     while(~(ADCSRA&(1<<ADSC)))
			    { 
				  LED_Wait_ISP();
				  LED_Texting_ISP();
			      WDR();
				}//待ADC测量
			ADCVoltage=((25600/1023)*(ADCH*256+ADCL))/1000;           //数据计算
			//ADCVoltage=((    25    )*(  0~254a9    ))/1000=(0~563)
			 //	 ADCVoltage=ADCConvert_3();
				// count=ADCVoltage/1023;
				WDR();
				//if(count!=90){ 
				    //  uint Voltage,k,number[3];
					Voltage=ADCVoltage;
				   // Voltage=ADCConvert_3();
				  //第一位整数
          	        number[0]=Voltage/1023;
          	        Voltage=Voltage%1023;
          	        Voltage=Voltage*10;
                  //第一位小数
           	       number[1]=Voltage/1023;
           	       Voltage=Voltage%1023;
           	       Voltage=Voltage*10;
                  //第二位小数
            	      number[2]=Voltage/1023;
					  for (k=0;k<3;k++)
					  {     USART_Transmit8(number[k]);
				           // UDR=number[k]; /////串口发送
					        while(!(UCSRA&(1<<UDRE))){LED_Wait_ISP();}
					  }
				  
			  //  }
			WDR();//清看门狗
	
    }
}

#pragma interrupt_handler adc_isr:15     
void adc_isr(void)
{ 
  //ADMUX=0x00;
 // ADMUX =(1<<MUX1)|(1<<MUX0);
 ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
 ADCSRA|=(1<<ADSC);//启动AD转换
}














































uint tmp;
#pragma interrupt_handler uart0_rx_isr_m16:12
void uart0_rx_isr_m16(void)
{
  tmp=USART_Receive8();
  USART_Transmit8(tmp);
  
  if(tmp=='a')
	{
	USART_Transmit8('O');
	USART_Transmit8('K');
	USART_Transmit_2();
	} 
	//有数据发出时的提示绿灯闪动
    Red_LedOFF;
	for(tmp=0;tmp<3;tmp++){
    Green_LedON;
    delay_nms(900);
	Green_LedOFF;
	delay_nms(900);}
	
}

#pragma interrupt_handler INT1_isr_m16:3
void INT1_isr_m16(void)
{
   //中断程序
    USART_Transmit_2();
	USART_Transmit8(' '); 
	USART_Transmit8('I');
	USART_Transmit8('N');
	USART_Transmit8('T');
	USART_Transmit8('1');
	USART_Transmit8(' ');
	USART_Transmit8('i');
	USART_Transmit8('s');
	USART_Transmit8(' ');
	USART_Transmit8('0');
	USART_Transmit8('k');
	USART_Transmit8('!');
	USART_Transmit8(' ');
	delay_nms(1000);
	delay_nms(1000);
	delay_nms(1000);
	delay_nms(1000);
	delay_nms(1000);
}

⌨️ 快捷键说明

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