ADC0808 PWM实验

ADC0808 PWM实验_第1张图片

19 用ADC0808控制PWM输出

/* 名称:用ADC0808控制PWM输出

   说明:使用数模转换芯片ADC0808,通过调节可变电阻RV1来调节脉冲宽度,

   运行程序时,通过虚拟示波器观察占空比的变化。

*/



#include

#define uchar unsigned char

#define uint unsigned int

sbit CLK=P2^4;            //时钟信号

sbit ST=P2^5;        //启动信号

sbit EOC=P2^6;            //转换结束信号

sbit OE=P2^7;       //输出使能

sbit PWM=P3^0;          //PWM输出

//延时

void DelayMS(uint ms)

{

       uchar i;

       while(ms--)
for(i=0;i<40;i++);

}

//主程序

void main()

{

       uchar Val;

       TMOD=0x02;       //T0工作模式2

       TH0=0x14;           

       TL0=0x00;

       IE=0x82;

       TR0=1;

       while(1)

       {

              ST=0;ST=1;ST=0;        //启动A/D转换

              while(!EOC);        //等待转换完成

              OE=1;

              Val=P1;                       //读转换值

              OE=0;

              if(Val==0)                    //PWM输出(占空比为0%)

              {

                     PWM=0;

                     DelayMS(0xff);

                     continue;

              }

              if(Val==0xff)          //PWM输出(占空比为100%)

              {

                     PWM=1;

                     DelayMS(0xff);

                     continue;

              }

              PWM=1;                       //PWM输出(占空比为0%~100%)

              DelayMS(Val);

              PWM=0;

              DelayMS(0xff-Val);

       }

}

//T0定时器中断给ADC0808提供时钟信号

void Timer0_INT() interrupt 1

{

       CLK=~CLK;

}

 

杂谈

  1. ADC0808的输出引脚序号与实际数据的高低位是相反的,即OUT8对应输出数据的最低位(LSB),OUT1对应输出数据的最高位(MSB)

你可能感兴趣的:(单片机仿真)