/********************************************************
功能 :用电位器通过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; //调频
}
}
|