《单片机实践项目》《电子DIY》基于51单片机的ADC0808的PWM实验,Proteus仿真,电压采集

《单片机实践项目》《电子DIY》基于51单片机的ADC0808的PWM实验,Proteus仿真

ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。

ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。各引脚功能如下:
1~5和26~28(IN0~IN7):8路模拟量输入端。
8、14、15和17~21:8位数字量输出端。
22(ALE):地址锁存允许信号,输入,高电平有效。
6(START): A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
7(EOC): A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9(OE):数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
10(CLK):时钟脉冲输入端。要求时钟频率不高于640KHZ。
12(VREF(+))和16(VREF(-)):参考电压输入端
11(Vcc):主电源输入端。
13(GND):地。
23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选通8路模拟输入中的一路
在这里插入图片描述

程序


#include <reg51.h>
//视频讲解:B站搜索:逗比小憨憨
#define uint unsigned int
#define uchar unsigned char

sbit CLK = P2^4;
sbit ST  = P2^5;
sbit EOC = P2^6;
sbit OE  = P2^7;
sbit PWM = P3^0;

void delay_ms(uint ms)
{
    
    
 	uchar i;
	while(ms--)
	{
    
    
	 	for(i=0;i<118;i++);	  //=255*1.3/5 60
	}
}

int main(void)
{
    
    
 	uchar Val;
	TMOD |= 0x02;
	TH0 = 231;	// 0001 0100 (256-25)=231
	TL0 = 231;	//50us
	IE  = 0x82;	//1000 0010
	TR0 = 1;

	while(1)
	{
    
    
	 	ST = 0;
		ST = 1;
		ST = 0;
		while(!EOC);
		OE  = 1;
		Val = P1;// 0-255  125	180
		OE  = 0;

		if(Val == 0)
		{
    
    
		 	PWM = 0;
			delay_ms(255);
			continue;
		}
		else if(Val == 0xff)
		{
    
    
		 	PWM = 1;
			delay_ms(255);
			continue;
		}
		else
		{
    
    
			PWM = 1;
			delay_ms(Val);
			PWM = 0;
			delay_ms(0xff - Val);
		}
	}
	return 0;
}

//定时器0中断函数
void Timer0_Handler(void) interrupt 1 using 0
{
    
    
 	CLK = !CLK;
}

仿真图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liuxianfei0810/article/details/107617910