单片机 例题 13.2

单片机 例题 13.2

#include"reg51.h"
#include"stdio.h"
#define OSC  18432000L
#define BAUD 9600
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
sfr T2H =0xD6;
sfr T2L=0xD7;
sfr AUXR=0x8E;
sfr ADC_CONTR=0xBC;
sfr ADC_RES=0xBD;
sfr ADC_RESL=0xBE;
sfr PLASF=0x9D;
unsigned char ch=2;
float voltage=0;
unsigned char tstr[5];
unsigned int ref=0, vin=0;
void SendData(unsigned char dat)
{
    
    
	while(!TI);
	TI=0;
	SBUF=dat;
}
void adc_int() interrupt 5
{
    
    
	unsigned char i=0;
	unsigned long int j=0;
	ADC_CONTR&=!ADC_FLAG;
	if(ch==2)
	{
    
    
		ref=(ADC_RES*4+ADC_RESL);
	}
	else if(ch==3)
	{
    
    
		vin=(ADC_RES*4+ADC_RESL);
		voltage=(2.5*vin)/ref;
		sprintf(tstr,"%1.4f",voltage);
		SendData('\r');
		SendData('\n');
		for(i=0;i<5;i++)
		SendData(tstr[i]);
	}
	if(ch==2)
		ch=3;
	else if(ch==3)
		ch=2;
	for(j=0;j<=80000;j++);
	ADC_RES=0;
	ADC_RESL=0;
	ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
}
void main()
{
    
    
	unsigned int i;
	SCON=0x5A;
	T2L=65536-OSC/4/BAUD;
	T2H=(65536-OSC/4/BAUD)>>8;
	AUXR=0x14;
	AUXR|=0x01;
	PLASF=0xFF;
	ADC_RES=0;
	ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
	for(i=0;i<10000;i++);
	IE=0xA0;
	while(1);
}

Guess you like

Origin blog.csdn.net/weixin_57038822/article/details/127792559