/********************************************************
功能 :用电位器通过STC8AD片内AD和PWM控制电机转速
单片机;STC8AD
晶振 :12M
作者 :骏杰
时间 :2019-11-4
********************************************************/
#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=0x0c; //设置PCA定时器,系统时钟输出,静止PCA计数器溢出中断
CCON=0x00;
CL=0;
CH=0;
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 PWM_Clock(unsigned char clock)
{
if(clock==2)
{
AUXR |= 0x80;//定时器0时钟为Fosc,即1T
TMOD|=0x02; //8位自动重装载
TH0=0xe1; //设定频率
}
CMOD |= 0x05;//(clock<<1);
CL = 0;
CH = 0;
EA=1;
}
void main (void)
{
ADC_config();
PCAInit(); //PWM初始化
while(1)
{
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20));//查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
if( TR0=1)
{
EA=0;
CR=1;
TH0= ADC_RES; //调频
}
}
}
|