找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2430|回复: 4
打印 上一主题 下一主题
收起左侧

单片机ADC准换的值作为PWM的占空比!弄很久一直没有弄出来!

[复制链接]
楼主
ID:213173 发表于 2020-5-7 08:22 | 显示全部楼层
不用写那么多,就把STC的ADC和PWM官方示例整合一下就行。以下程序只是提供编程思路,不代表可以直接使用。
#include <STC8.H>
#include "intrins.h"

void delay100ms(void)
{
    unsigned char a,b,c;
    for(c=254;c>0;c--)
        for(b=229;b>0;b--)
            for(a=8;a>0;a--);
    _nop_();  
    _nop_();  
}

void main()
{
        //初始化PWM
        CCON = 0x00;
        CMOD = 0x08;                                //PCA时钟为系统时钟
        CL = 0x00;
        CH = 0x00;       
        CCAPM0 = 0x42;                              //PCA模块0为PWM工作模式
        PCA_PWM0 = 0x00;                            //PCA模块0输出8位PWM
        CCAP0L = 0xff;                              //PWM占空比为0%
        CCAP0H = 0xff;
        CR = 1;                                     //启动PCA计时器
        //初始化ADC
        P1M0 = 0x00;                                //设置P1.0为ADC口
        P1M1 = 0x01;
        ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16/16
        ADC_CONTR = 0x80;                           //使能ADC模块
       
        while (1)
        {
                ADC_CONTR |= 0x40;                      //启动AD转换
                _nop_();
                _nop_();
                while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
                ADC_CONTR &= ~0x20;                     //清完成标志

                CCAP0H = ADC_RES;                       //读取ADC结果控制PWM,默认P0.0输出
//                CCAP0H = ~ADC_RES;                      //读取ADC结果取反控制PWM
                delay100ms();
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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