找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1127|回复: 2
收起左侧

不知道为什么电位器调节单片机pwm模块频率不行?

[复制链接]
ID:531986 发表于 2019-9-18 20:05 | 显示全部楼层 |阅读模式
/********************************************************
        功能  :用电位器通过STC8AD片内AD和PWM控制电机转速
        单片机;STC8AD
        晶振  :12M
        作者  :骏杰
********************************************************/
#include<STC8.H>        
#include <intrins.h>   
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define  uint16   unsigned int
#define  u8   unsigned uchar

/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x)
{  
  uint16 j,i;   
  for(j=0;j<x;j++)   
  {   
   for(i=0;i<1100;i++);   
  }  
}

void PCAInit(void)
{
  P_SW1 &= 0xCF;
  CMOD=0x05; //定时器T0输出溢出作为系统分频数,Use timer0
  CCON=0x00;
  CL=0x00;
  CH=0x00;
  CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
  PCA_PWM0 = 0x00; //PCA模块0工作于8位PWM功能
  CCAP0L=0xff; //PWM占空比为50%[(40H-20H)/40H]
  CCAP0H=0xff;
  CR = 1;           //启动PCA计时器
}

/**************************************
功能描述:ADC口初始化
入口参数:无
返回值:无
***************************************/
void ADC_config(void)
{
  ADC_CONTR=0x80;      //使能ADC模块
  ADCCFG=0x0f;         //设置ADC时钟为系统时钟/2/16/16,ADC_RES高8位,ADC_RESL高四位
  P1M0=0x00;           //设置P1.0为ADC口
}

void Timer0Init(void)
{
    TMOD|=0x02; //模式2,8位自动装载模式
CLKDIV=0x00;//将主时钟32分频作为SYSclk
AUXR= 0x80;   //工作在1T的模式下[SYSclk/(256-TH0)]/
TH0=0x00;
TR0=1;
ET0=1;   
EA=1;
}
void main (void)
{
   ADC_config();
   PCAInit(); //PWM初始化
   Timer0Init();
   while(1)
   {         
   ADC_CONTR |= 0x40; //启动AD转换
      _nop_();
      _nop_();
      while (!(ADC_CONTR & 0x20));//查询ADC完成标志
      ADC_CONTR &= ~0x20;         //清完成标志
   TH0= ADC_RES;   //调频
    }
}

回复

使用道具 举报

ID:94031 发表于 2019-9-19 09:51 | 显示全部楼层
你根据什么说电位器调节不行。
回复

使用道具 举报

ID:275826 发表于 2019-9-20 10:23 | 显示全部楼层
检查PWM输出口线是否正确?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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