找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 871|回复: 0
收起左侧

用ADC0808实现的PWM信号

[复制链接]
csmyldl 发表于 2019-8-2 19:25 | 显示全部楼层 |阅读模式
2019年电子设计竞赛即将进行,其中电机和舵机的控制需需要用到PWM,我编写了一个电位器调节PWM的仿真程序,希望能对你有所帮助。#include <regx52.h>//#include "ADC0809.h"
#define uchar unsigned char
#define uint unsigned int
sbit  CLOCK=P2^4;
sbit  START=P2^5;
sbit  EOC= P2^6;
sbit  OE=P2^7;

uchar addata,k;
uint tmp,high;
void adc0809();
void delay(uchar t)
  {
    uchar i,j;
    for (i=0;i<t;i++)
     for (j=0;j<123;j++);

    }

main()
{
   TMOD=0x11;              //定时计数器1设置方式1
   TH0=(65536-500)/256;               //初值0.5ms
   TL0=(65536-500)%256;
         TH1=0xff;
   TL1=0xf0;
   EA=1;
         ET0=1;
   ET1=1;                  //允许定时计数器1中断以便产生CLOCK时钟
         TR0=1;
         TR1=1;
   while(1)
   {
   START=0;
   OE=0;
   START=1;          //启动ADC转换
   START=0;
    while (!EOC)
    {
      adc0809();             //ADC转换
      tmp=addata*196;        //数据处理,1个单位代表19.6mV  测出电压在0-50000mv间
                  high=tmp/500;
    }
   }
}

void adc0809()       //读ADC0809子程序
{
   P1=0xff;          //P1全部置一准备读数据
   OE=1;
   addata=P1;        //读出转换数据赋与addata
   OE=0;             //读数完毕
}

DS1() interrupt 1
{
        k++;               //中断1次为0.5ms
        if (k<high)
                P3_0=1;          //输出高电平
         else
                 P3_0=0;         //输出低电平
        if (k==100)
                k=0;             //PWM周期为0.5*100ms
        TH0=(65536-500)/256;               //初值0.5ms
  TL0=(65536-500)%256;
}

void time1() interrupt 3
{
   CLOCK=~CLOCK;
   TH1=0xff;
   TL1=0xf0;
  }

ADC0808实现的PWM.rar

53.15 KB, 下载次数: 18, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表