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

📄 c.c

📁 本程序演示从P1.2采集外部电压值进行模数转换
💻 C
字号:
//本程序演示从P1.2采集外部电压值进行模数转换,通过P1口显示其二进制值,并通过串口发送
#include<REG51.H>
sfr P1ASF=0x9D;//P1口模拟功能控制寄存器
sfr ADC_CONTR=0xBC;//模数转换控制特殊功能寄存器
sfr ADC_RES=0xBD;//模数转换结果高8位寄存器
sbit led_mcu_start=0xB7;//定义P3.7为工作指示灯
void delay(int x)//延时函数,根据参数x的大小来决定延时的长短
{
	while(x--)
		;
}
void init_rs232()//初始化串口,使用18.432MHz的晶振,波特率为1200bps
{
	TMOD=0x20;
	SCON=0x50;
	TH1=216;
	TL1=216;
	TR1=1;
}
void send_byte(unsigned char x)//串口发送一个字节,内容为参数x
{
	ES=0;//禁止串口中断
	TI=0;
	SBUF=x;
	while(!TI)
		;
	TI=0;
}
void adc_power_on()//打开模数转换开关
{
	ADC_CONTR=ADC_CONTR|0x80;
	delay(20);
}
void set_P12_asf()//设置P1.2为模数转换通道
{
	P1ASF=P1ASF|0x04;
}
void set_P12_normal_IO()//设置P1.2为普通I/O口
{
	P1ASF=P1ASF&0xFB;
}
void set_adc_channel_2()//模数转换从通道2(P1.2)进行
{
	ADC_CONTR=0xE2;
}
void send_ad_result()//发送模数转换结果
{
	send_byte(ADC_RES);
}
void get_ad_result()//开始模数转换
{
	ADC_CONTR=ADC_CONTR|0x08;//启动模数转换
	delay(20);//启动模数转换后,等待4个机器周期方可正确读取ADC_CONTR的值
	while(!(ADC_CONTR|0x10))//等待转换完成
		;
	ADC_CONTR=ADC_CONTR&0xE7;//完成标志位清零,停止模数转换
}
void main()
{
	unsigned char i;
	led_mcu_start=0;//打开工作指示灯
	init_rs232();//初始化串口
	adc_power_on();//打开模数转换开关
	set_adc_channel_2();//模数转换从通道2(P1.2)进行
	while(1)
	{
		set_P12_asf();//设置P1.2为模数转换通道
		get_ad_result();//开始模数转换
		send_ad_result();//发送模数转换结果
		set_P12_normal_IO();//设置P1.2为普通I/O口
		P1=~ADC_RES;//模数转换结果取反,通过P1口的发光数码管显示
		for(i=0;i<8;i++)
			delay(65535);//延长一段时间
	}
}

⌨️ 快捷键说明

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