单片机原理与应用实验——ADC采集并用串口发送(C语言)

(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译)

 

#include <STC12C5A60S2.h>

#define ADC_POWER   0x80            //ADC power control bit 
#define ADC_FLAG    0x10            //ADC complete flag 
#define ADC_START   0x08            //ADC start control bit 
#define ADC_SPEEDLL 0x00            //420 cLOCks 
#define ADC_SPEEDL  0x20            //280 clocks 
#define ADC_SPEEDH  0x40            //140 clocks 
#define ADC_SPEEDHH 0x60            //70 clocks 
#define ADC_CH1 0x01                //选择通道1

typedef unsigned char u8;

sbit BEEP = P1 ^ 0;     //置1则响


void delay_2ms(unsigned long int time) //2ms的基
{
	unsigned long int i;
	for (i = 0; i < time * 100; i++);
}

void UART1_Init()
{
	SCON = 0x50;
	EA = 1;
	ES = 1;
	TR1 = 1;

	TMOD = 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
}

void Uart1_ISR() interrupt 4
{
	ES = 0;
	if (TI == 1)        // 如果TI=1,则说明中断是由发送完成引发的 
	{
		TI = 0;
	}
	else if (RI == 1)   // 如果RI=1,则说明中断是由发送完成引发的 
	{
		RI = 0;
	}
	ES = 1;
}

void ADC_Init()
{

	P1ASF = 0xff;                   //Open 8 channels ADC function 
	ADC_RES = 0;                    //Clear previous result 
	ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  
	delay_2ms(1);                       //ADC power-on and delay 
}


u8 GetADCVal(u8 ch)
{
	ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  
	while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag 
	ADC_CONTR &= !ADC_FLAG;         //Close ADC 

	return ADC_RES;                 //Return ADC result 
}

//-------------------------------------------------------------------------

void main()
{
	BEEP = 0;
	UART1_Init();
	ADC_Init();

	while (1)
	{
		SBUF = GetADCVal(1);
		delay_2ms(100);
	}
}

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值